diff --git a/FE2E/.gitignore b/FE2E/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..570b5ca0df6ad49c3ca2b0d5787c4d4350302b81
--- /dev/null
+++ b/FE2E/.gitignore
@@ -0,0 +1,35 @@
+.DS_store
+.idea
+*/.DS_store
+__pycache__
+*/__pycache__/
+*/.ipynb_checkpoints/
+
+#特殊文件
+*.report
+*.png
+*-xdl
+
+#几个不改动或无意义改动文件
+Qwen/
+pretrain/
+splits/
+log_err/
+assets/
+!assets/
+!assets/demo.png
+!assets/pipeline.png
+vkitti/
+flux/
+compare_result/
+
+#推理用数据集
+infer/data_split/
+infer/nyu_results_test/
+infer/nyudepth/
+infer/eval_results/
+infer/diode/
+infer/eth3d/
+infer/kitti/
+infer/scannet/
+infer/dsine_eval/
diff --git a/FE2E/LICENSE b/FE2E/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..7656764c5673398f322a2d412ef54cc0c68359ba
--- /dev/null
+++ b/FE2E/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2025 AMAP-ML
+
+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.
diff --git a/FE2E/README.md b/FE2E/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..74cf3d6a599e131f75ce0db9c1af9ea4a04fed0e
--- /dev/null
+++ b/FE2E/README.md
@@ -0,0 +1,159 @@
+# FE2E: From Editor to Dense Geometry Estimator
+
+[](https://amap-ml.github.io/FE2E/)
+[](https://arxiv.org/abs/2509.04338)
+[](https://github.com/AMAP-ML/FE2E)
+[](https://huggingface.co/exander/FE2E)
+[](https://www.bilibili.com/video/BV1zYXdBXE2x)
+[](https://youtu.be/fyXwwH_-o5w)
+
+[Jiyuan Wang](https://wangjiyuan9.github.io/)1,2,
+[Chunyu Lin](https://scholar.google.com/citations?hl=zh-CN&user=t8xkhscAAAAJ)1✉,
+[Lei Sun](https://scholar.google.com/citations?user=your-id)2✝,
+[Rongying Liu](https://scholar.google.com/citations?user=your-id)1,
+[Mingxing Li](https://scholar.google.com/citations?user=-pfkprkAAAAJ&hl=zh-CN&oi=ao)2,
+[Lang Nie](https://scholar.google.com/citations?hl=zh-CN&user=vo__egkAAAAJ)3,
+[Kang Liao](https://kangliao929.github.io/)4,
+[Xiangxiang Chu](https://cxxgtxy.github.io/)2,
+[Yao Zhao](https://faculty.bjtu.edu.cn/5900/)1
+
+
+
+
+
+
+
+
+
+We present **FE2E**, a DiT-based foundation model for monocular dense geometry prediction. FE2E adapts an advanced image editing model to dense geometry tasks and achieves strong zero-shot performance on both monocular depth and normal estimation.
+
+
+
+## 📢 News
+- **[2026-03-17]**: Code and Checkpoint are available now!
+- **[2026-02-21]**: FE2E was accepted by CVPR 2026!!! 🎉🎉🎉
+- **[2025-09-05]**: Paper released on [arXiv](https://arxiv.org/abs/2509.04338).
+
+---
+
+## 🛠️ Setup
+
+This codebase is prepared as an inference/evaluation release.
+
+```bash
+pip install -r requirements.txt
+```
+
+Recommended local layout:
+
+```text
+FE2E/
+├── pretrain/
+│ ├── step1x-edit-i1258.safetensors
+│ ├── step1x-edit-v1p1-official.safetensors
+│ └── vae.safetensors
+├── lora/
+│ └── LDRN.safetensors
+├── infer/
+│ ├── eth3d/
+│ │ └── eth3d.tar
+│ └── dsine_eval/
+│ ├── nyuv2/
+│ └── scannet/
+└── logs/
+```
+
+---
+
+## 🔥 Training
+
+```text
+[ ] Training code will be released later.
+```
+
+---
+
+## 🕹️ Inference
+
+### 1. Prepare Model Weights
+
+1. Download the base weights, which from the official [Step1X-Edit](https://github.com/stepfun-ai/Step1X-Edit) release.
+2. Download FE2E LoRA [checkpoint](https://huggingface.co/exander/FE2E/blob/main/LDRN.safetensors)
+
+
+### 2. Prepare Benchmark Datasets
+
+- Depth benchmarks follow the external evaluation data convention from [Marigold](https://github.com/prs-eth/Marigold).
+- Normal benchmarks follow the external evaluation data convention from [DSINE](https://github.com/baegwangbin/DSINE).
+
+
+Supported depth benchmarks:
+- `nyu_v2`,`kitti`,`eth3d`,`diode`,`scannet`
+
+Supported normal benchmarks:
+- `nyuv2`,`scannet`,`ibims`,`sintel`
+
+
+### 3. Run Evaluation
+
+`[dataset] normal`:
+
+```bash
+CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \
+MASTER_PORT=21258 \
+PYTHONUNBUFFERED=1 \
+python -u evaluation.py \
+ --model_path ./pretrain \
+ --eval_data_root ./infer \
+ --output_dir ./infer/eval_verify_scannet_normal_8gpu \
+ --num_gpus 8 \
+ --num_samples -1 \
+ --lora ./lora/LDRN.safetensors \
+ --single_denoise \
+ --prompt_type empty \
+ --norm_type ln \
+ --task_name normal \
+ --normal_eval_datasets [dataset]
+```
+
+`[dataset] depth`:
+
+```bash
+CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \
+MASTER_PORT=21257 \
+PYTHONUNBUFFERED=1 \
+python -u evaluation.py \
+ --model_path ./pretrain \
+ --eval_data_root ./infer \
+ --output_dir ./infer/eval_verify_eth3d_8gpu \
+ --num_gpus 8 \
+ --num_samples -1 \
+ --lora ./lora/LDRN.safetensors \
+ --single_denoise \
+ --prompt_type empty \
+ --norm_type ln \
+ --task_name depth \
+ --depth_eval_datasets [dataset]
+```
+
+
+### 4. Reference Logs
+If you want to known the successful status, this repo includes run logs in `logs/`:
+- `logs/verify_scannet_normal_8gpu_20260317_171345.log`
+- `logs/verify_eth3d_8gpu_20260317_172004.log`
+
+
+---
+
+## 🎓 Citation
+
+If you find our work useful, please cite:
+
+```bibtex
+@article{wang2025editor,
+ title={From Editor to Dense Geometry Estimator},
+ author={Wang, JiYuan and Lin, Chunyu and Sun, Lei and Liu, Rongying and Nie, Lang and Li, Mingxing and Liao, Kang and Chu, Xiangxiang and Zhao, Yao},
+ journal={arXiv preprint arXiv:2509.04338},
+ year={2025}
+}
+```
diff --git a/FE2E/evaluation.py b/FE2E/evaluation.py
new file mode 100644
index 0000000000000000000000000000000000000000..b64b267a17d6c8bc934d7a0b2fa73ff0f3ffb382
--- /dev/null
+++ b/FE2E/evaluation.py
@@ -0,0 +1,553 @@
+import argparse
+import os
+import re
+import numpy as np
+import torch
+import torch.distributed as dist
+import torch.multiprocessing as mp
+
+from infer.seed_all import seed_all
+
+# 设置环境变量消除tokenizers警告
+os.environ['TOKENIZERS_PARALLELISM'] = 'false'
+os.environ['NCCL_DEBUG'] = 'WARN'
+# 消除torchvision警告
+os.environ['TORCHVISION_DISABLE_DEPRECATED_WARNING'] = '1'
+
+REPO_ROOT = os.path.dirname(os.path.abspath(__file__))
+DEFAULT_QWEN_DIR = os.path.join(REPO_ROOT, "Qwen")
+DEFAULT_DEPTH_DATASET_CONFIGS = {
+ "nyu_v2": "configs/data_nyu_test.yaml",
+ "kitti": "configs/data_kitti_eigen_test.yaml",
+ "eth3d": "configs/data_eth3d.yaml",
+ "diode": "configs/data_diode_all.yaml",
+ "scannet": "configs/data_scannet_val.yaml",
+}
+DEFAULT_NORMAL_DATASETS = {
+ "nyuv2": "test",
+ "scannet": "test",
+ "ibims": "ibims",
+ "sintel": "sintel",
+ "oasis": "val",
+ "hypersim": "hypersim",
+}
+
+
+def resolve_eval_data_root(args, *required_markers):
+ """Resolve the evaluation data root without depending on the launch cwd."""
+ candidates = []
+ if getattr(args, "eval_data_root", None):
+ candidates.append(os.path.abspath(args.eval_data_root))
+
+ candidates.extend(
+ [
+ os.path.join(REPO_ROOT, "infer"),
+ os.path.join(REPO_ROOT, "data"),
+ os.path.join(os.path.dirname(REPO_ROOT), "data"),
+ ]
+ )
+
+ for candidate in candidates:
+ if all(os.path.exists(os.path.join(candidate, marker)) for marker in required_markers):
+ return candidate
+
+ checked = ", ".join(
+ os.path.join(candidate, marker) for candidate in candidates for marker in required_markers
+ )
+ raise FileNotFoundError(f"未找到评测数据根目录,已检查: {checked}")
+
+
+def parse_depth_eval_datasets(raw_value):
+ requested = [item.strip() for item in raw_value.split(",") if item.strip()]
+ if requested == ["all"]:
+ requested = list(DEFAULT_DEPTH_DATASET_CONFIGS.keys())
+ invalid = [item for item in requested if item not in DEFAULT_DEPTH_DATASET_CONFIGS]
+ if invalid:
+ raise ValueError(f"不支持的 depth 数据集: {invalid},可选值: {sorted(DEFAULT_DEPTH_DATASET_CONFIGS)}")
+ return {name: DEFAULT_DEPTH_DATASET_CONFIGS[name] for name in requested}
+
+
+def parse_normal_eval_datasets(raw_value):
+ requested = [item.strip() for item in raw_value.split(",") if item.strip()]
+ if requested == ["all"]:
+ requested = list(DEFAULT_NORMAL_DATASETS.keys())
+ invalid = [item for item in requested if item not in DEFAULT_NORMAL_DATASETS]
+ if invalid:
+ raise ValueError(f"不支持的 normal 数据集: {invalid},可选值: {sorted(DEFAULT_NORMAL_DATASETS)}")
+ return [(name, DEFAULT_NORMAL_DATASETS[name]) for name in requested]
+
+
+def collect_and_merge_dual_cfg_results(rank, world_size, gathered_metrics_Lpred, gathered_times):
+ """
+ 收集并合并双CFG配置的评估结果
+
+ Args:
+ rank: 当前进程的rank
+ world_size: 总进程数
+ gathered_metrics_Lpred
+ gathered_times: 处理时间收集结果
+
+ Returns:
+ tuple: (all_metrics_Lpred, dataset_times)
+ """
+ if rank != 0:
+ return None, None
+
+ # 合并处理时间
+ dataset_times = []
+ for times_list in gathered_times:
+ dataset_times.extend(times_list)
+
+ #先处理L的
+ all_metrics_L = {}
+ valid_metrics_L = [m for m in gathered_metrics_Lpred if m]
+ if valid_metrics_L:
+ for key in valid_metrics_L[0].keys():
+ values = [m[key] for m in valid_metrics_L if key in m]
+ if values:
+ all_metrics_L[key] = np.mean(values)
+
+ return all_metrics_L, dataset_times
+
+
+def format_dual_cfg_results_table(dataset_name, model_identifier, all_metrics_L, dataset_times):
+ """
+ 格式化双CFG配置的结果表格
+
+ Args:
+ dataset_name: 数据集名称
+ model_identifier: 模型标识符
+ all_metrics_L: CFG=1的评估指标
+ dataset_times: 处理时间列表
+
+ Returns:
+ str: 格式化的结果字符串
+ """
+ eval_metrics_order = ["abs_relative_difference", "squared_relative_difference", "rmse_linear", "rmse_log", "delta1_acc", "delta2_acc", "delta3_acc"]
+
+ # 获取CFG=1的指标值
+ mean_errors_L = [all_metrics_L.get(metric, 0.0) for metric in eval_metrics_order]
+
+ # 构建表格
+ metrics_header = ["Dataset", "Model", "CFG", "abs_rel", "sq_rel", "rmse", "rmse_log", "a1", "a2", "a3"]
+
+ # CFG=1的结果行
+ values_data_L = [dataset_name, model_identifier, "CFG=1"] + [f"{v:.4f}" for v in mean_errors_L]
+
+ header_line = "| " + " | ".join(metrics_header) + " |"
+ separator_line = "| " + " | ".join(["---"] * len(metrics_header)) + " |"
+ values_line_L = "| " + " | ".join(values_data_L) + " |"
+
+ # 生成输出字符串
+ result_str = f"\n数据集 {dataset_name} 评估完成!\n"
+ result_str += "-" * 100 + "\n"
+ result_str += header_line + "\n"
+ result_str += separator_line + "\n"
+ result_str += values_line_L + "\n"
+
+ # 添加统计信息
+ sample_count = len(dataset_times)
+ result_str += f"样本数: {sample_count}\n"
+ if dataset_times:
+ result_str += f"平均处理时间: {np.mean(dataset_times):.2f}秒/图像\n"
+ result_str += "-" * 100 + "\n"
+
+ return result_str
+
+
+def save_dual_cfg_results_summary(output_dir, all_dataset_results, model_identifier):
+ """
+ 保存所有数据集的双CFG评估结果摘要
+
+ Args:
+ output_dir: 输出目录
+ all_dataset_results: 所有数据集的结果字典
+ """
+ summary_file = os.path.join(output_dir, f"{model_identifier}.txt")
+
+ with open(summary_file, 'w', encoding='utf-8') as f:
+ f.write("=" * 120 + "\n")
+ f.write("双CFG配置深度评估结果汇总\n")
+ f.write("=" * 120 + "\n\n")
+
+ for dataset_name, result_data in all_dataset_results.items():
+ f.write(result_data['formatted_output'])
+ f.write(f"结果保存至: {result_data['eval_dir']}\n\n")
+
+ print(f"双CFG评估结果摘要已保存至: {summary_file}")
+
+
+def parse_args():
+ '''Set the Args'''
+ parser = argparse.ArgumentParser(description="Run Step...")
+ parser.add_argument('--model_path', type=str, default='./pretrain', help='模型路径')
+ parser.add_argument('--qwen2vl_model_path', type=str, default=DEFAULT_QWEN_DIR, help='Qwen2.5-VL 模型目录')
+ parser.add_argument('--eval_data_root', type=str, default=None, help='评测数据根目录,默认自动在仓库相对路径下查找')
+ parser.add_argument("--seed", type=int, default=1234, help="随机种子")
+ parser.add_argument("--output_dir", type=str, default="./infer/eval_results", help="Output directory.")
+ parser.add_argument('--num_steps', type=int, default=28, help='扩散步数')
+ parser.add_argument('--num_samples', type=int, default=-1, help='生成样本数')
+ parser.add_argument('--cfg_guidance', type=float, default=6.0, help='CFG引导强度')
+ parser.add_argument('--size_level', type=int, default=768, help='输入图像大小')
+ parser.add_argument('--num_gpus', type=int, default=torch.cuda.device_count(), help='使用的GPU数量')
+ parser.add_argument('--save_viz', action='store_true', help='保存可视化结果')
+ parser.add_argument('--offload', action='store_true', help='使用CPU卸载以节省GPU内存')
+ parser.add_argument('--quantized', action='store_true', help='使用量化模型')
+ parser.add_argument('--lora', type=str, help='LoRA模型路径')
+ parser.add_argument('--single_denoise', action='store_true', default=False, help='单步推理')
+ parser.add_argument('--old_prompt', action='store_true', default=False, help='使用旧版提示')
+ parser.add_argument('--prompt_type', type=str, default='query', help='提示类型')
+ parser.add_argument('--prompt', type=str, default='Describe the 3D structure and layout of the scene in the image. Predict the depth of this image.', help='提示')
+ parser.add_argument('--norm_type', type=str, default='depth', help='预测结果的归一化方式,目前有 depth、disp、ln')
+ parser.add_argument('--task_name', type=str, default='depth', help='任务名称,支持 depth 或 normal')
+ parser.add_argument('--depth_eval_datasets', type=str, default='eth3d', help='逗号分隔的 depth 评测数据集')
+ parser.add_argument('--normal_eval_datasets', type=str, default='nyuv2,scannet', help='逗号分隔的 normal 评测数据集')
+ parser.add_argument('--debug', action='store_true', default=False, help='调试模式')
+ args = parser.parse_args()
+ if args.single_denoise:
+ args.num_steps = 1
+ return args
+
+
+def extract_model_identifier(lora_path):
+ """
+ 从lora路径中提取模型标识符
+ 支持多种路径格式:
+ - ./log_err/dis-hvsge-log/ckpt.safetensors -> dis-hvsge-log
+ - /path/to/folder/ckpt-123 -> folder-epoch123
+ - /path/to/model.safetensors -> model
+ """
+ if not lora_path or not os.path.exists(lora_path):
+ return "DefaultModel"
+
+ # 规范化路径
+ lora_path = os.path.normpath(lora_path)
+
+ # 方法1: 匹配 /folder/ckpt-数字 格式
+ match = re.search(r'/([^/]+)/ckpt-(\d+)', lora_path)
+ if match:
+ folder_name = match.group(1)
+ epoch_num = int(match.group(2))
+ return f"{folder_name}-epoch{epoch_num}"
+
+ # 方法2: 匹配 /folder/ckpt.safetensors 格式
+ match = re.search(r'/([^/]+)/ckpt\.safetensors$', lora_path)
+ if match:
+ return match.group(1)
+
+ # 方法3: 匹配 ./folder/ckpt.safetensors 格式
+ match = re.search(r'[./]*([^/]+)/ckpt\.safetensors$', lora_path)
+ if match:
+ return match.group(1)
+
+ # 方法4: 从文件名中提取(兜底方案)
+ filename = os.path.basename(lora_path)
+ return filename.split('.')[0] if '.' in filename else filename
+
+
+def setup(rank, world_size):
+ """初始化分布式环境"""
+ os.environ.setdefault('MASTER_ADDR', 'localhost')
+ os.environ.setdefault('MASTER_PORT', '21256')
+ dist.init_process_group("nccl", rank=rank, world_size=world_size)
+
+
+def cleanup():
+ """清理分布式环境"""
+ dist.destroy_process_group()
+
+
+def main_worker(rank, world_size, args, dataset_configs):
+ """每个进程的主函数"""
+ from infer.inference import ImageGenerator
+ from infer.inner_evaluation import evaluation_depth_custom_parallel
+
+ setup(rank, world_size)
+ torch.cuda.set_device(rank)
+ device = torch.device(f"cuda:{rank}")
+
+ if rank == 0:
+ print(f"[main_worker] 开始加载 pipeline, device={device}, datasets={list(dataset_configs.keys())}", flush=True)
+
+ pipeline = ImageGenerator(
+ ae_path=os.path.join(args.model_path, 'vae.safetensors'),
+ dit_path=os.path.join(args.model_path, "step1x-edit-i1258-FP8.safetensors" if args.quantized else "step1x-edit-i1258.safetensors"),
+ qwen2vl_model_path=args.qwen2vl_model_path,
+ max_length=640,
+ quantized=args.quantized,
+ offload=args.offload,
+ lora=args.lora,
+ device=str(device),
+ args=args,
+ )
+
+ if rank == 0:
+ print(f"Successfully loading pipeline from {args.model_path}.", flush=True)
+
+ test_data_dir = resolve_eval_data_root(args, "configs")
+
+ # 使用新的模型标识符提取函数
+ model_identifier = extract_model_identifier(args.lora)
+
+ if rank == 0:
+ print(f"模型标识符: {model_identifier}", flush=True)
+
+ all_dataset_results = {}
+ aligment_map = {"depth": "least_square", "disp": "least_square_disparity", "ln": "log_space"}
+ for dataset_name, config_path in dataset_configs.items():
+ # 修改输出目录结构:在数据集名称外添加模型名称层级
+ eval_dir = os.path.join(args.output_dir, model_identifier, dataset_name)
+ test_dataset_config = os.path.join(test_data_dir, config_path)
+ alignment_type = aligment_map[args.norm_type]
+
+ if rank == 0:
+ print(f"\n开始评估数据集: {dataset_name}", flush=True)
+ print(f"输出目录: {eval_dir}", flush=True)
+ print("=" * 80, flush=True)
+
+ metric_tracker_Lpred, metric_tracker_Rpred, processing_times = evaluation_depth_custom_parallel(
+ rank,
+ world_size,
+ eval_dir,
+ test_dataset_config,
+ args,
+ pipeline,
+ test_data_dir,
+ alignment=alignment_type,
+ save_pred_vis=args.save_viz,
+ )
+
+ # 同步所有进程
+ dist.barrier()
+
+ # 收集两个CFG配置的结果
+ gathered_metrics_Lpred = [None] * world_size
+ gathered_metrics_Rpred = [None] * world_size
+ gathered_times = [None] * world_size
+
+ # 从metric_tracker获取结果字典
+ metrics_dict_Lpred = metric_tracker_Lpred.result() if hasattr(metric_tracker_Lpred, 'result') else {}
+ # metrics_dict_Rpred = metric_tracker_Rpred.result() if hasattr(metric_tracker_Rpred, 'result') else {}
+
+ dist.all_gather_object(gathered_metrics_Lpred, metrics_dict_Lpred)
+ # dist.all_gather_object(gathered_metrics_Rpred, metrics_dict_Rpred)
+ dist.all_gather_object(gathered_times, processing_times)
+
+ if rank == 0:
+ metrics_dict_Lpred, dataset_times = collect_and_merge_dual_cfg_results(rank, world_size, gathered_metrics_Lpred, gathered_times)
+
+ if metrics_dict_Lpred:
+ # 格式化并输出结果表格
+ formatted_output = format_dual_cfg_results_table(dataset_name, model_identifier, metrics_dict_Lpred, dataset_times)
+
+ print(formatted_output)
+ print(f"结果保存至: {eval_dir}")
+
+ # 存储结果用于后续汇总
+ all_dataset_results[dataset_name] = {'metrics_Lpred': metrics_dict_Lpred, 'formatted_output': formatted_output, 'eval_dir': eval_dir, 'processing_times': dataset_times}
+
+ if rank == 0:
+ print(f"\n所有数据集评估完成! 结果保存在: {os.path.join(args.output_dir, model_identifier)}")
+
+ # 保存所有数据集的双CFG评估结果摘要
+ if all_dataset_results:
+ save_dual_cfg_results_summary(os.path.join(args.output_dir, model_identifier), all_dataset_results, model_identifier)
+
+ cleanup()
+
+def main_worker_normal(rank, world_size, args, eval_datasets):
+ """normal预测的多进程主函数"""
+ from infer.inference import ImageGenerator
+ from infer.inner_evaluation import evaluation_normal_custom_parallel
+
+ setup(rank, world_size)
+ torch.cuda.set_device(rank)
+ device = torch.device(f"cuda:{rank}")
+
+ pipeline = ImageGenerator(
+ ae_path=os.path.join(args.model_path, 'vae.safetensors'),
+ dit_path=os.path.join(args.model_path, "step1x-edit-i1258-FP8.safetensors" if args.quantized else "step1x-edit-i1258.safetensors"),
+ qwen2vl_model_path=args.qwen2vl_model_path,
+ max_length=640,
+ quantized=args.quantized,
+ offload=args.offload,
+ lora=args.lora,
+ device=str(device),
+ args=args,
+ )
+
+ if rank == 0:
+ print(f"Successfully loading pipeline from {args.model_path}.")
+
+ test_data_dir = resolve_eval_data_root(args, "dsine_eval")
+ dataset_split_path = os.path.join(REPO_ROOT, "infer", "dataset_normal")
+
+ # 使用新的模型标识符提取函数
+ model_identifier = extract_model_identifier(args.lora)
+
+ # 修改输出目录结构:在任务名称外添加模型名称层级
+ eval_dir = os.path.join(args.output_dir, model_identifier, args.task_name)
+
+ if rank == 0:
+ print(f"模型标识符: {model_identifier}")
+ print(f"输出目录: {eval_dir}")
+
+ if rank == 0:
+ print(f"\n开始并行Normal评估,使用{world_size}个GPU")
+ print("=" * 80)
+
+ # 调用并行评估函数
+ all_normal_errors, all_processing_times, all_dataset_metrics = evaluation_normal_custom_parallel(
+ rank, world_size, eval_dir, test_data_dir, dataset_split_path, pipeline, args, eval_datasets, save_pred_vis=args.save_viz
+ )
+
+ # 同步所有进程
+ dist.barrier()
+
+ # 收集所有GPU的结果
+ gathered_normal_errors = [None] * world_size
+ gathered_processing_times = [None] * world_size
+ gathered_dataset_metrics = [None] * world_size
+
+ dist.all_gather_object(gathered_normal_errors, all_normal_errors)
+ dist.all_gather_object(gathered_processing_times, all_processing_times)
+ dist.all_gather_object(gathered_dataset_metrics, all_dataset_metrics)
+
+ if rank == 0:
+ # 合并所有GPU的结果
+ final_results = {}
+
+ for dataset_name, _ in eval_datasets:
+ print(f"\n合并数据集 {dataset_name} 的结果...")
+
+ # 合并normal errors
+ all_errors_for_dataset = []
+ all_times_for_dataset = []
+
+ for gpu_errors, gpu_times in zip(gathered_normal_errors, gathered_processing_times):
+ if gpu_errors[dataset_name] is not None:
+ all_errors_for_dataset.append(gpu_errors[dataset_name])
+ if gpu_times[dataset_name]:
+ all_times_for_dataset.extend(gpu_times[dataset_name])
+
+ # 计算最终指标
+ if all_errors_for_dataset:
+ combined_errors = torch.cat(all_errors_for_dataset, dim=0)
+ from infer.util import normal_utils
+ final_metrics = normal_utils.compute_normal_metrics(combined_errors)
+
+ print(f"数据集 {dataset_name} 最终结果:")
+ print("mean median rmse 5 7.5 11.25 22.5 30")
+ print("%.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f" % (
+ final_metrics['mean'], final_metrics['median'], final_metrics['rmse'],
+ final_metrics['a1'], final_metrics['a2'], final_metrics['a3'],
+ final_metrics['a4'], final_metrics['a5']
+ ))
+
+ final_results[dataset_name] = {
+ 'metrics': final_metrics,
+ 'processing_times': all_times_for_dataset,
+ 'sample_count': len(combined_errors)
+ }
+
+ # 保存结果到文件
+ dataset_output_dir = os.path.join(eval_dir, dataset_name)
+ os.makedirs(dataset_output_dir, exist_ok=True)
+
+ from tabulate import tabulate
+ eval_text = f"Evaluation metrics for {dataset_name}:\n"
+ eval_text += f"Total samples: {len(combined_errors)}\n"
+ eval_text += f"Average processing time: {np.mean(all_times_for_dataset):.2f}s\n"
+ eval_text += tabulate([list(final_metrics.keys()), list(final_metrics.values())])
+
+ save_path = os.path.join(dataset_output_dir, "eval_metrics.txt")
+ with open(save_path, "w+") as f:
+ f.write(eval_text)
+
+ print(f"结果已保存至: {save_path}")
+ else:
+ print(f"数据集 {dataset_name}: 未找到有效数据")
+ final_results[dataset_name] = None
+
+ # 保存总体结果摘要
+ summary_file = os.path.join(eval_dir, f"{model_identifier}_normal_summary.txt")
+ with open(summary_file, 'w', encoding='utf-8') as f:
+ f.write("=" * 120 + "\n")
+ f.write("Normal预测多GPU并行评估结果汇总\n")
+ f.write("=" * 120 + "\n\n")
+
+ for dataset_name, result in final_results.items():
+ if result is not None:
+ f.write(f"数据集: {dataset_name}\n")
+ f.write(f"样本数: {result['sample_count']}\n")
+ f.write(f"平均处理时间: {np.mean(result['processing_times']):.2f}s\n")
+ metrics = result['metrics']
+ f.write("mean median rmse 5 7.5 11.25 22.5 30\n")
+ f.write("%.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f\n" % (
+ metrics['mean'], metrics['median'], metrics['rmse'],
+ metrics['a1'], metrics['a2'], metrics['a3'],
+ metrics['a4'], metrics['a5']
+ ))
+ f.write("-" * 60 + "\n\n")
+ else:
+ f.write(f"数据集: {dataset_name} - 无有效数据\n\n")
+
+ print(f"\nNormal评估总结已保存至: {summary_file}")
+
+ cleanup()
+
+def main():
+ args = parse_args()
+ if args.seed is not None:
+ seed_all(args.seed)
+
+ os.makedirs(args.output_dir, exist_ok=True)
+
+ # 检查GPU数量
+ world_size = min(args.num_gpus, torch.cuda.device_count())
+ if world_size <= 0:
+ print("错误:未检测到可用的GPU。")
+ return
+
+ # 设置多进程相关环境变量
+ os.environ['OMP_NUM_THREADS'] = '1'
+ os.environ['MKL_NUM_THREADS'] = '1'
+
+ print(f"即将使用 {world_size} 个GPU进行并行推理...")
+
+ if args.task_name == 'depth':
+ test_depth_dataset_configs = parse_depth_eval_datasets(args.depth_eval_datasets)
+ print(f"Depth评估数据集: {list(test_depth_dataset_configs.keys())}")
+
+ if world_size == 1:
+ # 单GPU情况,直接运行
+ main_worker(0, 1, args, test_depth_dataset_configs)
+ else:
+ # 多GPU情况,使用multiprocessing
+ try:
+ mp.spawn(main_worker, args=(world_size, args, test_depth_dataset_configs), nprocs=world_size, join=True)
+ except Exception as e:
+ print(f"多进程执行出错: {e}")
+ print("尝试降级到单GPU模式...")
+ # 降级到单GPU模式
+ main_worker(0, 1, args, test_depth_dataset_configs)
+
+ elif args.task_name == 'normal':
+ eval_datasets = parse_normal_eval_datasets(args.normal_eval_datasets)
+ print(f"Normal评估数据集: {eval_datasets}")
+
+ if world_size == 1:
+ main_worker_normal(0, 1, args, eval_datasets)
+ else:
+ try:
+ mp.spawn(main_worker_normal, args=(world_size, args, eval_datasets), nprocs=world_size, join=True)
+ except Exception as e:
+ print(f"多进程执行出错: {e}")
+ print("尝试降级到单GPU模式...")
+ # 降级到单GPU模式
+ main_worker_normal(0, 1, args, eval_datasets)
+ else:
+ raise ValueError(f"不支持的 task_name: {args.task_name},仅支持 depth 或 normal")
+
+if __name__ == '__main__':
+ main()
diff --git a/FE2E/infer/__init__.py b/FE2E/infer/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/FE2E/infer/__pycache__/__init__.cpython-310.pyc b/FE2E/infer/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..b175fde7583db66a95c625b73a49033adfa4736d
Binary files /dev/null and b/FE2E/infer/__pycache__/__init__.cpython-310.pyc differ
diff --git a/FE2E/infer/__pycache__/inference.cpython-310.pyc b/FE2E/infer/__pycache__/inference.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..7144eeef4a7621cdfe2739bcf6140f47647a8af4
Binary files /dev/null and b/FE2E/infer/__pycache__/inference.cpython-310.pyc differ
diff --git a/FE2E/infer/__pycache__/sampling.cpython-310.pyc b/FE2E/infer/__pycache__/sampling.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..73b2a9730094bd585acfc69a8cb6fdaf2dbd84e3
Binary files /dev/null and b/FE2E/infer/__pycache__/sampling.cpython-310.pyc differ
diff --git a/FE2E/infer/__pycache__/seed_all.cpython-310.pyc b/FE2E/infer/__pycache__/seed_all.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..e8e8b93a69fe3bb4037a20610204117d914b779a
Binary files /dev/null and b/FE2E/infer/__pycache__/seed_all.cpython-310.pyc differ
diff --git a/FE2E/infer/alignment.py b/FE2E/infer/alignment.py
new file mode 100644
index 0000000000000000000000000000000000000000..698337753d4195f0b27938671b9fa89084252fce
--- /dev/null
+++ b/FE2E/infer/alignment.py
@@ -0,0 +1,70 @@
+import numpy as np
+import torch
+
+
+def align_depth_least_square(
+ gt_arr: np.ndarray,
+ pred_arr: np.ndarray,
+ valid_mask_arr: np.ndarray,
+ return_scale_shift=True,
+ max_resolution=None,
+):
+ ori_shape = pred_arr.shape # input shape
+
+ gt = gt_arr.squeeze() # [H, W]
+ pred = pred_arr.squeeze()
+ valid_mask = valid_mask_arr.squeeze()
+
+ # Downsample
+ if max_resolution is not None:
+ scale_factor = np.min(max_resolution / np.array(ori_shape[-2:]))
+ if scale_factor < 1:
+ downscaler = torch.nn.Upsample(scale_factor=scale_factor, mode="nearest")
+ gt = downscaler(torch.as_tensor(gt).unsqueeze(0)).numpy()
+ pred = downscaler(torch.as_tensor(pred).unsqueeze(0)).numpy()
+ valid_mask = (
+ downscaler(torch.as_tensor(valid_mask).unsqueeze(0).float())
+ .bool()
+ .numpy()
+ )
+
+ assert (
+ gt.shape == pred.shape == valid_mask.shape
+ ), f"{gt.shape}, {pred.shape}, {valid_mask.shape}"
+
+ gt_masked = gt[valid_mask].reshape((-1, 1))
+ pred_masked = pred[valid_mask].reshape((-1, 1))
+
+ # numpy solver
+ _ones = np.ones_like(pred_masked)
+ A = np.concatenate([pred_masked, _ones], axis=-1)
+ X = np.linalg.lstsq(A, gt_masked, rcond=None)[0]
+ scale, shift = X
+
+ aligned_pred = pred_arr * scale + shift
+
+ # restore dimensions
+ aligned_pred = aligned_pred.reshape(ori_shape)
+
+ if return_scale_shift:
+ return aligned_pred, scale, shift
+ else:
+ return aligned_pred
+
+
+# ******************** disparity space ********************
+def depth2disparity(depth, return_mask=False):
+ if isinstance(depth, torch.Tensor):
+ disparity = torch.zeros_like(depth)
+ elif isinstance(depth, np.ndarray):
+ disparity = np.zeros_like(depth)
+ non_negtive_mask = depth > 0
+ disparity[non_negtive_mask] = 1.0 / depth[non_negtive_mask]
+ if return_mask:
+ return disparity, non_negtive_mask
+ else:
+ return disparity
+
+
+def disparity2depth(disparity, **kwargs):
+ return depth2disparity(disparity, **kwargs)
diff --git a/FE2E/infer/configs/data_diode_all.yaml b/FE2E/infer/configs/data_diode_all.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..5a5d7e15f5b6f6a9b28279b85d86dbfc1637654b
--- /dev/null
+++ b/FE2E/infer/configs/data_diode_all.yaml
@@ -0,0 +1,5 @@
+name: diode
+disp_name: diode_val_all
+dir: diode/diode_val.tar
+filenames: infer/data_split/diode/diode_val_all_filename_list.txt
+processing_res: 768
\ No newline at end of file
diff --git a/FE2E/infer/configs/data_eth3d.yaml b/FE2E/infer/configs/data_eth3d.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..bfe445d0fbf58d97bdcdebc0aa342f588bd7affe
--- /dev/null
+++ b/FE2E/infer/configs/data_eth3d.yaml
@@ -0,0 +1,7 @@
+name: eth3d
+disp_name: eth3d_full
+# dir: eth3d
+dir: eth3d/eth3d.tar
+filenames: infer/data_split/eth3d/eth3d_filename_list.txt
+processing_res: 768
+alignment_max_res: 1024
diff --git a/FE2E/infer/configs/data_kitti_eigen_test.yaml b/FE2E/infer/configs/data_kitti_eigen_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..0c2ff3cd7fb3e5f3c99b833a4f25143820d367fb
--- /dev/null
+++ b/FE2E/infer/configs/data_kitti_eigen_test.yaml
@@ -0,0 +1,6 @@
+name: kitti
+disp_name: kitti_eigen_test_full
+dir: kitti/kitti_eigen_split_test.tar
+filenames: infer/data_split/kitti/eigen_test_files_with_gt.txt
+kitti_bm_crop: true
+valid_mask_crop: eigen
\ No newline at end of file
diff --git a/FE2E/infer/configs/data_nyu_test.yaml b/FE2E/infer/configs/data_nyu_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d2240f67d6850931dfea83efdb99e3c0ab3dd02c
--- /dev/null
+++ b/FE2E/infer/configs/data_nyu_test.yaml
@@ -0,0 +1,5 @@
+name: nyu_v2
+disp_name: nyu_test_full
+dir: nyudepth/nyu_labeled_extracted.tar
+filenames: infer/data_split/nyu/filename_list_test.txt
+eigen_valid_mask: true
\ No newline at end of file
diff --git a/FE2E/infer/configs/data_scannet_val.yaml b/FE2E/infer/configs/data_scannet_val.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..647a02fcebe36dd15cf9959e7d3c0d6bf0a4c25f
--- /dev/null
+++ b/FE2E/infer/configs/data_scannet_val.yaml
@@ -0,0 +1,5 @@
+name: scannet
+disp_name: scannet_val_800_1
+# dir: scannet
+dir: scannet/scannet_val_sampled_800_1.tar
+filenames: infer/data_split/scannet/scannet_val_sampled_list_800_1.txt
\ No newline at end of file
diff --git a/FE2E/infer/dataset/__init__.py b/FE2E/infer/dataset/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..8a99e8721b8625e9744853cf4ebbc6894545330b
--- /dev/null
+++ b/FE2E/infer/dataset/__init__.py
@@ -0,0 +1,49 @@
+import os
+
+from .base_depth_dataset import BaseDepthDataset, get_pred_name, DatasetMode # noqa: F401
+from .diode_dataset import DIODEDataset
+from .eth3d_dataset import ETH3DDataset
+from .kitti_dataset import KITTIDataset
+from .nyu_dataset import NYUDataset
+from .scannet_dataset import ScanNetDataset
+
+
+dataset_name_class_dict = {
+ "nyu_v2": NYUDataset,
+ "kitti": KITTIDataset,
+ "eth3d": ETH3DDataset,
+ "diode": DIODEDataset,
+ "scannet": ScanNetDataset,
+}
+
+REPO_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+
+
+def _resolve_split_file(path: str) -> str:
+ if os.path.isabs(path) or os.path.exists(path):
+ return path
+
+ candidate = os.path.join(REPO_ROOT, path)
+ if os.path.exists(candidate):
+ return candidate
+
+ return path
+
+
+def get_dataset(cfg_data_split, base_data_dir: str, mode: DatasetMode, prompt_type="query", **kwargs) -> BaseDepthDataset:
+ if cfg_data_split.name in dataset_name_class_dict.keys():
+ dataset_class = dataset_name_class_dict[cfg_data_split.name]
+ filename_ls_path = cfg_data_split.filenames if not prompt_type == "full" else (cfg_data_split.filenames).replace(".txt", "_wc.txt")
+ filename_ls_path = _resolve_split_file(filename_ls_path)
+ dataset = dataset_class(
+ mode=mode,
+ filename_ls_path=filename_ls_path,
+ dataset_dir=os.path.join(base_data_dir, cfg_data_split.dir),
+ **cfg_data_split,
+ prompt_type=prompt_type,
+ **kwargs,
+ )
+ else:
+ raise NotImplementedError
+
+ return dataset
diff --git a/FE2E/infer/dataset/base_depth_dataset.py b/FE2E/infer/dataset/base_depth_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..d96f25a7741aabcecf62071e88405d13f7bbd183
--- /dev/null
+++ b/FE2E/infer/dataset/base_depth_dataset.py
@@ -0,0 +1,257 @@
+import io
+import os
+import random
+import tarfile
+from enum import Enum
+
+import numpy as np
+import torch
+from PIL import Image
+from torch.utils.data import Dataset
+from torchvision.transforms import InterpolationMode, Resize
+import torchvision.transforms.functional as F
+
+class DatasetMode(Enum):
+ RGB_ONLY = "rgb_only"
+ EVAL = "evaluate"
+ TRAIN = "train"
+
+
+def read_image_from_tar(tar_obj, img_rel_path):
+ image = tar_obj.extractfile("./" + img_rel_path)
+ image = image.read()
+ image = Image.open(io.BytesIO(image))
+
+
+class BaseDepthDataset(Dataset):
+
+ def __init__(
+ self, mode: DatasetMode, filename_ls_path: str, dataset_dir: str, disp_name: str, min_depth, max_depth, has_filled_depth, name_mode, depth_transform=None, augmentation_args: dict = None, resize_to_hw=None,
+ move_invalid_to_far_plane: bool = True, rgb_transform=None, prompt_type="query", **kwargs,
+ ) -> None:
+ super().__init__()
+ self.mode = mode
+
+ self.filename_ls_path = filename_ls_path
+ self.dataset_dir = dataset_dir
+ self.disp_name = disp_name
+ self.has_filled_depth = has_filled_depth
+ self.name_mode: DepthFileNameMode = name_mode
+ self.min_depth = min_depth
+ self.max_depth = max_depth
+
+ self.depth_transform = depth_transform
+ self.augm_args = augmentation_args
+ self.resize_to_hw = resize_to_hw
+ self.prompt_type = prompt_type
+ # 设置默认的rgb_transform函数
+ if rgb_transform is None:
+ self.rgb_transform = self._default_rgb_transform
+ else:
+ self.rgb_transform = rgb_transform
+ self.move_invalid_to_far_plane = move_invalid_to_far_plane
+
+ # Load filenames
+ with open(self.filename_ls_path, "r") as f:
+ self.filenames = [s.split() for s in f.readlines()] # [['rgb.png', 'depth.tif'], [], ...]
+
+ # Tar dataset
+ self.tar_obj = None
+ self.tar_obj_pid = None
+ self.is_tar = (True if os.path.isfile(dataset_dir) and tarfile.is_tarfile(dataset_dir) else False)
+
+ def __len__(self):
+ return len(self.filenames)
+
+ def __getitem__(self, index):
+ rasters, other = self._get_data_item(index)
+ if DatasetMode.TRAIN == self.mode:
+ rasters = self._training_preprocess(rasters)
+ # merge
+ outputs = rasters
+ outputs.update(other)
+ return outputs
+
+ def _get_data_item(self, index):
+ rgb_rel_path, depth_rel_path, filled_rel_path, prompt = self._get_data_path(index=index)
+
+ rasters = {}
+
+ # RGB data
+ rasters.update(self._load_rgb_data(rgb_rel_path=rgb_rel_path))
+
+ # Depth data
+ if DatasetMode.RGB_ONLY != self.mode:
+ # load data
+ depth_data = self._load_depth_data(depth_rel_path=depth_rel_path, filled_rel_path=filled_rel_path)
+ rasters.update(depth_data)
+ # valid mask
+ rasters["valid_mask_raw"] = self._get_valid_mask(rasters["depth_raw_linear"]).clone()
+ rasters["valid_mask_filled"] = self._get_valid_mask(rasters["depth_filled_linear"]).clone()
+
+
+ other = {"index": index, "rgb_relative_path": rgb_rel_path, "prompt": prompt}
+
+ return rasters, other
+
+ def _load_rgb_data(self, rgb_rel_path):
+ # Read RGB data
+ _, rgb = self._read_image(rgb_rel_path)
+ rgb = self.input_process_image(rgb)
+ outputs = {"rgb": rgb}
+ return outputs
+
+ def input_process_image(self, image):
+ if isinstance(image, np.ndarray):
+ image = torch.from_numpy(image).permute(2, 0, 1).float() / 255.0
+
+ return image
+ elif isinstance(image, Image.Image):
+ image = F.to_tensor(image.convert("RGB"))
+
+ return image
+ elif isinstance(image, torch.Tensor):
+ return image
+ elif isinstance(image, str):
+ image = F.to_tensor(Image.open(image).convert("RGB"))
+
+ return image
+ return image
+
+ def _load_depth_data(self, depth_rel_path, filled_rel_path):
+ # Read depth data
+ outputs = {}
+ depth_raw = self._read_depth_file(depth_rel_path).squeeze()
+ depth_raw_linear = torch.from_numpy(depth_raw).float().unsqueeze(0) # [1, H, W]
+ outputs["depth_raw_linear"] = depth_raw_linear.clone()
+
+ if self.has_filled_depth:
+ depth_filled = self._read_depth_file(filled_rel_path).squeeze()
+ depth_filled_linear = torch.from_numpy(depth_filled).float().unsqueeze(0)
+ outputs["depth_filled_linear"] = depth_filled_linear
+ else:
+ outputs["depth_filled_linear"] = depth_raw_linear.clone()
+
+ return outputs
+
+ def _get_data_path(self, index):
+ filename_line = self.filenames[index]
+ rgb_rel_path = filename_line[0]
+ depth_rel_path, filled_rel_path = None, None
+ if DatasetMode.RGB_ONLY != self.mode:
+ depth_rel_path = filename_line[1]
+ if self.has_filled_depth:
+ filled_rel_path = filename_line[2]
+
+ if self.prompt_type == "full":
+ if filename_line[2][0] in ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]:
+ prompt = ' '.join(filename_line[2:])
+ else:
+ prompt = ' '.join(filename_line[3:])
+ else:
+ prompt = 1
+ return rgb_rel_path, depth_rel_path, filled_rel_path, prompt
+
+ def _read_image(self, img_rel_path):
+ if self.is_tar:
+ tar_obj = self._ensure_tar_obj()
+ image = tar_obj.extractfile("./" + img_rel_path)
+ image = image.read()
+ image = Image.open(io.BytesIO(image))
+ else:
+ img_path = os.path.join(self.dataset_dir, img_rel_path)
+ image = Image.open(img_path)
+ image_arr = np.asarray(image)
+ return image_arr, image
+
+ def _read_depth_file(self, rel_path):
+ depth_in, _ = self._read_image(rel_path)
+ # Replace code below to decode depth according to dataset definition
+ depth_decoded = depth_in
+
+ return depth_decoded
+
+ def _get_valid_mask(self, depth: torch.Tensor):
+ valid_mask = torch.logical_and((depth > self.min_depth), (depth < self.max_depth)).bool()
+ return valid_mask
+
+ def _training_preprocess(self, rasters):
+ # Augmentation
+ if self.augm_args is not None:
+ rasters = self._augment_data(rasters)
+
+ # Normalization
+ rasters["depth_raw_norm"] = self.depth_transform(rasters["depth_raw_linear"], rasters["valid_mask_raw"]).clone()
+ rasters["depth_filled_norm"] = self.depth_transform(rasters["depth_filled_linear"], rasters["valid_mask_filled"]).clone()
+
+ # Set invalid pixel to far plane
+ if self.move_invalid_to_far_plane:
+ if self.depth_transform.far_plane_at_max:
+ rasters["depth_filled_norm"][~rasters["valid_mask_filled"]] = self.depth_transform.norm_max
+ else:
+ rasters["depth_filled_norm"][~rasters["valid_mask_filled"]] = self.depth_transform.norm_min
+
+ # Resize
+ if self.resize_to_hw is not None:
+ resize_transform = Resize(size=self.resize_to_hw, interpolation=InterpolationMode.NEAREST_EXACT)
+ rasters = {k: resize_transform(v) for k, v in rasters.items()}
+
+ return rasters
+
+ def _augment_data(self, rasters_dict):
+ # lr flipping
+ lr_flip_p = self.augm_args.lr_flip_p
+ if random.random() < lr_flip_p:
+ rasters_dict = {k: v.flip(-1) for k, v in rasters_dict.items()}
+
+ return rasters_dict
+
+ def __del__(self):
+ if self.tar_obj is not None:
+ self.tar_obj.close()
+ self.tar_obj = None
+ self.tar_obj_pid = None
+
+ def _default_rgb_transform(self, x):
+ """默认的RGB变换函数: [0, 255] -> [-1, 1]"""
+ return x / 255.0 * 2 - 1
+
+ def _ensure_tar_obj(self):
+ """Ensure each process owns its own tar handle to avoid cross-process FD issues."""
+ if not self.is_tar:
+ return None
+ current_pid = os.getpid()
+ if self.tar_obj is None or self.tar_obj_pid != current_pid:
+ if self.tar_obj is not None:
+ try:
+ self.tar_obj.close()
+ except Exception:
+ pass
+ self.tar_obj = tarfile.open(self.dataset_dir)
+ self.tar_obj_pid = current_pid
+ return self.tar_obj
+
+
+# Prediction file naming modes
+class DepthFileNameMode(Enum):
+ id = 1 # id.png
+ rgb_id = 2 # rgb_id.png
+ i_d_rgb = 3 # i_d_1_rgb.png
+ rgb_i_d = 4
+
+
+def get_pred_name(rgb_basename, name_mode, suffix=".png"):
+ if DepthFileNameMode.rgb_id == name_mode:
+ pred_basename = "pred_" + rgb_basename.split("_")[1]
+ elif DepthFileNameMode.i_d_rgb == name_mode:
+ pred_basename = rgb_basename.replace("_rgb.", "_pred.")
+ elif DepthFileNameMode.id == name_mode:
+ pred_basename = "pred_" + rgb_basename
+ elif DepthFileNameMode.rgb_i_d == name_mode:
+ pred_basename = "pred_" + "_".join(rgb_basename.split("_")[1:])
+ else:
+ raise NotImplementedError
+ # change suffix
+ pred_basename = os.path.splitext(pred_basename)[0] + suffix
+
+ return pred_basename
diff --git a/FE2E/infer/dataset/diode_dataset.py b/FE2E/infer/dataset/diode_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..f49a0ea7c692221da98317263e80a12d877a988e
--- /dev/null
+++ b/FE2E/infer/dataset/diode_dataset.py
@@ -0,0 +1,71 @@
+# Author: Bingxin Ke
+# Last modified: 2024-02-26
+
+import os
+import tarfile
+from io import BytesIO
+
+import numpy as np
+import torch
+
+from .base_depth_dataset import BaseDepthDataset, DepthFileNameMode, DatasetMode
+
+
+class DIODEDataset(BaseDepthDataset):
+ def __init__(
+ self,
+ **kwargs,
+ ) -> None:
+ super().__init__(
+ # DIODE data parameter
+ min_depth=0.6,
+ max_depth=350,
+ has_filled_depth=False,
+ name_mode=DepthFileNameMode.id,
+ **kwargs,
+ )
+
+ def _read_npy_file(self, rel_path):
+ if self.is_tar:
+ if self.tar_obj is None:
+ self.tar_obj = tarfile.open(self.dataset_dir)
+ fileobj = self.tar_obj.extractfile("./" + rel_path)
+ npy_path_or_content = BytesIO(fileobj.read())
+ else:
+ npy_path_or_content = os.path.join(self.dataset_dir, rel_path)
+ data = np.load(npy_path_or_content).squeeze()[np.newaxis, :, :]
+ return data
+
+ def _read_depth_file(self, rel_path):
+ depth = self._read_npy_file(rel_path)
+ return depth
+
+ def _get_data_path(self, index):
+ return self.filenames[index][0], self.filenames[index][1], self.filenames[index][2], self.filenames[index][3:] if len(self.filenames[index]) > 3 else 1
+
+ def _get_data_item(self, index):
+
+ rgb_rel_path, depth_rel_path, mask_rel_path, prompt = self._get_data_path(index=index)
+
+ rasters = {}
+
+ # RGB data
+ rasters.update(self._load_rgb_data(rgb_rel_path=rgb_rel_path))
+
+ # Depth data
+ if DatasetMode.RGB_ONLY != self.mode:
+ # load data
+ depth_data = self._load_depth_data(
+ depth_rel_path=depth_rel_path, filled_rel_path=None
+ )
+ rasters.update(depth_data)
+
+ # valid mask
+ mask = self._read_npy_file(mask_rel_path).astype(bool)
+ mask = torch.from_numpy(mask).bool()
+ rasters["valid_mask_raw"] = mask.clone()
+ rasters["valid_mask_filled"] = mask.clone()
+
+ other = {"index": index, "rgb_relative_path": rgb_rel_path, "prompt": prompt}
+
+ return rasters, other
diff --git a/FE2E/infer/dataset/drivingstereo_dataset.py b/FE2E/infer/dataset/drivingstereo_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..bb9e4696d28fa0f708d271d76d8d99c347e2d395
--- /dev/null
+++ b/FE2E/infer/dataset/drivingstereo_dataset.py
@@ -0,0 +1,32 @@
+import os
+import json
+import numpy as np
+import PIL.Image as pil
+
+from .mono_dataset import MonoDataset
+
+
+class DrivingStereoDataset(MonoDataset):
+ RAW_HEIGHT = 800
+ RAW_WIDTH = 1762
+
+ def __init__(self, *args, **kwargs):
+ super(DrivingStereoDataset, self).__init__(*args, **kwargs)
+ self.forename = {"rainy": "2018-08-17-09-45-58_2018-08-17-10-", "foggy": "2018-10-25-07-37-26_2018-10-25-", "sunny": "2018-10-19-09-30-39_2018-10-19-", "cloudy": "2018-10-31-06-55-01_2018-10-31-"}
+
+ def get_color(self, weather, name, do_flip):
+ path, name = self.get_image_path(weather, name)
+ color = self.loader(path)
+
+ return color, name
+
+ def get_image_path(self, weather, frame_name):
+ folder = "left-image-full-size"
+ image_path = os.path.join(self.opts.data_path, weather, folder, frame_name)
+ image_name = os.path.join(weather, folder, frame_name)
+ if self.opts.debug >= 3:
+ print(image_name)
+ return image_path, image_name
+
+ def index_to_name(self, weather, index):
+ return self.forename[weather] + self.filenames[index] + ".png"
diff --git a/FE2E/infer/dataset/eth3d_dataset.py b/FE2E/infer/dataset/eth3d_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..7632c7a6659a43cb7d51419caaeef55826966539
--- /dev/null
+++ b/FE2E/infer/dataset/eth3d_dataset.py
@@ -0,0 +1,45 @@
+# Author: Bingxin Ke
+# Last modified: 2024-02-08
+
+import torch
+import tarfile
+import os
+import numpy as np
+
+from .base_depth_dataset import BaseDepthDataset, DepthFileNameMode
+
+
+class ETH3DDataset(BaseDepthDataset):
+ HEIGHT, WIDTH = 4032, 6048
+
+ def __init__(
+ self,
+ **kwargs,
+ ) -> None:
+ super().__init__(
+ # ETH3D data parameter
+ min_depth=1e-5,
+ max_depth=torch.inf,
+ has_filled_depth=False,
+ name_mode=DepthFileNameMode.id,
+ **kwargs,
+ )
+
+ def _read_depth_file(self, rel_path):
+ # Read special binary data: https://www.eth3d.net/documentation#format-of-multi-view-data-image-formats
+ if self.is_tar:
+ tar_obj = self._ensure_tar_obj()
+ binary_data = tar_obj.extractfile("./" + rel_path)
+ binary_data = binary_data.read()
+
+ else:
+ depth_path = os.path.join(self.dataset_dir, rel_path)
+ with open(depth_path, "rb") as file:
+ binary_data = file.read()
+ # Convert the binary data to a numpy array of 32-bit floats
+ depth_decoded = np.frombuffer(binary_data, dtype=np.float32).copy()
+
+ depth_decoded[depth_decoded == torch.inf] = 0.0
+
+ depth_decoded = depth_decoded.reshape((self.HEIGHT, self.WIDTH))
+ return depth_decoded
diff --git a/FE2E/infer/dataset/kitti_dataset.py b/FE2E/infer/dataset/kitti_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..6f7a5498dd357edddb73b41d4578e8844850dc02
--- /dev/null
+++ b/FE2E/infer/dataset/kitti_dataset.py
@@ -0,0 +1,105 @@
+# Author: Bingxin Ke
+# Last modified: 2024-02-08
+
+import torch
+
+from .base_depth_dataset import BaseDepthDataset, DepthFileNameMode
+
+
+class KITTIDataset(BaseDepthDataset):
+ def __init__(
+ self,
+ kitti_bm_crop, # Crop to KITTI benchmark size
+ valid_mask_crop, # Evaluation mask. [None, garg or eigen]
+ **kwargs,
+ ) -> None:
+ super().__init__(
+ # KITTI data parameter
+ min_depth=1e-5,
+ max_depth=80,
+ has_filled_depth=False,
+ name_mode=DepthFileNameMode.id,
+ **kwargs,
+ )
+ self.kitti_bm_crop = kitti_bm_crop
+ self.valid_mask_crop = valid_mask_crop
+ assert self.valid_mask_crop in [
+ None,
+ "garg", # set evaluation mask according to Garg ECCV16
+ "eigen", # set evaluation mask according to Eigen NIPS14
+ ], f"Unknown crop type: {self.valid_mask_crop}"
+
+ # Filter out empty depth
+ self.filenames = [f for f in self.filenames if "None" != f[1]]
+
+ def _read_depth_file(self, rel_path):
+ depth_in,_ = self._read_image(rel_path)
+ # Decode KITTI depth
+ depth_decoded = depth_in / 256.0
+ return depth_decoded
+
+ def _load_rgb_data(self, rgb_rel_path):
+ rgb_data = super()._load_rgb_data(rgb_rel_path)
+ if self.kitti_bm_crop:
+ rgb_data = {k: self.kitti_benchmark_crop(v) for k, v in rgb_data.items()}
+ return rgb_data
+
+ def _load_depth_data(self, depth_rel_path, filled_rel_path):
+ depth_data = super()._load_depth_data(depth_rel_path, filled_rel_path)
+ if self.kitti_bm_crop:
+ depth_data = {
+ k: self.kitti_benchmark_crop(v) for k, v in depth_data.items()
+ }
+ return depth_data
+
+ @staticmethod
+ def kitti_benchmark_crop(input_img):
+ """
+ Crop images to KITTI benchmark size
+ Args:
+ `input_img` (torch.Tensor): Input image to be cropped.
+
+ Returns:
+ torch.Tensor:Cropped image.
+ """
+ KB_CROP_HEIGHT = 352
+ KB_CROP_WIDTH = 1216
+
+ height, width = input_img.shape[-2:]
+ top_margin = int(height - KB_CROP_HEIGHT)
+ left_margin = int((width - KB_CROP_WIDTH) / 2)
+ if 2 == len(input_img.shape):
+ out = input_img[
+ top_margin: top_margin + KB_CROP_HEIGHT,
+ left_margin: left_margin + KB_CROP_WIDTH,
+ ]
+ elif 3 == len(input_img.shape):
+ out = input_img[
+ :,
+ top_margin: top_margin + KB_CROP_HEIGHT,
+ left_margin: left_margin + KB_CROP_WIDTH,
+ ]
+ return out
+
+ def _get_valid_mask(self, depth: torch.Tensor):
+ # reference: https://github.com/cleinc/bts/blob/master/pytorch/bts_eval.py
+ valid_mask = super()._get_valid_mask(depth) # [1, H, W]
+
+ if self.valid_mask_crop is not None:
+ eval_mask = torch.zeros_like(valid_mask.squeeze()).bool()
+ gt_height, gt_width = eval_mask.shape
+
+ if "garg" == self.valid_mask_crop:
+ eval_mask[
+ int(0.40810811 * gt_height): int(0.99189189 * gt_height),
+ int(0.03594771 * gt_width): int(0.96405229 * gt_width),
+ ] = 1
+ elif "eigen" == self.valid_mask_crop:
+ eval_mask[
+ int(0.3324324 * gt_height): int(0.91351351 * gt_height),
+ int(0.0359477 * gt_width): int(0.96405229 * gt_width),
+ ] = 1
+
+ eval_mask.reshape(valid_mask.shape)
+ valid_mask = torch.logical_and(valid_mask, eval_mask)
+ return valid_mask
diff --git a/FE2E/infer/dataset/nyu_dataset.py b/FE2E/infer/dataset/nyu_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..3d809764d9a845874682ab727149b52159f89a8e
--- /dev/null
+++ b/FE2E/infer/dataset/nyu_dataset.py
@@ -0,0 +1,43 @@
+# Author: Bingxin Ke
+# Last modified: 2024-02-08
+
+
+import torch
+
+from .base_depth_dataset import BaseDepthDataset, DepthFileNameMode
+
+
+class NYUDataset(BaseDepthDataset):
+ def __init__(
+ self,
+ eigen_valid_mask: bool,
+ **kwargs,
+ ) -> None:
+ super().__init__(
+ # NYUv2 dataset parameter
+ min_depth=1e-3,
+ max_depth=10.0,
+ has_filled_depth=True,
+ name_mode=DepthFileNameMode.rgb_id,
+ **kwargs,
+ )
+
+ self.eigen_valid_mask = eigen_valid_mask
+
+ def _read_depth_file(self, rel_path):
+ depth_in,_ = self._read_image(rel_path)
+ # Decode NYU depth
+ depth_decoded = depth_in / 1000.0
+ return depth_decoded
+
+ def _get_valid_mask(self, depth: torch.Tensor):
+ valid_mask = super()._get_valid_mask(depth)
+
+ # Eigen crop for evaluation
+ if self.eigen_valid_mask:
+ eval_mask = torch.zeros_like(valid_mask.squeeze()).bool()
+ eval_mask[45:471, 41:601] = 1
+ eval_mask.reshape(valid_mask.shape)
+ valid_mask = torch.logical_and(valid_mask, eval_mask)
+
+ return valid_mask
diff --git a/FE2E/infer/dataset/scannet_dataset.py b/FE2E/infer/dataset/scannet_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..f460d4bd5564b2d7be0e42caf5f3f52b72030c5a
--- /dev/null
+++ b/FE2E/infer/dataset/scannet_dataset.py
@@ -0,0 +1,25 @@
+# Author: Bingxin Ke
+# Last modified: 2024-02-08
+
+from .base_depth_dataset import BaseDepthDataset, DepthFileNameMode
+
+
+class ScanNetDataset(BaseDepthDataset):
+ def __init__(
+ self,
+ **kwargs,
+ ) -> None:
+ super().__init__(
+ # ScanNet data parameter
+ min_depth=1e-3,
+ max_depth=10,
+ has_filled_depth=False,
+ name_mode=DepthFileNameMode.id,
+ **kwargs,
+ )
+
+ def _read_depth_file(self, rel_path):
+ depth_in,_ = self._read_image(rel_path)
+ # Decode ScanNet depth
+ depth_decoded = depth_in / 1000.0
+ return depth_decoded
diff --git a/FE2E/infer/dataset_normal/__init__.py b/FE2E/infer/dataset_normal/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..fa59c8f842505001baa3f69d812a5afd2baf5c35
--- /dev/null
+++ b/FE2E/infer/dataset_normal/__init__.py
@@ -0,0 +1,27 @@
+""" data sample
+"""
+class Sample():
+ def __init__(self, img=None,
+ depth=None, depth_mask=None,
+ normal=None, normal_mask=None,
+ intrins=None, flipped=False,
+ dataset_name='dataset', scene_name='scene', img_name='img',
+ info={}):
+
+ self.img = img # input image
+
+ self.depth = depth # depth - GT
+ self.depth_mask = depth_mask # depth - valid_mask
+
+ self.normal = normal # surface normals - GT
+ self.normal_mask = normal_mask # surface normals - valid_mask
+
+ self.intrins = intrins # camera intrinsics
+ self.flipped = flipped # True when the image is flipped during augmentation
+
+ self.dataset_name = dataset_name
+ self.scene_name = scene_name
+ self.img_name = img_name
+
+ # other info (this is a dict containing any additional information)
+ self.info = info
\ No newline at end of file
diff --git a/FE2E/infer/dataset_normal/aug_basic.py b/FE2E/infer/dataset_normal/aug_basic.py
new file mode 100644
index 0000000000000000000000000000000000000000..1b92229f5bbadeefe2b3722f7cae5b955fb41f2c
--- /dev/null
+++ b/FE2E/infer/dataset_normal/aug_basic.py
@@ -0,0 +1,239 @@
+""" basic augmentations
+"""
+import random
+import numpy as np
+
+import torch
+from torchvision import transforms
+import torch.nn.functional as F
+import torchvision.transforms.functional as TF
+
+import logging
+logger = logging.getLogger('root')
+
+
+def resize(sample, new_H, new_W):
+ _, orig_H, orig_W = sample.img.shape
+ sample.img = F.interpolate(sample.img.unsqueeze(0), size=(new_H, new_W), mode='bilinear', align_corners=False, antialias=True).squeeze(0)
+ if sample.depth is not None:
+ sample.depth = F.interpolate(sample.depth.unsqueeze(0), size=(new_H, new_W), mode='nearest').squeeze(0)
+ if sample.depth_mask is not None:
+ sample.depth_mask = F.interpolate(sample.depth_mask.unsqueeze(0).float(), size=(new_H, new_W), mode='nearest').squeeze(0) > 0.5
+ if sample.normal is not None:
+ sample.normal = F.interpolate(sample.normal.unsqueeze(0), size=(new_H, new_W), mode='nearest').squeeze(0)
+ if sample.normal_mask is not None:
+ sample.normal_mask = F.interpolate(sample.normal_mask.unsqueeze(0).float(), size=(new_H, new_W), mode='nearest').squeeze(0) > 0.5
+ if sample.intrins is not None:
+ # NOTE: top-left is (0,0)
+ sample.intrins[0, 0] = sample.intrins[0, 0] * (new_W / orig_W) # fx
+ sample.intrins[1, 1] = sample.intrins[1, 1] * (new_H / orig_H) # fy
+ sample.intrins[0, 2] = (sample.intrins[0, 2] + 0.5) * (new_W / orig_W) - 0.5 # cx
+ sample.intrins[1, 2] = (sample.intrins[1, 2] + 0.5) * (new_H / orig_H) - 0.5 # cy
+ return sample
+
+
+def pad(sample, lrtb):
+ l, r, t, b = lrtb
+ sample.img = F.pad(sample.img, (l, r, t, b), mode="constant", value=0)
+ if sample.depth is not None:
+ sample.depth = F.pad(sample.depth, (l, r, t, b), mode="constant", value=0)
+ if sample.depth_mask is not None:
+ sample.depth_mask = F.pad(sample.depth_mask, (l, r, t, b), mode="constant", value=False)
+ if sample.normal is not None:
+ sample.normal = F.pad(sample.normal, (l, r, t, b), mode="constant", value=0)
+ if sample.normal_mask is not None:
+ sample.normal_mask = F.pad(sample.normal_mask, (l, r, t, b), mode="constant", value=False)
+ if sample.intrins is not None:
+ sample.intrins[0, 2] = sample.intrins[0, 2] + l
+ sample.intrins[1, 2] = sample.intrins[1, 2] + t
+ return sample
+
+
+def crop(sample, y, H, x, W):
+ sample.img = sample.img[:, y:y+H, x:x+W]
+ if sample.depth is not None:
+ sample.depth = sample.depth[:, y:y+H, x:x+W]
+ if sample.depth_mask is not None:
+ sample.depth_mask = sample.depth_mask[:, y:y+H, x:x+W]
+ if sample.normal is not None:
+ sample.normal = sample.normal[:, y:y+H, x:x+W]
+ if sample.normal_mask is not None:
+ sample.normal_mask = sample.normal_mask[:, y:y+H, x:x+W]
+ if sample.intrins is not None:
+ sample.intrins[0, 2] = sample.intrins[0, 2] - x
+ sample.intrins[1, 2] = sample.intrins[1, 2] - y
+ return sample
+
+
+class ToTensor():
+ """ numpy arrays to torch tensors
+ """
+ def __call__(self, sample):
+ sample.img = torch.from_numpy(sample.img).permute(2, 0, 1) # (3, H, W)
+ if sample.depth is not None:
+ sample.depth = torch.from_numpy(sample.depth).permute(2, 0, 1) # (1, H, W)
+ if sample.depth_mask is not None:
+ sample.depth_mask = torch.from_numpy(sample.depth_mask).permute(2, 0, 1) # (1, H, W)
+ if sample.normal is not None:
+ sample.normal = torch.from_numpy(sample.normal).permute(2, 0, 1) # (3, H, W)
+ if sample.normal_mask is not None:
+ sample.normal_mask = torch.from_numpy(sample.normal_mask).permute(2, 0, 1) # (1, H, W)
+ if sample.intrins is not None:
+ sample.intrins = torch.from_numpy(sample.intrins) # (3, 3)
+ return sample
+
+
+class RandomIntrins():
+ """ randomize intrinsics
+ sample.img is a torch tensor of shape (3, H, W), normalized to [0, 1]
+ """
+ def __call__(self, sample):
+ assert 'crop_H' in sample.info.keys()
+ assert 'crop_W' in sample.info.keys()
+ crop_H = sample.info['crop_H']
+ crop_W = sample.info['crop_W']
+
+ # height-based resizing
+ _, orig_H, orig_W = sample.img.shape
+ new_H = random.randrange(min(orig_H, crop_H), max(orig_H, crop_H)+1)
+ new_W = round((new_H / orig_H) * orig_W)
+ sample = resize(sample, new_H=new_H, new_W=new_W)
+
+ # pad if necessary
+ orig_H, orig_W = sample.img.shape[1], sample.img.shape[2]
+ l, r, t, b = 0, 0, 0, 0
+ if crop_H > orig_H:
+ t = b = crop_H - orig_H
+ if crop_W > orig_W:
+ l = r = crop_W - orig_W
+ sample = pad(sample, (l, r, t, b))
+
+ # crop
+ assert sample.img.shape[1] >= crop_H
+ assert sample.img.shape[2] >= crop_W
+ x = random.randint(0, sample.img.shape[2] - crop_W)
+ y = random.randint(0, sample.img.shape[1] - crop_H)
+ sample = crop(sample, y=y, H=crop_H, x=x, W=crop_W)
+
+ return sample
+
+
+class Resize():
+ """ resize to (H, W)
+ sample.img is a torch tensor of shape (3, H, W), normalized to [0, 1]
+ """
+ def __init__(self, H=480, W=640):
+ self.H = H
+ self.W = W
+
+ def __call__(self, sample):
+ return resize(sample, new_H=self.H, new_W=self.W)
+
+
+class RandomCrop():
+ """ random crop
+ sample.img is a torch tensor of shape (3, H, W), normalized to [0, 1]
+ """
+ def __init__(self, H=416, W=544):
+ self.H = H
+ self.W = W
+
+ def __call__(self, sample):
+ assert sample.img.shape[1] >= self.H
+ assert sample.img.shape[2] >= self.W
+ x = random.randint(0, sample.img.shape[2] - self.W)
+ y = random.randint(0, sample.img.shape[1] - self.H)
+ return crop(sample, y=y, H=self.H, x=x, W=self.W)
+
+
+class NyuCrop():
+ """ crop image border for NYUv2 images
+ W = 43:608 / H = 45:472
+ sample.img is a torch tensor of shape (3, H, W), normalized to [0, 1]
+ """
+ def __call__(self, sample):
+ return crop(sample, y=45, H=472-45, x=43, W=608-43)
+
+
+class HorizontalFlip():
+ """ random horizontal flipping
+ sample.img is a torch tensor of shape (3, H, W), normalized to [0, 1]
+ """
+ def __init__(self, p=0.5):
+ self.p = p
+
+ def __call__(self, sample):
+ if random.random() < self.p:
+ sample.img = TF.hflip(sample.img)
+ if sample.depth is not None:
+ sample.depth = TF.hflip(sample.depth)
+ if sample.depth_mask is not None:
+ sample.depth_mask = TF.hflip(sample.depth_mask)
+ if sample.normal is not None:
+ sample.normal = TF.hflip(sample.normal)
+ sample.normal[0, :, :] = -sample.normal[0, :, :]
+ if sample.normal_mask is not None:
+ sample.normal_mask = TF.hflip(sample.normal_mask)
+ if sample.intrins is not None:
+ # NOTE: top-left is (0,0)
+ _, H, W = sample.img.shape
+ sample.intrins[0, 2] = sample.intrins[0, 2] + 0.5 # top-left is (0.5, 0.5)
+ sample.intrins[0, 2] = W - sample.intrins[0, 2]
+ sample.intrins[0, 2] = sample.intrins[0, 2] - 0.5 # top-left is (0, 0)
+ sample.flipped = True
+ return sample
+
+
+class ColorAugmentation():
+ """ color augmentation
+ sample.img is a torch tensor of shape (3, H, W), normalized to [0, 1]
+ """
+ def __init__(self, gamma_range=(0.9, 1.1),
+ brightness_range=(0.75, 1.25),
+ color_range=(0.9, 1.1),
+ p=0.5):
+ self.gamma_range = gamma_range
+ self.brightness_range = brightness_range
+ self.color_range = color_range
+ self.p = p
+
+ def __call__(self, sample):
+ if random.random() < self.p:
+ # gamma augmentation
+ gamma = random.uniform(*self.gamma_range)
+ sample.img = sample.img ** gamma
+
+ # brightness augmentation
+ brightness = random.uniform(*self.brightness_range)
+ sample.img = sample.img * brightness
+
+ # color augmentation
+ colors = np.random.uniform(*self.color_range, size=3).astype(np.float32)
+ colors = torch.from_numpy(colors).view(3, 1, 1)
+ sample.img = sample.img * colors
+
+ # clip
+ sample.img = torch.clip(sample.img, 0, 1)
+
+ return sample
+
+
+class Normalize():
+ """ mean & std: for image normalization
+ sample.img is a torch tensor of shape (3, H, W), normalized to [0, 1]
+ """
+ def __init__(self, mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)):
+ self.normalize = transforms.Normalize(mean=mean, std=std)
+
+ def __call__(self, sample):
+ sample.img = self.normalize(torch.clip(sample.img, min=0.0, max=1.0))
+ return sample
+
+
+class ToDict():
+ def __call__(self, sample):
+ data_dict = {}
+ for k, v in vars(sample).items():
+ if v is not None:
+ data_dict[k] = v
+ return data_dict
diff --git a/FE2E/infer/dataset_normal/hypersim/__init__.py b/FE2E/infer/dataset_normal/hypersim/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..b68f395622b4007ea267b254a474843f570e2535
--- /dev/null
+++ b/FE2E/infer/dataset_normal/hypersim/__init__.py
@@ -0,0 +1,65 @@
+""" Get samples from Hypersim dataset
+ Based on vkitti implementation
+"""
+import os
+import cv2
+import numpy as np
+
+from infer.dataset_normal import Sample
+
+
+def get_sample(base_data_dir, sample_path, info):
+ # e.g. sample_path = "ai_001_001/rgb_cam_00_fr0000.png"
+ scene_name = sample_path.split('/')[0]
+ img_filename = sample_path.split('/')[1]
+
+ # Extract frame number from filename like "rgb_cam_00_fr0000.png"
+ frame_num = img_filename.split('_fr')[1].split('.')[0]
+
+ dataset_path = os.path.join(base_data_dir, 'dsine_eval', 'hypersim')
+ img_path = os.path.join(dataset_path, sample_path)
+
+ # Build corresponding normal path
+ normal_filename = f'depth_plane_cam_00_fr{frame_num}_1024x0768_normal_decoded_normal.png'
+ normal_path = os.path.join(dataset_path, scene_name, normal_filename)
+
+ assert os.path.exists(img_path), f"Image not found: {img_path}"
+ assert os.path.exists(normal_path), f"Normal not found: {normal_path}"
+
+ # read image (H, W, 3)
+ img = cv2.cvtColor(cv2.imread(img_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ img = img.astype(np.float32) / 255.0
+
+ # read normal (H, W, 3)
+ normal = cv2.cvtColor(cv2.imread(normal_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ normal_mask = np.sum(normal, axis=2, keepdims=True) > 0
+ normal = (normal.astype(np.float32) / 255.0) * 2.0 - 1.0
+
+ # Create default intrinsics since hypersim doesn't provide them
+ # Using typical values for 1024x768 resolution
+ H, W = img.shape[:2]
+ fx = fy = 0.8 * W # Typical focal length assumption
+ cx = W / 2.0
+ cy = H / 2.0
+ intrins = np.array([
+ [fx, 0, cx],
+ [0, fy, cy],
+ [0, 0, 1]
+ ], dtype=np.float32)
+
+ # Extract img_name for compatibility
+ img_name = img_filename.replace('.png', '')
+
+ sample = Sample(
+ img=img,
+ normal=normal,
+ normal_mask=normal_mask,
+ intrins=intrins,
+
+ dataset_name='hypersim',
+ scene_name=scene_name,
+ img_name=img_name,
+ info=info
+ )
+
+ return sample
\ No newline at end of file
diff --git a/FE2E/infer/dataset_normal/hypersim/split/hypersim.txt b/FE2E/infer/dataset_normal/hypersim/split/hypersim.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7626459795b37d209a969caca8cb63edd2789af3
--- /dev/null
+++ b/FE2E/infer/dataset_normal/hypersim/split/hypersim.txt
@@ -0,0 +1,98 @@
+ai_001_001/rgb_cam_00_fr0000.png
+ai_001_001/rgb_cam_00_fr0001.png
+ai_001_001/rgb_cam_00_fr0002.png
+ai_001_001/rgb_cam_00_fr0003.png
+ai_001_001/rgb_cam_00_fr0004.png
+ai_001_001/rgb_cam_00_fr0005.png
+ai_001_001/rgb_cam_00_fr0006.png
+ai_001_001/rgb_cam_00_fr0007.png
+ai_001_001/rgb_cam_00_fr0008.png
+ai_001_001/rgb_cam_00_fr0009.png
+ai_001_001/rgb_cam_00_fr0010.png
+ai_001_001/rgb_cam_00_fr0011.png
+ai_001_001/rgb_cam_00_fr0012.png
+ai_001_001/rgb_cam_00_fr0013.png
+ai_001_001/rgb_cam_00_fr0014.png
+ai_001_001/rgb_cam_00_fr0015.png
+ai_001_001/rgb_cam_00_fr0016.png
+ai_001_001/rgb_cam_00_fr0017.png
+ai_001_001/rgb_cam_00_fr0018.png
+ai_001_001/rgb_cam_00_fr0019.png
+ai_001_001/rgb_cam_00_fr0020.png
+ai_001_001/rgb_cam_00_fr0021.png
+ai_001_001/rgb_cam_00_fr0022.png
+ai_001_001/rgb_cam_00_fr0023.png
+ai_001_001/rgb_cam_00_fr0024.png
+ai_001_001/rgb_cam_00_fr0025.png
+ai_001_001/rgb_cam_00_fr0026.png
+ai_001_001/rgb_cam_00_fr0027.png
+ai_001_001/rgb_cam_00_fr0028.png
+ai_001_001/rgb_cam_00_fr0029.png
+ai_001_001/rgb_cam_00_fr0030.png
+ai_001_001/rgb_cam_00_fr0031.png
+ai_001_001/rgb_cam_00_fr0032.png
+ai_001_001/rgb_cam_00_fr0033.png
+ai_001_001/rgb_cam_00_fr0034.png
+ai_001_001/rgb_cam_00_fr0035.png
+ai_001_001/rgb_cam_00_fr0037.png
+ai_001_001/rgb_cam_00_fr0038.png
+ai_001_001/rgb_cam_00_fr0039.png
+ai_001_001/rgb_cam_00_fr0040.png
+ai_001_001/rgb_cam_00_fr0041.png
+ai_001_001/rgb_cam_00_fr0042.png
+ai_001_001/rgb_cam_00_fr0043.png
+ai_001_001/rgb_cam_00_fr0044.png
+ai_001_001/rgb_cam_00_fr0045.png
+ai_001_001/rgb_cam_00_fr0046.png
+ai_001_001/rgb_cam_00_fr0047.png
+ai_001_001/rgb_cam_00_fr0048.png
+ai_001_001/rgb_cam_00_fr0049.png
+ai_001_001/rgb_cam_00_fr0050.png
+ai_001_001/rgb_cam_00_fr0051.png
+ai_001_001/rgb_cam_00_fr0052.png
+ai_001_001/rgb_cam_00_fr0053.png
+ai_001_001/rgb_cam_00_fr0054.png
+ai_001_001/rgb_cam_00_fr0055.png
+ai_001_001/rgb_cam_00_fr0056.png
+ai_001_001/rgb_cam_00_fr0057.png
+ai_001_001/rgb_cam_00_fr0058.png
+ai_001_001/rgb_cam_00_fr0059.png
+ai_001_001/rgb_cam_00_fr0060.png
+ai_001_001/rgb_cam_00_fr0062.png
+ai_001_001/rgb_cam_00_fr0063.png
+ai_001_001/rgb_cam_00_fr0064.png
+ai_001_001/rgb_cam_00_fr0065.png
+ai_001_001/rgb_cam_00_fr0066.png
+ai_001_001/rgb_cam_00_fr0067.png
+ai_001_001/rgb_cam_00_fr0068.png
+ai_001_001/rgb_cam_00_fr0069.png
+ai_001_001/rgb_cam_00_fr0070.png
+ai_001_001/rgb_cam_00_fr0071.png
+ai_001_001/rgb_cam_00_fr0072.png
+ai_001_001/rgb_cam_00_fr0073.png
+ai_001_001/rgb_cam_00_fr0074.png
+ai_001_001/rgb_cam_00_fr0075.png
+ai_001_001/rgb_cam_00_fr0076.png
+ai_001_001/rgb_cam_00_fr0077.png
+ai_001_001/rgb_cam_00_fr0078.png
+ai_001_001/rgb_cam_00_fr0079.png
+ai_001_001/rgb_cam_00_fr0080.png
+ai_001_001/rgb_cam_00_fr0081.png
+ai_001_001/rgb_cam_00_fr0082.png
+ai_001_001/rgb_cam_00_fr0083.png
+ai_001_001/rgb_cam_00_fr0084.png
+ai_001_001/rgb_cam_00_fr0085.png
+ai_001_001/rgb_cam_00_fr0086.png
+ai_001_001/rgb_cam_00_fr0087.png
+ai_001_001/rgb_cam_00_fr0088.png
+ai_001_001/rgb_cam_00_fr0089.png
+ai_001_001/rgb_cam_00_fr0090.png
+ai_001_001/rgb_cam_00_fr0091.png
+ai_001_001/rgb_cam_00_fr0092.png
+ai_001_001/rgb_cam_00_fr0093.png
+ai_001_001/rgb_cam_00_fr0094.png
+ai_001_001/rgb_cam_00_fr0095.png
+ai_001_001/rgb_cam_00_fr0096.png
+ai_001_001/rgb_cam_00_fr0097.png
+ai_001_001/rgb_cam_00_fr0098.png
+ai_001_001/rgb_cam_00_fr0099.png
diff --git a/FE2E/infer/dataset_normal/ibims/__init__.py b/FE2E/infer/dataset_normal/ibims/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..447602eccdc43136ecb12137ad650c68fa8173c9
--- /dev/null
+++ b/FE2E/infer/dataset_normal/ibims/__init__.py
@@ -0,0 +1,47 @@
+""" Get samples from iBims-1 (https://paperswithcode.com/dataset/ibims-1)
+ NOTE: We computed the GT surface normals by doing discontinuity-aware plane fitting
+"""
+import os
+import cv2
+import numpy as np
+os.environ["OPENCV_IO_ENABLE_OPENEXR"]="1"
+
+from infer.dataset_normal import Sample
+
+def get_sample(base_data_dir, sample_path, info):
+ # e.g. sample_path = "ibims/corridor_01_img.png"
+ scene_name = sample_path.split('/')[0]
+ img_name, img_ext = sample_path.split('/')[1].split('_img')
+
+ dataset_path = os.path.join(base_data_dir, 'dsine_eval', 'ibims')
+ img_path = '%s/%s' % (dataset_path, sample_path)
+ normal_path = img_path.replace('_img'+img_ext, '_normal.exr')
+ intrins_path = img_path.replace('_img'+img_ext, '_intrins.npy')
+ assert os.path.exists(img_path)
+ assert os.path.exists(normal_path)
+ assert os.path.exists(intrins_path)
+
+ # read image (H, W, 3)
+ img = cv2.cvtColor(cv2.imread(img_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ img = img.astype(np.float32) / 255.0
+
+ # read normal (H, W, 3)
+ normal = cv2.cvtColor(cv2.imread(normal_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ normal_mask = np.linalg.norm(normal, axis=2, keepdims=True) > 0.5
+
+ # read intrins (3, 3)
+ intrins = np.load(intrins_path)
+
+ sample = Sample(
+ img=img,
+ normal=normal,
+ normal_mask=normal_mask,
+ intrins=intrins,
+
+ dataset_name='ibims',
+ scene_name=scene_name,
+ img_name=img_name,
+ info=info
+ )
+
+ return sample
\ No newline at end of file
diff --git a/FE2E/infer/dataset_normal/ibims/split/ibims.txt b/FE2E/infer/dataset_normal/ibims/split/ibims.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9cca93a5731b659bdcdf1106a7291631c9d74a95
--- /dev/null
+++ b/FE2E/infer/dataset_normal/ibims/split/ibims.txt
@@ -0,0 +1,100 @@
+ibims/corridor_01_img.png
+ibims/corridor_02_img.png
+ibims/corridor_03_img.png
+ibims/corridor_04_img.png
+ibims/corridor_05_img.png
+ibims/corridor_06_img.png
+ibims/corridor_07_img.png
+ibims/corridor_08_img.png
+ibims/corridor_09_img.png
+ibims/corridor_10_img.png
+ibims/factory_01_img.png
+ibims/factory_02_img.png
+ibims/factory_03_img.png
+ibims/factory_04_img.png
+ibims/factory_05_img.png
+ibims/factory_06_img.png
+ibims/factory_07_img.png
+ibims/factory_08_img.png
+ibims/kitchen_01_img.png
+ibims/kitchen_02_img.png
+ibims/kitchen_03_img.png
+ibims/kitchen_04_img.png
+ibims/kitchen_05_img.png
+ibims/kitchen_06_img.png
+ibims/kitchen_07_img.png
+ibims/kitchen_08_img.png
+ibims/lab_01_img.png
+ibims/lab_02_img.png
+ibims/lab_03_img.png
+ibims/lab_04_img.png
+ibims/lab_05_img.png
+ibims/lab_06_img.png
+ibims/lab_07_img.png
+ibims/lab_08_img.png
+ibims/lab_09_img.png
+ibims/lab_10_img.png
+ibims/lab_11_img.png
+ibims/lectureroom_01_img.png
+ibims/lectureroom_02_img.png
+ibims/lectureroom_03_img.png
+ibims/lectureroom_04_img.png
+ibims/lectureroom_05_img.png
+ibims/lectureroom_06_img.png
+ibims/lectureroom_07_img.png
+ibims/lectureroom_08_img.png
+ibims/lectureroom_09_img.png
+ibims/lectureroom_10_img.png
+ibims/livingroom_01_img.png
+ibims/livingroom_02_img.png
+ibims/livingroom_03_img.png
+ibims/livingroom_04_img.png
+ibims/livingroom_05_img.png
+ibims/livingroom_06_img.png
+ibims/livingroom_07_img.png
+ibims/livingroom_08_img.png
+ibims/livingroom_09_img.png
+ibims/livingroom_10_img.png
+ibims/livingroom_11_img.png
+ibims/livingroom_12_img.png
+ibims/livingroom_13_img.png
+ibims/livingroom_14_img.png
+ibims/livingroom_15_img.png
+ibims/meetingroom_01_img.png
+ibims/meetingroom_02_img.png
+ibims/meetingroom_03_img.png
+ibims/meetingroom_04_img.png
+ibims/meetingroom_05_img.png
+ibims/meetingroom_06_img.png
+ibims/meetingroom_07_img.png
+ibims/meetingroom_08_img.png
+ibims/office_01_img.png
+ibims/office_02_img.png
+ibims/office_03_img.png
+ibims/office_04_img.png
+ibims/office_05_img.png
+ibims/office_06_img.png
+ibims/office_07_img.png
+ibims/office_08_img.png
+ibims/restaurant_01_img.png
+ibims/restaurant_02_img.png
+ibims/restaurant_03_img.png
+ibims/restaurant_04_img.png
+ibims/restaurant_05_img.png
+ibims/restaurant_06_img.png
+ibims/restaurant_07_img.png
+ibims/restaurant_08_img.png
+ibims/restaurant_09_img.png
+ibims/restaurant_10_img.png
+ibims/restaurant_11_img.png
+ibims/restaurant_12_img.png
+ibims/restroom_01_img.png
+ibims/restroom_02_img.png
+ibims/storageroom_01_img.png
+ibims/storageroom_02_img.png
+ibims/storageroom_03_img.png
+ibims/storageroom_04_img.png
+ibims/storageroom_05_img.png
+ibims/storageroom_06_img.png
+ibims/storageroom_07_img.png
+ibims/storageroom_08_img.png
\ No newline at end of file
diff --git a/FE2E/infer/dataset_normal/normal_dataloader.py b/FE2E/infer/dataset_normal/normal_dataloader.py
new file mode 100644
index 0000000000000000000000000000000000000000..535a76e0370864d43aa3e64c7f0f0a933d659473
--- /dev/null
+++ b/FE2E/infer/dataset_normal/normal_dataloader.py
@@ -0,0 +1,83 @@
+import os
+import random
+
+import torch
+from torch.utils.data import Dataset
+from torch.utils.data import DataLoader
+from torchvision import transforms
+
+from . import aug_basic
+
+import logging
+logger = logging.getLogger('root')
+
+
+def get_transform(dataset_name='hypersim', mode='test'):
+ assert mode in ['test']
+ logger.info('Defining %s transform for %s dataset' % (mode, dataset_name))
+ tf_list = [
+ aug_basic.ToTensor(),
+ ]
+ tf_list += [
+ # 选项1:使用标准归一化 (如果启用,需要相应调整可视化代码)
+ # aug_basic.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]),
+ # 选项2:不使用归一化 (当前方案,配合修改后的unnormalize函数)
+ aug_basic.ToDict(),
+ ]
+ logger.info('Defining %s transform for %s dataset ... DONE' % (mode, dataset_name))
+ return transforms.Compose(tf_list)
+
+
+class NormalDataset(Dataset):
+ def __init__(self, base_data_dir, dataset_split_path, dataset_name='nyuv2', split='test', mode='test', epoch=0):
+ self.split = split
+ self.mode = mode
+ self.base_data_dir = base_data_dir
+ assert mode in ['test']
+
+ # data split
+ split_path = os.path.join(dataset_split_path, dataset_name, 'split', split+'.txt') # dataset_split_path: eval/dataset_normal/
+ assert os.path.exists(split_path)
+ with open(split_path, 'r') as f:
+ self.filenames = [i.strip() for i in f.readlines()]
+ self.split_path = split_path
+
+ # get_sample function
+ if dataset_name == 'nyuv2':
+ from infer.dataset_normal.nyuv2 import get_sample
+ elif dataset_name == 'scannet':
+ from infer.dataset_normal.scannet import get_sample
+ elif dataset_name == 'ibims':
+ from infer.dataset_normal.ibims import get_sample
+ elif dataset_name == 'sintel':
+ from infer.dataset_normal.sintel import get_sample
+ elif dataset_name == 'oasis':
+ from infer.dataset_normal.oasis import get_sample
+ elif dataset_name == 'hypersim':
+ from infer.dataset_normal.hypersim import get_sample
+ else:
+ raise NotImplementedError(f"Unsupported normal dataset: {dataset_name}")
+ self.get_sample = get_sample
+
+ # data preprocessing/augmentation
+ self.transform = get_transform(dataset_name=dataset_name, mode=mode)
+
+ def __len__(self):
+ return len(self.filenames)
+
+ def __getitem__(self, index):
+ info = {}
+
+ sample = self.transform(self.get_sample(
+ base_data_dir = self.base_data_dir,
+ sample_path=self.filenames[index],
+ info=info)
+ )
+
+ return sample
+
+class TestLoader(object):
+ def __init__(self, base_data_dir, dataset_split_path, dataset_name_test, test_split):
+ self.test_samples = NormalDataset(base_data_dir, dataset_split_path, dataset_name=dataset_name_test,
+ split=test_split, mode='test', epoch=0)
+ self.data = DataLoader(self.test_samples, 1, shuffle=False, num_workers=4, pin_memory=True)
diff --git a/FE2E/infer/dataset_normal/nyuv2/__init__.py b/FE2E/infer/dataset_normal/nyuv2/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..19ed835b4b5f7fc0cfbfbd3d92222645d027a746
--- /dev/null
+++ b/FE2E/infer/dataset_normal/nyuv2/__init__.py
@@ -0,0 +1,66 @@
+""" Get samples from NYUv2 (https://cs.nyu.edu/~fergus/datasets/nyu_depth_v2.html)
+ NOTE: GT surface normals are from GeoNet (CVPR 2018) - https://github.com/xjqi/GeoNet
+"""
+import os
+import cv2
+import numpy as np
+
+from infer.dataset_normal import Sample
+
+
+def get_sample(base_data_dir, sample_path, info):
+ # e.g. sample_path = "test/000000_img.png"
+ scene_name = sample_path.split('/')[0]
+ img_name, img_ext = sample_path.split('/')[1].split('_img')
+
+ dataset_path = os.path.join(base_data_dir, 'dsine_eval', 'nyuv2')
+ img_path = '%s/%s' % (dataset_path, sample_path)
+ normal_png_path = img_path.replace('_img'+img_ext, '_normal.png')
+ normal_npy_path = img_path.replace('_img'+img_ext, '_normal.npy')
+ intrins_path = img_path.replace('_img'+img_ext, '_intrins.npy')
+ assert os.path.exists(img_path)
+
+ # read image (H, W, 3)
+ img = cv2.cvtColor(cv2.imread(img_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ img = img.astype(np.float32) / 255.0
+ #保存图像
+ # cv2.imwrite(os.path.join(base_data_dir, img_name+'_img.png'), img*255)
+
+ # read normal (H, W, 3)
+ if os.path.exists(normal_png_path):
+ normal = cv2.cvtColor(cv2.imread(normal_png_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ normal_mask = np.sum(normal, axis=2, keepdims=True) > 0
+ normal = (normal.astype(np.float32) / 255.0) * 2.0 - 1.0
+ elif os.path.exists(normal_npy_path):
+ normal = np.load(normal_npy_path).astype(np.float32)
+ assert normal.ndim == 3 and normal.shape[2] == 3, f"Unexpected normal shape: {normal.shape}"
+ # GeoNet npy normals use opposite x-axis convention for this evaluation codepath.
+ normal[:, :, 0] *= -1.0
+ normal_mask = np.linalg.norm(normal, axis=2, keepdims=True) > 1e-6
+ else:
+ raise FileNotFoundError(f"Missing NYUv2 normal file: {normal_png_path} or {normal_npy_path}")
+
+ # read intrins (3, 3)
+ if os.path.exists(intrins_path):
+ intrins = np.load(intrins_path)
+ else:
+ # Fallback to NYUv2 default intrinsics used by many benchmarks.
+ intrins = np.array([
+ [518.8579, 0.0, 325.5824],
+ [0.0, 519.4696, 253.7362],
+ [0.0, 0.0, 1.0],
+ ], dtype=np.float32)
+
+ sample = Sample(
+ img=img,
+ normal=normal,
+ normal_mask=normal_mask,
+ intrins=intrins,
+
+ dataset_name='nyuv2',
+ scene_name=scene_name,
+ img_name=img_name,
+ info=info
+ )
+
+ return sample
diff --git a/FE2E/infer/dataset_normal/nyuv2/split/test.txt b/FE2E/infer/dataset_normal/nyuv2/split/test.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1ee98378c85a069a8fae059169a1118ad50712a3
--- /dev/null
+++ b/FE2E/infer/dataset_normal/nyuv2/split/test.txt
@@ -0,0 +1,654 @@
+test/000000_img.png
+test/000001_img.png
+test/000008_img.png
+test/000013_img.png
+test/000014_img.png
+test/000015_img.png
+test/000016_img.png
+test/000017_img.png
+test/000020_img.png
+test/000027_img.png
+test/000028_img.png
+test/000029_img.png
+test/000030_img.png
+test/000031_img.png
+test/000032_img.png
+test/000033_img.png
+test/000034_img.png
+test/000035_img.png
+test/000036_img.png
+test/000037_img.png
+test/000038_img.png
+test/000039_img.png
+test/000040_img.png
+test/000041_img.png
+test/000042_img.png
+test/000045_img.png
+test/000046_img.png
+test/000055_img.png
+test/000056_img.png
+test/000058_img.png
+test/000059_img.png
+test/000060_img.png
+test/000061_img.png
+test/000062_img.png
+test/000075_img.png
+test/000076_img.png
+test/000077_img.png
+test/000078_img.png
+test/000083_img.png
+test/000084_img.png
+test/000085_img.png
+test/000086_img.png
+test/000087_img.png
+test/000088_img.png
+test/000089_img.png
+test/000090_img.png
+test/000116_img.png
+test/000117_img.png
+test/000118_img.png
+test/000124_img.png
+test/000125_img.png
+test/000126_img.png
+test/000127_img.png
+test/000128_img.png
+test/000130_img.png
+test/000131_img.png
+test/000132_img.png
+test/000133_img.png
+test/000136_img.png
+test/000152_img.png
+test/000153_img.png
+test/000154_img.png
+test/000166_img.png
+test/000167_img.png
+test/000168_img.png
+test/000170_img.png
+test/000171_img.png
+test/000172_img.png
+test/000173_img.png
+test/000174_img.png
+test/000175_img.png
+test/000179_img.png
+test/000180_img.png
+test/000181_img.png
+test/000182_img.png
+test/000183_img.png
+test/000184_img.png
+test/000185_img.png
+test/000186_img.png
+test/000187_img.png
+test/000188_img.png
+test/000189_img.png
+test/000190_img.png
+test/000191_img.png
+test/000192_img.png
+test/000193_img.png
+test/000194_img.png
+test/000195_img.png
+test/000196_img.png
+test/000197_img.png
+test/000198_img.png
+test/000199_img.png
+test/000200_img.png
+test/000201_img.png
+test/000206_img.png
+test/000207_img.png
+test/000208_img.png
+test/000209_img.png
+test/000210_img.png
+test/000211_img.png
+test/000219_img.png
+test/000220_img.png
+test/000221_img.png
+test/000249_img.png
+test/000263_img.png
+test/000270_img.png
+test/000271_img.png
+test/000272_img.png
+test/000278_img.png
+test/000279_img.png
+test/000280_img.png
+test/000281_img.png
+test/000282_img.png
+test/000283_img.png
+test/000284_img.png
+test/000295_img.png
+test/000296_img.png
+test/000297_img.png
+test/000298_img.png
+test/000299_img.png
+test/000300_img.png
+test/000301_img.png
+test/000309_img.png
+test/000310_img.png
+test/000311_img.png
+test/000314_img.png
+test/000315_img.png
+test/000316_img.png
+test/000324_img.png
+test/000325_img.png
+test/000326_img.png
+test/000327_img.png
+test/000328_img.png
+test/000329_img.png
+test/000330_img.png
+test/000331_img.png
+test/000332_img.png
+test/000333_img.png
+test/000334_img.png
+test/000350_img.png
+test/000351_img.png
+test/000354_img.png
+test/000355_img.png
+test/000356_img.png
+test/000357_img.png
+test/000358_img.png
+test/000359_img.png
+test/000360_img.png
+test/000361_img.png
+test/000362_img.png
+test/000363_img.png
+test/000383_img.png
+test/000384_img.png
+test/000385_img.png
+test/000386_img.png
+test/000387_img.png
+test/000388_img.png
+test/000389_img.png
+test/000394_img.png
+test/000395_img.png
+test/000396_img.png
+test/000410_img.png
+test/000411_img.png
+test/000412_img.png
+test/000413_img.png
+test/000429_img.png
+test/000430_img.png
+test/000431_img.png
+test/000432_img.png
+test/000433_img.png
+test/000434_img.png
+test/000440_img.png
+test/000441_img.png
+test/000442_img.png
+test/000443_img.png
+test/000444_img.png
+test/000445_img.png
+test/000446_img.png
+test/000447_img.png
+test/000461_img.png
+test/000462_img.png
+test/000463_img.png
+test/000464_img.png
+test/000465_img.png
+test/000468_img.png
+test/000469_img.png
+test/000470_img.png
+test/000471_img.png
+test/000472_img.png
+test/000473_img.png
+test/000474_img.png
+test/000475_img.png
+test/000476_img.png
+test/000507_img.png
+test/000508_img.png
+test/000509_img.png
+test/000510_img.png
+test/000511_img.png
+test/000512_img.png
+test/000514_img.png
+test/000515_img.png
+test/000516_img.png
+test/000517_img.png
+test/000518_img.png
+test/000519_img.png
+test/000520_img.png
+test/000521_img.png
+test/000522_img.png
+test/000523_img.png
+test/000524_img.png
+test/000525_img.png
+test/000530_img.png
+test/000531_img.png
+test/000532_img.png
+test/000536_img.png
+test/000537_img.png
+test/000538_img.png
+test/000548_img.png
+test/000549_img.png
+test/000550_img.png
+test/000554_img.png
+test/000555_img.png
+test/000556_img.png
+test/000557_img.png
+test/000558_img.png
+test/000559_img.png
+test/000560_img.png
+test/000561_img.png
+test/000562_img.png
+test/000563_img.png
+test/000564_img.png
+test/000565_img.png
+test/000566_img.png
+test/000567_img.png
+test/000568_img.png
+test/000569_img.png
+test/000570_img.png
+test/000578_img.png
+test/000579_img.png
+test/000580_img.png
+test/000581_img.png
+test/000582_img.png
+test/000590_img.png
+test/000591_img.png
+test/000592_img.png
+test/000593_img.png
+test/000602_img.png
+test/000603_img.png
+test/000604_img.png
+test/000605_img.png
+test/000606_img.png
+test/000611_img.png
+test/000612_img.png
+test/000616_img.png
+test/000617_img.png
+test/000618_img.png
+test/000619_img.png
+test/000620_img.png
+test/000632_img.png
+test/000633_img.png
+test/000634_img.png
+test/000635_img.png
+test/000636_img.png
+test/000637_img.png
+test/000643_img.png
+test/000644_img.png
+test/000649_img.png
+test/000650_img.png
+test/000655_img.png
+test/000656_img.png
+test/000657_img.png
+test/000662_img.png
+test/000663_img.png
+test/000667_img.png
+test/000668_img.png
+test/000669_img.png
+test/000670_img.png
+test/000671_img.png
+test/000672_img.png
+test/000675_img.png
+test/000676_img.png
+test/000677_img.png
+test/000678_img.png
+test/000679_img.png
+test/000680_img.png
+test/000685_img.png
+test/000686_img.png
+test/000687_img.png
+test/000688_img.png
+test/000689_img.png
+test/000692_img.png
+test/000693_img.png
+test/000696_img.png
+test/000697_img.png
+test/000698_img.png
+test/000705_img.png
+test/000706_img.png
+test/000707_img.png
+test/000708_img.png
+test/000709_img.png
+test/000710_img.png
+test/000711_img.png
+test/000712_img.png
+test/000716_img.png
+test/000717_img.png
+test/000723_img.png
+test/000724_img.png
+test/000725_img.png
+test/000726_img.png
+test/000727_img.png
+test/000730_img.png
+test/000731_img.png
+test/000732_img.png
+test/000733_img.png
+test/000742_img.png
+test/000743_img.png
+test/000758_img.png
+test/000759_img.png
+test/000760_img.png
+test/000761_img.png
+test/000762_img.png
+test/000763_img.png
+test/000764_img.png
+test/000765_img.png
+test/000766_img.png
+test/000767_img.png
+test/000768_img.png
+test/000769_img.png
+test/000770_img.png
+test/000771_img.png
+test/000772_img.png
+test/000773_img.png
+test/000774_img.png
+test/000775_img.png
+test/000776_img.png
+test/000777_img.png
+test/000778_img.png
+test/000779_img.png
+test/000780_img.png
+test/000781_img.png
+test/000782_img.png
+test/000783_img.png
+test/000784_img.png
+test/000785_img.png
+test/000786_img.png
+test/000799_img.png
+test/000800_img.png
+test/000801_img.png
+test/000802_img.png
+test/000803_img.png
+test/000809_img.png
+test/000810_img.png
+test/000811_img.png
+test/000812_img.png
+test/000813_img.png
+test/000820_img.png
+test/000821_img.png
+test/000822_img.png
+test/000832_img.png
+test/000833_img.png
+test/000834_img.png
+test/000835_img.png
+test/000836_img.png
+test/000837_img.png
+test/000838_img.png
+test/000839_img.png
+test/000840_img.png
+test/000841_img.png
+test/000842_img.png
+test/000843_img.png
+test/000844_img.png
+test/000845_img.png
+test/000849_img.png
+test/000850_img.png
+test/000851_img.png
+test/000856_img.png
+test/000857_img.png
+test/000858_img.png
+test/000859_img.png
+test/000860_img.png
+test/000861_img.png
+test/000868_img.png
+test/000869_img.png
+test/000870_img.png
+test/000905_img.png
+test/000906_img.png
+test/000907_img.png
+test/000916_img.png
+test/000917_img.png
+test/000918_img.png
+test/000925_img.png
+test/000926_img.png
+test/000927_img.png
+test/000931_img.png
+test/000932_img.png
+test/000933_img.png
+test/000934_img.png
+test/000944_img.png
+test/000945_img.png
+test/000946_img.png
+test/000958_img.png
+test/000959_img.png
+test/000960_img.png
+test/000961_img.png
+test/000964_img.png
+test/000965_img.png
+test/000966_img.png
+test/000969_img.png
+test/000970_img.png
+test/000971_img.png
+test/000972_img.png
+test/000973_img.png
+test/000974_img.png
+test/000975_img.png
+test/000976_img.png
+test/000990_img.png
+test/000991_img.png
+test/000992_img.png
+test/000993_img.png
+test/000994_img.png
+test/001000_img.png
+test/001001_img.png
+test/001002_img.png
+test/001003_img.png
+test/001009_img.png
+test/001010_img.png
+test/001011_img.png
+test/001020_img.png
+test/001021_img.png
+test/001022_img.png
+test/001031_img.png
+test/001032_img.png
+test/001033_img.png
+test/001037_img.png
+test/001038_img.png
+test/001047_img.png
+test/001048_img.png
+test/001051_img.png
+test/001052_img.png
+test/001056_img.png
+test/001057_img.png
+test/001074_img.png
+test/001075_img.png
+test/001076_img.png
+test/001077_img.png
+test/001078_img.png
+test/001079_img.png
+test/001080_img.png
+test/001081_img.png
+test/001082_img.png
+test/001083_img.png
+test/001087_img.png
+test/001088_img.png
+test/001089_img.png
+test/001090_img.png
+test/001091_img.png
+test/001092_img.png
+test/001093_img.png
+test/001094_img.png
+test/001095_img.png
+test/001097_img.png
+test/001098_img.png
+test/001099_img.png
+test/001100_img.png
+test/001101_img.png
+test/001102_img.png
+test/001103_img.png
+test/001105_img.png
+test/001106_img.png
+test/001107_img.png
+test/001108_img.png
+test/001116_img.png
+test/001117_img.png
+test/001118_img.png
+test/001122_img.png
+test/001123_img.png
+test/001124_img.png
+test/001125_img.png
+test/001126_img.png
+test/001127_img.png
+test/001128_img.png
+test/001129_img.png
+test/001130_img.png
+test/001134_img.png
+test/001135_img.png
+test/001143_img.png
+test/001144_img.png
+test/001145_img.png
+test/001146_img.png
+test/001147_img.png
+test/001148_img.png
+test/001149_img.png
+test/001150_img.png
+test/001151_img.png
+test/001152_img.png
+test/001153_img.png
+test/001154_img.png
+test/001155_img.png
+test/001156_img.png
+test/001157_img.png
+test/001161_img.png
+test/001162_img.png
+test/001163_img.png
+test/001164_img.png
+test/001165_img.png
+test/001166_img.png
+test/001169_img.png
+test/001170_img.png
+test/001173_img.png
+test/001174_img.png
+test/001175_img.png
+test/001178_img.png
+test/001179_img.png
+test/001180_img.png
+test/001181_img.png
+test/001182_img.png
+test/001183_img.png
+test/001191_img.png
+test/001192_img.png
+test/001193_img.png
+test/001194_img.png
+test/001195_img.png
+test/001200_img.png
+test/001201_img.png
+test/001202_img.png
+test/001203_img.png
+test/001204_img.png
+test/001205_img.png
+test/001206_img.png
+test/001207_img.png
+test/001208_img.png
+test/001209_img.png
+test/001210_img.png
+test/001211_img.png
+test/001215_img.png
+test/001216_img.png
+test/001217_img.png
+test/001218_img.png
+test/001219_img.png
+test/001225_img.png
+test/001226_img.png
+test/001227_img.png
+test/001228_img.png
+test/001229_img.png
+test/001232_img.png
+test/001233_img.png
+test/001234_img.png
+test/001246_img.png
+test/001247_img.png
+test/001248_img.png
+test/001249_img.png
+test/001253_img.png
+test/001254_img.png
+test/001255_img.png
+test/001256_img.png
+test/001257_img.png
+test/001258_img.png
+test/001259_img.png
+test/001260_img.png
+test/001261_img.png
+test/001262_img.png
+test/001263_img.png
+test/001264_img.png
+test/001274_img.png
+test/001275_img.png
+test/001276_img.png
+test/001277_img.png
+test/001278_img.png
+test/001279_img.png
+test/001284_img.png
+test/001285_img.png
+test/001286_img.png
+test/001287_img.png
+test/001288_img.png
+test/001289_img.png
+test/001290_img.png
+test/001291_img.png
+test/001292_img.png
+test/001293_img.png
+test/001294_img.png
+test/001296_img.png
+test/001297_img.png
+test/001298_img.png
+test/001301_img.png
+test/001302_img.png
+test/001303_img.png
+test/001304_img.png
+test/001305_img.png
+test/001306_img.png
+test/001307_img.png
+test/001313_img.png
+test/001314_img.png
+test/001328_img.png
+test/001329_img.png
+test/001330_img.png
+test/001331_img.png
+test/001334_img.png
+test/001335_img.png
+test/001336_img.png
+test/001337_img.png
+test/001338_img.png
+test/001339_img.png
+test/001346_img.png
+test/001347_img.png
+test/001348_img.png
+test/001352_img.png
+test/001353_img.png
+test/001354_img.png
+test/001355_img.png
+test/001363_img.png
+test/001364_img.png
+test/001367_img.png
+test/001368_img.png
+test/001383_img.png
+test/001384_img.png
+test/001385_img.png
+test/001386_img.png
+test/001387_img.png
+test/001388_img.png
+test/001389_img.png
+test/001390_img.png
+test/001393_img.png
+test/001394_img.png
+test/001395_img.png
+test/001396_img.png
+test/001397_img.png
+test/001398_img.png
+test/001399_img.png
+test/001400_img.png
+test/001406_img.png
+test/001407_img.png
+test/001408_img.png
+test/001409_img.png
+test/001410_img.png
+test/001411_img.png
+test/001412_img.png
+test/001413_img.png
+test/001420_img.png
+test/001421_img.png
+test/001422_img.png
+test/001423_img.png
+test/001429_img.png
+test/001430_img.png
+test/001431_img.png
+test/001432_img.png
+test/001440_img.png
+test/001441_img.png
+test/001442_img.png
+test/001443_img.png
+test/001444_img.png
+test/001445_img.png
+test/001446_img.png
+test/001447_img.png
+test/001448_img.png
\ No newline at end of file
diff --git a/FE2E/infer/dataset_normal/nyuv2/split/train.txt b/FE2E/infer/dataset_normal/nyuv2/split/train.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f03309626327e00831f870c666871f6fe2c9e890
--- /dev/null
+++ b/FE2E/infer/dataset_normal/nyuv2/split/train.txt
@@ -0,0 +1,795 @@
+train/000002_img.png
+train/000003_img.png
+train/000004_img.png
+train/000005_img.png
+train/000006_img.png
+train/000007_img.png
+train/000009_img.png
+train/000010_img.png
+train/000011_img.png
+train/000012_img.png
+train/000018_img.png
+train/000019_img.png
+train/000021_img.png
+train/000022_img.png
+train/000023_img.png
+train/000024_img.png
+train/000025_img.png
+train/000026_img.png
+train/000043_img.png
+train/000044_img.png
+train/000047_img.png
+train/000048_img.png
+train/000049_img.png
+train/000050_img.png
+train/000051_img.png
+train/000052_img.png
+train/000053_img.png
+train/000054_img.png
+train/000057_img.png
+train/000063_img.png
+train/000064_img.png
+train/000065_img.png
+train/000066_img.png
+train/000067_img.png
+train/000068_img.png
+train/000069_img.png
+train/000070_img.png
+train/000071_img.png
+train/000072_img.png
+train/000073_img.png
+train/000074_img.png
+train/000079_img.png
+train/000080_img.png
+train/000081_img.png
+train/000082_img.png
+train/000091_img.png
+train/000092_img.png
+train/000093_img.png
+train/000094_img.png
+train/000095_img.png
+train/000096_img.png
+train/000097_img.png
+train/000098_img.png
+train/000099_img.png
+train/000100_img.png
+train/000101_img.png
+train/000102_img.png
+train/000103_img.png
+train/000104_img.png
+train/000105_img.png
+train/000106_img.png
+train/000107_img.png
+train/000108_img.png
+train/000109_img.png
+train/000110_img.png
+train/000111_img.png
+train/000112_img.png
+train/000113_img.png
+train/000114_img.png
+train/000115_img.png
+train/000119_img.png
+train/000120_img.png
+train/000121_img.png
+train/000122_img.png
+train/000123_img.png
+train/000129_img.png
+train/000134_img.png
+train/000135_img.png
+train/000137_img.png
+train/000138_img.png
+train/000139_img.png
+train/000140_img.png
+train/000141_img.png
+train/000142_img.png
+train/000143_img.png
+train/000144_img.png
+train/000145_img.png
+train/000146_img.png
+train/000147_img.png
+train/000148_img.png
+train/000149_img.png
+train/000150_img.png
+train/000151_img.png
+train/000155_img.png
+train/000156_img.png
+train/000157_img.png
+train/000158_img.png
+train/000159_img.png
+train/000160_img.png
+train/000161_img.png
+train/000162_img.png
+train/000163_img.png
+train/000164_img.png
+train/000165_img.png
+train/000169_img.png
+train/000176_img.png
+train/000177_img.png
+train/000178_img.png
+train/000202_img.png
+train/000203_img.png
+train/000204_img.png
+train/000205_img.png
+train/000212_img.png
+train/000213_img.png
+train/000214_img.png
+train/000215_img.png
+train/000216_img.png
+train/000217_img.png
+train/000218_img.png
+train/000222_img.png
+train/000223_img.png
+train/000224_img.png
+train/000225_img.png
+train/000226_img.png
+train/000227_img.png
+train/000228_img.png
+train/000229_img.png
+train/000230_img.png
+train/000231_img.png
+train/000232_img.png
+train/000233_img.png
+train/000234_img.png
+train/000235_img.png
+train/000236_img.png
+train/000237_img.png
+train/000238_img.png
+train/000239_img.png
+train/000240_img.png
+train/000241_img.png
+train/000242_img.png
+train/000243_img.png
+train/000244_img.png
+train/000245_img.png
+train/000246_img.png
+train/000247_img.png
+train/000248_img.png
+train/000250_img.png
+train/000251_img.png
+train/000252_img.png
+train/000253_img.png
+train/000254_img.png
+train/000255_img.png
+train/000256_img.png
+train/000257_img.png
+train/000258_img.png
+train/000259_img.png
+train/000260_img.png
+train/000261_img.png
+train/000262_img.png
+train/000264_img.png
+train/000265_img.png
+train/000266_img.png
+train/000267_img.png
+train/000268_img.png
+train/000269_img.png
+train/000273_img.png
+train/000274_img.png
+train/000275_img.png
+train/000276_img.png
+train/000277_img.png
+train/000285_img.png
+train/000286_img.png
+train/000287_img.png
+train/000288_img.png
+train/000289_img.png
+train/000290_img.png
+train/000291_img.png
+train/000292_img.png
+train/000293_img.png
+train/000294_img.png
+train/000302_img.png
+train/000303_img.png
+train/000304_img.png
+train/000305_img.png
+train/000306_img.png
+train/000307_img.png
+train/000308_img.png
+train/000312_img.png
+train/000313_img.png
+train/000317_img.png
+train/000318_img.png
+train/000319_img.png
+train/000320_img.png
+train/000321_img.png
+train/000322_img.png
+train/000323_img.png
+train/000335_img.png
+train/000336_img.png
+train/000337_img.png
+train/000338_img.png
+train/000339_img.png
+train/000340_img.png
+train/000341_img.png
+train/000342_img.png
+train/000343_img.png
+train/000344_img.png
+train/000345_img.png
+train/000346_img.png
+train/000347_img.png
+train/000348_img.png
+train/000349_img.png
+train/000352_img.png
+train/000353_img.png
+train/000364_img.png
+train/000365_img.png
+train/000366_img.png
+train/000367_img.png
+train/000368_img.png
+train/000369_img.png
+train/000370_img.png
+train/000371_img.png
+train/000372_img.png
+train/000373_img.png
+train/000374_img.png
+train/000375_img.png
+train/000376_img.png
+train/000377_img.png
+train/000378_img.png
+train/000379_img.png
+train/000380_img.png
+train/000381_img.png
+train/000382_img.png
+train/000390_img.png
+train/000391_img.png
+train/000392_img.png
+train/000393_img.png
+train/000397_img.png
+train/000398_img.png
+train/000399_img.png
+train/000400_img.png
+train/000401_img.png
+train/000402_img.png
+train/000403_img.png
+train/000404_img.png
+train/000405_img.png
+train/000406_img.png
+train/000407_img.png
+train/000408_img.png
+train/000409_img.png
+train/000414_img.png
+train/000415_img.png
+train/000416_img.png
+train/000417_img.png
+train/000418_img.png
+train/000419_img.png
+train/000420_img.png
+train/000421_img.png
+train/000422_img.png
+train/000423_img.png
+train/000424_img.png
+train/000425_img.png
+train/000426_img.png
+train/000427_img.png
+train/000428_img.png
+train/000435_img.png
+train/000436_img.png
+train/000437_img.png
+train/000438_img.png
+train/000439_img.png
+train/000448_img.png
+train/000449_img.png
+train/000450_img.png
+train/000451_img.png
+train/000452_img.png
+train/000453_img.png
+train/000454_img.png
+train/000455_img.png
+train/000456_img.png
+train/000457_img.png
+train/000458_img.png
+train/000459_img.png
+train/000460_img.png
+train/000466_img.png
+train/000467_img.png
+train/000477_img.png
+train/000478_img.png
+train/000479_img.png
+train/000480_img.png
+train/000481_img.png
+train/000482_img.png
+train/000483_img.png
+train/000484_img.png
+train/000485_img.png
+train/000486_img.png
+train/000487_img.png
+train/000488_img.png
+train/000489_img.png
+train/000490_img.png
+train/000491_img.png
+train/000492_img.png
+train/000493_img.png
+train/000494_img.png
+train/000495_img.png
+train/000496_img.png
+train/000497_img.png
+train/000498_img.png
+train/000499_img.png
+train/000500_img.png
+train/000501_img.png
+train/000502_img.png
+train/000503_img.png
+train/000504_img.png
+train/000505_img.png
+train/000506_img.png
+train/000513_img.png
+train/000526_img.png
+train/000527_img.png
+train/000528_img.png
+train/000529_img.png
+train/000533_img.png
+train/000534_img.png
+train/000535_img.png
+train/000539_img.png
+train/000540_img.png
+train/000541_img.png
+train/000542_img.png
+train/000543_img.png
+train/000544_img.png
+train/000545_img.png
+train/000546_img.png
+train/000547_img.png
+train/000551_img.png
+train/000552_img.png
+train/000553_img.png
+train/000571_img.png
+train/000572_img.png
+train/000573_img.png
+train/000574_img.png
+train/000575_img.png
+train/000576_img.png
+train/000577_img.png
+train/000583_img.png
+train/000584_img.png
+train/000585_img.png
+train/000586_img.png
+train/000587_img.png
+train/000588_img.png
+train/000589_img.png
+train/000594_img.png
+train/000595_img.png
+train/000596_img.png
+train/000597_img.png
+train/000598_img.png
+train/000599_img.png
+train/000600_img.png
+train/000601_img.png
+train/000607_img.png
+train/000608_img.png
+train/000609_img.png
+train/000610_img.png
+train/000613_img.png
+train/000614_img.png
+train/000615_img.png
+train/000621_img.png
+train/000622_img.png
+train/000623_img.png
+train/000624_img.png
+train/000625_img.png
+train/000626_img.png
+train/000627_img.png
+train/000628_img.png
+train/000629_img.png
+train/000630_img.png
+train/000631_img.png
+train/000638_img.png
+train/000639_img.png
+train/000640_img.png
+train/000641_img.png
+train/000642_img.png
+train/000645_img.png
+train/000646_img.png
+train/000647_img.png
+train/000648_img.png
+train/000651_img.png
+train/000652_img.png
+train/000653_img.png
+train/000654_img.png
+train/000658_img.png
+train/000659_img.png
+train/000660_img.png
+train/000661_img.png
+train/000664_img.png
+train/000665_img.png
+train/000666_img.png
+train/000673_img.png
+train/000674_img.png
+train/000681_img.png
+train/000682_img.png
+train/000683_img.png
+train/000684_img.png
+train/000690_img.png
+train/000691_img.png
+train/000694_img.png
+train/000695_img.png
+train/000699_img.png
+train/000700_img.png
+train/000701_img.png
+train/000702_img.png
+train/000703_img.png
+train/000704_img.png
+train/000713_img.png
+train/000714_img.png
+train/000715_img.png
+train/000718_img.png
+train/000719_img.png
+train/000720_img.png
+train/000721_img.png
+train/000722_img.png
+train/000728_img.png
+train/000729_img.png
+train/000734_img.png
+train/000735_img.png
+train/000736_img.png
+train/000737_img.png
+train/000738_img.png
+train/000739_img.png
+train/000740_img.png
+train/000741_img.png
+train/000744_img.png
+train/000745_img.png
+train/000746_img.png
+train/000747_img.png
+train/000748_img.png
+train/000749_img.png
+train/000750_img.png
+train/000751_img.png
+train/000752_img.png
+train/000753_img.png
+train/000754_img.png
+train/000755_img.png
+train/000756_img.png
+train/000757_img.png
+train/000787_img.png
+train/000788_img.png
+train/000789_img.png
+train/000790_img.png
+train/000791_img.png
+train/000792_img.png
+train/000793_img.png
+train/000794_img.png
+train/000795_img.png
+train/000796_img.png
+train/000797_img.png
+train/000798_img.png
+train/000804_img.png
+train/000805_img.png
+train/000806_img.png
+train/000807_img.png
+train/000808_img.png
+train/000814_img.png
+train/000815_img.png
+train/000816_img.png
+train/000817_img.png
+train/000818_img.png
+train/000819_img.png
+train/000823_img.png
+train/000824_img.png
+train/000825_img.png
+train/000826_img.png
+train/000827_img.png
+train/000828_img.png
+train/000829_img.png
+train/000830_img.png
+train/000831_img.png
+train/000846_img.png
+train/000847_img.png
+train/000848_img.png
+train/000852_img.png
+train/000853_img.png
+train/000854_img.png
+train/000855_img.png
+train/000862_img.png
+train/000863_img.png
+train/000864_img.png
+train/000865_img.png
+train/000866_img.png
+train/000867_img.png
+train/000871_img.png
+train/000872_img.png
+train/000873_img.png
+train/000874_img.png
+train/000875_img.png
+train/000876_img.png
+train/000877_img.png
+train/000878_img.png
+train/000879_img.png
+train/000880_img.png
+train/000881_img.png
+train/000882_img.png
+train/000883_img.png
+train/000884_img.png
+train/000885_img.png
+train/000886_img.png
+train/000887_img.png
+train/000888_img.png
+train/000889_img.png
+train/000890_img.png
+train/000891_img.png
+train/000892_img.png
+train/000893_img.png
+train/000894_img.png
+train/000895_img.png
+train/000896_img.png
+train/000897_img.png
+train/000898_img.png
+train/000899_img.png
+train/000900_img.png
+train/000901_img.png
+train/000902_img.png
+train/000903_img.png
+train/000904_img.png
+train/000908_img.png
+train/000909_img.png
+train/000910_img.png
+train/000911_img.png
+train/000912_img.png
+train/000913_img.png
+train/000914_img.png
+train/000915_img.png
+train/000919_img.png
+train/000920_img.png
+train/000921_img.png
+train/000922_img.png
+train/000923_img.png
+train/000924_img.png
+train/000928_img.png
+train/000929_img.png
+train/000930_img.png
+train/000935_img.png
+train/000936_img.png
+train/000937_img.png
+train/000938_img.png
+train/000939_img.png
+train/000940_img.png
+train/000941_img.png
+train/000942_img.png
+train/000943_img.png
+train/000947_img.png
+train/000948_img.png
+train/000949_img.png
+train/000950_img.png
+train/000951_img.png
+train/000952_img.png
+train/000953_img.png
+train/000954_img.png
+train/000955_img.png
+train/000956_img.png
+train/000957_img.png
+train/000962_img.png
+train/000963_img.png
+train/000967_img.png
+train/000968_img.png
+train/000977_img.png
+train/000978_img.png
+train/000979_img.png
+train/000980_img.png
+train/000981_img.png
+train/000982_img.png
+train/000983_img.png
+train/000984_img.png
+train/000985_img.png
+train/000986_img.png
+train/000987_img.png
+train/000988_img.png
+train/000989_img.png
+train/000995_img.png
+train/000996_img.png
+train/000997_img.png
+train/000998_img.png
+train/000999_img.png
+train/001004_img.png
+train/001005_img.png
+train/001006_img.png
+train/001007_img.png
+train/001008_img.png
+train/001012_img.png
+train/001013_img.png
+train/001014_img.png
+train/001015_img.png
+train/001016_img.png
+train/001017_img.png
+train/001018_img.png
+train/001019_img.png
+train/001023_img.png
+train/001024_img.png
+train/001025_img.png
+train/001026_img.png
+train/001027_img.png
+train/001028_img.png
+train/001029_img.png
+train/001030_img.png
+train/001034_img.png
+train/001035_img.png
+train/001036_img.png
+train/001039_img.png
+train/001040_img.png
+train/001041_img.png
+train/001042_img.png
+train/001043_img.png
+train/001044_img.png
+train/001045_img.png
+train/001046_img.png
+train/001049_img.png
+train/001050_img.png
+train/001053_img.png
+train/001054_img.png
+train/001055_img.png
+train/001058_img.png
+train/001059_img.png
+train/001060_img.png
+train/001061_img.png
+train/001062_img.png
+train/001063_img.png
+train/001064_img.png
+train/001065_img.png
+train/001066_img.png
+train/001067_img.png
+train/001068_img.png
+train/001069_img.png
+train/001070_img.png
+train/001071_img.png
+train/001072_img.png
+train/001073_img.png
+train/001084_img.png
+train/001085_img.png
+train/001086_img.png
+train/001096_img.png
+train/001104_img.png
+train/001109_img.png
+train/001110_img.png
+train/001111_img.png
+train/001112_img.png
+train/001113_img.png
+train/001114_img.png
+train/001115_img.png
+train/001119_img.png
+train/001120_img.png
+train/001121_img.png
+train/001131_img.png
+train/001132_img.png
+train/001133_img.png
+train/001136_img.png
+train/001137_img.png
+train/001138_img.png
+train/001139_img.png
+train/001140_img.png
+train/001141_img.png
+train/001142_img.png
+train/001158_img.png
+train/001159_img.png
+train/001160_img.png
+train/001167_img.png
+train/001168_img.png
+train/001171_img.png
+train/001172_img.png
+train/001176_img.png
+train/001177_img.png
+train/001184_img.png
+train/001185_img.png
+train/001186_img.png
+train/001187_img.png
+train/001188_img.png
+train/001189_img.png
+train/001190_img.png
+train/001196_img.png
+train/001197_img.png
+train/001198_img.png
+train/001199_img.png
+train/001212_img.png
+train/001213_img.png
+train/001214_img.png
+train/001220_img.png
+train/001221_img.png
+train/001222_img.png
+train/001223_img.png
+train/001224_img.png
+train/001230_img.png
+train/001231_img.png
+train/001235_img.png
+train/001236_img.png
+train/001237_img.png
+train/001238_img.png
+train/001239_img.png
+train/001240_img.png
+train/001241_img.png
+train/001242_img.png
+train/001243_img.png
+train/001244_img.png
+train/001245_img.png
+train/001250_img.png
+train/001251_img.png
+train/001252_img.png
+train/001265_img.png
+train/001266_img.png
+train/001267_img.png
+train/001268_img.png
+train/001269_img.png
+train/001270_img.png
+train/001271_img.png
+train/001272_img.png
+train/001273_img.png
+train/001280_img.png
+train/001281_img.png
+train/001282_img.png
+train/001283_img.png
+train/001295_img.png
+train/001299_img.png
+train/001300_img.png
+train/001308_img.png
+train/001309_img.png
+train/001310_img.png
+train/001311_img.png
+train/001312_img.png
+train/001315_img.png
+train/001316_img.png
+train/001317_img.png
+train/001318_img.png
+train/001319_img.png
+train/001320_img.png
+train/001321_img.png
+train/001322_img.png
+train/001323_img.png
+train/001324_img.png
+train/001325_img.png
+train/001326_img.png
+train/001327_img.png
+train/001332_img.png
+train/001333_img.png
+train/001340_img.png
+train/001341_img.png
+train/001342_img.png
+train/001343_img.png
+train/001344_img.png
+train/001345_img.png
+train/001349_img.png
+train/001350_img.png
+train/001351_img.png
+train/001356_img.png
+train/001357_img.png
+train/001358_img.png
+train/001359_img.png
+train/001360_img.png
+train/001361_img.png
+train/001362_img.png
+train/001365_img.png
+train/001366_img.png
+train/001369_img.png
+train/001370_img.png
+train/001371_img.png
+train/001372_img.png
+train/001373_img.png
+train/001374_img.png
+train/001375_img.png
+train/001376_img.png
+train/001377_img.png
+train/001378_img.png
+train/001379_img.png
+train/001380_img.png
+train/001381_img.png
+train/001382_img.png
+train/001391_img.png
+train/001392_img.png
+train/001401_img.png
+train/001402_img.png
+train/001403_img.png
+train/001404_img.png
+train/001405_img.png
+train/001414_img.png
+train/001415_img.png
+train/001416_img.png
+train/001417_img.png
+train/001418_img.png
+train/001419_img.png
+train/001424_img.png
+train/001425_img.png
+train/001426_img.png
+train/001427_img.png
+train/001428_img.png
+train/001433_img.png
+train/001434_img.png
+train/001435_img.png
+train/001436_img.png
+train/001437_img.png
+train/001438_img.png
+train/001439_img.png
\ No newline at end of file
diff --git a/FE2E/infer/dataset_normal/oasis/__init__.py b/FE2E/infer/dataset_normal/oasis/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..b72e3adf835b29935ed2233973a93d3e3f2bbbf8
--- /dev/null
+++ b/FE2E/infer/dataset_normal/oasis/__init__.py
@@ -0,0 +1,76 @@
+""" Get samples from OASIS validation set (https://pvl.cs.princeton.edu/OASIS/)
+"""
+import os
+import cv2
+import numpy as np
+import pickle
+
+from infer.dataset_normal import Sample
+
+
+def read_normal(path, h, w):
+ normal_dict = pickle.load(open(path, 'rb'))
+
+ mask = np.zeros((h,w))
+ normal = np.zeros((h,w,3))
+
+ # Stuff ROI normal into bounding box
+ min_y = normal_dict['min_y']
+ max_y = normal_dict['max_y']
+ min_x = normal_dict['min_x']
+ max_x = normal_dict['max_x']
+ roi_normal = normal_dict['normal']
+
+ # to LUB
+ normal[min_y:max_y+1, min_x:max_x+1, :] = roi_normal
+ normal = normal.astype(np.float32)
+ normal[:,:,0] *= -1
+ normal[:,:,1] *= -1
+
+ # Make mask
+ roi_mask = np.logical_or(np.logical_or(roi_normal[:,:,0] != 0, roi_normal[:,:,1] != 0), roi_normal[:,:,2] != 0).astype(np.float32)
+ mask[min_y:max_y+1, min_x:max_x+1] = roi_mask
+ mask = mask[:, :, None]
+ mask = mask > 0.5
+
+ return normal, mask
+
+
+def get_sample(base_data_dir, sample_path, info):
+ # e.g. sample_path = "val/100277_DT_img.png"
+ scene_name = sample_path.split('/')[0]
+ img_name, img_ext = sample_path.split('/')[-1].split('_img')
+
+ dataset_path = os.path.join(base_data_dir, 'dsine_eval', 'oasis')
+ img_path = '%s/%s' % (dataset_path, sample_path)
+ normal_path = img_path.replace('_img'+img_ext, '_normal.pkl')
+ intrins_path = img_path.replace('_img'+img_ext, '_intrins.npy')
+ assert os.path.exists(img_path)
+ assert os.path.exists(normal_path)
+ assert os.path.exists(intrins_path)
+
+ # read image (H, W, 3)
+ img = cv2.cvtColor(cv2.imread(img_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ img = img.astype(np.float32) / 255.0
+
+ # read normal (H, W, 3)
+ h = img.shape[0]
+ w = img.shape[1]
+ normal, normal_mask = read_normal(normal_path, h, w)
+
+ # read intrins (3, 3)
+ intrins = np.load(intrins_path)
+
+ sample = Sample(
+ img=img,
+ normal=normal,
+ normal_mask=normal_mask,
+ intrins=intrins,
+
+ dataset_name='oasis',
+ scene_name=scene_name,
+ img_name=img_name,
+ info=info
+ )
+
+ return sample
diff --git a/FE2E/infer/dataset_normal/oasis/split/val.txt b/FE2E/infer/dataset_normal/oasis/split/val.txt
new file mode 100644
index 0000000000000000000000000000000000000000..bfcaa6e3a5dffff598354e55f2effda45f570e76
--- /dev/null
+++ b/FE2E/infer/dataset_normal/oasis/split/val.txt
@@ -0,0 +1,6000 @@
+val/246011_ALI_img.png
+val/246017_ALI_img.png
+val/246020_ALI_img.png
+val/246022_ALI_img.png
+val/246027_ALI_img.png
+val/246029_ALI_img.png
+val/246037_ALI_img.png
+val/246038_ALI_img.png
+val/246043_ALI_img.png
+val/246045_ALI_img.png
+val/246046_ALI_img.png
+val/246054_ALI_img.png
+val/246073_ALI_img.png
+val/246077_ALI_img.png
+val/246089_ALI_img.png
+val/246092_ALI_img.png
+val/246100_ALI_img.png
+val/246101_ALI_img.png
+val/246102_ALI_img.png
+val/246107_ALI_img.png
+val/246110_ALI_img.png
+val/246112_ALI_img.png
+val/246117_ALI_img.png
+val/246122_ALI_img.png
+val/246124_ALI_img.png
+val/246128_ALI_img.png
+val/246130_ALI_img.png
+val/246132_ALI_img.png
+val/246133_ALI_img.png
+val/246134_DT_img.png
+val/246147_ALI_img.png
+val/246149_ALI_img.png
+val/246152_ALI_img.png
+val/246155_ALI_img.png
+val/246157_ALI_img.png
+val/246162_ALI_img.png
+val/246163_ALI_img.png
+val/246168_ALI_img.png
+val/246172_ALI_img.png
+val/246173_ALI_img.png
+val/246179_ALI_img.png
+val/246184_ALI_img.png
+val/246185_ALI_img.png
+val/246186_ALI_img.png
+val/246188_ALI_img.png
+val/246189_ALI_img.png
+val/246194_ALI_img.png
+val/246205_ALI_img.png
+val/246206_ALI_img.png
+val/246207_ALI_img.png
+val/246208_ALI_img.png
+val/246212_ALI_img.png
+val/246215_ALI_img.png
+val/246216_ALI_img.png
+val/246219_ALI_img.png
+val/246224_ALI_img.png
+val/246230_ALI_img.png
+val/246232_ALI_img.png
+val/246234_ALI_img.png
+val/246241_ALI_img.png
+val/246243_ALI_img.png
+val/246244_ALI_img.png
+val/246247_ALI_img.png
+val/246249_ALI_img.png
+val/246252_ALI_img.png
+val/246255_ALI_img.png
+val/246259_ALI_img.png
+val/246264_ALI_img.png
+val/246266_ALI_img.png
+val/246269_ALI_img.png
+val/246273_ALI_img.png
+val/246274_ALI_img.png
+val/246287_ALI_img.png
+val/246290_ALI_img.png
+val/246291_ALI_img.png
+val/246294_ALI_img.png
+val/246295_ALI_img.png
+val/246296_ALI_img.png
+val/246303_ALI_img.png
+val/246311_ALI_img.png
+val/246313_ALI_img.png
+val/246315_ALI_img.png
+val/246324_ALI_img.png
+val/246325_DT_img.png
+val/246326_ALI_img.png
+val/246337_ALI_img.png
+val/246342_ALI_img.png
+val/246347_ALI_img.png
+val/246349_ALI_img.png
+val/246351_ALI_img.png
+val/246354_ALI_img.png
+val/246358_ALI_img.png
+val/246366_ALI_img.png
+val/246377_ALI_img.png
+val/246382_ALI_img.png
+val/246383_ALI_img.png
+val/246386_ALI_img.png
+val/246388_ALI_img.png
+val/246389_ALI_img.png
+val/246391_ALI_img.png
+val/246396_ALI_img.png
+val/246401_ALI_img.png
+val/246402_ALI_img.png
+val/246403_ALI_img.png
+val/246404_ALI_img.png
+val/246406_ALI_img.png
+val/246409_ALI_img.png
+val/246411_ALI_img.png
+val/246413_ALI_img.png
+val/246416_ALI_img.png
+val/246424_ALI_img.png
+val/246428_ALI_img.png
+val/246429_ALI_img.png
+val/246433_ALI_img.png
+val/246434_ALI_img.png
+val/246446_ALI_img.png
+val/246447_ALI_img.png
+val/246450_ALI_img.png
+val/246452_ALI_img.png
+val/246458_ALI_img.png
+val/246468_ALI_img.png
+val/246474_ALI_img.png
+val/246477_ALI_img.png
+val/246479_ALI_img.png
+val/246481_ALI_img.png
+val/246490_ALI_img.png
+val/246492_ALI_img.png
+val/246494_ALI_img.png
+val/246500_ALI_img.png
+val/246502_ALI_img.png
+val/246506_ALI_img.png
+val/246512_ALI_img.png
+val/246513_ALI_img.png
+val/246528_ALI_img.png
+val/246531_ALI_img.png
+val/246532_ALI_img.png
+val/246536_ALI_img.png
+val/246547_ALI_img.png
+val/246551_ALI_img.png
+val/246554_ALI_img.png
+val/246557_ALI_img.png
+val/246562_ALI_img.png
+val/246572_ALI_img.png
+val/246573_ALI_img.png
+val/246574_ALI_img.png
+val/246575_ALI_img.png
+val/246576_ALI_img.png
+val/246585_ALI_img.png
+val/246598_ALI_img.png
+val/246613_ALI_img.png
+val/246616_ALI_img.png
+val/246618_ALI_img.png
+val/246621_ALI_img.png
+val/246624_ALI_img.png
+val/246630_ALI_img.png
+val/246638_ALI_img.png
+val/246648_ALI_img.png
+val/246652_ALI_img.png
+val/246655_ALI_img.png
+val/246666_ALI_img.png
+val/246671_ALI_img.png
+val/246682_ALI_img.png
+val/246687_ALI_img.png
+val/246690_ALI_img.png
+val/246691_ALI_img.png
+val/246694_ALI_img.png
+val/246696_ALI_img.png
+val/246700_ALI_img.png
+val/246703_ALI_img.png
+val/246707_ALI_img.png
+val/246712_ALI_img.png
+val/246716_ALI_img.png
+val/246719_ALI_img.png
+val/246727_ALI_img.png
+val/246730_ALI_img.png
+val/246734_ALI_img.png
+val/246735_ALI_img.png
+val/246736_ALI_img.png
+val/246738_ALI_img.png
+val/246743_ALI_img.png
+val/246750_ALI_img.png
+val/246751_ALI_img.png
+val/246754_ALI_img.png
+val/246761_ALI_img.png
+val/246773_ALI_img.png
+val/246776_ALI_img.png
+val/246777_ALI_img.png
+val/246781_ALI_img.png
+val/246784_ALI_img.png
+val/246786_ALI_img.png
+val/246787_ALI_img.png
+val/246794_ALI_img.png
+val/246799_ALI_img.png
+val/246803_ALI_img.png
+val/246805_ALI_img.png
+val/246810_ALI_img.png
+val/246811_ALI_img.png
+val/246815_ALI_img.png
+val/246823_ALI_img.png
+val/246824_ALI_img.png
+val/246839_ALI_img.png
+val/246840_ALI_img.png
+val/246842_ALI_img.png
+val/246846_ALI_img.png
+val/246848_ALI_img.png
+val/246852_ALI_img.png
+val/246854_ALI_img.png
+val/246862_ALI_img.png
+val/246866_ALI_img.png
+val/246870_ALI_img.png
+val/246872_ALI_img.png
+val/246874_ALI_img.png
+val/246876_ALI_img.png
+val/246880_ALI_img.png
+val/246882_ALI_img.png
+val/246884_ALI_img.png
+val/246898_ALI_img.png
+val/246900_ALI_img.png
+val/246901_ALI_img.png
+val/246903_ALI_img.png
+val/246905_ALI_img.png
+val/246907_ALI_img.png
+val/246918_ALI_img.png
+val/246923_ALI_img.png
+val/246935_ALI_img.png
+val/246937_ALI_img.png
+val/246938_ALI_img.png
+val/246945_ALI_img.png
+val/246949_ALI_img.png
+val/246955_ALI_img.png
+val/246968_ALI_img.png
+val/246971_ALI_img.png
+val/246972_ALI_img.png
+val/246975_ALI_img.png
+val/246976_ALI_img.png
+val/246981_ALI_img.png
+val/246983_ALI_img.png
+val/246986_ALI_img.png
+val/246991_ALI_img.png
+val/246995_ALI_img.png
+val/247003_ALI_img.png
+val/247006_ALI_img.png
+val/247007_ALI_img.png
+val/247008_ALI_img.png
+val/247009_ALI_img.png
+val/247013_ALI_img.png
+val/247015_ALI_img.png
+val/247018_ALI_img.png
+val/247019_ALI_img.png
+val/247021_ALI_img.png
+val/247022_ALI_img.png
+val/247023_ALI_img.png
+val/247025_ALI_img.png
+val/247026_ALI_img.png
+val/247030_ALI_img.png
+val/247031_ALI_img.png
+val/247034_ALI_img.png
+val/247035_ALI_img.png
+val/247037_ALI_img.png
+val/247042_ALI_img.png
+val/247050_ALI_img.png
+val/247059_ALI_img.png
+val/247060_ALI_img.png
+val/247075_ALI_img.png
+val/247077_ALI_img.png
+val/247081_ALI_img.png
+val/247082_ALI_img.png
+val/247085_ALI_img.png
+val/247087_ALI_img.png
+val/247089_ALI_img.png
+val/247092_ALI_img.png
+val/247098_ALI_img.png
+val/247102_ALI_img.png
+val/247104_ALI_img.png
+val/247110_ALI_img.png
+val/247111_ALI_img.png
+val/247114_ALI_img.png
+val/247116_ALI_img.png
+val/247117_ALI_img.png
+val/247118_ALI_img.png
+val/247121_ALI_img.png
+val/247124_ALI_img.png
+val/247126_ALI_img.png
+val/247127_ALI_img.png
+val/247130_ALI_img.png
+val/247131_ALI_img.png
+val/247141_ALI_img.png
+val/247142_ALI_img.png
+val/247143_ALI_img.png
+val/247146_ALI_img.png
+val/247152_ALI_img.png
+val/247156_ALI_img.png
+val/247157_ALI_img.png
+val/247159_ALI_img.png
+val/247167_ALI_img.png
+val/247171_ALI_img.png
+val/247177_ALI_img.png
+val/247179_ALI_img.png
+val/247182_ALI_img.png
+val/247189_ALI_img.png
+val/247192_ALI_img.png
+val/247193_ALI_img.png
+val/247203_ALI_img.png
+val/247206_ALI_img.png
+val/247209_ALI_img.png
+val/247213_ALI_img.png
+val/247214_ALI_img.png
+val/247216_ALI_img.png
+val/247217_ALI_img.png
+val/247218_ALI_img.png
+val/247224_ALI_img.png
+val/247230_ALI_img.png
+val/247237_ALI_img.png
+val/247242_ALI_img.png
+val/247245_ALI_img.png
+val/247246_ALI_img.png
+val/247248_ALI_img.png
+val/247254_ALI_img.png
+val/247258_ALI_img.png
+val/247260_ALI_img.png
+val/247261_ALI_img.png
+val/247262_ALI_img.png
+val/247264_ALI_img.png
+val/247270_ALI_img.png
+val/247273_ALI_img.png
+val/247277_ALI_img.png
+val/247279_ALI_img.png
+val/247280_ALI_img.png
+val/247281_ALI_img.png
+val/247283_ALI_img.png
+val/247284_ALI_img.png
+val/247287_ALI_img.png
+val/247289_ALI_img.png
+val/247295_ALI_img.png
+val/247298_ALI_img.png
+val/247305_ALI_img.png
+val/247309_ALI_img.png
+val/247314_ALI_img.png
+val/247320_ALI_img.png
+val/247323_ALI_img.png
+val/247327_ALI_img.png
+val/247331_ALI_img.png
+val/247333_ALI_img.png
+val/247336_ALI_img.png
+val/247346_ALI_img.png
+val/247353_ALI_img.png
+val/247355_ALI_img.png
+val/247357_ALI_img.png
+val/247359_ALI_img.png
+val/247363_ALI_img.png
+val/247386_ALI_img.png
+val/247389_ALI_img.png
+val/247397_ALI_img.png
+val/247401_ALI_img.png
+val/247409_ALI_img.png
+val/247411_ALI_img.png
+val/247413_ALI_img.png
+val/247422_ALI_img.png
+val/247424_ALI_img.png
+val/247427_ALI_img.png
+val/247428_ALI_img.png
+val/247429_ALI_img.png
+val/247431_ALI_img.png
+val/247431_DT_img.png
+val/247432_ALI_img.png
+val/247438_ALI_img.png
+val/247445_ALI_img.png
+val/247446_ALI_img.png
+val/247458_ALI_img.png
+val/247462_ALI_img.png
+val/247469_ALI_img.png
+val/247474_ALI_img.png
+val/247475_ALI_img.png
+val/247476_ALI_img.png
+val/247487_ALI_img.png
+val/247494_ALI_img.png
+val/247495_ALI_img.png
+val/247496_ALI_img.png
+val/247497_ALI_img.png
+val/247498_ALI_img.png
+val/247500_ALI_img.png
+val/247509_ALI_img.png
+val/247511_ALI_img.png
+val/247512_ALI_img.png
+val/247513_ALI_img.png
+val/247514_ALI_img.png
+val/247525_ALI_img.png
+val/247534_ALI_img.png
+val/247535_ALI_img.png
+val/247538_ALI_img.png
+val/247546_ALI_img.png
+val/247551_ALI_img.png
+val/247554_ALI_img.png
+val/247555_ALI_img.png
+val/247557_ALI_img.png
+val/247562_ALI_img.png
+val/247567_ALI_img.png
+val/247569_ALI_img.png
+val/247579_ALI_img.png
+val/247586_ALI_img.png
+val/247590_ALI_img.png
+val/247591_ALI_img.png
+val/247595_ALI_img.png
+val/247600_ALI_img.png
+val/247607_ALI_img.png
+val/247611_ALI_img.png
+val/247613_ALI_img.png
+val/247614_ALI_img.png
+val/247622_ALI_img.png
+val/247624_ALI_img.png
+val/247628_ALI_img.png
+val/247634_ALI_img.png
+val/247636_ALI_img.png
+val/247638_ALI_img.png
+val/247639_ALI_img.png
+val/247640_ALI_img.png
+val/247647_ALI_img.png
+val/247655_ALI_img.png
+val/247666_ALI_img.png
+val/247667_ALI_img.png
+val/247677_ALI_img.png
+val/247682_ALI_img.png
+val/247686_ALI_img.png
+val/247690_ALI_img.png
+val/247692_ALI_img.png
+val/247693_ALI_img.png
+val/247696_ALI_img.png
+val/247700_ALI_img.png
+val/247709_ALI_img.png
+val/247710_ALI_img.png
+val/247713_ALI_img.png
+val/247715_ALI_img.png
+val/247722_ALI_img.png
+val/247730_ALI_img.png
+val/247734_ALI_img.png
+val/247741_ALI_img.png
+val/247744_ALI_img.png
+val/247748_ALI_img.png
+val/247751_ALI_img.png
+val/247752_ALI_img.png
+val/247754_ALI_img.png
+val/247764_ALI_img.png
+val/247765_ALI_img.png
+val/247766_ALI_img.png
+val/247768_ALI_img.png
+val/247774_ALI_img.png
+val/247782_ALI_img.png
+val/247789_ALI_img.png
+val/247791_ALI_img.png
+val/247794_ALI_img.png
+val/247797_ALI_img.png
+val/247798_ALI_img.png
+val/247799_ALI_img.png
+val/247802_ALI_img.png
+val/247808_ALI_img.png
+val/247809_ALI_img.png
+val/247812_ALI_img.png
+val/247815_ALI_img.png
+val/247819_ALI_img.png
+val/247821_ALI_img.png
+val/247822_ALI_img.png
+val/247823_ALI_img.png
+val/247830_ALI_img.png
+val/247834_ALI_img.png
+val/247836_ALI_img.png
+val/247837_ALI_img.png
+val/247838_ALI_img.png
+val/247839_ALI_img.png
+val/247846_ALI_img.png
+val/247848_ALI_img.png
+val/247849_ALI_img.png
+val/247850_ALI_img.png
+val/247852_ALI_img.png
+val/247855_ALI_img.png
+val/247857_ALI_img.png
+val/247864_ALI_img.png
+val/247886_ALI_img.png
+val/247893_ALI_img.png
+val/247897_ALI_img.png
+val/247899_ALI_img.png
+val/247913_ALI_img.png
+val/247914_ALI_img.png
+val/247915_ALI_img.png
+val/247916_ALI_img.png
+val/247919_ALI_img.png
+val/247927_ALI_img.png
+val/247941_ALI_img.png
+val/247944_ALI_img.png
+val/247948_ALI_img.png
+val/247952_ALI_img.png
+val/247962_ALI_img.png
+val/247968_ALI_img.png
+val/247969_ALI_img.png
+val/247974_ALI_img.png
+val/247977_ALI_img.png
+val/247978_ALI_img.png
+val/247979_ALI_img.png
+val/247985_ALI_img.png
+val/247987_ALI_img.png
+val/247991_ALI_img.png
+val/247993_ALI_img.png
+val/247995_ALI_img.png
+val/247999_ALI_img.png
+val/248001_ALI_img.png
+val/248002_ALI_img.png
+val/248009_ALI_img.png
+val/248012_ALI_img.png
+val/248023_ALI_img.png
+val/248024_ALI_img.png
+val/248028_ALI_img.png
+val/248029_ALI_img.png
+val/248031_ALI_img.png
+val/248034_ALI_img.png
+val/248037_ALI_img.png
+val/248038_ALI_img.png
+val/248046_ALI_img.png
+val/248050_ALI_img.png
+val/248052_ALI_img.png
+val/248057_ALI_img.png
+val/248061_ALI_img.png
+val/248066_ALI_img.png
+val/248068_ALI_img.png
+val/248075_ALI_img.png
+val/248076_ALI_img.png
+val/248082_ALI_img.png
+val/248083_ALI_img.png
+val/248086_ALI_img.png
+val/248091_ALI_img.png
+val/248095_ALI_img.png
+val/248096_ALI_img.png
+val/248099_ALI_img.png
+val/248104_ALI_img.png
+val/248108_ALI_img.png
+val/248110_ALI_img.png
+val/248116_ALI_img.png
+val/248120_ALI_img.png
+val/248121_ALI_img.png
+val/248123_ALI_img.png
+val/248124_ALI_img.png
+val/248126_ALI_img.png
+val/248136_ALI_img.png
+val/248138_ALI_img.png
+val/248139_ALI_img.png
+val/248151_ALI_img.png
+val/248153_ALI_img.png
+val/248157_ALI_img.png
+val/248158_ALI_img.png
+val/248159_ALI_img.png
+val/248161_ALI_img.png
+val/248168_ALI_img.png
+val/248172_ALI_img.png
+val/248182_ALI_img.png
+val/248186_ALI_img.png
+val/248190_ALI_img.png
+val/248194_ALI_img.png
+val/248196_ALI_img.png
+val/248201_ALI_img.png
+val/248204_ALI_img.png
+val/248206_ALI_img.png
+val/248210_ALI_img.png
+val/248216_ALI_img.png
+val/248220_ALI_img.png
+val/248222_ALI_img.png
+val/248224_ALI_img.png
+val/248228_ALI_img.png
+val/248229_ALI_img.png
+val/248233_ALI_img.png
+val/248235_ALI_img.png
+val/248238_ALI_img.png
+val/248239_ALI_img.png
+val/248244_ALI_img.png
+val/248247_ALI_img.png
+val/248248_ALI_img.png
+val/248253_ALI_img.png
+val/248260_ALI_img.png
+val/248264_ALI_img.png
+val/248267_ALI_img.png
+val/248268_ALI_img.png
+val/248269_ALI_img.png
+val/248275_ALI_img.png
+val/248278_ALI_img.png
+val/248282_ALI_img.png
+val/248290_ALI_img.png
+val/248291_ALI_img.png
+val/248292_ALI_img.png
+val/248297_ALI_img.png
+val/248301_ALI_img.png
+val/248303_ALI_img.png
+val/248304_ALI_img.png
+val/248306_ALI_img.png
+val/248310_ALI_img.png
+val/248311_ALI_img.png
+val/248320_ALI_img.png
+val/248329_ALI_img.png
+val/248331_ALI_img.png
+val/248338_ALI_img.png
+val/248339_ALI_img.png
+val/248340_ALI_img.png
+val/248341_ALI_img.png
+val/248343_ALI_img.png
+val/248349_ALI_img.png
+val/248354_ALI_img.png
+val/248356_ALI_img.png
+val/248360_ALI_img.png
+val/248361_ALI_img.png
+val/248363_ALI_img.png
+val/248366_ALI_img.png
+val/248371_ALI_img.png
+val/248372_ALI_img.png
+val/248377_ALI_img.png
+val/248385_ALI_img.png
+val/248392_ALI_img.png
+val/248396_ALI_img.png
+val/248399_ALI_img.png
+val/248402_ALI_img.png
+val/248403_ALI_img.png
+val/248408_ALI_img.png
+val/248411_ALI_img.png
+val/248415_ALI_img.png
+val/248416_ALI_img.png
+val/248419_ALI_img.png
+val/248429_ALI_img.png
+val/248431_ALI_img.png
+val/248433_ALI_img.png
+val/248434_ALI_img.png
+val/248436_ALI_img.png
+val/248437_ALI_img.png
+val/248438_ALI_img.png
+val/248447_ALI_img.png
+val/248452_ALI_img.png
+val/248455_ALI_img.png
+val/248459_ALI_img.png
+val/248460_ALI_img.png
+val/248465_ALI_img.png
+val/248468_ALI_img.png
+val/248472_ALI_img.png
+val/248476_ALI_img.png
+val/248484_ALI_img.png
+val/248489_ALI_img.png
+val/248493_ALI_img.png
+val/248497_ALI_img.png
+val/248498_ALI_img.png
+val/248501_ALI_img.png
+val/248505_ALI_img.png
+val/248509_ALI_img.png
+val/248515_DT_img.png
+val/248516_ALI_img.png
+val/248517_ALI_img.png
+val/248519_ALI_img.png
+val/248529_ALI_img.png
+val/248530_ALI_img.png
+val/248537_ALI_img.png
+val/248538_ALI_img.png
+val/248546_ALI_img.png
+val/248549_ALI_img.png
+val/248551_ALI_img.png
+val/248558_ALI_img.png
+val/248566_ALI_img.png
+val/248573_ALI_img.png
+val/248575_ALI_img.png
+val/248581_ALI_img.png
+val/248585_ALI_img.png
+val/248587_ALI_img.png
+val/248589_ALI_img.png
+val/248591_ALI_img.png
+val/248595_ALI_img.png
+val/248601_ALI_img.png
+val/248603_ALI_img.png
+val/248615_ALI_img.png
+val/248616_ALI_img.png
+val/248617_ALI_img.png
+val/248623_ALI_img.png
+val/248624_ALI_img.png
+val/248627_ALI_img.png
+val/248628_ALI_img.png
+val/248630_ALI_img.png
+val/248631_ALI_img.png
+val/248632_ALI_img.png
+val/248637_ALI_img.png
+val/248644_ALI_img.png
+val/248649_ALI_img.png
+val/248650_ALI_img.png
+val/248653_ALI_img.png
+val/248656_ALI_img.png
+val/248658_ALI_img.png
+val/248661_ALI_img.png
+val/248667_ALI_img.png
+val/248668_ALI_img.png
+val/248677_ALI_img.png
+val/248678_ALI_img.png
+val/248680_ALI_img.png
+val/248686_ALI_img.png
+val/248690_ALI_img.png
+val/248691_ALI_img.png
+val/248694_ALI_img.png
+val/248695_ALI_img.png
+val/248701_ALI_img.png
+val/248704_ALI_img.png
+val/248706_ALI_img.png
+val/248707_ALI_img.png
+val/248714_ALI_img.png
+val/248718_ALI_img.png
+val/248722_ALI_img.png
+val/248725_ALI_img.png
+val/248727_ALI_img.png
+val/248729_ALI_img.png
+val/248731_ALI_img.png
+val/248735_ALI_img.png
+val/248736_ALI_img.png
+val/248737_ALI_img.png
+val/248742_ALI_img.png
+val/248743_ALI_img.png
+val/248746_ALI_img.png
+val/248752_ALI_img.png
+val/248757_ALI_img.png
+val/248758_ALI_img.png
+val/248762_ALI_img.png
+val/248763_ALI_img.png
+val/248776_ALI_img.png
+val/248778_ALI_img.png
+val/248792_ALI_img.png
+val/248793_ALI_img.png
+val/248801_ALI_img.png
+val/248811_ALI_img.png
+val/248815_ALI_img.png
+val/248816_ALI_img.png
+val/248817_ALI_img.png
+val/248818_ALI_img.png
+val/248819_ALI_img.png
+val/248820_ALI_img.png
+val/248822_ALI_img.png
+val/248823_ALI_img.png
+val/248824_ALI_img.png
+val/248826_ALI_img.png
+val/248828_ALI_img.png
+val/248835_ALI_img.png
+val/248836_ALI_img.png
+val/248839_ALI_img.png
+val/248840_ALI_img.png
+val/248844_ALI_img.png
+val/248846_ALI_img.png
+val/248847_ALI_img.png
+val/248850_ALI_img.png
+val/248861_ALI_img.png
+val/248863_ALI_img.png
+val/248864_ALI_img.png
+val/248866_ALI_img.png
+val/248869_ALI_img.png
+val/248870_ALI_img.png
+val/248874_ALI_img.png
+val/248882_ALI_img.png
+val/248888_ALI_img.png
+val/248897_ALI_img.png
+val/248902_ALI_img.png
+val/248911_ALI_img.png
+val/248923_ALI_img.png
+val/248926_ALI_img.png
+val/248927_ALI_img.png
+val/248928_ALI_img.png
+val/248929_ALI_img.png
+val/248929_DT_img.png
+val/248932_ALI_img.png
+val/248933_ALI_img.png
+val/248937_ALI_img.png
+val/248938_ALI_img.png
+val/248940_ALI_img.png
+val/248942_ALI_img.png
+val/248944_ALI_img.png
+val/248956_ALI_img.png
+val/248963_ALI_img.png
+val/248966_ALI_img.png
+val/248970_ALI_img.png
+val/248979_ALI_img.png
+val/248980_ALI_img.png
+val/248982_ALI_img.png
+val/248987_ALI_img.png
+val/249002_ALI_img.png
+val/249004_ALI_img.png
+val/249007_ALI_img.png
+val/249013_ALI_img.png
+val/249015_ALI_img.png
+val/249023_ALI_img.png
+val/249027_ALI_img.png
+val/249034_ALI_img.png
+val/249038_ALI_img.png
+val/249044_ALI_img.png
+val/249048_ALI_img.png
+val/249050_ALI_img.png
+val/249064_ALI_img.png
+val/249069_ALI_img.png
+val/249075_ALI_img.png
+val/249079_ALI_img.png
+val/249081_ALI_img.png
+val/249083_ALI_img.png
+val/249093_ALI_img.png
+val/249096_ALI_img.png
+val/249100_ALI_img.png
+val/249103_ALI_img.png
+val/249104_ALI_img.png
+val/249109_ALI_img.png
+val/249110_ALI_img.png
+val/249111_ALI_img.png
+val/249122_ALI_img.png
+val/249123_ALI_img.png
+val/249125_ALI_img.png
+val/249127_ALI_img.png
+val/249128_ALI_img.png
+val/249135_ALI_img.png
+val/249144_ALI_img.png
+val/249146_ALI_img.png
+val/249149_ALI_img.png
+val/249165_ALI_img.png
+val/249169_ALI_img.png
+val/249172_ALI_img.png
+val/249179_ALI_img.png
+val/249184_ALI_img.png
+val/249186_ALI_img.png
+val/249191_ALI_img.png
+val/249193_ALI_img.png
+val/249199_ALI_img.png
+val/249200_ALI_img.png
+val/249202_ALI_img.png
+val/249211_ALI_img.png
+val/249213_ALI_img.png
+val/249219_ALI_img.png
+val/249220_ALI_img.png
+val/249228_ALI_img.png
+val/249231_ALI_img.png
+val/249233_ALI_img.png
+val/249237_ALI_img.png
+val/249248_ALI_img.png
+val/249254_ALI_img.png
+val/249255_ALI_img.png
+val/249264_ALI_img.png
+val/249267_ALI_img.png
+val/249268_ALI_img.png
+val/249270_ALI_img.png
+val/249272_ALI_img.png
+val/249273_ALI_img.png
+val/249288_ALI_img.png
+val/249289_ALI_img.png
+val/249292_ALI_img.png
+val/249293_ALI_img.png
+val/249302_ALI_img.png
+val/249306_ALI_img.png
+val/249308_ALI_img.png
+val/249310_ALI_img.png
+val/249314_ALI_img.png
+val/249316_ALI_img.png
+val/249320_ALI_img.png
+val/249321_ALI_img.png
+val/249326_ALI_img.png
+val/249328_ALI_img.png
+val/249329_ALI_img.png
+val/249330_ALI_img.png
+val/249335_ALI_img.png
+val/249342_ALI_img.png
+val/249350_ALI_img.png
+val/249354_ALI_img.png
+val/249355_ALI_img.png
+val/249357_ALI_img.png
+val/249358_ALI_img.png
+val/249368_ALI_img.png
+val/249369_ALI_img.png
+val/249372_ALI_img.png
+val/249375_ALI_img.png
+val/249378_ALI_img.png
+val/249389_ALI_img.png
+val/249396_ALI_img.png
+val/249399_ALI_img.png
+val/249402_ALI_img.png
+val/249411_ALI_img.png
+val/249412_ALI_img.png
+val/249414_ALI_img.png
+val/249416_ALI_img.png
+val/249425_ALI_img.png
+val/249426_ALI_img.png
+val/249435_ALI_img.png
+val/249439_ALI_img.png
+val/249444_ALI_img.png
+val/249447_ALI_img.png
+val/249452_ALI_img.png
+val/249456_ALI_img.png
+val/249459_ALI_img.png
+val/249465_ALI_img.png
+val/249468_ALI_img.png
+val/249477_ALI_img.png
+val/249478_ALI_img.png
+val/249482_ALI_img.png
+val/249483_ALI_img.png
+val/249486_ALI_img.png
+val/249487_ALI_img.png
+val/249493_ALI_img.png
+val/249495_ALI_img.png
+val/249498_ALI_img.png
+val/249513_ALI_img.png
+val/249515_ALI_img.png
+val/249518_ALI_img.png
+val/249519_ALI_img.png
+val/249528_ALI_img.png
+val/249531_ALI_img.png
+val/249538_ALI_img.png
+val/249540_ALI_img.png
+val/249544_ALI_img.png
+val/249545_ALI_img.png
+val/249547_ALI_img.png
+val/249550_ALI_img.png
+val/249551_ALI_img.png
+val/249552_ALI_img.png
+val/249557_ALI_img.png
+val/249559_ALI_img.png
+val/249565_ALI_img.png
+val/249572_ALI_img.png
+val/249574_ALI_img.png
+val/249587_ALI_img.png
+val/249593_ALI_img.png
+val/249603_ALI_img.png
+val/249606_ALI_img.png
+val/249608_ALI_img.png
+val/249611_ALI_img.png
+val/249623_ALI_img.png
+val/249624_ALI_img.png
+val/249637_ALI_img.png
+val/249638_ALI_img.png
+val/249640_ALI_img.png
+val/249641_ALI_img.png
+val/249651_ALI_img.png
+val/249655_ALI_img.png
+val/249659_ALI_img.png
+val/249661_ALI_img.png
+val/249666_ALI_img.png
+val/249674_ALI_img.png
+val/249675_ALI_img.png
+val/249677_ALI_img.png
+val/249679_ALI_img.png
+val/249680_ALI_img.png
+val/249682_ALI_img.png
+val/249683_ALI_img.png
+val/249689_ALI_img.png
+val/249690_ALI_img.png
+val/249691_ALI_img.png
+val/249693_ALI_img.png
+val/249698_ALI_img.png
+val/249701_ALI_img.png
+val/249704_ALI_img.png
+val/249706_ALI_img.png
+val/249707_ALI_img.png
+val/249712_ALI_img.png
+val/249714_ALI_img.png
+val/249717_ALI_img.png
+val/249718_ALI_img.png
+val/249719_ALI_img.png
+val/249720_ALI_img.png
+val/249725_ALI_img.png
+val/249727_ALI_img.png
+val/249731_ALI_img.png
+val/249748_ALI_img.png
+val/249752_ALI_img.png
+val/249758_ALI_img.png
+val/249764_ALI_img.png
+val/249765_ALI_img.png
+val/249766_ALI_img.png
+val/249768_ALI_img.png
+val/249770_ALI_img.png
+val/249772_ALI_img.png
+val/249775_ALI_img.png
+val/249778_ALI_img.png
+val/249779_ALI_img.png
+val/249782_ALI_img.png
+val/249783_ALI_img.png
+val/249788_ALI_img.png
+val/249791_ALI_img.png
+val/249800_ALI_img.png
+val/249803_ALI_img.png
+val/249806_ALI_img.png
+val/249813_ALI_img.png
+val/249829_ALI_img.png
+val/249831_ALI_img.png
+val/249833_ALI_img.png
+val/249834_ALI_img.png
+val/249835_ALI_img.png
+val/249837_ALI_img.png
+val/249840_ALI_img.png
+val/249841_ALI_img.png
+val/249846_ALI_img.png
+val/249848_ALI_img.png
+val/249856_ALI_img.png
+val/249862_ALI_img.png
+val/249866_ALI_img.png
+val/249868_ALI_img.png
+val/249871_ALI_img.png
+val/249874_ALI_img.png
+val/249877_ALI_img.png
+val/249881_ALI_img.png
+val/249883_ALI_img.png
+val/249886_ALI_img.png
+val/249888_ALI_img.png
+val/249896_ALI_img.png
+val/249897_ALI_img.png
+val/249900_ALI_img.png
+val/249901_ALI_img.png
+val/249913_ALI_img.png
+val/249914_ALI_img.png
+val/249920_ALI_img.png
+val/249927_ALI_img.png
+val/249930_ALI_img.png
+val/249933_ALI_img.png
+val/249937_ALI_img.png
+val/249945_ALI_img.png
+val/249946_ALI_img.png
+val/249949_ALI_img.png
+val/249954_ALI_img.png
+val/249962_ALI_img.png
+val/249963_ALI_img.png
+val/249964_ALI_img.png
+val/249969_ALI_img.png
+val/249977_ALI_img.png
+val/249978_ALI_img.png
+val/249986_ALI_img.png
+val/249995_ALI_img.png
+val/249998_ALI_img.png
+val/250000_ALI_img.png
+val/250003_ALI_img.png
+val/250009_ALI_img.png
+val/250019_ALI_img.png
+val/250020_ALI_img.png
+val/250022_ALI_img.png
+val/250026_ALI_img.png
+val/250040_ALI_img.png
+val/250041_ALI_img.png
+val/250042_ALI_img.png
+val/250045_ALI_img.png
+val/250056_ALI_img.png
+val/250060_ALI_img.png
+val/250062_ALI_img.png
+val/250067_ALI_img.png
+val/250068_ALI_img.png
+val/250070_ALI_img.png
+val/250071_DT_img.png
+val/250076_ALI_img.png
+val/250077_ALI_img.png
+val/250080_ALI_img.png
+val/250083_ALI_img.png
+val/250084_ALI_img.png
+val/250085_ALI_img.png
+val/250087_ALI_img.png
+val/250093_ALI_img.png
+val/250095_ALI_img.png
+val/250099_ALI_img.png
+val/250115_ALI_img.png
+val/250118_ALI_img.png
+val/250124_ALI_img.png
+val/250125_ALI_img.png
+val/250126_ALI_img.png
+val/250130_ALI_img.png
+val/250132_ALI_img.png
+val/250140_ALI_img.png
+val/250144_ALI_img.png
+val/250145_ALI_img.png
+val/250153_ALI_img.png
+val/250155_ALI_img.png
+val/250157_ALI_img.png
+val/250168_ALI_img.png
+val/250174_ALI_img.png
+val/250186_ALI_img.png
+val/250190_ALI_img.png
+val/250195_ALI_img.png
+val/250198_ALI_img.png
+val/250200_ALI_img.png
+val/250202_ALI_img.png
+val/250204_ALI_img.png
+val/250205_ALI_img.png
+val/250210_ALI_img.png
+val/250211_ALI_img.png
+val/250214_ALI_img.png
+val/250215_ALI_img.png
+val/250218_ALI_img.png
+val/250219_ALI_img.png
+val/250221_ALI_img.png
+val/250224_ALI_img.png
+val/250225_ALI_img.png
+val/250230_ALI_img.png
+val/250232_ALI_img.png
+val/250237_ALI_img.png
+val/250241_ALI_img.png
+val/250242_ALI_img.png
+val/250244_ALI_img.png
+val/250245_ALI_img.png
+val/250255_ALI_img.png
+val/250259_ALI_img.png
+val/250260_ALI_img.png
+val/250262_ALI_img.png
+val/250263_ALI_img.png
+val/250268_ALI_img.png
+val/250282_ALI_img.png
+val/250290_ALI_img.png
+val/250296_ALI_img.png
+val/250297_ALI_img.png
+val/250306_ALI_img.png
+val/250310_ALI_img.png
+val/250316_ALI_img.png
+val/250317_ALI_img.png
+val/250319_ALI_img.png
+val/250321_ALI_img.png
+val/250323_ALI_img.png
+val/250328_ALI_img.png
+val/250345_ALI_img.png
+val/250348_ALI_img.png
+val/250354_ALI_img.png
+val/250356_ALI_img.png
+val/250371_ALI_img.png
+val/250379_ALI_img.png
+val/250384_ALI_img.png
+val/250388_ALI_img.png
+val/250389_ALI_img.png
+val/250390_ALI_img.png
+val/250393_ALI_img.png
+val/250395_ALI_img.png
+val/250396_ALI_img.png
+val/250397_ALI_img.png
+val/250404_ALI_img.png
+val/250414_ALI_img.png
+val/250429_ALI_img.png
+val/250435_ALI_img.png
+val/250436_ALI_img.png
+val/250438_ALI_img.png
+val/250439_ALI_img.png
+val/250446_ALI_img.png
+val/250452_ALI_img.png
+val/250454_ALI_img.png
+val/250459_ALI_img.png
+val/250461_ALI_img.png
+val/250466_ALI_img.png
+val/250468_ALI_img.png
+val/250469_ALI_img.png
+val/250475_ALI_img.png
+val/250478_ALI_img.png
+val/250479_ALI_img.png
+val/250482_ALI_img.png
+val/250493_ALI_img.png
+val/250496_ALI_img.png
+val/250499_ALI_img.png
+val/250506_ALI_img.png
+val/250507_ALI_img.png
+val/250509_ALI_img.png
+val/250510_ALI_img.png
+val/250511_ALI_img.png
+val/250522_ALI_img.png
+val/250529_ALI_img.png
+val/250537_ALI_img.png
+val/250538_ALI_img.png
+val/250553_ALI_img.png
+val/250561_ALI_img.png
+val/250564_ALI_img.png
+val/250566_ALI_img.png
+val/250568_ALI_img.png
+val/250569_ALI_img.png
+val/250570_ALI_img.png
+val/250576_ALI_img.png
+val/250579_ALI_img.png
+val/250587_ALI_img.png
+val/250588_ALI_img.png
+val/250589_ALI_img.png
+val/250590_ALI_img.png
+val/250592_ALI_img.png
+val/250596_ALI_img.png
+val/250609_ALI_img.png
+val/250610_ALI_img.png
+val/250613_ALI_img.png
+val/250616_ALI_img.png
+val/250617_ALI_img.png
+val/250623_ALI_img.png
+val/250628_ALI_img.png
+val/250630_ALI_img.png
+val/250633_ALI_img.png
+val/250634_ALI_img.png
+val/250635_ALI_img.png
+val/250636_ALI_img.png
+val/250638_ALI_img.png
+val/250639_ALI_img.png
+val/250647_ALI_img.png
+val/250649_ALI_img.png
+val/250650_ALI_img.png
+val/250652_ALI_img.png
+val/250656_ALI_img.png
+val/250657_ALI_img.png
+val/250659_ALI_img.png
+val/250664_ALI_img.png
+val/250668_ALI_img.png
+val/250669_ALI_img.png
+val/250670_ALI_img.png
+val/250674_ALI_img.png
+val/250680_ALI_img.png
+val/250686_ALI_img.png
+val/250688_ALI_img.png
+val/250701_ALI_img.png
+val/250707_ALI_img.png
+val/250711_ALI_img.png
+val/250715_ALI_img.png
+val/250721_ALI_img.png
+val/250723_ALI_img.png
+val/250727_ALI_img.png
+val/250728_ALI_img.png
+val/250730_ALI_img.png
+val/250736_ALI_img.png
+val/250740_ALI_img.png
+val/250742_ALI_img.png
+val/250744_ALI_img.png
+val/250754_ALI_img.png
+val/250762_ALI_img.png
+val/250766_ALI_img.png
+val/250767_ALI_img.png
+val/250768_ALI_img.png
+val/250770_ALI_img.png
+val/250772_ALI_img.png
+val/250775_ALI_img.png
+val/250782_ALI_img.png
+val/250786_ALI_img.png
+val/250787_ALI_img.png
+val/250791_ALI_img.png
+val/250793_ALI_img.png
+val/250795_ALI_img.png
+val/250796_ALI_img.png
+val/250797_ALI_img.png
+val/250798_ALI_img.png
+val/250807_ALI_img.png
+val/250814_ALI_img.png
+val/250821_ALI_img.png
+val/250823_ALI_img.png
+val/250830_ALI_img.png
+val/250835_ALI_img.png
+val/250836_ALI_img.png
+val/250840_ALI_img.png
+val/250841_ALI_img.png
+val/250843_ALI_img.png
+val/250850_ALI_img.png
+val/250854_ALI_img.png
+val/250855_ALI_img.png
+val/250859_ALI_img.png
+val/250860_ALI_img.png
+val/250865_ALI_img.png
+val/250866_ALI_img.png
+val/250868_ALI_img.png
+val/250872_ALI_img.png
+val/250880_ALI_img.png
+val/250883_ALI_img.png
+val/250891_ALI_img.png
+val/250895_ALI_img.png
+val/250897_ALI_img.png
+val/250900_ALI_img.png
+val/250901_ALI_img.png
+val/250902_ALI_img.png
+val/250906_ALI_img.png
+val/250913_ALI_img.png
+val/250919_ALI_img.png
+val/250921_ALI_img.png
+val/250924_ALI_img.png
+val/250936_ALI_img.png
+val/250946_ALI_img.png
+val/250947_ALI_img.png
+val/250952_ALI_img.png
+val/250953_ALI_img.png
+val/250956_ALI_img.png
+val/250957_ALI_img.png
+val/250959_ALI_img.png
+val/250973_ALI_img.png
+val/250974_ALI_img.png
+val/250978_ALI_img.png
+val/250984_ALI_img.png
+val/250985_ALI_img.png
+val/250995_ALI_img.png
+val/250998_ALI_img.png
+val/250999_ALI_img.png
+val/251001_ALI_img.png
+val/251002_ALI_img.png
+val/251003_ALI_img.png
+val/251004_ALI_img.png
+val/251014_ALI_img.png
+val/251018_ALI_img.png
+val/251025_ALI_img.png
+val/251026_ALI_img.png
+val/251033_ALI_img.png
+val/251040_ALI_img.png
+val/251051_ALI_img.png
+val/251058_ALI_img.png
+val/251063_ALI_img.png
+val/251064_ALI_img.png
+val/251072_ALI_img.png
+val/251076_ALI_img.png
+val/251078_ALI_img.png
+val/251085_ALI_img.png
+val/251086_ALI_img.png
+val/251090_ALI_img.png
+val/251091_ALI_img.png
+val/251092_ALI_img.png
+val/251098_ALI_img.png
+val/251100_ALI_img.png
+val/251107_ALI_img.png
+val/251109_ALI_img.png
+val/251117_ALI_img.png
+val/251119_ALI_img.png
+val/251123_ALI_img.png
+val/251124_ALI_img.png
+val/251126_ALI_img.png
+val/251130_ALI_img.png
+val/251134_ALI_img.png
+val/251136_ALI_img.png
+val/251142_ALI_img.png
+val/251145_ALI_img.png
+val/251148_ALI_img.png
+val/251149_ALI_img.png
+val/251152_ALI_img.png
+val/251154_ALI_img.png
+val/251159_ALI_img.png
+val/251163_ALI_img.png
+val/251164_ALI_img.png
+val/251168_ALI_img.png
+val/251172_ALI_img.png
+val/251175_ALI_img.png
+val/251179_ALI_img.png
+val/251180_ALI_img.png
+val/251183_ALI_img.png
+val/251187_ALI_img.png
+val/251189_ALI_img.png
+val/251193_ALI_img.png
+val/251194_ALI_img.png
+val/251200_ALI_img.png
+val/251201_ALI_img.png
+val/251204_ALI_img.png
+val/251209_ALI_img.png
+val/251212_ALI_img.png
+val/251213_ALI_img.png
+val/251214_ALI_img.png
+val/251215_ALI_img.png
+val/251223_ALI_img.png
+val/251234_ALI_img.png
+val/251240_ALI_img.png
+val/251244_ALI_img.png
+val/251251_ALI_img.png
+val/251252_ALI_img.png
+val/251253_ALI_img.png
+val/251254_ALI_img.png
+val/251265_ALI_img.png
+val/251266_ALI_img.png
+val/251274_ALI_img.png
+val/251276_ALI_img.png
+val/251277_ALI_img.png
+val/251279_ALI_img.png
+val/251285_ALI_img.png
+val/251287_ALI_img.png
+val/251290_ALI_img.png
+val/251293_ALI_img.png
+val/251298_ALI_img.png
+val/251299_ALI_img.png
+val/251300_ALI_img.png
+val/251321_ALI_img.png
+val/251323_ALI_img.png
+val/251334_ALI_img.png
+val/251344_ALI_img.png
+val/251344_DT_img.png
+val/251345_ALI_img.png
+val/251346_ALI_img.png
+val/251349_ALI_img.png
+val/251353_ALI_img.png
+val/251356_ALI_img.png
+val/251358_ALI_img.png
+val/251366_ALI_img.png
+val/251368_ALI_img.png
+val/251370_ALI_img.png
+val/251379_ALI_img.png
+val/251380_ALI_img.png
+val/251381_ALI_img.png
+val/251383_ALI_img.png
+val/251385_ALI_img.png
+val/251388_ALI_img.png
+val/251396_ALI_img.png
+val/251398_ALI_img.png
+val/251407_ALI_img.png
+val/251408_ALI_img.png
+val/251411_ALI_img.png
+val/251413_ALI_img.png
+val/251414_ALI_img.png
+val/251419_ALI_img.png
+val/251426_ALI_img.png
+val/251429_ALI_img.png
+val/251432_ALI_img.png
+val/251436_ALI_img.png
+val/251441_ALI_img.png
+val/251445_ALI_img.png
+val/251448_ALI_img.png
+val/251452_ALI_img.png
+val/251455_ALI_img.png
+val/251457_ALI_img.png
+val/251458_ALI_img.png
+val/251461_ALI_img.png
+val/251467_ALI_img.png
+val/251468_ALI_img.png
+val/251469_ALI_img.png
+val/251471_ALI_img.png
+val/251478_ALI_img.png
+val/251491_ALI_img.png
+val/251496_ALI_img.png
+val/251501_ALI_img.png
+val/251503_ALI_img.png
+val/251505_ALI_img.png
+val/251509_ALI_img.png
+val/251510_ALI_img.png
+val/251512_ALI_img.png
+val/251515_ALI_img.png
+val/251516_ALI_img.png
+val/251519_ALI_img.png
+val/251528_ALI_img.png
+val/251530_ALI_img.png
+val/251534_ALI_img.png
+val/251536_ALI_img.png
+val/251542_ALI_img.png
+val/251549_ALI_img.png
+val/251550_ALI_img.png
+val/251551_ALI_img.png
+val/251555_ALI_img.png
+val/251557_ALI_img.png
+val/251558_ALI_img.png
+val/251559_ALI_img.png
+val/251566_ALI_img.png
+val/251574_ALI_img.png
+val/251575_ALI_img.png
+val/251577_ALI_img.png
+val/251579_ALI_img.png
+val/251596_ALI_img.png
+val/251606_ALI_img.png
+val/251609_ALI_img.png
+val/251611_ALI_img.png
+val/251618_ALI_img.png
+val/251619_ALI_img.png
+val/251628_ALI_img.png
+val/251636_ALI_img.png
+val/251643_ALI_img.png
+val/251647_ALI_img.png
+val/251650_ALI_img.png
+val/251654_ALI_img.png
+val/251663_ALI_img.png
+val/251670_ALI_img.png
+val/251672_ALI_img.png
+val/251676_ALI_img.png
+val/251677_ALI_img.png
+val/251684_ALI_img.png
+val/251685_ALI_img.png
+val/251688_ALI_img.png
+val/251689_ALI_img.png
+val/251697_ALI_img.png
+val/251699_ALI_img.png
+val/251710_ALI_img.png
+val/251711_ALI_img.png
+val/251719_ALI_img.png
+val/251724_ALI_img.png
+val/251729_ALI_img.png
+val/251733_ALI_img.png
+val/251734_ALI_img.png
+val/251736_ALI_img.png
+val/251739_ALI_img.png
+val/251748_ALI_img.png
+val/251749_ALI_img.png
+val/251756_ALI_img.png
+val/251758_ALI_img.png
+val/251766_ALI_img.png
+val/251773_ALI_img.png
+val/251778_ALI_img.png
+val/251781_ALI_img.png
+val/251784_ALI_img.png
+val/251795_ALI_img.png
+val/251798_ALI_img.png
+val/251799_ALI_img.png
+val/251801_ALI_img.png
+val/251806_ALI_img.png
+val/251809_ALI_img.png
+val/251811_ALI_img.png
+val/251813_ALI_img.png
+val/251825_ALI_img.png
+val/251826_ALI_img.png
+val/251827_ALI_img.png
+val/251830_ALI_img.png
+val/251836_ALI_img.png
+val/251838_ALI_img.png
+val/251839_ALI_img.png
+val/251848_ALI_img.png
+val/251852_ALI_img.png
+val/251864_ALI_img.png
+val/251870_ALI_img.png
+val/251882_ALI_img.png
+val/251886_ALI_img.png
+val/251895_ALI_img.png
+val/251896_ALI_img.png
+val/251896_DT_img.png
+val/251897_ALI_img.png
+val/251900_ALI_img.png
+val/251908_ALI_img.png
+val/251910_ALI_img.png
+val/251911_ALI_img.png
+val/251919_ALI_img.png
+val/251922_ALI_img.png
+val/251930_ALI_img.png
+val/251934_ALI_img.png
+val/251937_ALI_img.png
+val/251938_ALI_img.png
+val/251949_ALI_img.png
+val/251955_ALI_img.png
+val/251960_ALI_img.png
+val/251961_ALI_img.png
+val/251965_ALI_img.png
+val/251967_ALI_img.png
+val/251969_ALI_img.png
+val/251970_ALI_img.png
+val/251973_ALI_img.png
+val/251977_ALI_img.png
+val/251978_ALI_img.png
+val/251982_ALI_img.png
+val/251985_DT_img.png
+val/251990_ALI_img.png
+val/251992_ALI_img.png
+val/251994_ALI_img.png
+val/251995_ALI_img.png
+val/251997_ALI_img.png
+val/252004_DT_img.png
+val/252005_ALI_img.png
+val/252010_ALI_img.png
+val/252019_ALI_img.png
+val/252021_ALI_img.png
+val/252026_ALI_img.png
+val/252029_ALI_img.png
+val/252030_ALI_img.png
+val/252039_ALI_img.png
+val/252040_ALI_img.png
+val/252043_ALI_img.png
+val/252048_ALI_img.png
+val/252050_ALI_img.png
+val/252054_ALI_img.png
+val/252060_ALI_img.png
+val/252061_ALI_img.png
+val/252062_ALI_img.png
+val/252070_ALI_img.png
+val/252073_ALI_img.png
+val/252077_ALI_img.png
+val/252080_ALI_img.png
+val/252081_ALI_img.png
+val/252082_ALI_img.png
+val/252083_ALI_img.png
+val/252088_ALI_img.png
+val/252094_ALI_img.png
+val/252097_ALI_img.png
+val/252099_ALI_img.png
+val/252102_ALI_img.png
+val/252105_ALI_img.png
+val/252109_ALI_img.png
+val/252120_ALI_img.png
+val/252122_ALI_img.png
+val/252124_ALI_img.png
+val/252125_ALI_img.png
+val/252127_ALI_img.png
+val/252129_ALI_img.png
+val/252132_ALI_img.png
+val/252135_ALI_img.png
+val/252140_ALI_img.png
+val/252141_ALI_img.png
+val/252143_ALI_img.png
+val/252147_ALI_img.png
+val/252151_ALI_img.png
+val/252154_ALI_img.png
+val/252159_ALI_img.png
+val/252169_ALI_img.png
+val/252170_ALI_img.png
+val/252180_ALI_img.png
+val/252183_ALI_img.png
+val/252190_ALI_img.png
+val/252197_ALI_img.png
+val/252200_DT_img.png
+val/252203_ALI_img.png
+val/252206_ALI_img.png
+val/252207_ALI_img.png
+val/252209_ALI_img.png
+val/252219_ALI_img.png
+val/252222_ALI_img.png
+val/252223_ALI_img.png
+val/252229_ALI_img.png
+val/252230_ALI_img.png
+val/252232_ALI_img.png
+val/252241_ALI_img.png
+val/252253_ALI_img.png
+val/252254_ALI_img.png
+val/252257_ALI_img.png
+val/252258_ALI_img.png
+val/252265_ALI_img.png
+val/252266_ALI_img.png
+val/252267_ALI_img.png
+val/252268_ALI_img.png
+val/252274_ALI_img.png
+val/252279_ALI_img.png
+val/252284_ALI_img.png
+val/252287_ALI_img.png
+val/252288_ALI_img.png
+val/252289_ALI_img.png
+val/252290_ALI_img.png
+val/252294_ALI_img.png
+val/252295_ALI_img.png
+val/252303_ALI_img.png
+val/252308_ALI_img.png
+val/252310_ALI_img.png
+val/252313_ALI_img.png
+val/252314_ALI_img.png
+val/252317_ALI_img.png
+val/252323_ALI_img.png
+val/252324_ALI_img.png
+val/252325_ALI_img.png
+val/252326_ALI_img.png
+val/252331_ALI_img.png
+val/252332_ALI_img.png
+val/252333_ALI_img.png
+val/252338_ALI_img.png
+val/252340_ALI_img.png
+val/252347_ALI_img.png
+val/252348_ALI_img.png
+val/252360_ALI_img.png
+val/252361_ALI_img.png
+val/252372_ALI_img.png
+val/252376_ALI_img.png
+val/252378_ALI_img.png
+val/252382_ALI_img.png
+val/252386_ALI_img.png
+val/252389_ALI_img.png
+val/252392_ALI_img.png
+val/252393_ALI_img.png
+val/252413_ALI_img.png
+val/252417_ALI_img.png
+val/252422_ALI_img.png
+val/252423_ALI_img.png
+val/252427_ALI_img.png
+val/252436_ALI_img.png
+val/252438_ALI_img.png
+val/252453_ALI_img.png
+val/252454_ALI_img.png
+val/252455_ALI_img.png
+val/252466_ALI_img.png
+val/252468_ALI_img.png
+val/252472_ALI_img.png
+val/252476_ALI_img.png
+val/252486_ALI_img.png
+val/252495_ALI_img.png
+val/252499_ALI_img.png
+val/252511_ALI_img.png
+val/252512_ALI_img.png
+val/252524_ALI_img.png
+val/252527_ALI_img.png
+val/252528_ALI_img.png
+val/252529_ALI_img.png
+val/252532_ALI_img.png
+val/252534_ALI_img.png
+val/252536_ALI_img.png
+val/252538_ALI_img.png
+val/252539_ALI_img.png
+val/252541_ALI_img.png
+val/252551_ALI_img.png
+val/252554_ALI_img.png
+val/252557_ALI_img.png
+val/252558_ALI_img.png
+val/252579_ALI_img.png
+val/252586_ALI_img.png
+val/252596_ALI_img.png
+val/252599_ALI_img.png
+val/252600_ALI_img.png
+val/252607_ALI_img.png
+val/252610_ALI_img.png
+val/252612_ALI_img.png
+val/252621_ALI_img.png
+val/252624_ALI_img.png
+val/252627_ALI_img.png
+val/252628_ALI_img.png
+val/252631_ALI_img.png
+val/252632_ALI_img.png
+val/252637_ALI_img.png
+val/252643_ALI_img.png
+val/252653_ALI_img.png
+val/252662_ALI_img.png
+val/252665_ALI_img.png
+val/252678_ALI_img.png
+val/252680_ALI_img.png
+val/252684_ALI_img.png
+val/252688_ALI_img.png
+val/252689_ALI_img.png
+val/252690_ALI_img.png
+val/252693_ALI_img.png
+val/252700_ALI_img.png
+val/252702_ALI_img.png
+val/252707_ALI_img.png
+val/252712_ALI_img.png
+val/252714_ALI_img.png
+val/252723_ALI_img.png
+val/252729_ALI_img.png
+val/252735_ALI_img.png
+val/252740_ALI_img.png
+val/252743_ALI_img.png
+val/252747_ALI_img.png
+val/252748_ALI_img.png
+val/252755_ALI_img.png
+val/252756_ALI_img.png
+val/252757_ALI_img.png
+val/252758_ALI_img.png
+val/252761_ALI_img.png
+val/252762_ALI_img.png
+val/252766_ALI_img.png
+val/252770_ALI_img.png
+val/252785_ALI_img.png
+val/252786_ALI_img.png
+val/252798_ALI_img.png
+val/252800_ALI_img.png
+val/252812_ALI_img.png
+val/252814_ALI_img.png
+val/252815_ALI_img.png
+val/252818_ALI_img.png
+val/252822_ALI_img.png
+val/252824_ALI_img.png
+val/252827_ALI_img.png
+val/252829_ALI_img.png
+val/252831_ALI_img.png
+val/252834_ALI_img.png
+val/252837_ALI_img.png
+val/252840_ALI_img.png
+val/252841_ALI_img.png
+val/252848_ALI_img.png
+val/252851_ALI_img.png
+val/252853_ALI_img.png
+val/252862_ALI_img.png
+val/252872_ALI_img.png
+val/252874_ALI_img.png
+val/252876_ALI_img.png
+val/252880_ALI_img.png
+val/252883_ALI_img.png
+val/252884_ALI_img.png
+val/252892_ALI_img.png
+val/252897_ALI_img.png
+val/252902_ALI_img.png
+val/252903_ALI_img.png
+val/252904_ALI_img.png
+val/252905_ALI_img.png
+val/252914_ALI_img.png
+val/252917_ALI_img.png
+val/252918_ALI_img.png
+val/252924_ALI_img.png
+val/252930_ALI_img.png
+val/252934_ALI_img.png
+val/252942_ALI_img.png
+val/252946_ALI_img.png
+val/252955_ALI_img.png
+val/252957_ALI_img.png
+val/252958_ALI_img.png
+val/252959_ALI_img.png
+val/252960_ALI_img.png
+val/252962_ALI_img.png
+val/252968_ALI_img.png
+val/252972_ALI_img.png
+val/252976_ALI_img.png
+val/252983_ALI_img.png
+val/252986_ALI_img.png
+val/252987_ALI_img.png
+val/252988_ALI_img.png
+val/252991_ALI_img.png
+val/252997_ALI_img.png
+val/253008_ALI_img.png
+val/253011_ALI_img.png
+val/253016_ALI_img.png
+val/253023_ALI_img.png
+val/253025_ALI_img.png
+val/253029_ALI_img.png
+val/253034_ALI_img.png
+val/253039_ALI_img.png
+val/253040_ALI_img.png
+val/253051_ALI_img.png
+val/253052_ALI_img.png
+val/253056_ALI_img.png
+val/253063_ALI_img.png
+val/253064_ALI_img.png
+val/253065_ALI_img.png
+val/253070_ALI_img.png
+val/253076_ALI_img.png
+val/253078_DT_img.png
+val/253079_ALI_img.png
+val/253081_ALI_img.png
+val/253088_ALI_img.png
+val/253090_ALI_img.png
+val/253094_ALI_img.png
+val/253096_ALI_img.png
+val/253099_ALI_img.png
+val/253101_ALI_img.png
+val/253103_ALI_img.png
+val/253105_ALI_img.png
+val/253107_ALI_img.png
+val/253108_ALI_img.png
+val/253110_ALI_img.png
+val/253111_ALI_img.png
+val/253116_ALI_img.png
+val/253122_ALI_img.png
+val/253128_ALI_img.png
+val/253130_ALI_img.png
+val/253133_ALI_img.png
+val/253138_ALI_img.png
+val/253142_ALI_img.png
+val/253146_ALI_img.png
+val/253148_ALI_img.png
+val/253153_ALI_img.png
+val/253159_ALI_img.png
+val/253162_ALI_img.png
+val/253172_ALI_img.png
+val/253174_ALI_img.png
+val/253183_ALI_img.png
+val/253184_ALI_img.png
+val/253186_ALI_img.png
+val/253194_ALI_img.png
+val/253196_ALI_img.png
+val/253201_ALI_img.png
+val/253209_ALI_img.png
+val/253210_ALI_img.png
+val/253217_ALI_img.png
+val/253219_ALI_img.png
+val/253221_ALI_img.png
+val/253227_ALI_img.png
+val/253229_ALI_img.png
+val/253235_ALI_img.png
+val/253241_ALI_img.png
+val/253244_ALI_img.png
+val/253248_ALI_img.png
+val/253253_ALI_img.png
+val/253256_ALI_img.png
+val/253257_ALI_img.png
+val/253258_ALI_img.png
+val/253260_ALI_img.png
+val/253263_ALI_img.png
+val/253265_ALI_img.png
+val/253270_ALI_img.png
+val/253271_ALI_img.png
+val/253275_ALI_img.png
+val/253278_ALI_img.png
+val/253279_ALI_img.png
+val/253287_ALI_img.png
+val/253289_ALI_img.png
+val/253291_ALI_img.png
+val/253296_ALI_img.png
+val/253298_ALI_img.png
+val/253305_ALI_img.png
+val/253309_ALI_img.png
+val/253313_ALI_img.png
+val/253314_ALI_img.png
+val/253316_ALI_img.png
+val/253322_ALI_img.png
+val/253326_ALI_img.png
+val/253339_ALI_img.png
+val/253345_ALI_img.png
+val/253351_ALI_img.png
+val/253353_ALI_img.png
+val/253354_ALI_img.png
+val/253355_ALI_img.png
+val/253356_ALI_img.png
+val/253358_ALI_img.png
+val/253359_ALI_img.png
+val/253362_ALI_img.png
+val/253363_ALI_img.png
+val/253369_ALI_img.png
+val/253371_ALI_img.png
+val/253372_ALI_img.png
+val/253374_ALI_img.png
+val/253375_ALI_img.png
+val/253376_ALI_img.png
+val/253379_ALI_img.png
+val/253380_ALI_img.png
+val/253383_ALI_img.png
+val/253389_ALI_img.png
+val/253394_ALI_img.png
+val/253398_ALI_img.png
+val/253399_ALI_img.png
+val/253400_ALI_img.png
+val/253401_ALI_img.png
+val/253405_ALI_img.png
+val/253409_ALI_img.png
+val/253410_ALI_img.png
+val/253412_ALI_img.png
+val/253415_ALI_img.png
+val/253416_ALI_img.png
+val/253420_ALI_img.png
+val/253430_ALI_img.png
+val/253434_ALI_img.png
+val/253439_ALI_img.png
+val/253445_ALI_img.png
+val/253448_ALI_img.png
+val/253456_ALI_img.png
+val/253460_ALI_img.png
+val/253462_ALI_img.png
+val/253465_ALI_img.png
+val/253469_ALI_img.png
+val/253471_ALI_img.png
+val/253472_ALI_img.png
+val/253478_ALI_img.png
+val/253480_ALI_img.png
+val/253481_ALI_img.png
+val/253485_ALI_img.png
+val/253486_ALI_img.png
+val/253487_ALI_img.png
+val/253493_ALI_img.png
+val/253502_ALI_img.png
+val/253505_ALI_img.png
+val/253513_ALI_img.png
+val/253515_ALI_img.png
+val/253518_ALI_img.png
+val/253519_ALI_img.png
+val/253528_ALI_img.png
+val/253529_ALI_img.png
+val/253542_ALI_img.png
+val/253550_ALI_img.png
+val/253551_ALI_img.png
+val/253552_ALI_img.png
+val/253555_ALI_img.png
+val/253558_ALI_img.png
+val/253560_ALI_img.png
+val/253566_ALI_img.png
+val/253573_ALI_img.png
+val/253575_ALI_img.png
+val/253577_ALI_img.png
+val/253580_ALI_img.png
+val/253585_ALI_img.png
+val/253586_ALI_img.png
+val/253587_ALI_img.png
+val/253593_ALI_img.png
+val/253594_ALI_img.png
+val/253595_ALI_img.png
+val/253601_ALI_img.png
+val/253602_ALI_img.png
+val/253603_ALI_img.png
+val/253605_ALI_img.png
+val/253607_ALI_img.png
+val/253610_ALI_img.png
+val/253611_ALI_img.png
+val/253613_ALI_img.png
+val/253615_ALI_img.png
+val/253617_ALI_img.png
+val/253623_ALI_img.png
+val/253628_ALI_img.png
+val/253631_ALI_img.png
+val/253634_ALI_img.png
+val/253635_ALI_img.png
+val/253636_ALI_img.png
+val/253637_ALI_img.png
+val/253638_ALI_img.png
+val/253639_ALI_img.png
+val/253657_ALI_img.png
+val/253658_ALI_img.png
+val/253660_ALI_img.png
+val/253668_ALI_img.png
+val/253675_ALI_img.png
+val/253677_ALI_img.png
+val/253678_ALI_img.png
+val/253682_ALI_img.png
+val/253685_ALI_img.png
+val/253686_ALI_img.png
+val/253691_ALI_img.png
+val/253697_ALI_img.png
+val/253703_ALI_img.png
+val/253704_ALI_img.png
+val/253705_ALI_img.png
+val/253706_ALI_img.png
+val/253707_ALI_img.png
+val/253711_ALI_img.png
+val/253712_ALI_img.png
+val/253716_ALI_img.png
+val/253718_ALI_img.png
+val/253726_ALI_img.png
+val/253732_ALI_img.png
+val/253752_ALI_img.png
+val/253753_DT_img.png
+val/253755_ALI_img.png
+val/253758_ALI_img.png
+val/253762_ALI_img.png
+val/253767_ALI_img.png
+val/253771_ALI_img.png
+val/253773_ALI_img.png
+val/253775_ALI_img.png
+val/253778_ALI_img.png
+val/253781_ALI_img.png
+val/253782_ALI_img.png
+val/253785_ALI_img.png
+val/253786_ALI_img.png
+val/253787_ALI_img.png
+val/253790_ALI_img.png
+val/253792_ALI_img.png
+val/253793_ALI_img.png
+val/253796_ALI_img.png
+val/253799_ALI_img.png
+val/253801_ALI_img.png
+val/253802_ALI_img.png
+val/253803_ALI_img.png
+val/253804_ALI_img.png
+val/253806_ALI_img.png
+val/253808_ALI_img.png
+val/253811_ALI_img.png
+val/253814_ALI_img.png
+val/253817_ALI_img.png
+val/253819_ALI_img.png
+val/253820_ALI_img.png
+val/253821_ALI_img.png
+val/253824_ALI_img.png
+val/253839_ALI_img.png
+val/253844_ALI_img.png
+val/253847_ALI_img.png
+val/253849_ALI_img.png
+val/253852_ALI_img.png
+val/253855_ALI_img.png
+val/253861_ALI_img.png
+val/253864_ALI_img.png
+val/253865_ALI_img.png
+val/253869_ALI_img.png
+val/253871_ALI_img.png
+val/253872_ALI_img.png
+val/253874_ALI_img.png
+val/253877_ALI_img.png
+val/253891_ALI_img.png
+val/253892_ALI_img.png
+val/253895_ALI_img.png
+val/253897_ALI_img.png
+val/253898_ALI_img.png
+val/253909_ALI_img.png
+val/253910_ALI_img.png
+val/253912_ALI_img.png
+val/253914_ALI_img.png
+val/253919_ALI_img.png
+val/253931_ALI_img.png
+val/253932_ALI_img.png
+val/253935_ALI_img.png
+val/253942_ALI_img.png
+val/253948_ALI_img.png
+val/253960_ALI_img.png
+val/253961_ALI_img.png
+val/253964_ALI_img.png
+val/253970_ALI_img.png
+val/253972_ALI_img.png
+val/253975_ALI_img.png
+val/253977_ALI_img.png
+val/253982_ALI_img.png
+val/253985_ALI_img.png
+val/253990_ALI_img.png
+val/253992_ALI_img.png
+val/254000_ALI_img.png
+val/254007_ALI_img.png
+val/254020_ALI_img.png
+val/254024_ALI_img.png
+val/254025_ALI_img.png
+val/254028_ALI_img.png
+val/254030_ALI_img.png
+val/254033_ALI_img.png
+val/254034_ALI_img.png
+val/254038_ALI_img.png
+val/254045_ALI_img.png
+val/254047_ALI_img.png
+val/254049_ALI_img.png
+val/254050_ALI_img.png
+val/254051_ALI_img.png
+val/254057_ALI_img.png
+val/254062_ALI_img.png
+val/254066_ALI_img.png
+val/254070_ALI_img.png
+val/254094_ALI_img.png
+val/254097_ALI_img.png
+val/254102_ALI_img.png
+val/254104_ALI_img.png
+val/254106_ALI_img.png
+val/254108_ALI_img.png
+val/254110_ALI_img.png
+val/254112_ALI_img.png
+val/254117_ALI_img.png
+val/254122_ALI_img.png
+val/254124_ALI_img.png
+val/254126_ALI_img.png
+val/254127_ALI_img.png
+val/254129_ALI_img.png
+val/254130_ALI_img.png
+val/254138_ALI_img.png
+val/254141_ALI_img.png
+val/254146_ALI_img.png
+val/254147_ALI_img.png
+val/254148_ALI_img.png
+val/254151_ALI_img.png
+val/254156_ALI_img.png
+val/254157_ALI_img.png
+val/254159_ALI_img.png
+val/254161_ALI_img.png
+val/254172_ALI_img.png
+val/254175_ALI_img.png
+val/254176_ALI_img.png
+val/254189_ALI_img.png
+val/254190_ALI_img.png
+val/254194_ALI_img.png
+val/254195_ALI_img.png
+val/254210_ALI_img.png
+val/254218_ALI_img.png
+val/254226_ALI_img.png
+val/254227_ALI_img.png
+val/254231_ALI_img.png
+val/254236_ALI_img.png
+val/254237_ALI_img.png
+val/254243_ALI_img.png
+val/254248_ALI_img.png
+val/254251_ALI_img.png
+val/254253_ALI_img.png
+val/254259_ALI_img.png
+val/254268_ALI_img.png
+val/254269_ALI_img.png
+val/254273_ALI_img.png
+val/254276_ALI_img.png
+val/254277_ALI_img.png
+val/254278_ALI_img.png
+val/254280_ALI_img.png
+val/254284_ALI_img.png
+val/254292_ALI_img.png
+val/254297_ALI_img.png
+val/254302_ALI_img.png
+val/254304_ALI_img.png
+val/254307_ALI_img.png
+val/254310_ALI_img.png
+val/254313_ALI_img.png
+val/254314_ALI_img.png
+val/254316_ALI_img.png
+val/254318_ALI_img.png
+val/254319_ALI_img.png
+val/254321_ALI_img.png
+val/254324_ALI_img.png
+val/254327_ALI_img.png
+val/254340_ALI_img.png
+val/254341_ALI_img.png
+val/254350_ALI_img.png
+val/254351_ALI_img.png
+val/254354_ALI_img.png
+val/254357_ALI_img.png
+val/254361_ALI_img.png
+val/254364_ALI_img.png
+val/254368_ALI_img.png
+val/254374_ALI_img.png
+val/254388_ALI_img.png
+val/254394_ALI_img.png
+val/254395_ALI_img.png
+val/254402_ALI_img.png
+val/254403_ALI_img.png
+val/254404_ALI_img.png
+val/254405_ALI_img.png
+val/254412_ALI_img.png
+val/254416_ALI_img.png
+val/254417_ALI_img.png
+val/254421_ALI_img.png
+val/254422_ALI_img.png
+val/254424_ALI_img.png
+val/254433_ALI_img.png
+val/254446_ALI_img.png
+val/254449_ALI_img.png
+val/254452_ALI_img.png
+val/254453_ALI_img.png
+val/254456_ALI_img.png
+val/254462_ALI_img.png
+val/254467_ALI_img.png
+val/254468_ALI_img.png
+val/254469_ALI_img.png
+val/254470_ALI_img.png
+val/254472_ALI_img.png
+val/254473_ALI_img.png
+val/254479_ALI_img.png
+val/254480_ALI_img.png
+val/254481_ALI_img.png
+val/254483_ALI_img.png
+val/254484_ALI_img.png
+val/254487_ALI_img.png
+val/254490_ALI_img.png
+val/254491_ALI_img.png
+val/254499_ALI_img.png
+val/254500_ALI_img.png
+val/254502_ALI_img.png
+val/254509_ALI_img.png
+val/254511_ALI_img.png
+val/254518_ALI_img.png
+val/254519_ALI_img.png
+val/254520_ALI_img.png
+val/254524_ALI_img.png
+val/254528_ALI_img.png
+val/254529_ALI_img.png
+val/254530_ALI_img.png
+val/254532_ALI_img.png
+val/254535_ALI_img.png
+val/254539_ALI_img.png
+val/254540_ALI_img.png
+val/254541_ALI_img.png
+val/254542_ALI_img.png
+val/254550_ALI_img.png
+val/254553_ALI_img.png
+val/254561_ALI_img.png
+val/254566_ALI_img.png
+val/254570_ALI_img.png
+val/254574_ALI_img.png
+val/254577_ALI_img.png
+val/254580_ALI_img.png
+val/254584_ALI_img.png
+val/254589_ALI_img.png
+val/254597_ALI_img.png
+val/254608_ALI_img.png
+val/254610_ALI_img.png
+val/254617_ALI_img.png
+val/254621_ALI_img.png
+val/254624_ALI_img.png
+val/254625_ALI_img.png
+val/254626_ALI_img.png
+val/254634_ALI_img.png
+val/254648_ALI_img.png
+val/254653_ALI_img.png
+val/254664_ALI_img.png
+val/254666_ALI_img.png
+val/254667_ALI_img.png
+val/254669_ALI_img.png
+val/254670_ALI_img.png
+val/254673_DT_img.png
+val/254674_ALI_img.png
+val/254677_ALI_img.png
+val/254685_ALI_img.png
+val/254687_ALI_img.png
+val/254688_ALI_img.png
+val/254689_ALI_img.png
+val/254693_ALI_img.png
+val/254696_ALI_img.png
+val/254700_ALI_img.png
+val/254704_ALI_img.png
+val/254707_ALI_img.png
+val/254714_ALI_img.png
+val/254718_ALI_img.png
+val/254724_ALI_img.png
+val/254725_ALI_img.png
+val/254729_ALI_img.png
+val/254731_ALI_img.png
+val/254732_ALI_img.png
+val/254735_ALI_img.png
+val/254737_ALI_img.png
+val/254749_ALI_img.png
+val/254750_ALI_img.png
+val/254751_ALI_img.png
+val/254757_ALI_img.png
+val/254766_ALI_img.png
+val/254768_ALI_img.png
+val/254769_ALI_img.png
+val/254775_ALI_img.png
+val/254776_ALI_img.png
+val/254791_ALI_img.png
+val/254792_ALI_img.png
+val/254799_ALI_img.png
+val/254801_ALI_img.png
+val/254802_ALI_img.png
+val/254806_ALI_img.png
+val/254808_ALI_img.png
+val/254814_ALI_img.png
+val/254815_ALI_img.png
+val/254822_ALI_img.png
+val/254826_ALI_img.png
+val/254833_ALI_img.png
+val/254840_ALI_img.png
+val/254844_ALI_img.png
+val/254864_ALI_img.png
+val/254866_ALI_img.png
+val/254868_ALI_img.png
+val/254872_ALI_img.png
+val/254874_ALI_img.png
+val/254878_ALI_img.png
+val/254882_ALI_img.png
+val/254884_ALI_img.png
+val/254892_ALI_img.png
+val/254898_ALI_img.png
+val/254900_ALI_img.png
+val/254909_ALI_img.png
+val/254911_ALI_img.png
+val/254912_ALI_img.png
+val/254920_ALI_img.png
+val/254921_ALI_img.png
+val/254923_ALI_img.png
+val/254928_ALI_img.png
+val/254932_ALI_img.png
+val/254935_ALI_img.png
+val/254936_ALI_img.png
+val/254938_ALI_img.png
+val/254939_ALI_img.png
+val/254945_ALI_img.png
+val/254948_ALI_img.png
+val/254950_ALI_img.png
+val/254951_ALI_img.png
+val/254955_ALI_img.png
+val/254956_ALI_img.png
+val/254959_ALI_img.png
+val/254960_ALI_img.png
+val/254962_ALI_img.png
+val/254963_ALI_img.png
+val/254964_ALI_img.png
+val/254972_DT_img.png
+val/254979_ALI_img.png
+val/254985_ALI_img.png
+val/254987_ALI_img.png
+val/254990_ALI_img.png
+val/254993_ALI_img.png
+val/254994_ALI_img.png
+val/254996_ALI_img.png
+val/255002_ALI_img.png
+val/255003_ALI_img.png
+val/255004_ALI_img.png
+val/255007_ALI_img.png
+val/255013_ALI_img.png
+val/255016_ALI_img.png
+val/255022_ALI_img.png
+val/255024_DT_img.png
+val/255027_ALI_img.png
+val/255032_ALI_img.png
+val/255033_ALI_img.png
+val/255037_ALI_img.png
+val/255040_ALI_img.png
+val/255044_ALI_img.png
+val/255048_ALI_img.png
+val/255049_ALI_img.png
+val/255054_ALI_img.png
+val/255058_ALI_img.png
+val/255059_ALI_img.png
+val/255068_ALI_img.png
+val/255070_ALI_img.png
+val/255073_ALI_img.png
+val/255076_ALI_img.png
+val/255089_ALI_img.png
+val/255093_ALI_img.png
+val/255095_ALI_img.png
+val/255097_ALI_img.png
+val/255099_ALI_img.png
+val/255105_ALI_img.png
+val/255114_ALI_img.png
+val/255122_ALI_img.png
+val/255123_ALI_img.png
+val/255124_ALI_img.png
+val/255125_ALI_img.png
+val/255130_ALI_img.png
+val/255134_ALI_img.png
+val/255137_ALI_img.png
+val/255143_ALI_img.png
+val/255144_ALI_img.png
+val/255148_ALI_img.png
+val/255150_ALI_img.png
+val/255152_ALI_img.png
+val/255156_ALI_img.png
+val/255157_ALI_img.png
+val/255160_ALI_img.png
+val/255165_ALI_img.png
+val/255171_ALI_img.png
+val/255172_ALI_img.png
+val/255176_ALI_img.png
+val/255179_ALI_img.png
+val/255187_ALI_img.png
+val/255189_ALI_img.png
+val/255196_ALI_img.png
+val/255200_ALI_img.png
+val/255204_ALI_img.png
+val/255206_ALI_img.png
+val/255207_ALI_img.png
+val/255213_ALI_img.png
+val/255214_ALI_img.png
+val/255221_ALI_img.png
+val/255224_ALI_img.png
+val/255229_ALI_img.png
+val/255230_ALI_img.png
+val/255237_ALI_img.png
+val/255239_ALI_img.png
+val/255241_ALI_img.png
+val/255246_ALI_img.png
+val/255247_ALI_img.png
+val/255248_ALI_img.png
+val/255255_ALI_img.png
+val/255261_ALI_img.png
+val/255262_ALI_img.png
+val/255264_ALI_img.png
+val/255267_ALI_img.png
+val/255272_ALI_img.png
+val/255274_ALI_img.png
+val/255275_ALI_img.png
+val/255276_ALI_img.png
+val/255282_ALI_img.png
+val/255287_ALI_img.png
+val/255292_ALI_img.png
+val/255296_ALI_img.png
+val/255299_ALI_img.png
+val/255307_ALI_img.png
+val/255308_ALI_img.png
+val/255313_ALI_img.png
+val/255317_ALI_img.png
+val/255322_ALI_img.png
+val/255325_ALI_img.png
+val/255328_ALI_img.png
+val/255331_ALI_img.png
+val/255340_ALI_img.png
+val/255341_ALI_img.png
+val/255345_ALI_img.png
+val/255350_ALI_img.png
+val/255353_ALI_img.png
+val/255354_ALI_img.png
+val/255359_ALI_img.png
+val/255364_ALI_img.png
+val/255370_ALI_img.png
+val/255371_ALI_img.png
+val/255378_ALI_img.png
+val/255379_ALI_img.png
+val/255382_ALI_img.png
+val/255383_ALI_img.png
+val/255388_ALI_img.png
+val/255396_ALI_img.png
+val/255397_ALI_img.png
+val/255400_ALI_img.png
+val/255402_ALI_img.png
+val/255407_ALI_img.png
+val/255416_ALI_img.png
+val/255418_ALI_img.png
+val/255419_ALI_img.png
+val/255425_ALI_img.png
+val/255428_ALI_img.png
+val/255435_ALI_img.png
+val/255438_ALI_img.png
+val/255441_ALI_img.png
+val/255443_ALI_img.png
+val/255449_ALI_img.png
+val/255450_ALI_img.png
+val/255451_ALI_img.png
+val/255452_ALI_img.png
+val/255454_ALI_img.png
+val/255455_ALI_img.png
+val/255457_ALI_img.png
+val/255465_ALI_img.png
+val/255468_ALI_img.png
+val/255472_ALI_img.png
+val/255478_ALI_img.png
+val/255482_ALI_img.png
+val/255484_ALI_img.png
+val/255487_ALI_img.png
+val/255489_ALI_img.png
+val/255490_ALI_img.png
+val/255495_ALI_img.png
+val/255500_ALI_img.png
+val/255502_ALI_img.png
+val/255503_ALI_img.png
+val/255505_ALI_img.png
+val/255515_ALI_img.png
+val/255516_ALI_img.png
+val/255533_ALI_img.png
+val/255544_ALI_img.png
+val/255552_ALI_img.png
+val/255564_ALI_img.png
+val/255568_ALI_img.png
+val/255570_ALI_img.png
+val/255571_ALI_img.png
+val/255575_ALI_img.png
+val/255582_ALI_img.png
+val/255587_ALI_img.png
+val/255591_ALI_img.png
+val/255598_ALI_img.png
+val/255601_ALI_img.png
+val/255602_ALI_img.png
+val/255610_ALI_img.png
+val/255615_ALI_img.png
+val/255622_ALI_img.png
+val/255635_ALI_img.png
+val/255638_DT_img.png
+val/255640_ALI_img.png
+val/255641_ALI_img.png
+val/255643_ALI_img.png
+val/255644_ALI_img.png
+val/255645_ALI_img.png
+val/255652_ALI_img.png
+val/255654_ALI_img.png
+val/255658_ALI_img.png
+val/255659_ALI_img.png
+val/255664_ALI_img.png
+val/255665_ALI_img.png
+val/255676_ALI_img.png
+val/255683_ALI_img.png
+val/255686_ALI_img.png
+val/255687_ALI_img.png
+val/255692_ALI_img.png
+val/255697_ALI_img.png
+val/255703_ALI_img.png
+val/255716_ALI_img.png
+val/255718_ALI_img.png
+val/255732_ALI_img.png
+val/255738_ALI_img.png
+val/255739_ALI_img.png
+val/255746_ALI_img.png
+val/255756_ALI_img.png
+val/255764_ALI_img.png
+val/255766_ALI_img.png
+val/255767_ALI_img.png
+val/255768_ALI_img.png
+val/255781_ALI_img.png
+val/255786_ALI_img.png
+val/255787_ALI_img.png
+val/255796_ALI_img.png
+val/255798_ALI_img.png
+val/255801_ALI_img.png
+val/255803_ALI_img.png
+val/255806_ALI_img.png
+val/255812_ALI_img.png
+val/255817_ALI_img.png
+val/255818_ALI_img.png
+val/255827_ALI_img.png
+val/255830_ALI_img.png
+val/255833_ALI_img.png
+val/255834_ALI_img.png
+val/255838_ALI_img.png
+val/255840_ALI_img.png
+val/255851_ALI_img.png
+val/255854_ALI_img.png
+val/255855_ALI_img.png
+val/255859_ALI_img.png
+val/255863_ALI_img.png
+val/255879_ALI_img.png
+val/255880_ALI_img.png
+val/255884_ALI_img.png
+val/255893_ALI_img.png
+val/255896_ALI_img.png
+val/255904_ALI_img.png
+val/255906_ALI_img.png
+val/255909_ALI_img.png
+val/255912_ALI_img.png
+val/255915_ALI_img.png
+val/255922_ALI_img.png
+val/255933_ALI_img.png
+val/255944_ALI_img.png
+val/255946_ALI_img.png
+val/255950_ALI_img.png
+val/255951_ALI_img.png
+val/255952_ALI_img.png
+val/255953_ALI_img.png
+val/255957_ALI_img.png
+val/255959_ALI_img.png
+val/255962_ALI_img.png
+val/255967_ALI_img.png
+val/255971_ALI_img.png
+val/255974_ALI_img.png
+val/255977_ALI_img.png
+val/255980_ALI_img.png
+val/255982_ALI_img.png
+val/255984_ALI_img.png
+val/255988_ALI_img.png
+val/255989_ALI_img.png
+val/255990_ALI_img.png
+val/255993_ALI_img.png
+val/255994_ALI_img.png
+val/256000_ALI_img.png
+val/256004_ALI_img.png
+val/256005_ALI_img.png
+val/256006_ALI_img.png
+val/256008_ALI_img.png
+val/256010_ALI_img.png
+val/256022_ALI_img.png
+val/256024_ALI_img.png
+val/256027_ALI_img.png
+val/256028_ALI_img.png
+val/256030_ALI_img.png
+val/256031_ALI_img.png
+val/256043_ALI_img.png
+val/256046_ALI_img.png
+val/256055_ALI_img.png
+val/256063_ALI_img.png
+val/256064_ALI_img.png
+val/256065_ALI_img.png
+val/256069_ALI_img.png
+val/256074_ALI_img.png
+val/256075_ALI_img.png
+val/256080_ALI_img.png
+val/256081_ALI_img.png
+val/256086_ALI_img.png
+val/256095_ALI_img.png
+val/256113_ALI_img.png
+val/256119_ALI_img.png
+val/256121_ALI_img.png
+val/256124_DT_img.png
+val/256134_ALI_img.png
+val/256135_ALI_img.png
+val/256144_ALI_img.png
+val/256157_ALI_img.png
+val/256161_ALI_img.png
+val/256162_ALI_img.png
+val/256163_ALI_img.png
+val/256171_ALI_img.png
+val/256178_ALI_img.png
+val/256183_ALI_img.png
+val/256186_ALI_img.png
+val/256188_ALI_img.png
+val/256193_ALI_img.png
+val/256198_ALI_img.png
+val/256201_ALI_img.png
+val/256210_ALI_img.png
+val/256214_ALI_img.png
+val/256217_ALI_img.png
+val/256218_ALI_img.png
+val/256222_ALI_img.png
+val/256224_ALI_img.png
+val/256225_ALI_img.png
+val/256227_ALI_img.png
+val/256238_ALI_img.png
+val/256245_ALI_img.png
+val/256248_ALI_img.png
+val/256253_ALI_img.png
+val/256255_ALI_img.png
+val/256260_ALI_img.png
+val/256263_ALI_img.png
+val/256266_ALI_img.png
+val/256267_ALI_img.png
+val/256270_ALI_img.png
+val/256275_ALI_img.png
+val/256277_ALI_img.png
+val/256278_ALI_img.png
+val/256286_ALI_img.png
+val/256289_ALI_img.png
+val/256290_ALI_img.png
+val/256301_ALI_img.png
+val/256315_ALI_img.png
+val/256316_ALI_img.png
+val/256322_ALI_img.png
+val/256324_ALI_img.png
+val/256325_ALI_img.png
+val/256326_ALI_img.png
+val/256336_ALI_img.png
+val/256340_ALI_img.png
+val/256342_ALI_img.png
+val/256344_ALI_img.png
+val/256346_ALI_img.png
+val/256347_ALI_img.png
+val/256351_ALI_img.png
+val/256357_ALI_img.png
+val/256359_ALI_img.png
+val/256375_ALI_img.png
+val/256377_ALI_img.png
+val/256379_ALI_img.png
+val/256381_ALI_img.png
+val/256386_ALI_img.png
+val/256387_ALI_img.png
+val/256398_ALI_img.png
+val/256404_ALI_img.png
+val/256411_ALI_img.png
+val/256420_ALI_img.png
+val/256421_ALI_img.png
+val/256424_ALI_img.png
+val/256426_ALI_img.png
+val/256428_ALI_img.png
+val/256430_ALI_img.png
+val/256432_ALI_img.png
+val/256433_ALI_img.png
+val/256440_ALI_img.png
+val/256442_ALI_img.png
+val/256446_ALI_img.png
+val/256447_ALI_img.png
+val/256450_ALI_img.png
+val/256455_ALI_img.png
+val/256456_ALI_img.png
+val/256460_ALI_img.png
+val/256463_ALI_img.png
+val/256476_ALI_img.png
+val/256487_ALI_img.png
+val/256492_ALI_img.png
+val/256496_ALI_img.png
+val/256502_ALI_img.png
+val/256503_ALI_img.png
+val/256507_ALI_img.png
+val/256511_ALI_img.png
+val/256520_ALI_img.png
+val/256521_ALI_img.png
+val/256528_ALI_img.png
+val/256529_ALI_img.png
+val/256531_DT_img.png
+val/256532_ALI_img.png
+val/256533_ALI_img.png
+val/256538_ALI_img.png
+val/256541_ALI_img.png
+val/256546_ALI_img.png
+val/256547_ALI_img.png
+val/256548_ALI_img.png
+val/256555_ALI_img.png
+val/256559_ALI_img.png
+val/256560_ALI_img.png
+val/256561_ALI_img.png
+val/256563_ALI_img.png
+val/256567_ALI_img.png
+val/256571_ALI_img.png
+val/256572_ALI_img.png
+val/256578_ALI_img.png
+val/256585_ALI_img.png
+val/256588_ALI_img.png
+val/256589_ALI_img.png
+val/256590_ALI_img.png
+val/256593_ALI_img.png
+val/256595_ALI_img.png
+val/256600_ALI_img.png
+val/256601_ALI_img.png
+val/256604_ALI_img.png
+val/256605_ALI_img.png
+val/256609_ALI_img.png
+val/256610_ALI_img.png
+val/256611_ALI_img.png
+val/256614_ALI_img.png
+val/256618_ALI_img.png
+val/256619_ALI_img.png
+val/256621_ALI_img.png
+val/256630_ALI_img.png
+val/256638_ALI_img.png
+val/256639_ALI_img.png
+val/256641_ALI_img.png
+val/256642_ALI_img.png
+val/256645_ALI_img.png
+val/256647_ALI_img.png
+val/256650_ALI_img.png
+val/256660_ALI_img.png
+val/256661_ALI_img.png
+val/256663_ALI_img.png
+val/256664_ALI_img.png
+val/256665_ALI_img.png
+val/256678_ALI_img.png
+val/256690_ALI_img.png
+val/256696_ALI_img.png
+val/256698_ALI_img.png
+val/256703_ALI_img.png
+val/256707_ALI_img.png
+val/256721_ALI_img.png
+val/256724_ALI_img.png
+val/256726_ALI_img.png
+val/256731_ALI_img.png
+val/256732_ALI_img.png
+val/256733_ALI_img.png
+val/256736_ALI_img.png
+val/256740_ALI_img.png
+val/256748_ALI_img.png
+val/256755_ALI_img.png
+val/256765_ALI_img.png
+val/256767_ALI_img.png
+val/256769_ALI_img.png
+val/256770_ALI_img.png
+val/256771_ALI_img.png
+val/256772_ALI_img.png
+val/256774_ALI_img.png
+val/256785_ALI_img.png
+val/256787_DT_img.png
+val/256807_ALI_img.png
+val/256815_ALI_img.png
+val/256819_ALI_img.png
+val/256822_ALI_img.png
+val/256824_ALI_img.png
+val/256827_ALI_img.png
+val/256830_ALI_img.png
+val/256835_ALI_img.png
+val/256836_ALI_img.png
+val/256843_ALI_img.png
+val/256847_ALI_img.png
+val/256848_ALI_img.png
+val/256851_ALI_img.png
+val/256856_ALI_img.png
+val/256862_ALI_img.png
+val/256866_ALI_img.png
+val/256875_ALI_img.png
+val/256887_ALI_img.png
+val/256893_ALI_img.png
+val/256895_ALI_img.png
+val/256896_ALI_img.png
+val/256900_ALI_img.png
+val/256901_ALI_img.png
+val/256904_ALI_img.png
+val/256910_ALI_img.png
+val/256912_ALI_img.png
+val/256913_ALI_img.png
+val/256915_ALI_img.png
+val/256919_ALI_img.png
+val/256930_ALI_img.png
+val/256931_ALI_img.png
+val/256932_ALI_img.png
+val/256937_ALI_img.png
+val/256939_ALI_img.png
+val/256942_ALI_img.png
+val/256945_ALI_img.png
+val/256951_ALI_img.png
+val/256954_ALI_img.png
+val/256962_ALI_img.png
+val/256965_ALI_img.png
+val/256968_ALI_img.png
+val/256970_ALI_img.png
+val/256973_ALI_img.png
+val/256974_ALI_img.png
+val/256982_ALI_img.png
+val/256986_ALI_img.png
+val/256989_ALI_img.png
+val/256991_ALI_img.png
+val/256992_ALI_img.png
+val/256993_ALI_img.png
+val/256995_ALI_img.png
+val/257002_ALI_img.png
+val/257006_ALI_img.png
+val/257010_ALI_img.png
+val/257011_ALI_img.png
+val/257019_ALI_img.png
+val/257024_ALI_img.png
+val/257033_ALI_img.png
+val/257034_ALI_img.png
+val/257036_ALI_img.png
+val/257038_ALI_img.png
+val/257044_ALI_img.png
+val/257046_ALI_img.png
+val/257047_ALI_img.png
+val/257053_ALI_img.png
+val/257054_ALI_img.png
+val/257061_ALI_img.png
+val/257068_ALI_img.png
+val/257071_ALI_img.png
+val/257072_ALI_img.png
+val/257075_ALI_img.png
+val/257077_ALI_img.png
+val/257079_ALI_img.png
+val/257087_ALI_img.png
+val/257091_ALI_img.png
+val/257092_ALI_img.png
+val/257096_ALI_img.png
+val/257098_ALI_img.png
+val/257103_ALI_img.png
+val/257107_ALI_img.png
+val/257110_ALI_img.png
+val/257117_ALI_img.png
+val/257122_ALI_img.png
+val/257125_ALI_img.png
+val/257126_ALI_img.png
+val/257128_ALI_img.png
+val/257130_ALI_img.png
+val/257133_ALI_img.png
+val/257136_ALI_img.png
+val/257137_ALI_img.png
+val/257138_ALI_img.png
+val/257139_ALI_img.png
+val/257156_ALI_img.png
+val/257160_ALI_img.png
+val/257173_ALI_img.png
+val/257174_ALI_img.png
+val/257175_ALI_img.png
+val/257177_ALI_img.png
+val/257180_ALI_img.png
+val/257181_ALI_img.png
+val/257183_ALI_img.png
+val/257186_ALI_img.png
+val/257190_ALI_img.png
+val/257191_ALI_img.png
+val/257194_ALI_img.png
+val/257198_ALI_img.png
+val/257199_ALI_img.png
+val/257202_ALI_img.png
+val/257206_ALI_img.png
+val/257209_ALI_img.png
+val/257214_ALI_img.png
+val/257218_ALI_img.png
+val/257221_ALI_img.png
+val/257226_ALI_img.png
+val/257230_ALI_img.png
+val/257233_ALI_img.png
+val/257237_ALI_img.png
+val/257238_ALI_img.png
+val/257239_ALI_img.png
+val/257241_ALI_img.png
+val/257249_ALI_img.png
+val/257256_ALI_img.png
+val/257262_ALI_img.png
+val/257264_ALI_img.png
+val/257270_ALI_img.png
+val/257271_ALI_img.png
+val/257278_ALI_img.png
+val/257280_ALI_img.png
+val/257285_ALI_img.png
+val/257289_ALI_img.png
+val/257292_ALI_img.png
+val/257299_ALI_img.png
+val/257310_ALI_img.png
+val/257316_ALI_img.png
+val/257317_ALI_img.png
+val/257322_ALI_img.png
+val/257323_ALI_img.png
+val/257326_ALI_img.png
+val/257327_ALI_img.png
+val/257330_ALI_img.png
+val/257335_ALI_img.png
+val/257337_ALI_img.png
+val/257353_ALI_img.png
+val/257358_ALI_img.png
+val/257360_ALI_img.png
+val/257361_ALI_img.png
+val/257369_ALI_img.png
+val/257370_ALI_img.png
+val/257371_ALI_img.png
+val/257376_ALI_img.png
+val/257383_ALI_img.png
+val/257384_ALI_img.png
+val/257386_ALI_img.png
+val/257390_ALI_img.png
+val/257392_ALI_img.png
+val/257397_ALI_img.png
+val/257398_ALI_img.png
+val/257399_ALI_img.png
+val/257401_ALI_img.png
+val/257405_ALI_img.png
+val/257411_ALI_img.png
+val/257413_ALI_img.png
+val/257416_ALI_img.png
+val/257419_ALI_img.png
+val/257421_ALI_img.png
+val/257423_ALI_img.png
+val/257424_ALI_img.png
+val/257425_ALI_img.png
+val/257430_ALI_img.png
+val/257433_ALI_img.png
+val/257435_ALI_img.png
+val/257436_ALI_img.png
+val/257439_ALI_img.png
+val/257448_ALI_img.png
+val/257459_ALI_img.png
+val/257461_ALI_img.png
+val/257468_ALI_img.png
+val/257471_ALI_img.png
+val/257473_ALI_img.png
+val/257475_ALI_img.png
+val/257485_ALI_img.png
+val/257488_ALI_img.png
+val/257489_ALI_img.png
+val/257490_ALI_img.png
+val/257494_ALI_img.png
+val/257496_ALI_img.png
+val/257499_ALI_img.png
+val/257535_ALI_img.png
+val/257544_ALI_img.png
+val/257548_ALI_img.png
+val/257553_ALI_img.png
+val/257555_ALI_img.png
+val/257556_ALI_img.png
+val/257561_ALI_img.png
+val/257568_ALI_img.png
+val/257569_ALI_img.png
+val/257573_ALI_img.png
+val/257580_ALI_img.png
+val/257585_ALI_img.png
+val/257586_ALI_img.png
+val/257587_ALI_img.png
+val/257589_ALI_img.png
+val/257600_ALI_img.png
+val/257602_ALI_img.png
+val/257607_ALI_img.png
+val/257608_ALI_img.png
+val/257611_ALI_img.png
+val/257616_ALI_img.png
+val/257624_ALI_img.png
+val/257629_ALI_img.png
+val/257636_ALI_img.png
+val/257640_ALI_img.png
+val/257642_ALI_img.png
+val/257645_ALI_img.png
+val/257651_ALI_img.png
+val/257654_ALI_img.png
+val/257655_ALI_img.png
+val/257656_ALI_img.png
+val/257663_ALI_img.png
+val/257664_ALI_img.png
+val/257665_ALI_img.png
+val/257670_ALI_img.png
+val/257680_ALI_img.png
+val/257685_ALI_img.png
+val/257695_ALI_img.png
+val/257702_ALI_img.png
+val/257703_ALI_img.png
+val/257704_ALI_img.png
+val/257712_ALI_img.png
+val/257713_ALI_img.png
+val/257716_ALI_img.png
+val/257719_ALI_img.png
+val/257722_ALI_img.png
+val/257723_ALI_img.png
+val/257725_ALI_img.png
+val/257741_ALI_img.png
+val/257746_ALI_img.png
+val/257747_ALI_img.png
+val/257761_ALI_img.png
+val/257764_ALI_img.png
+val/257765_ALI_img.png
+val/257768_ALI_img.png
+val/257773_ALI_img.png
+val/257776_ALI_img.png
+val/257778_ALI_img.png
+val/257779_ALI_img.png
+val/257781_ALI_img.png
+val/257785_ALI_img.png
+val/257787_ALI_img.png
+val/257789_ALI_img.png
+val/257792_ALI_img.png
+val/257797_ALI_img.png
+val/257807_ALI_img.png
+val/257811_ALI_img.png
+val/257813_ALI_img.png
+val/257814_ALI_img.png
+val/257816_ALI_img.png
+val/257817_ALI_img.png
+val/257818_ALI_img.png
+val/257820_ALI_img.png
+val/257823_ALI_img.png
+val/257824_ALI_img.png
+val/257828_ALI_img.png
+val/257829_ALI_img.png
+val/257830_ALI_img.png
+val/257832_ALI_img.png
+val/257840_ALI_img.png
+val/257841_ALI_img.png
+val/257846_ALI_img.png
+val/257850_ALI_img.png
+val/257858_ALI_img.png
+val/257862_ALI_img.png
+val/257864_ALI_img.png
+val/257866_ALI_img.png
+val/257869_ALI_img.png
+val/257870_ALI_img.png
+val/257880_ALI_img.png
+val/257883_ALI_img.png
+val/257886_ALI_img.png
+val/257887_ALI_img.png
+val/257893_ALI_img.png
+val/257896_ALI_img.png
+val/257899_ALI_img.png
+val/257901_ALI_img.png
+val/257904_ALI_img.png
+val/257910_ALI_img.png
+val/257914_ALI_img.png
+val/257915_ALI_img.png
+val/257917_ALI_img.png
+val/257928_ALI_img.png
+val/257933_ALI_img.png
+val/257945_ALI_img.png
+val/257950_ALI_img.png
+val/257954_ALI_img.png
+val/257955_ALI_img.png
+val/257956_ALI_img.png
+val/257957_ALI_img.png
+val/257961_ALI_img.png
+val/257963_ALI_img.png
+val/257967_ALI_img.png
+val/257977_ALI_img.png
+val/257984_ALI_img.png
+val/257985_ALI_img.png
+val/257986_ALI_img.png
+val/257990_ALI_img.png
+val/257993_ALI_img.png
+val/257998_ALI_img.png
+val/258000_ALI_img.png
+val/258006_ALI_img.png
+val/258010_ALI_img.png
+val/258014_ALI_img.png
+val/258019_ALI_img.png
+val/258027_ALI_img.png
+val/258030_ALI_img.png
+val/258033_ALI_img.png
+val/258036_ALI_img.png
+val/258038_ALI_img.png
+val/258049_ALI_img.png
+val/258056_ALI_img.png
+val/258057_ALI_img.png
+val/258062_ALI_img.png
+val/258066_ALI_img.png
+val/258067_ALI_img.png
+val/258068_ALI_img.png
+val/258071_ALI_img.png
+val/258076_ALI_img.png
+val/258080_ALI_img.png
+val/258081_ALI_img.png
+val/258085_ALI_img.png
+val/258089_ALI_img.png
+val/258098_ALI_img.png
+val/258100_ALI_img.png
+val/258101_ALI_img.png
+val/258104_ALI_img.png
+val/258106_ALI_img.png
+val/258111_ALI_img.png
+val/258112_ALI_img.png
+val/258115_ALI_img.png
+val/258116_ALI_img.png
+val/258129_ALI_img.png
+val/258136_ALI_img.png
+val/258137_ALI_img.png
+val/258138_ALI_img.png
+val/258139_ALI_img.png
+val/258142_ALI_img.png
+val/258148_ALI_img.png
+val/258150_ALI_img.png
+val/258151_ALI_img.png
+val/258153_ALI_img.png
+val/258155_ALI_img.png
+val/258156_ALI_img.png
+val/258157_ALI_img.png
+val/258158_ALI_img.png
+val/258159_ALI_img.png
+val/258168_ALI_img.png
+val/258170_ALI_img.png
+val/258178_ALI_img.png
+val/258187_ALI_img.png
+val/258192_ALI_img.png
+val/258199_ALI_img.png
+val/258202_ALI_img.png
+val/258206_ALI_img.png
+val/258208_ALI_img.png
+val/258210_ALI_img.png
+val/258213_ALI_img.png
+val/258214_ALI_img.png
+val/258226_ALI_img.png
+val/258230_ALI_img.png
+val/258233_ALI_img.png
+val/258234_ALI_img.png
+val/258237_ALI_img.png
+val/258243_ALI_img.png
+val/258245_ALI_img.png
+val/258247_ALI_img.png
+val/258251_ALI_img.png
+val/258253_ALI_img.png
+val/258255_ALI_img.png
+val/258260_ALI_img.png
+val/258261_ALI_img.png
+val/258263_ALI_img.png
+val/258272_ALI_img.png
+val/258277_ALI_img.png
+val/258281_ALI_img.png
+val/258282_ALI_img.png
+val/258287_ALI_img.png
+val/258290_ALI_img.png
+val/258291_ALI_img.png
+val/258303_ALI_img.png
+val/258307_ALI_img.png
+val/258308_ALI_img.png
+val/258320_ALI_img.png
+val/258321_ALI_img.png
+val/258323_ALI_img.png
+val/258330_ALI_img.png
+val/258339_ALI_img.png
+val/258346_ALI_img.png
+val/258347_ALI_img.png
+val/258348_ALI_img.png
+val/258349_ALI_img.png
+val/258350_ALI_img.png
+val/258363_ALI_img.png
+val/258366_ALI_img.png
+val/258371_ALI_img.png
+val/258375_ALI_img.png
+val/258376_ALI_img.png
+val/258380_ALI_img.png
+val/258386_ALI_img.png
+val/258387_ALI_img.png
+val/258392_ALI_img.png
+val/258395_ALI_img.png
+val/258398_ALI_img.png
+val/258402_ALI_img.png
+val/258404_ALI_img.png
+val/258410_ALI_img.png
+val/258417_ALI_img.png
+val/258420_ALI_img.png
+val/258424_ALI_img.png
+val/258426_ALI_img.png
+val/258437_ALI_img.png
+val/258438_ALI_img.png
+val/258440_ALI_img.png
+val/258445_ALI_img.png
+val/258447_ALI_img.png
+val/258453_ALI_img.png
+val/258454_ALI_img.png
+val/258457_ALI_img.png
+val/258465_ALI_img.png
+val/258466_ALI_img.png
+val/258474_ALI_img.png
+val/258475_ALI_img.png
+val/258476_ALI_img.png
+val/258484_ALI_img.png
+val/258488_ALI_img.png
+val/258490_ALI_img.png
+val/258493_ALI_img.png
+val/258495_ALI_img.png
+val/258501_ALI_img.png
+val/258506_ALI_img.png
+val/258507_ALI_img.png
+val/258508_ALI_img.png
+val/258513_ALI_img.png
+val/258519_ALI_img.png
+val/258521_ALI_img.png
+val/258522_ALI_img.png
+val/258527_ALI_img.png
+val/258533_ALI_img.png
+val/258536_ALI_img.png
+val/258537_ALI_img.png
+val/258548_ALI_img.png
+val/258554_ALI_img.png
+val/258555_ALI_img.png
+val/258560_ALI_img.png
+val/258569_ALI_img.png
+val/258577_ALI_img.png
+val/258581_ALI_img.png
+val/258583_ALI_img.png
+val/258593_ALI_img.png
+val/258609_ALI_img.png
+val/258610_ALI_img.png
+val/258613_ALI_img.png
+val/258622_ALI_img.png
+val/258634_ALI_img.png
+val/258641_ALI_img.png
+val/258647_ALI_img.png
+val/258656_ALI_img.png
+val/258657_ALI_img.png
+val/258659_ALI_img.png
+val/258663_ALI_img.png
+val/258666_ALI_img.png
+val/258668_ALI_img.png
+val/258669_ALI_img.png
+val/258673_ALI_img.png
+val/258678_ALI_img.png
+val/258680_ALI_img.png
+val/258682_ALI_img.png
+val/258684_ALI_img.png
+val/258690_ALI_img.png
+val/258696_ALI_img.png
+val/258701_ALI_img.png
+val/258702_ALI_img.png
+val/258703_ALI_img.png
+val/258704_ALI_img.png
+val/258711_ALI_img.png
+val/258714_ALI_img.png
+val/258716_ALI_img.png
+val/258720_ALI_img.png
+val/258732_ALI_img.png
+val/258733_ALI_img.png
+val/258739_ALI_img.png
+val/258746_ALI_img.png
+val/258751_ALI_img.png
+val/258752_ALI_img.png
+val/258760_ALI_img.png
+val/258767_ALI_img.png
+val/258769_ALI_img.png
+val/258775_ALI_img.png
+val/258786_ALI_img.png
+val/258787_ALI_img.png
+val/258790_ALI_img.png
+val/258792_ALI_img.png
+val/258795_ALI_img.png
+val/258800_ALI_img.png
+val/258801_ALI_img.png
+val/258802_ALI_img.png
+val/258805_ALI_img.png
+val/258809_ALI_img.png
+val/258811_ALI_img.png
+val/258812_ALI_img.png
+val/258815_ALI_img.png
+val/258828_ALI_img.png
+val/258831_ALI_img.png
+val/258832_ALI_img.png
+val/258839_ALI_img.png
+val/258848_ALI_img.png
+val/258849_ALI_img.png
+val/258850_ALI_img.png
+val/258851_ALI_img.png
+val/258853_ALI_img.png
+val/258854_ALI_img.png
+val/258857_ALI_img.png
+val/258859_ALI_img.png
+val/258861_ALI_img.png
+val/258872_ALI_img.png
+val/258878_ALI_img.png
+val/258884_ALI_img.png
+val/258886_ALI_img.png
+val/258887_ALI_img.png
+val/258897_ALI_img.png
+val/258901_ALI_img.png
+val/258906_ALI_img.png
+val/258913_ALI_img.png
+val/258916_ALI_img.png
+val/258930_ALI_img.png
+val/258933_ALI_img.png
+val/258934_ALI_img.png
+val/258935_ALI_img.png
+val/258941_ALI_img.png
+val/258942_ALI_img.png
+val/258947_ALI_img.png
+val/258953_ALI_img.png
+val/258958_ALI_img.png
+val/258962_ALI_img.png
+val/258964_ALI_img.png
+val/258969_ALI_img.png
+val/258973_ALI_img.png
+val/258975_ALI_img.png
+val/258978_ALI_img.png
+val/258980_ALI_img.png
+val/258981_ALI_img.png
+val/258982_ALI_img.png
+val/258984_ALI_img.png
+val/258992_ALI_img.png
+val/258997_ALI_img.png
+val/259000_ALI_img.png
+val/259002_ALI_img.png
+val/259005_ALI_img.png
+val/259006_ALI_img.png
+val/259009_ALI_img.png
+val/259014_ALI_img.png
+val/259015_ALI_img.png
+val/259020_ALI_img.png
+val/259023_ALI_img.png
+val/259025_ALI_img.png
+val/259036_ALI_img.png
+val/259038_ALI_img.png
+val/259040_ALI_img.png
+val/259046_ALI_img.png
+val/259053_ALI_img.png
+val/259055_ALI_img.png
+val/259067_ALI_img.png
+val/259068_ALI_img.png
+val/259075_ALI_img.png
+val/259078_ALI_img.png
+val/259081_ALI_img.png
+val/259086_ALI_img.png
+val/259092_ALI_img.png
+val/259095_ALI_img.png
+val/259097_ALI_img.png
+val/259101_ALI_img.png
+val/259102_ALI_img.png
+val/259111_ALI_img.png
+val/259112_ALI_img.png
+val/259113_ALI_img.png
+val/259124_DT_img.png
+val/259127_ALI_img.png
+val/259128_ALI_img.png
+val/259129_ALI_img.png
+val/259133_ALI_img.png
+val/259134_ALI_img.png
+val/259149_ALI_img.png
+val/259159_ALI_img.png
+val/259160_ALI_img.png
+val/259166_ALI_img.png
+val/259168_ALI_img.png
+val/259169_ALI_img.png
+val/259173_ALI_img.png
+val/259174_ALI_img.png
+val/259175_ALI_img.png
+val/259177_ALI_img.png
+val/259178_ALI_img.png
+val/259183_ALI_img.png
+val/259185_ALI_img.png
+val/259186_ALI_img.png
+val/259190_ALI_img.png
+val/259194_ALI_img.png
+val/259197_ALI_img.png
+val/259201_ALI_img.png
+val/259204_ALI_img.png
+val/259210_ALI_img.png
+val/259212_ALI_img.png
+val/259220_ALI_img.png
+val/259222_ALI_img.png
+val/259225_ALI_img.png
+val/259230_ALI_img.png
+val/259231_ALI_img.png
+val/259239_ALI_img.png
+val/259240_ALI_img.png
+val/259241_ALI_img.png
+val/259243_ALI_img.png
+val/259250_ALI_img.png
+val/259263_ALI_img.png
+val/259268_ALI_img.png
+val/259271_ALI_img.png
+val/259276_ALI_img.png
+val/259277_ALI_img.png
+val/259282_ALI_img.png
+val/259292_ALI_img.png
+val/259294_ALI_img.png
+val/259297_ALI_img.png
+val/259298_ALI_img.png
+val/259299_ALI_img.png
+val/259300_ALI_img.png
+val/259301_ALI_img.png
+val/259305_ALI_img.png
+val/259309_ALI_img.png
+val/259312_ALI_img.png
+val/259313_ALI_img.png
+val/259315_ALI_img.png
+val/259318_ALI_img.png
+val/259324_ALI_img.png
+val/259328_ALI_img.png
+val/259332_ALI_img.png
+val/259335_ALI_img.png
+val/259346_ALI_img.png
+val/259351_ALI_img.png
+val/259352_ALI_img.png
+val/259354_ALI_img.png
+val/259355_ALI_img.png
+val/259357_ALI_img.png
+val/259361_ALI_img.png
+val/259364_ALI_img.png
+val/259367_ALI_img.png
+val/259371_ALI_img.png
+val/259372_ALI_img.png
+val/259377_ALI_img.png
+val/259379_ALI_img.png
+val/259383_ALI_img.png
+val/259384_ALI_img.png
+val/259388_ALI_img.png
+val/259392_ALI_img.png
+val/259393_ALI_img.png
+val/259394_ALI_img.png
+val/259396_ALI_img.png
+val/259397_ALI_img.png
+val/259400_ALI_img.png
+val/259401_ALI_img.png
+val/259405_ALI_img.png
+val/259411_ALI_img.png
+val/259413_ALI_img.png
+val/259414_ALI_img.png
+val/259417_ALI_img.png
+val/259419_ALI_img.png
+val/259429_ALI_img.png
+val/259436_ALI_img.png
+val/259438_ALI_img.png
+val/259440_ALI_img.png
+val/259442_ALI_img.png
+val/259444_ALI_img.png
+val/259446_ALI_img.png
+val/259450_ALI_img.png
+val/259452_ALI_img.png
+val/259453_ALI_img.png
+val/259455_ALI_img.png
+val/259456_ALI_img.png
+val/259468_ALI_img.png
+val/259471_ALI_img.png
+val/259475_ALI_img.png
+val/259477_ALI_img.png
+val/259478_ALI_img.png
+val/259482_ALI_img.png
+val/259483_ALI_img.png
+val/259486_ALI_img.png
+val/259487_ALI_img.png
+val/259488_ALI_img.png
+val/259489_ALI_img.png
+val/259492_DT_img.png
+val/259496_ALI_img.png
+val/259500_ALI_img.png
+val/259501_ALI_img.png
+val/259504_ALI_img.png
+val/259508_ALI_img.png
+val/259509_ALI_img.png
+val/259511_ALI_img.png
+val/259513_ALI_img.png
+val/259514_ALI_img.png
+val/259517_ALI_img.png
+val/259523_ALI_img.png
+val/259528_ALI_img.png
+val/259532_ALI_img.png
+val/259535_ALI_img.png
+val/259537_ALI_img.png
+val/259558_ALI_img.png
+val/259567_ALI_img.png
+val/259570_ALI_img.png
+val/259571_ALI_img.png
+val/259574_ALI_img.png
+val/259575_ALI_img.png
+val/259578_ALI_img.png
+val/259581_ALI_img.png
+val/259582_ALI_img.png
+val/259588_ALI_img.png
+val/259592_ALI_img.png
+val/259593_ALI_img.png
+val/259594_ALI_img.png
+val/259597_ALI_img.png
+val/259602_ALI_img.png
+val/259610_ALI_img.png
+val/259612_ALI_img.png
+val/259616_ALI_img.png
+val/259617_ALI_img.png
+val/259619_ALI_img.png
+val/259621_ALI_img.png
+val/259623_ALI_img.png
+val/259630_ALI_img.png
+val/259640_ALI_img.png
+val/259644_ALI_img.png
+val/259650_ALI_img.png
+val/259658_ALI_img.png
+val/259669_ALI_img.png
+val/259674_ALI_img.png
+val/259681_ALI_img.png
+val/259690_ALI_img.png
+val/259693_ALI_img.png
+val/259695_ALI_img.png
+val/259697_ALI_img.png
+val/259701_ALI_img.png
+val/259703_ALI_img.png
+val/259704_ALI_img.png
+val/259705_ALI_img.png
+val/259712_ALI_img.png
+val/259718_ALI_img.png
+val/259721_ALI_img.png
+val/259727_ALI_img.png
+val/259733_ALI_img.png
+val/259735_ALI_img.png
+val/259736_ALI_img.png
+val/259738_ALI_img.png
+val/259740_ALI_img.png
+val/259743_ALI_img.png
+val/259750_ALI_img.png
+val/259757_ALI_img.png
+val/259761_ALI_img.png
+val/259765_ALI_img.png
+val/259777_ALI_img.png
+val/259778_ALI_img.png
+val/259785_ALI_img.png
+val/259789_ALI_img.png
+val/259796_ALI_img.png
+val/259800_ALI_img.png
+val/259810_ALI_img.png
+val/259818_ALI_img.png
+val/259821_ALI_img.png
+val/259825_ALI_img.png
+val/259826_ALI_img.png
+val/259831_ALI_img.png
+val/259840_ALI_img.png
+val/259852_ALI_img.png
+val/259858_ALI_img.png
+val/259861_ALI_img.png
+val/259864_ALI_img.png
+val/259873_ALI_img.png
+val/259883_ALI_img.png
+val/259895_ALI_img.png
+val/259903_ALI_img.png
+val/259904_ALI_img.png
+val/259917_ALI_img.png
+val/259919_ALI_img.png
+val/259922_ALI_img.png
+val/259925_ALI_img.png
+val/259926_ALI_img.png
+val/259929_ALI_img.png
+val/259932_ALI_img.png
+val/259933_ALI_img.png
+val/259937_ALI_img.png
+val/259948_ALI_img.png
+val/259952_ALI_img.png
+val/259960_ALI_img.png
+val/259961_ALI_img.png
+val/259963_ALI_img.png
+val/259964_ALI_img.png
+val/259967_ALI_img.png
+val/259973_ALI_img.png
+val/259975_ALI_img.png
+val/259976_ALI_img.png
+val/259978_ALI_img.png
+val/259981_ALI_img.png
+val/259982_ALI_img.png
+val/259987_ALI_img.png
+val/259990_ALI_img.png
+val/259991_ALI_img.png
+val/260000_ALI_img.png
+val/260004_ALI_img.png
+val/260007_ALI_img.png
+val/260024_ALI_img.png
+val/260025_ALI_img.png
+val/260026_ALI_img.png
+val/260028_ALI_img.png
+val/260029_ALI_img.png
+val/260033_ALI_img.png
+val/260038_ALI_img.png
+val/260040_ALI_img.png
+val/260045_ALI_img.png
+val/260046_ALI_img.png
+val/260051_ALI_img.png
+val/260052_ALI_img.png
+val/260058_ALI_img.png
+val/260059_ALI_img.png
+val/260072_ALI_img.png
+val/260074_ALI_img.png
+val/260080_ALI_img.png
+val/260082_ALI_img.png
+val/260084_ALI_img.png
+val/260087_ALI_img.png
+val/260090_ALI_img.png
+val/260100_ALI_img.png
+val/260102_ALI_img.png
+val/260103_ALI_img.png
+val/260110_ALI_img.png
+val/260114_ALI_img.png
+val/260117_ALI_img.png
+val/260124_ALI_img.png
+val/260126_ALI_img.png
+val/260127_ALI_img.png
+val/260131_ALI_img.png
+val/260137_ALI_img.png
+val/260140_ALI_img.png
+val/260144_ALI_img.png
+val/260147_ALI_img.png
+val/260151_ALI_img.png
+val/260153_ALI_img.png
+val/260157_ALI_img.png
+val/260169_ALI_img.png
+val/260176_ALI_img.png
+val/260183_ALI_img.png
+val/260193_ALI_img.png
+val/260194_ALI_img.png
+val/260199_ALI_img.png
+val/260200_ALI_img.png
+val/260208_ALI_img.png
+val/260212_ALI_img.png
+val/260216_ALI_img.png
+val/260217_ALI_img.png
+val/260218_ALI_img.png
+val/260224_ALI_img.png
+val/260231_ALI_img.png
+val/260237_ALI_img.png
+val/260242_ALI_img.png
+val/260248_ALI_img.png
+val/260250_ALI_img.png
+val/260252_ALI_img.png
+val/260255_ALI_img.png
+val/260256_ALI_img.png
+val/260261_ALI_img.png
+val/260262_ALI_img.png
+val/260282_ALI_img.png
+val/260285_ALI_img.png
+val/260286_ALI_img.png
+val/260293_ALI_img.png
+val/260295_ALI_img.png
+val/260299_ALI_img.png
+val/260300_ALI_img.png
+val/260302_ALI_img.png
+val/260303_ALI_img.png
+val/260304_ALI_img.png
+val/260305_ALI_img.png
+val/260307_ALI_img.png
+val/260309_ALI_img.png
+val/260312_ALI_img.png
+val/260315_ALI_img.png
+val/260318_ALI_img.png
+val/260323_ALI_img.png
+val/260329_ALI_img.png
+val/260333_ALI_img.png
+val/260334_ALI_img.png
+val/260338_ALI_img.png
+val/260342_ALI_img.png
+val/260347_ALI_img.png
+val/260349_ALI_img.png
+val/260352_ALI_img.png
+val/260361_ALI_img.png
+val/260366_ALI_img.png
+val/260368_ALI_img.png
+val/260370_ALI_img.png
+val/260372_ALI_img.png
+val/260374_ALI_img.png
+val/260380_ALI_img.png
+val/260385_ALI_img.png
+val/260387_ALI_img.png
+val/260388_ALI_img.png
+val/260391_ALI_img.png
+val/260397_ALI_img.png
+val/260398_ALI_img.png
+val/260399_ALI_img.png
+val/260400_ALI_img.png
+val/260402_ALI_img.png
+val/260407_ALI_img.png
+val/260414_ALI_img.png
+val/260415_ALI_img.png
+val/260417_ALI_img.png
+val/260423_ALI_img.png
+val/260427_ALI_img.png
+val/260431_ALI_img.png
+val/260440_ALI_img.png
+val/260444_ALI_img.png
+val/260446_ALI_img.png
+val/260447_ALI_img.png
+val/260449_ALI_img.png
+val/260451_ALI_img.png
+val/260453_ALI_img.png
+val/260455_ALI_img.png
+val/260460_ALI_img.png
+val/260472_ALI_img.png
+val/260481_ALI_img.png
+val/260486_ALI_img.png
+val/260488_ALI_img.png
+val/260496_ALI_img.png
+val/260500_ALI_img.png
+val/260501_ALI_img.png
+val/260506_ALI_img.png
+val/260509_ALI_img.png
+val/260514_ALI_img.png
+val/260518_ALI_img.png
+val/260519_ALI_img.png
+val/260523_ALI_img.png
+val/260527_ALI_img.png
+val/260534_ALI_img.png
+val/260537_ALI_img.png
+val/260538_ALI_img.png
+val/260539_ALI_img.png
+val/260540_ALI_img.png
+val/260541_ALI_img.png
+val/260547_ALI_img.png
+val/260555_ALI_img.png
+val/260556_ALI_img.png
+val/260564_ALI_img.png
+val/260567_ALI_img.png
+val/260569_ALI_img.png
+val/260573_ALI_img.png
+val/260578_ALI_img.png
+val/260579_ALI_img.png
+val/260580_ALI_img.png
+val/260582_ALI_img.png
+val/260586_ALI_img.png
+val/260589_ALI_img.png
+val/260592_ALI_img.png
+val/260597_ALI_img.png
+val/260599_ALI_img.png
+val/260601_ALI_img.png
+val/260602_ALI_img.png
+val/260607_ALI_img.png
+val/260608_ALI_img.png
+val/260612_ALI_img.png
+val/260615_ALI_img.png
+val/260617_ALI_img.png
+val/260618_ALI_img.png
+val/260636_ALI_img.png
+val/260637_ALI_img.png
+val/260643_ALI_img.png
+val/260652_ALI_img.png
+val/260655_ALI_img.png
+val/260658_ALI_img.png
+val/260660_ALI_img.png
+val/260661_ALI_img.png
+val/260662_ALI_img.png
+val/260664_ALI_img.png
+val/260679_ALI_img.png
+val/260681_ALI_img.png
+val/260685_ALI_img.png
+val/260686_ALI_img.png
+val/260692_ALI_img.png
+val/260693_ALI_img.png
+val/260696_ALI_img.png
+val/260702_ALI_img.png
+val/260709_ALI_img.png
+val/260710_ALI_img.png
+val/260711_ALI_img.png
+val/260712_ALI_img.png
+val/260713_ALI_img.png
+val/260716_ALI_img.png
+val/260722_ALI_img.png
+val/260725_ALI_img.png
+val/260729_ALI_img.png
+val/260732_ALI_img.png
+val/260733_ALI_img.png
+val/260736_ALI_img.png
+val/260739_ALI_img.png
+val/260746_ALI_img.png
+val/260748_ALI_img.png
+val/260752_ALI_img.png
+val/260754_ALI_img.png
+val/260755_ALI_img.png
+val/260767_ALI_img.png
+val/260771_ALI_img.png
+val/260787_ALI_img.png
+val/260788_ALI_img.png
+val/260794_ALI_img.png
+val/260795_ALI_img.png
+val/260802_ALI_img.png
+val/260805_ALI_img.png
+val/260809_ALI_img.png
+val/260810_ALI_img.png
+val/260814_ALI_img.png
+val/260816_ALI_img.png
+val/260822_ALI_img.png
+val/260825_ALI_img.png
+val/260829_ALI_img.png
+val/260837_ALI_img.png
+val/260841_ALI_img.png
+val/260846_ALI_img.png
+val/260850_ALI_img.png
+val/260852_ALI_img.png
+val/260855_ALI_img.png
+val/260856_ALI_img.png
+val/260859_ALI_img.png
+val/260871_ALI_img.png
+val/260877_ALI_img.png
+val/260879_ALI_img.png
+val/260887_ALI_img.png
+val/260890_ALI_img.png
+val/260901_ALI_img.png
+val/260903_ALI_img.png
+val/260908_ALI_img.png
+val/260911_ALI_img.png
+val/260912_ALI_img.png
+val/260915_ALI_img.png
+val/260918_ALI_img.png
+val/260919_ALI_img.png
+val/260923_ALI_img.png
+val/260931_ALI_img.png
+val/260932_ALI_img.png
+val/260934_ALI_img.png
+val/260939_ALI_img.png
+val/260940_ALI_img.png
+val/260945_ALI_img.png
+val/260947_ALI_img.png
+val/260950_ALI_img.png
+val/260952_ALI_img.png
+val/260971_ALI_img.png
+val/260977_ALI_img.png
+val/260983_ALI_img.png
+val/260985_ALI_img.png
+val/261003_ALI_img.png
+val/261004_ALI_img.png
+val/261005_ALI_img.png
+val/261007_ALI_img.png
+val/261012_ALI_img.png
+val/261014_ALI_img.png
+val/261023_ALI_img.png
+val/261026_ALI_img.png
+val/261031_ALI_img.png
+val/261033_ALI_img.png
+val/261034_ALI_img.png
+val/261042_ALI_img.png
+val/261045_ALI_img.png
+val/261046_ALI_img.png
+val/261049_ALI_img.png
+val/261052_ALI_img.png
+val/261053_ALI_img.png
+val/261055_ALI_img.png
+val/261063_ALI_img.png
+val/261065_ALI_img.png
+val/261070_ALI_img.png
+val/261075_ALI_img.png
+val/261078_ALI_img.png
+val/261081_ALI_img.png
+val/261092_ALI_img.png
+val/261094_ALI_img.png
+val/261095_ALI_img.png
+val/261103_ALI_img.png
+val/261113_ALI_img.png
+val/261115_ALI_img.png
+val/261117_ALI_img.png
+val/261121_ALI_img.png
+val/261125_ALI_img.png
+val/261128_ALI_img.png
+val/261136_ALI_img.png
+val/261148_DT_img.png
+val/261151_ALI_img.png
+val/261152_ALI_img.png
+val/261161_ALI_img.png
+val/261164_ALI_img.png
+val/261165_ALI_img.png
+val/261173_ALI_img.png
+val/261178_ALI_img.png
+val/261181_ALI_img.png
+val/261182_ALI_img.png
+val/261185_ALI_img.png
+val/261186_ALI_img.png
+val/261189_ALI_img.png
+val/261191_ALI_img.png
+val/261195_ALI_img.png
+val/261197_ALI_img.png
+val/261198_ALI_img.png
+val/261199_ALI_img.png
+val/261207_ALI_img.png
+val/261208_ALI_img.png
+val/261212_ALI_img.png
+val/261215_ALI_img.png
+val/261224_ALI_img.png
+val/261238_ALI_img.png
+val/261249_ALI_img.png
+val/261252_ALI_img.png
+val/261254_ALI_img.png
+val/261262_ALI_img.png
+val/261266_ALI_img.png
+val/261268_ALI_img.png
+val/261272_ALI_img.png
+val/261291_ALI_img.png
+val/261292_ALI_img.png
+val/261296_ALI_img.png
+val/261301_ALI_img.png
+val/261303_ALI_img.png
+val/261312_ALI_img.png
+val/261313_ALI_img.png
+val/261315_ALI_img.png
+val/261322_ALI_img.png
+val/261327_ALI_img.png
+val/261329_ALI_img.png
+val/261338_ALI_img.png
+val/261339_ALI_img.png
+val/261341_ALI_img.png
+val/261342_ALI_img.png
+val/261347_ALI_img.png
+val/261348_ALI_img.png
+val/261354_ALI_img.png
+val/261356_ALI_img.png
+val/261358_ALI_img.png
+val/261361_ALI_img.png
+val/261363_ALI_img.png
+val/261365_ALI_img.png
+val/261367_ALI_img.png
+val/261372_ALI_img.png
+val/261374_ALI_img.png
+val/261381_ALI_img.png
+val/261382_ALI_img.png
+val/261405_ALI_img.png
+val/261409_ALI_img.png
+val/261412_ALI_img.png
+val/261419_ALI_img.png
+val/261424_ALI_img.png
+val/261435_ALI_img.png
+val/261436_ALI_img.png
+val/261440_ALI_img.png
+val/261446_ALI_img.png
+val/261449_ALI_img.png
+val/261450_ALI_img.png
+val/261463_ALI_img.png
+val/261468_ALI_img.png
+val/261470_ALI_img.png
+val/261475_ALI_img.png
+val/261478_ALI_img.png
+val/261482_ALI_img.png
+val/261486_ALI_img.png
+val/261490_ALI_img.png
+val/261492_ALI_img.png
+val/261493_ALI_img.png
+val/261498_ALI_img.png
+val/261501_ALI_img.png
+val/261502_ALI_img.png
+val/261512_ALI_img.png
+val/261518_ALI_img.png
+val/261526_ALI_img.png
+val/261533_ALI_img.png
+val/261534_ALI_img.png
+val/261535_ALI_img.png
+val/261542_ALI_img.png
+val/261550_ALI_img.png
+val/261551_ALI_img.png
+val/261552_ALI_img.png
+val/261553_ALI_img.png
+val/261560_ALI_img.png
+val/261564_ALI_img.png
+val/261566_ALI_img.png
+val/261568_ALI_img.png
+val/261575_ALI_img.png
+val/261590_ALI_img.png
+val/261594_ALI_img.png
+val/261598_ALI_img.png
+val/261599_ALI_img.png
+val/261601_ALI_img.png
+val/261603_ALI_img.png
+val/261609_ALI_img.png
+val/261611_ALI_img.png
+val/261615_ALI_img.png
+val/261622_ALI_img.png
+val/261623_ALI_img.png
+val/261627_ALI_img.png
+val/261629_ALI_img.png
+val/261632_ALI_img.png
+val/261644_ALI_img.png
+val/261647_ALI_img.png
+val/261648_ALI_img.png
+val/261658_ALI_img.png
+val/261661_ALI_img.png
+val/261667_ALI_img.png
+val/261670_ALI_img.png
+val/261678_ALI_img.png
+val/261683_ALI_img.png
+val/261689_ALI_img.png
+val/261693_ALI_img.png
+val/261696_ALI_img.png
+val/261699_ALI_img.png
+val/261700_ALI_img.png
+val/261703_ALI_img.png
+val/261709_ALI_img.png
+val/261713_ALI_img.png
+val/261720_ALI_img.png
+val/261723_DT_img.png
+val/261726_ALI_img.png
+val/261727_ALI_img.png
+val/261729_ALI_img.png
+val/261733_ALI_img.png
+val/261743_ALI_img.png
+val/261748_ALI_img.png
+val/261750_ALI_img.png
+val/261751_ALI_img.png
+val/261752_ALI_img.png
+val/261754_ALI_img.png
+val/261756_ALI_img.png
+val/261762_ALI_img.png
+val/261764_ALI_img.png
+val/261780_ALI_img.png
+val/261782_ALI_img.png
+val/261784_ALI_img.png
+val/261785_ALI_img.png
+val/261795_ALI_img.png
+val/261796_ALI_img.png
+val/261798_ALI_img.png
+val/261799_ALI_img.png
+val/261802_ALI_img.png
+val/261807_ALI_img.png
+val/261808_ALI_img.png
+val/261810_ALI_img.png
+val/261812_ALI_img.png
+val/261813_ALI_img.png
+val/261818_ALI_img.png
+val/261821_ALI_img.png
+val/261825_ALI_img.png
+val/261831_ALI_img.png
+val/261833_ALI_img.png
+val/261834_ALI_img.png
+val/261842_ALI_img.png
+val/261845_ALI_img.png
+val/261849_ALI_img.png
+val/261855_ALI_img.png
+val/261856_ALI_img.png
+val/261857_ALI_img.png
+val/261870_ALI_img.png
+val/261874_ALI_img.png
+val/261879_ALI_img.png
+val/261880_ALI_img.png
+val/261884_ALI_img.png
+val/261885_ALI_img.png
+val/261887_ALI_img.png
+val/261891_ALI_img.png
+val/261892_ALI_img.png
+val/261893_ALI_img.png
+val/261905_ALI_img.png
+val/261908_ALI_img.png
+val/261911_ALI_img.png
+val/261915_ALI_img.png
+val/261919_ALI_img.png
+val/261926_ALI_img.png
+val/261933_ALI_img.png
+val/261940_ALI_img.png
+val/261942_ALI_img.png
+val/261945_ALI_img.png
+val/261946_ALI_img.png
+val/261948_ALI_img.png
+val/261949_ALI_img.png
+val/261950_ALI_img.png
+val/261954_ALI_img.png
+val/261955_ALI_img.png
+val/261956_ALI_img.png
+val/261957_ALI_img.png
+val/261961_ALI_img.png
+val/261969_ALI_img.png
+val/261974_ALI_img.png
+val/261977_ALI_img.png
+val/261988_ALI_img.png
+val/261993_ALI_img.png
+val/261995_ALI_img.png
+val/261996_ALI_img.png
+val/262000_ALI_img.png
+val/262001_ALI_img.png
+val/262002_ALI_img.png
+val/262005_ALI_img.png
+val/262007_ALI_img.png
+val/262010_ALI_img.png
+val/262012_ALI_img.png
+val/262017_ALI_img.png
+val/262020_ALI_img.png
+val/262023_ALI_img.png
+val/262025_ALI_img.png
+val/262028_ALI_img.png
+val/262029_ALI_img.png
+val/262034_ALI_img.png
+val/262038_ALI_img.png
+val/262041_ALI_img.png
+val/262042_ALI_img.png
+val/262046_ALI_img.png
+val/262049_ALI_img.png
+val/262051_ALI_img.png
+val/262063_ALI_img.png
+val/262064_ALI_img.png
+val/262065_ALI_img.png
+val/262068_ALI_img.png
+val/262070_ALI_img.png
+val/262070_DT_img.png
+val/262076_ALI_img.png
+val/262083_ALI_img.png
+val/262090_ALI_img.png
+val/262091_ALI_img.png
+val/262093_ALI_img.png
+val/262096_ALI_img.png
+val/262097_ALI_img.png
+val/262100_ALI_img.png
+val/262103_ALI_img.png
+val/262104_ALI_img.png
+val/262112_ALI_img.png
+val/262117_ALI_img.png
+val/262122_ALI_img.png
+val/262133_ALI_img.png
+val/262134_ALI_img.png
+val/262136_ALI_img.png
+val/262146_ALI_img.png
+val/262150_ALI_img.png
+val/262153_ALI_img.png
+val/262157_ALI_img.png
+val/262159_ALI_img.png
+val/262163_ALI_img.png
+val/262164_ALI_img.png
+val/262167_ALI_img.png
+val/262170_ALI_img.png
+val/262176_ALI_img.png
+val/262177_ALI_img.png
+val/262178_ALI_img.png
+val/262180_ALI_img.png
+val/262182_ALI_img.png
+val/262195_ALI_img.png
+val/262201_ALI_img.png
+val/262204_ALI_img.png
+val/262208_ALI_img.png
+val/262211_ALI_img.png
+val/262212_ALI_img.png
+val/262215_ALI_img.png
+val/262216_ALI_img.png
+val/262229_ALI_img.png
+val/262231_ALI_img.png
+val/262238_ALI_img.png
+val/262242_ALI_img.png
+val/262244_ALI_img.png
+val/262251_ALI_img.png
+val/262253_ALI_img.png
+val/262261_ALI_img.png
+val/262273_ALI_img.png
+val/262290_ALI_img.png
+val/262294_ALI_img.png
+val/262295_ALI_img.png
+val/262299_ALI_img.png
+val/262302_ALI_img.png
+val/262305_ALI_img.png
+val/262308_ALI_img.png
+val/262309_ALI_img.png
+val/262311_ALI_img.png
+val/262313_ALI_img.png
+val/262323_ALI_img.png
+val/262329_ALI_img.png
+val/262334_ALI_img.png
+val/262339_ALI_img.png
+val/262345_ALI_img.png
+val/262346_ALI_img.png
+val/262349_ALI_img.png
+val/262350_ALI_img.png
+val/262352_ALI_img.png
+val/262358_ALI_img.png
+val/262359_ALI_img.png
+val/262369_ALI_img.png
+val/262380_ALI_img.png
+val/262389_ALI_img.png
+val/262391_ALI_img.png
+val/262394_ALI_img.png
+val/262401_ALI_img.png
+val/262402_ALI_img.png
+val/262410_ALI_img.png
+val/262414_ALI_img.png
+val/262417_ALI_img.png
+val/262420_ALI_img.png
+val/262431_ALI_img.png
+val/262439_ALI_img.png
+val/262440_ALI_img.png
+val/262442_ALI_img.png
+val/262448_ALI_img.png
+val/262450_ALI_img.png
+val/262452_ALI_img.png
+val/262454_ALI_img.png
+val/262456_ALI_img.png
+val/262458_ALI_img.png
+val/262459_ALI_img.png
+val/262460_ALI_img.png
+val/262470_ALI_img.png
+val/262475_ALI_img.png
+val/262478_ALI_img.png
+val/262480_ALI_img.png
+val/262485_ALI_img.png
+val/262494_ALI_img.png
+val/262496_ALI_img.png
+val/262503_ALI_img.png
+val/262507_ALI_img.png
+val/262513_ALI_img.png
+val/262515_ALI_img.png
+val/262520_ALI_img.png
+val/262522_ALI_img.png
+val/262531_ALI_img.png
+val/262535_ALI_img.png
+val/262540_ALI_img.png
+val/262541_ALI_img.png
+val/262542_ALI_img.png
+val/262543_ALI_img.png
+val/262550_ALI_img.png
+val/262553_ALI_img.png
+val/262561_ALI_img.png
+val/262562_ALI_img.png
+val/262565_ALI_img.png
+val/262567_ALI_img.png
+val/262568_ALI_img.png
+val/262574_ALI_img.png
+val/262575_ALI_img.png
+val/262584_ALI_img.png
+val/262587_ALI_img.png
+val/262591_ALI_img.png
+val/262597_ALI_img.png
+val/262598_ALI_img.png
+val/262603_ALI_img.png
+val/262605_ALI_img.png
+val/262609_ALI_img.png
+val/262615_ALI_img.png
+val/262618_ALI_img.png
+val/262626_ALI_img.png
+val/262632_ALI_img.png
+val/262634_ALI_img.png
+val/262638_ALI_img.png
+val/262639_ALI_img.png
+val/262640_ALI_img.png
+val/262642_ALI_img.png
+val/262646_ALI_img.png
+val/262647_ALI_img.png
+val/262648_ALI_img.png
+val/262650_ALI_img.png
+val/262654_ALI_img.png
+val/262655_ALI_img.png
+val/262656_ALI_img.png
+val/262662_ALI_img.png
+val/262673_ALI_img.png
+val/262682_ALI_img.png
+val/262687_ALI_img.png
+val/262692_ALI_img.png
+val/262699_ALI_img.png
+val/262706_ALI_img.png
+val/262711_ALI_img.png
+val/262716_ALI_img.png
+val/262718_ALI_img.png
+val/262720_ALI_img.png
+val/262721_ALI_img.png
+val/262723_ALI_img.png
+val/262727_ALI_img.png
+val/262739_ALI_img.png
+val/262744_ALI_img.png
+val/262755_ALI_img.png
+val/262764_ALI_img.png
+val/262771_ALI_img.png
+val/262777_ALI_img.png
+val/262781_ALI_img.png
+val/262782_ALI_img.png
+val/262783_ALI_img.png
+val/262785_ALI_img.png
+val/262787_ALI_img.png
+val/262789_ALI_img.png
+val/262800_ALI_img.png
+val/262803_ALI_img.png
+val/262804_ALI_img.png
+val/262808_ALI_img.png
+val/262815_ALI_img.png
+val/262816_ALI_img.png
+val/262818_ALI_img.png
+val/262819_ALI_img.png
+val/262835_ALI_img.png
+val/262838_ALI_img.png
+val/262841_ALI_img.png
+val/262842_ALI_img.png
+val/262843_ALI_img.png
+val/262846_ALI_img.png
+val/262848_ALI_img.png
+val/262850_ALI_img.png
+val/262855_ALI_img.png
+val/262857_ALI_img.png
+val/262859_ALI_img.png
+val/262861_ALI_img.png
+val/262869_ALI_img.png
+val/262872_ALI_img.png
+val/262873_ALI_img.png
+val/262874_ALI_img.png
+val/262876_ALI_img.png
+val/262882_ALI_img.png
+val/262884_ALI_img.png
+val/262887_ALI_img.png
+val/262889_ALI_img.png
+val/262891_ALI_img.png
+val/262892_ALI_img.png
+val/262896_ALI_img.png
+val/262899_ALI_img.png
+val/262902_ALI_img.png
+val/262905_ALI_img.png
+val/262910_ALI_img.png
+val/262912_ALI_img.png
+val/262916_ALI_img.png
+val/262924_ALI_img.png
+val/262928_ALI_img.png
+val/262931_ALI_img.png
+val/262933_ALI_img.png
+val/262934_ALI_img.png
+val/262936_ALI_img.png
+val/262937_ALI_img.png
+val/262938_ALI_img.png
+val/262939_ALI_img.png
+val/262941_ALI_img.png
+val/262946_ALI_img.png
+val/262947_ALI_img.png
+val/262948_ALI_img.png
+val/262960_ALI_img.png
+val/262972_ALI_img.png
+val/262984_ALI_img.png
+val/262986_ALI_img.png
+val/262987_ALI_img.png
+val/262989_ALI_img.png
+val/263003_ALI_img.png
+val/263015_ALI_img.png
+val/263019_ALI_img.png
+val/263021_ALI_img.png
+val/263028_ALI_img.png
+val/263029_ALI_img.png
+val/263030_ALI_img.png
+val/263036_ALI_img.png
+val/263048_ALI_img.png
+val/263053_ALI_img.png
+val/263055_ALI_img.png
+val/263057_ALI_img.png
+val/263067_ALI_img.png
+val/263071_ALI_img.png
+val/263073_ALI_img.png
+val/263075_ALI_img.png
+val/263081_ALI_img.png
+val/263087_ALI_img.png
+val/263088_ALI_img.png
+val/263093_ALI_img.png
+val/263099_ALI_img.png
+val/263101_ALI_img.png
+val/263106_ALI_img.png
+val/263108_ALI_img.png
+val/263110_ALI_img.png
+val/263110_DT_img.png
+val/263116_ALI_img.png
+val/263118_ALI_img.png
+val/263134_ALI_img.png
+val/263137_ALI_img.png
+val/263154_ALI_img.png
+val/263156_ALI_img.png
+val/263157_ALI_img.png
+val/263159_ALI_img.png
+val/263161_ALI_img.png
+val/263163_ALI_img.png
+val/263167_ALI_img.png
+val/263168_ALI_img.png
+val/263171_ALI_img.png
+val/263172_ALI_img.png
+val/263176_ALI_img.png
+val/263177_ALI_img.png
+val/263184_ALI_img.png
+val/263186_ALI_img.png
+val/263187_ALI_img.png
+val/263190_ALI_img.png
+val/263197_ALI_img.png
+val/263201_ALI_img.png
+val/263204_ALI_img.png
+val/263211_ALI_img.png
+val/263217_ALI_img.png
+val/263221_ALI_img.png
+val/263225_ALI_img.png
+val/263227_ALI_img.png
+val/263228_ALI_img.png
+val/263232_ALI_img.png
+val/263233_ALI_img.png
+val/263236_ALI_img.png
+val/263237_ALI_img.png
+val/263239_ALI_img.png
+val/263257_ALI_img.png
+val/263258_ALI_img.png
+val/263261_ALI_img.png
+val/263269_ALI_img.png
+val/263270_DT_img.png
+val/263277_ALI_img.png
+val/263285_ALI_img.png
+val/263292_ALI_img.png
+val/263295_ALI_img.png
+val/263296_ALI_img.png
+val/263298_ALI_img.png
+val/263301_ALI_img.png
+val/263306_ALI_img.png
+val/263310_ALI_img.png
+val/263316_ALI_img.png
+val/263317_ALI_img.png
+val/263319_ALI_img.png
+val/263321_ALI_img.png
+val/263323_ALI_img.png
+val/263324_ALI_img.png
+val/263325_ALI_img.png
+val/263328_ALI_img.png
+val/263330_ALI_img.png
+val/263333_ALI_img.png
+val/263334_ALI_img.png
+val/263344_ALI_img.png
+val/263347_ALI_img.png
+val/263354_ALI_img.png
+val/263355_ALI_img.png
+val/263358_ALI_img.png
+val/263360_ALI_img.png
+val/263367_ALI_img.png
+val/263373_ALI_img.png
+val/263381_ALI_img.png
+val/263384_ALI_img.png
+val/263386_ALI_img.png
+val/263391_ALI_img.png
+val/263401_ALI_img.png
+val/263419_ALI_img.png
+val/263421_ALI_img.png
+val/263423_ALI_img.png
+val/263426_ALI_img.png
+val/263427_ALI_img.png
+val/263432_ALI_img.png
+val/263434_ALI_img.png
+val/263437_ALI_img.png
+val/263440_ALI_img.png
+val/263442_ALI_img.png
+val/263444_ALI_img.png
+val/263446_ALI_img.png
+val/263452_ALI_img.png
+val/263453_ALI_img.png
+val/263454_ALI_img.png
+val/263456_ALI_img.png
+val/263474_ALI_img.png
+val/263475_ALI_img.png
+val/263485_ALI_img.png
+val/263496_ALI_img.png
+val/263513_ALI_img.png
+val/263522_ALI_img.png
+val/263525_ALI_img.png
+val/263528_ALI_img.png
+val/263533_ALI_img.png
+val/263537_ALI_img.png
+val/263539_ALI_img.png
+val/263543_ALI_img.png
+val/263544_ALI_img.png
+val/263548_ALI_img.png
+val/263564_ALI_img.png
+val/263565_ALI_img.png
+val/263574_ALI_img.png
+val/263579_ALI_img.png
+val/263583_ALI_img.png
+val/263599_DT_img.png
+val/263602_ALI_img.png
+val/263603_ALI_img.png
+val/263606_ALI_img.png
+val/263607_ALI_img.png
+val/263608_ALI_img.png
+val/263612_ALI_img.png
+val/263613_ALI_img.png
+val/263614_ALI_img.png
+val/263616_ALI_img.png
+val/263620_ALI_img.png
+val/263622_ALI_img.png
+val/263626_ALI_img.png
+val/263631_ALI_img.png
+val/263632_ALI_img.png
+val/263640_ALI_img.png
+val/263642_ALI_img.png
+val/263643_ALI_img.png
+val/263646_ALI_img.png
+val/263647_ALI_img.png
+val/263648_ALI_img.png
+val/263656_ALI_img.png
+val/263658_ALI_img.png
+val/263660_ALI_img.png
+val/263661_ALI_img.png
+val/263662_ALI_img.png
+val/263665_ALI_img.png
+val/263666_ALI_img.png
+val/263669_ALI_img.png
+val/263671_ALI_img.png
+val/263673_ALI_img.png
+val/263676_ALI_img.png
+val/263693_ALI_img.png
+val/263695_ALI_img.png
+val/263704_ALI_img.png
+val/263714_ALI_img.png
+val/263718_ALI_img.png
+val/263721_ALI_img.png
+val/263723_ALI_img.png
+val/263724_ALI_img.png
+val/263727_ALI_img.png
+val/263729_ALI_img.png
+val/263730_ALI_img.png
+val/263731_ALI_img.png
+val/263734_ALI_img.png
+val/263736_ALI_img.png
+val/263737_ALI_img.png
+val/263745_ALI_img.png
+val/263749_ALI_img.png
+val/263751_ALI_img.png
+val/263770_ALI_img.png
+val/263774_ALI_img.png
+val/263775_ALI_img.png
+val/263777_ALI_img.png
+val/263780_ALI_img.png
+val/263782_ALI_img.png
+val/263789_ALI_img.png
+val/263791_ALI_img.png
+val/263794_ALI_img.png
+val/263800_ALI_img.png
+val/263804_ALI_img.png
+val/263811_ALI_img.png
+val/263814_ALI_img.png
+val/263817_ALI_img.png
+val/263820_ALI_img.png
+val/263824_ALI_img.png
+val/263827_ALI_img.png
+val/263834_ALI_img.png
+val/263835_ALI_img.png
+val/263852_ALI_img.png
+val/263854_ALI_img.png
+val/263855_ALI_img.png
+val/263860_ALI_img.png
+val/263861_ALI_img.png
+val/263862_ALI_img.png
+val/263865_ALI_img.png
+val/263868_ALI_img.png
+val/263873_ALI_img.png
+val/263874_ALI_img.png
+val/263876_ALI_img.png
+val/263889_ALI_img.png
+val/263897_ALI_img.png
+val/263898_ALI_img.png
+val/263899_ALI_img.png
+val/263906_ALI_img.png
+val/263913_ALI_img.png
+val/263917_ALI_img.png
+val/263921_ALI_img.png
+val/263926_ALI_img.png
+val/263929_ALI_img.png
+val/263934_ALI_img.png
+val/263943_ALI_img.png
+val/263951_ALI_img.png
+val/263954_ALI_img.png
+val/263958_ALI_img.png
+val/263968_ALI_img.png
+val/263969_ALI_img.png
+val/263970_ALI_img.png
+val/263971_ALI_img.png
+val/263974_ALI_img.png
+val/263976_ALI_img.png
+val/263979_ALI_img.png
+val/263982_ALI_img.png
+val/263983_ALI_img.png
+val/263984_ALI_img.png
+val/263988_ALI_img.png
+val/263990_ALI_img.png
+val/263992_ALI_img.png
+val/263996_ALI_img.png
+val/263998_ALI_img.png
+val/264003_ALI_img.png
+val/264005_ALI_img.png
+val/264011_ALI_img.png
+val/264018_ALI_img.png
+val/264020_ALI_img.png
+val/264022_ALI_img.png
+val/264034_ALI_img.png
+val/264038_ALI_img.png
+val/264043_ALI_img.png
+val/264044_ALI_img.png
+val/264050_ALI_img.png
+val/264053_ALI_img.png
+val/264054_ALI_img.png
+val/264055_ALI_img.png
+val/264057_ALI_img.png
+val/264065_ALI_img.png
+val/264067_ALI_img.png
+val/264068_ALI_img.png
+val/264073_ALI_img.png
+val/264074_ALI_img.png
+val/264082_ALI_img.png
+val/264084_ALI_img.png
+val/264085_ALI_img.png
+val/264087_ALI_img.png
+val/264090_ALI_img.png
+val/264096_ALI_img.png
+val/264099_ALI_img.png
+val/264105_ALI_img.png
+val/264110_ALI_img.png
+val/264114_ALI_img.png
+val/264115_ALI_img.png
+val/264117_ALI_img.png
+val/264118_ALI_img.png
+val/264122_ALI_img.png
+val/264123_ALI_img.png
+val/264125_ALI_img.png
+val/264128_ALI_img.png
+val/264133_ALI_img.png
+val/264136_ALI_img.png
+val/264137_ALI_img.png
+val/264142_ALI_img.png
+val/264144_ALI_img.png
+val/264146_ALI_img.png
+val/264151_ALI_img.png
+val/264155_ALI_img.png
+val/264156_ALI_img.png
+val/264167_ALI_img.png
+val/264169_ALI_img.png
+val/264179_ALI_img.png
+val/264183_ALI_img.png
+val/264184_ALI_img.png
+val/264185_ALI_img.png
+val/264186_ALI_img.png
+val/264193_ALI_img.png
+val/264194_ALI_img.png
+val/264202_ALI_img.png
+val/264204_ALI_img.png
+val/264211_ALI_img.png
+val/264217_ALI_img.png
+val/264220_ALI_img.png
+val/264221_ALI_img.png
+val/264224_ALI_img.png
+val/264227_ALI_img.png
+val/264229_ALI_img.png
+val/264252_ALI_img.png
+val/264253_ALI_img.png
+val/264254_ALI_img.png
+val/264255_ALI_img.png
+val/264256_ALI_img.png
+val/264258_ALI_img.png
+val/264259_ALI_img.png
+val/264262_ALI_img.png
+val/264263_ALI_img.png
+val/264266_ALI_img.png
+val/264269_ALI_img.png
+val/264271_ALI_img.png
+val/264274_ALI_img.png
+val/264277_ALI_img.png
+val/264278_ALI_img.png
+val/264280_ALI_img.png
+val/264285_ALI_img.png
+val/264286_ALI_img.png
+val/264287_ALI_img.png
+val/264294_ALI_img.png
+val/264295_ALI_img.png
+val/264299_ALI_img.png
+val/264301_ALI_img.png
+val/264305_ALI_img.png
+val/264307_ALI_img.png
+val/264311_ALI_img.png
+val/264314_ALI_img.png
+val/264317_ALI_img.png
+val/264318_ALI_img.png
+val/264321_ALI_img.png
+val/264323_ALI_img.png
+val/264327_ALI_img.png
+val/264330_ALI_img.png
+val/264332_ALI_img.png
+val/264335_ALI_img.png
+val/264338_ALI_img.png
+val/264342_ALI_img.png
+val/264343_ALI_img.png
+val/264345_ALI_img.png
+val/264351_ALI_img.png
+val/264352_ALI_img.png
+val/264353_ALI_img.png
+val/264354_ALI_img.png
+val/264364_ALI_img.png
+val/264366_ALI_img.png
+val/264371_ALI_img.png
+val/264372_ALI_img.png
+val/264373_ALI_img.png
+val/264375_ALI_img.png
+val/264376_ALI_img.png
+val/264378_ALI_img.png
+val/264382_ALI_img.png
+val/264383_ALI_img.png
+val/264387_ALI_img.png
+val/264390_ALI_img.png
+val/264391_ALI_img.png
+val/264399_ALI_img.png
+val/264400_ALI_img.png
+val/264408_ALI_img.png
+val/264412_ALI_img.png
+val/264414_ALI_img.png
+val/264415_ALI_img.png
+val/264417_ALI_img.png
+val/264419_ALI_img.png
+val/264424_ALI_img.png
+val/264426_ALI_img.png
+val/264427_ALI_img.png
+val/264430_ALI_img.png
+val/264435_ALI_img.png
+val/264437_ALI_img.png
+val/264438_ALI_img.png
+val/264439_ALI_img.png
+val/264441_ALI_img.png
+val/264443_ALI_img.png
+val/264444_ALI_img.png
+val/264445_ALI_img.png
+val/264446_ALI_img.png
+val/264448_ALI_img.png
+val/264451_ALI_img.png
+val/264453_ALI_img.png
+val/264454_ALI_img.png
+val/264457_ALI_img.png
+val/264458_ALI_img.png
+val/264460_ALI_img.png
+val/264463_ALI_img.png
+val/264464_ALI_img.png
+val/264468_ALI_img.png
+val/264477_ALI_img.png
+val/264480_ALI_img.png
+val/264486_ALI_img.png
+val/264488_ALI_img.png
+val/264489_ALI_img.png
+val/264496_ALI_img.png
+val/264499_ALI_img.png
+val/264501_ALI_img.png
+val/264506_ALI_img.png
+val/264507_ALI_img.png
+val/264509_ALI_img.png
+val/264513_ALI_img.png
+val/264515_ALI_img.png
+val/264516_ALI_img.png
+val/264523_ALI_img.png
+val/264529_ALI_img.png
+val/264532_ALI_img.png
+val/264537_ALI_img.png
+val/264546_ALI_img.png
+val/264552_ALI_img.png
+val/264553_ALI_img.png
+val/264561_ALI_img.png
+val/264563_ALI_img.png
+val/264565_ALI_img.png
+val/264567_ALI_img.png
+val/264572_ALI_img.png
+val/264573_ALI_img.png
+val/264579_ALI_img.png
+val/264586_ALI_img.png
+val/264587_ALI_img.png
+val/264604_ALI_img.png
+val/264606_ALI_img.png
+val/264607_ALI_img.png
+val/264608_ALI_img.png
+val/264609_ALI_img.png
+val/264616_ALI_img.png
+val/264621_ALI_img.png
+val/264622_ALI_img.png
+val/264623_ALI_img.png
+val/264631_ALI_img.png
+val/264633_ALI_img.png
+val/264638_ALI_img.png
+val/264639_ALI_img.png
+val/264646_ALI_img.png
+val/264651_ALI_img.png
+val/264656_ALI_img.png
+val/264659_ALI_img.png
+val/264661_ALI_img.png
+val/264663_ALI_img.png
+val/264664_ALI_img.png
+val/264665_ALI_img.png
+val/264667_ALI_img.png
+val/264668_ALI_img.png
+val/264669_ALI_img.png
+val/264674_ALI_img.png
+val/264682_ALI_img.png
+val/264690_ALI_img.png
+val/264700_ALI_img.png
+val/264709_ALI_img.png
+val/264711_ALI_img.png
+val/264718_ALI_img.png
+val/264719_ALI_img.png
+val/264721_ALI_img.png
+val/264730_ALI_img.png
+val/264734_ALI_img.png
+val/264736_ALI_img.png
+val/264739_ALI_img.png
+val/264746_ALI_img.png
+val/264758_ALI_img.png
+val/264765_ALI_img.png
+val/264769_ALI_img.png
+val/264772_ALI_img.png
+val/264774_ALI_img.png
+val/264779_ALI_img.png
+val/264781_ALI_img.png
+val/264787_ALI_img.png
+val/264788_ALI_img.png
+val/264789_ALI_img.png
+val/264792_ALI_img.png
+val/264797_ALI_img.png
+val/264799_ALI_img.png
+val/264801_ALI_img.png
+val/264803_ALI_img.png
+val/264804_ALI_img.png
+val/264813_ALI_img.png
+val/264814_ALI_img.png
+val/264817_ALI_img.png
+val/264818_ALI_img.png
+val/264825_ALI_img.png
+val/264826_ALI_img.png
+val/264841_ALI_img.png
+val/264845_ALI_img.png
+val/264849_ALI_img.png
+val/264861_ALI_img.png
+val/264862_ALI_img.png
+val/264863_ALI_img.png
+val/264868_ALI_img.png
+val/264880_ALI_img.png
+val/264885_ALI_img.png
+val/264887_ALI_img.png
+val/264892_ALI_img.png
+val/264898_ALI_img.png
+val/264901_ALI_img.png
+val/264913_ALI_img.png
+val/264914_ALI_img.png
+val/264915_ALI_img.png
+val/264925_ALI_img.png
+val/264927_ALI_img.png
+val/264928_ALI_img.png
+val/264930_ALI_img.png
+val/264931_ALI_img.png
+val/264932_ALI_img.png
+val/264933_ALI_img.png
+val/264939_ALI_img.png
+val/264955_ALI_img.png
+val/264957_ALI_img.png
+val/264958_ALI_img.png
+val/264968_ALI_img.png
+val/264969_ALI_img.png
+val/264976_ALI_img.png
+val/264977_ALI_img.png
+val/264985_ALI_img.png
+val/264986_ALI_img.png
+val/264988_ALI_img.png
+val/264989_ALI_img.png
+val/264997_ALI_img.png
+val/265001_ALI_img.png
+val/265002_ALI_img.png
+val/265004_ALI_img.png
+val/265006_ALI_img.png
+val/265011_ALI_img.png
+val/265016_ALI_img.png
+val/265022_ALI_img.png
+val/265023_ALI_img.png
+val/265025_ALI_img.png
+val/265030_ALI_img.png
+val/265033_ALI_img.png
+val/265034_ALI_img.png
+val/265035_ALI_img.png
+val/265039_ALI_img.png
+val/265040_ALI_img.png
+val/265041_ALI_img.png
+val/265045_ALI_img.png
+val/265048_ALI_img.png
+val/265049_ALI_img.png
+val/265050_ALI_img.png
+val/265057_ALI_img.png
+val/265067_ALI_img.png
+val/265070_ALI_img.png
+val/265072_ALI_img.png
+val/265075_ALI_img.png
+val/265076_ALI_img.png
+val/265086_ALI_img.png
+val/265093_ALI_img.png
+val/265094_ALI_img.png
+val/265099_ALI_img.png
+val/265101_ALI_img.png
+val/265106_ALI_img.png
+val/265107_ALI_img.png
+val/265108_ALI_img.png
+val/265122_ALI_img.png
+val/265124_ALI_img.png
+val/265126_ALI_img.png
+val/265127_ALI_img.png
+val/265133_ALI_img.png
+val/265135_ALI_img.png
+val/265136_ALI_img.png
+val/265141_ALI_img.png
+val/265144_ALI_img.png
+val/265145_ALI_img.png
+val/265147_ALI_img.png
+val/265148_ALI_img.png
+val/265160_ALI_img.png
+val/265167_ALI_img.png
+val/265179_ALI_img.png
+val/265180_ALI_img.png
+val/265188_ALI_img.png
+val/265198_ALI_img.png
+val/265202_ALI_img.png
+val/265205_ALI_img.png
+val/265206_ALI_img.png
+val/265207_ALI_img.png
+val/265209_ALI_img.png
+val/265211_ALI_img.png
+val/265214_ALI_img.png
+val/265215_ALI_img.png
+val/265218_ALI_img.png
+val/265219_ALI_img.png
+val/265221_ALI_img.png
+val/265225_ALI_img.png
+val/265231_ALI_img.png
+val/265233_ALI_img.png
+val/265238_ALI_img.png
+val/265243_ALI_img.png
+val/265247_ALI_img.png
+val/265251_ALI_img.png
+val/265254_ALI_img.png
+val/265255_ALI_img.png
+val/265262_ALI_img.png
+val/265264_ALI_img.png
+val/265265_ALI_img.png
+val/265266_ALI_img.png
+val/265267_ALI_img.png
+val/265270_ALI_img.png
+val/265277_ALI_img.png
+val/265283_ALI_img.png
+val/265286_ALI_img.png
+val/265287_ALI_img.png
+val/265289_ALI_img.png
+val/265295_ALI_img.png
+val/265296_ALI_img.png
+val/265298_ALI_img.png
+val/265301_ALI_img.png
+val/265305_ALI_img.png
+val/265308_ALI_img.png
+val/265315_ALI_img.png
+val/265317_ALI_img.png
+val/265319_ALI_img.png
+val/265326_ALI_img.png
+val/265331_ALI_img.png
+val/265333_ALI_img.png
+val/265336_ALI_img.png
+val/265337_ALI_img.png
+val/265343_ALI_img.png
+val/265345_ALI_img.png
+val/265351_ALI_img.png
+val/265353_ALI_img.png
+val/265358_ALI_img.png
+val/265360_ALI_img.png
+val/265369_ALI_img.png
+val/265370_ALI_img.png
+val/265371_ALI_img.png
+val/265373_ALI_img.png
+val/265376_ALI_img.png
+val/265377_ALI_img.png
+val/265379_ALI_img.png
+val/265398_ALI_img.png
+val/265401_ALI_img.png
+val/265402_ALI_img.png
+val/265409_ALI_img.png
+val/265410_ALI_img.png
+val/265412_ALI_img.png
+val/265414_ALI_img.png
+val/265415_ALI_img.png
+val/265420_ALI_img.png
+val/265423_ALI_img.png
+val/265424_ALI_img.png
+val/265425_ALI_img.png
+val/265426_ALI_img.png
+val/265432_ALI_img.png
+val/265438_ALI_img.png
+val/265445_ALI_img.png
+val/265450_DT_img.png
+val/265454_ALI_img.png
+val/265480_ALI_img.png
+val/265484_ALI_img.png
+val/265487_ALI_img.png
+val/265488_ALI_img.png
+val/265495_ALI_img.png
+val/265495_DT_img.png
+val/265514_ALI_img.png
+val/265515_ALI_img.png
+val/265517_ALI_img.png
+val/265521_ALI_img.png
+val/265528_ALI_img.png
+val/265530_ALI_img.png
+val/265532_ALI_img.png
+val/265540_ALI_img.png
+val/265541_ALI_img.png
+val/265542_ALI_img.png
+val/265544_ALI_img.png
+val/265545_ALI_img.png
+val/265547_ALI_img.png
+val/265549_ALI_img.png
+val/265550_ALI_img.png
+val/265552_ALI_img.png
+val/265553_ALI_img.png
+val/265560_ALI_img.png
+val/265563_ALI_img.png
+val/265569_ALI_img.png
+val/265571_ALI_img.png
+val/265572_ALI_img.png
+val/265575_ALI_img.png
+val/265577_ALI_img.png
+val/265580_ALI_img.png
+val/265584_ALI_img.png
+val/265585_ALI_img.png
+val/265588_ALI_img.png
+val/265600_ALI_img.png
+val/265603_ALI_img.png
+val/265608_ALI_img.png
+val/265611_ALI_img.png
+val/265620_ALI_img.png
+val/265622_ALI_img.png
+val/265625_ALI_img.png
+val/265627_ALI_img.png
+val/265632_ALI_img.png
+val/265634_ALI_img.png
+val/265636_ALI_img.png
+val/265639_ALI_img.png
+val/265642_ALI_img.png
+val/265647_ALI_img.png
+val/265651_ALI_img.png
+val/265655_ALI_img.png
+val/265670_ALI_img.png
+val/265679_ALI_img.png
+val/265683_ALI_img.png
+val/265686_ALI_img.png
+val/265687_ALI_img.png
+val/265688_ALI_img.png
+val/265691_ALI_img.png
+val/265697_ALI_img.png
+val/265705_ALI_img.png
+val/265707_ALI_img.png
+val/265708_ALI_img.png
+val/265709_ALI_img.png
+val/265713_ALI_img.png
+val/265715_ALI_img.png
+val/265716_ALI_img.png
+val/265717_ALI_img.png
+val/265718_ALI_img.png
+val/265724_ALI_img.png
+val/265725_ALI_img.png
+val/265726_ALI_img.png
+val/265727_ALI_img.png
+val/265730_ALI_img.png
+val/265744_ALI_img.png
+val/265748_ALI_img.png
+val/265754_ALI_img.png
+val/265755_ALI_img.png
+val/265757_ALI_img.png
+val/265762_ALI_img.png
+val/265767_ALI_img.png
+val/265774_ALI_img.png
+val/265777_ALI_img.png
+val/265778_ALI_img.png
+val/265779_ALI_img.png
+val/265782_ALI_img.png
+val/265783_ALI_img.png
+val/265789_ALI_img.png
+val/265790_ALI_img.png
+val/265795_ALI_img.png
+val/265800_ALI_img.png
+val/265802_ALI_img.png
+val/265803_ALI_img.png
+val/265805_ALI_img.png
+val/265813_ALI_img.png
+val/265821_ALI_img.png
+val/265822_ALI_img.png
+val/265824_ALI_img.png
+val/265826_ALI_img.png
+val/265832_ALI_img.png
+val/265836_ALI_img.png
+val/265837_ALI_img.png
+val/265838_ALI_img.png
+val/265846_ALI_img.png
+val/265848_ALI_img.png
+val/265854_ALI_img.png
+val/265862_ALI_img.png
+val/265863_ALI_img.png
+val/265869_ALI_img.png
+val/265870_ALI_img.png
+val/265872_ALI_img.png
+val/265878_ALI_img.png
+val/265895_ALI_img.png
+val/265902_ALI_img.png
+val/265903_ALI_img.png
+val/265909_ALI_img.png
+val/265912_ALI_img.png
+val/265917_ALI_img.png
+val/265924_ALI_img.png
+val/265925_ALI_img.png
+val/265928_ALI_img.png
+val/265930_ALI_img.png
+val/265938_ALI_img.png
+val/265950_ALI_img.png
+val/265955_ALI_img.png
+val/265962_ALI_img.png
+val/265963_ALI_img.png
+val/265971_ALI_img.png
+val/265973_ALI_img.png
+val/265981_ALI_img.png
+val/265987_ALI_img.png
+val/265988_ALI_img.png
+val/265994_ALI_img.png
+val/266002_ALI_img.png
+val/266013_ALI_img.png
+val/266015_ALI_img.png
+val/266016_ALI_img.png
+val/266018_ALI_img.png
+val/266020_ALI_img.png
+val/266029_DT_img.png
+val/266031_ALI_img.png
+val/266036_ALI_img.png
+val/266039_ALI_img.png
+val/266045_ALI_img.png
+val/266046_ALI_img.png
+val/266050_ALI_img.png
+val/266054_ALI_img.png
+val/266063_ALI_img.png
+val/266068_ALI_img.png
+val/266073_ALI_img.png
+val/266085_ALI_img.png
+val/266091_ALI_img.png
+val/266094_ALI_img.png
+val/266107_ALI_img.png
+val/266111_ALI_img.png
+val/266126_ALI_img.png
+val/266136_ALI_img.png
+val/266139_ALI_img.png
+val/266143_ALI_img.png
+val/266148_ALI_img.png
+val/266153_ALI_img.png
+val/266160_ALI_img.png
+val/266163_ALI_img.png
+val/266165_ALI_img.png
+val/266166_ALI_img.png
+val/266173_ALI_img.png
+val/266183_ALI_img.png
+val/266185_ALI_img.png
+val/266190_ALI_img.png
+val/266192_ALI_img.png
+val/266196_ALI_img.png
+val/266199_ALI_img.png
+val/266208_ALI_img.png
+val/266211_ALI_img.png
+val/266214_ALI_img.png
+val/266215_ALI_img.png
+val/266216_ALI_img.png
+val/266220_ALI_img.png
+val/266222_ALI_img.png
+val/266225_ALI_img.png
+val/266230_ALI_img.png
+val/266231_ALI_img.png
+val/266233_ALI_img.png
+val/266234_ALI_img.png
+val/266238_ALI_img.png
+val/266239_ALI_img.png
+val/266240_ALI_img.png
+val/266243_ALI_img.png
+val/266251_ALI_img.png
+val/266252_ALI_img.png
+val/266257_ALI_img.png
+val/266258_ALI_img.png
+val/266265_ALI_img.png
+val/266267_ALI_img.png
+val/266269_ALI_img.png
+val/266275_ALI_img.png
+val/266277_ALI_img.png
+val/266281_ALI_img.png
+val/266286_ALI_img.png
+val/266288_ALI_img.png
+val/266295_ALI_img.png
+val/266296_ALI_img.png
+val/266297_ALI_img.png
+val/266298_ALI_img.png
+val/266300_ALI_img.png
+val/266304_ALI_img.png
+val/266305_ALI_img.png
+val/266309_ALI_img.png
+val/266311_ALI_img.png
+val/266325_ALI_img.png
+val/266329_ALI_img.png
+val/266337_ALI_img.png
+val/266340_ALI_img.png
+val/266348_ALI_img.png
+val/266349_ALI_img.png
+val/266350_ALI_img.png
+val/266355_ALI_img.png
+val/266376_ALI_img.png
+val/266379_ALI_img.png
+val/266381_ALI_img.png
+val/266388_ALI_img.png
+val/266392_ALI_img.png
+val/266393_ALI_img.png
+val/266414_ALI_img.png
+val/266417_ALI_img.png
+val/266436_ALI_img.png
+val/266440_ALI_img.png
+val/266444_ALI_img.png
+val/266447_ALI_img.png
+val/266448_ALI_img.png
+val/266454_ALI_img.png
+val/266456_ALI_img.png
+val/266459_ALI_img.png
+val/266460_ALI_img.png
+val/266463_ALI_img.png
+val/266467_ALI_img.png
+val/266470_ALI_img.png
+val/266478_ALI_img.png
+val/266486_ALI_img.png
+val/266489_ALI_img.png
+val/266492_ALI_img.png
+val/266497_ALI_img.png
+val/266503_ALI_img.png
+val/266504_ALI_img.png
+val/266505_ALI_img.png
+val/266507_ALI_img.png
+val/266515_ALI_img.png
+val/266527_ALI_img.png
+val/266537_ALI_img.png
+val/266538_ALI_img.png
+val/266547_ALI_img.png
+val/266548_ALI_img.png
+val/266565_ALI_img.png
+val/266570_ALI_img.png
+val/266576_ALI_img.png
+val/266577_ALI_img.png
+val/266580_ALI_img.png
+val/266588_ALI_img.png
+val/266594_ALI_img.png
+val/266596_ALI_img.png
+val/266597_ALI_img.png
+val/266602_ALI_img.png
+val/266607_ALI_img.png
+val/266609_ALI_img.png
+val/266610_ALI_img.png
+val/266611_ALI_img.png
+val/266613_ALI_img.png
+val/266615_ALI_img.png
+val/266620_ALI_img.png
+val/266625_ALI_img.png
+val/266628_ALI_img.png
+val/266629_ALI_img.png
+val/266632_ALI_img.png
+val/266635_ALI_img.png
+val/266636_ALI_img.png
+val/266641_ALI_img.png
+val/266643_ALI_img.png
+val/266648_ALI_img.png
+val/266654_ALI_img.png
+val/266667_ALI_img.png
+val/266668_ALI_img.png
+val/266669_ALI_img.png
+val/266670_ALI_img.png
+val/266671_ALI_img.png
+val/266686_ALI_img.png
+val/266688_ALI_img.png
+val/266691_ALI_img.png
+val/266697_ALI_img.png
+val/266702_ALI_img.png
+val/266704_ALI_img.png
+val/266714_ALI_img.png
+val/266716_ALI_img.png
+val/266729_ALI_img.png
+val/266734_ALI_img.png
+val/266761_ALI_img.png
+val/266766_ALI_img.png
+val/266774_ALI_img.png
+val/266780_ALI_img.png
+val/266782_ALI_img.png
+val/266792_ALI_img.png
+val/266794_ALI_img.png
+val/266800_ALI_img.png
+val/266810_ALI_img.png
+val/266813_ALI_img.png
+val/266821_ALI_img.png
+val/266835_ALI_img.png
+val/266836_ALI_img.png
+val/266837_ALI_img.png
+val/266841_ALI_img.png
+val/266852_ALI_img.png
+val/266856_ALI_img.png
+val/266859_ALI_img.png
+val/266860_ALI_img.png
+val/266862_ALI_img.png
+val/266864_ALI_img.png
+val/266865_ALI_img.png
+val/266877_ALI_img.png
+val/266878_ALI_img.png
+val/266881_ALI_img.png
+val/266884_ALI_img.png
+val/266885_ALI_img.png
+val/266896_ALI_img.png
+val/266904_ALI_img.png
+val/266907_ALI_img.png
+val/266919_ALI_img.png
+val/266920_ALI_img.png
+val/266922_ALI_img.png
+val/266926_ALI_img.png
+val/266927_ALI_img.png
+val/266933_ALI_img.png
+val/266946_ALI_img.png
+val/266949_ALI_img.png
+val/266958_ALI_img.png
+val/266959_ALI_img.png
+val/266963_ALI_img.png
+val/266964_ALI_img.png
+val/266965_ALI_img.png
+val/266970_ALI_img.png
+val/266976_ALI_img.png
+val/266979_ALI_img.png
+val/266980_ALI_img.png
+val/266988_ALI_img.png
+val/266991_ALI_img.png
+val/266995_ALI_img.png
+val/266996_ALI_img.png
+val/267000_ALI_img.png
+val/267004_ALI_img.png
+val/267008_ALI_img.png
+val/267009_ALI_img.png
+val/267030_ALI_img.png
+val/267032_ALI_img.png
+val/267045_ALI_img.png
+val/267093_ALI_img.png
+val/267117_ALI_img.png
+val/267122_ALI_img.png
+val/267133_ALI_img.png
+val/267136_ALI_img.png
+val/267138_ALI_img.png
+val/267140_ALI_img.png
+val/267146_ALI_img.png
+val/267148_ALI_img.png
+val/267157_ALI_img.png
+val/267158_ALI_img.png
+val/267166_ALI_img.png
+val/267175_ALI_img.png
+val/267177_ALI_img.png
+val/267178_ALI_img.png
+val/267180_ALI_img.png
+val/267186_ALI_img.png
+val/267190_ALI_img.png
+val/267191_ALI_img.png
+val/267193_ALI_img.png
+val/267194_ALI_img.png
+val/267195_ALI_img.png
+val/267197_ALI_img.png
+val/267206_ALI_img.png
+val/267208_ALI_img.png
+val/267210_ALI_img.png
+val/267224_ALI_img.png
+val/267226_ALI_img.png
+val/267227_ALI_img.png
+val/267228_ALI_img.png
+val/267237_ALI_img.png
+val/267239_ALI_img.png
+val/267241_ALI_img.png
+val/267246_ALI_img.png
+val/267265_ALI_img.png
+val/267268_ALI_img.png
+val/267277_ALI_img.png
+val/267282_ALI_img.png
+val/267283_ALI_img.png
+val/267286_ALI_img.png
+val/267288_ALI_img.png
+val/267293_ALI_img.png
+val/267311_ALI_img.png
+val/267316_ALI_img.png
+val/267320_ALI_img.png
+val/267323_ALI_img.png
+val/267331_ALI_img.png
+val/267333_ALI_img.png
+val/267335_ALI_img.png
+val/267336_ALI_img.png
+val/267340_ALI_img.png
+val/267345_ALI_img.png
+val/267349_ALI_img.png
+val/267355_ALI_img.png
+val/267362_ALI_img.png
+val/267371_ALI_img.png
+val/267377_ALI_img.png
+val/267382_ALI_img.png
+val/267402_ALI_img.png
+val/267404_ALI_img.png
+val/267407_ALI_img.png
+val/267414_ALI_img.png
+val/267415_ALI_img.png
+val/267421_ALI_img.png
+val/267423_ALI_img.png
+val/267424_ALI_img.png
+val/267426_ALI_img.png
+val/267428_ALI_img.png
+val/267431_ALI_img.png
+val/267433_ALI_img.png
+val/267439_ALI_img.png
+val/267441_ALI_img.png
+val/267443_ALI_img.png
+val/267457_ALI_img.png
+val/267463_ALI_img.png
+val/267469_ALI_img.png
+val/267474_ALI_img.png
+val/267475_ALI_img.png
+val/267480_ALI_img.png
+val/267488_ALI_img.png
+val/267490_ALI_img.png
+val/267492_ALI_img.png
+val/267498_ALI_img.png
+val/267500_ALI_img.png
+val/267501_ALI_img.png
+val/267504_ALI_img.png
+val/267508_ALI_img.png
+val/267509_ALI_img.png
+val/267513_ALI_img.png
+val/267516_ALI_img.png
+val/267518_ALI_img.png
+val/267520_ALI_img.png
+val/267522_ALI_img.png
+val/267527_ALI_img.png
+val/267536_ALI_img.png
+val/267545_ALI_img.png
+val/267547_ALI_img.png
+val/267548_ALI_img.png
+val/267550_ALI_img.png
+val/267551_ALI_img.png
+val/267553_ALI_img.png
+val/267558_ALI_img.png
+val/267566_ALI_img.png
+val/267580_ALI_img.png
+val/267585_ALI_img.png
+val/267587_ALI_img.png
+val/267588_ALI_img.png
+val/267599_ALI_img.png
+val/267601_ALI_img.png
+val/267603_ALI_img.png
+val/267622_ALI_img.png
+val/267626_ALI_img.png
+val/267629_ALI_img.png
+val/267630_ALI_img.png
+val/267633_ALI_img.png
+val/267634_ALI_img.png
+val/267637_ALI_img.png
+val/267645_ALI_img.png
+val/267649_ALI_img.png
+val/267651_ALI_img.png
+val/267668_ALI_img.png
+val/267669_ALI_img.png
+val/267672_ALI_img.png
+val/267686_ALI_img.png
+val/267695_ALI_img.png
+val/267699_ALI_img.png
+val/267700_ALI_img.png
+val/267707_ALI_img.png
+val/267719_ALI_img.png
+val/267723_ALI_img.png
+val/267729_ALI_img.png
+val/267734_ALI_img.png
+val/267736_ALI_img.png
+val/267743_ALI_img.png
+val/267754_ALI_img.png
+val/267762_ALI_img.png
+val/267763_ALI_img.png
+val/267764_ALI_img.png
+val/267769_ALI_img.png
+val/267771_ALI_img.png
+val/267775_ALI_img.png
+val/267781_ALI_img.png
+val/267783_ALI_img.png
+val/267784_ALI_img.png
+val/267790_ALI_img.png
+val/267796_ALI_img.png
+val/267803_ALI_img.png
+val/267807_ALI_img.png
+val/267809_ALI_img.png
+val/267811_ALI_img.png
+val/267814_ALI_img.png
+val/267817_ALI_img.png
+val/267828_ALI_img.png
+val/267831_ALI_img.png
+val/267833_ALI_img.png
+val/267838_ALI_img.png
+val/267860_ALI_img.png
+val/267868_ALI_img.png
+val/267871_ALI_img.png
+val/267874_ALI_img.png
+val/267881_ALI_img.png
+val/267887_ALI_img.png
+val/267888_ALI_img.png
+val/267890_ALI_img.png
+val/267892_ALI_img.png
+val/267894_ALI_img.png
+val/267896_ALI_img.png
+val/267899_ALI_img.png
+val/267910_ALI_img.png
+val/267912_ALI_img.png
+val/267915_ALI_img.png
+val/267920_ALI_img.png
+val/267938_ALI_img.png
+val/267939_ALI_img.png
+val/267947_ALI_img.png
+val/267956_ALI_img.png
+val/267961_ALI_img.png
+val/267962_ALI_img.png
+val/267963_ALI_img.png
+val/267969_ALI_img.png
+val/267981_ALI_img.png
+val/267986_ALI_img.png
+val/267991_ALI_img.png
+val/267998_ALI_img.png
+val/268002_ALI_img.png
+val/268010_ALI_img.png
+val/268014_ALI_img.png
+val/268026_ALI_img.png
+val/268042_ALI_img.png
+val/268045_ALI_img.png
+val/268046_ALI_img.png
+val/268050_ALI_img.png
+val/268056_ALI_img.png
+val/268062_ALI_img.png
+val/268064_ALI_img.png
+val/268067_ALI_img.png
+val/268068_ALI_img.png
+val/268072_ALI_img.png
+val/268075_ALI_img.png
+val/268076_ALI_img.png
+val/268079_ALI_img.png
+val/268081_ALI_img.png
+val/268082_ALI_img.png
+val/268083_ALI_img.png
+val/268084_ALI_img.png
+val/268093_ALI_img.png
+val/268094_ALI_img.png
+val/268101_ALI_img.png
+val/268104_ALI_img.png
+val/268106_ALI_img.png
+val/268107_ALI_img.png
+val/268110_ALI_img.png
+val/268111_ALI_img.png
+val/268122_ALI_img.png
+val/268125_ALI_img.png
+val/268133_ALI_img.png
+val/268141_ALI_img.png
+val/268144_ALI_img.png
+val/268145_ALI_img.png
+val/268147_ALI_img.png
+val/268149_ALI_img.png
+val/268162_ALI_img.png
+val/268165_ALI_img.png
+val/268166_ALI_img.png
+val/268173_ALI_img.png
+val/268183_ALI_img.png
+val/268184_ALI_img.png
+val/268190_ALI_img.png
+val/268194_ALI_img.png
+val/268196_ALI_img.png
+val/268206_ALI_img.png
+val/268208_ALI_img.png
+val/268222_ALI_img.png
+val/268225_ALI_img.png
+val/268238_ALI_img.png
+val/268245_ALI_img.png
+val/268247_ALI_img.png
+val/268251_ALI_img.png
+val/268255_ALI_img.png
+val/268262_ALI_img.png
+val/268263_ALI_img.png
+val/268267_ALI_img.png
+val/268270_ALI_img.png
+val/268271_ALI_img.png
+val/268279_ALI_img.png
+val/268282_ALI_img.png
+val/268285_ALI_img.png
+val/268290_ALI_img.png
+val/268291_ALI_img.png
+val/268295_ALI_img.png
+val/268299_ALI_img.png
+val/268300_ALI_img.png
+val/268302_ALI_img.png
+val/268315_ALI_img.png
+val/268317_ALI_img.png
+val/268325_ALI_img.png
+val/268326_ALI_img.png
+val/268327_ALI_img.png
+val/268330_ALI_img.png
+val/268336_ALI_img.png
+val/268348_ALI_img.png
+val/268352_ALI_img.png
+val/268353_ALI_img.png
+val/268378_ALI_img.png
+val/268382_ALI_img.png
+val/268385_ALI_img.png
+val/268386_ALI_img.png
+val/268387_ALI_img.png
+val/268393_ALI_img.png
+val/268398_ALI_img.png
+val/268399_ALI_img.png
+val/268414_ALI_img.png
+val/268421_ALI_img.png
+val/268423_ALI_img.png
+val/268424_ALI_img.png
+val/268429_ALI_img.png
+val/268430_ALI_img.png
+val/268433_ALI_img.png
+val/268437_ALI_img.png
+val/268440_ALI_img.png
+val/268446_ALI_img.png
+val/268447_ALI_img.png
+val/268450_ALI_img.png
+val/268453_ALI_img.png
+val/268472_ALI_img.png
+val/268473_ALI_img.png
+val/268478_ALI_img.png
+val/268481_ALI_img.png
+val/268483_ALI_img.png
+val/268484_ALI_img.png
+val/268486_ALI_img.png
+val/268489_ALI_img.png
+val/268493_ALI_img.png
+val/268498_ALI_img.png
+val/268500_ALI_img.png
+val/268502_ALI_img.png
+val/268503_ALI_img.png
+val/268504_ALI_img.png
+val/268512_ALI_img.png
+val/268516_ALI_img.png
+val/268519_ALI_img.png
+val/268530_ALI_img.png
+val/268533_ALI_img.png
+val/268534_ALI_img.png
+val/268546_ALI_img.png
+val/268550_ALI_img.png
+val/268552_ALI_img.png
+val/268557_ALI_img.png
+val/268572_ALI_img.png
+val/268584_ALI_img.png
+val/268596_ALI_img.png
+val/268601_ALI_img.png
+val/268620_ALI_img.png
+val/268633_ALI_img.png
+val/268639_ALI_img.png
+val/268642_ALI_img.png
+val/268650_ALI_img.png
+val/268662_ALI_img.png
+val/268665_ALI_img.png
+val/268674_ALI_img.png
+val/268679_ALI_img.png
+val/268680_ALI_img.png
+val/268682_ALI_img.png
+val/268684_ALI_img.png
+val/268694_ALI_img.png
+val/268696_ALI_img.png
+val/268697_ALI_img.png
+val/268699_ALI_img.png
+val/268702_ALI_img.png
+val/268706_ALI_img.png
+val/268714_ALI_img.png
+val/268721_ALI_img.png
+val/268724_ALI_img.png
+val/268735_ALI_img.png
+val/268750_ALI_img.png
+val/268758_ALI_img.png
+val/268766_ALI_img.png
+val/268769_ALI_img.png
+val/268770_ALI_img.png
+val/268789_ALI_img.png
+val/268790_ALI_img.png
+val/268793_ALI_img.png
+val/268799_ALI_img.png
+val/268805_ALI_img.png
+val/268806_ALI_img.png
+val/268810_ALI_img.png
+val/268811_ALI_img.png
+val/268813_ALI_img.png
+val/268821_ALI_img.png
+val/268826_ALI_img.png
+val/268829_ALI_img.png
+val/268845_ALI_img.png
+val/268848_ALI_img.png
+val/268855_ALI_img.png
+val/268858_ALI_img.png
+val/268861_ALI_img.png
+val/268879_ALI_img.png
+val/268880_ALI_img.png
+val/268881_ALI_img.png
+val/268882_ALI_img.png
+val/268887_ALI_img.png
+val/268893_ALI_img.png
+val/268896_ALI_img.png
+val/268901_ALI_img.png
+val/268907_ALI_img.png
+val/268924_ALI_img.png
+val/268926_ALI_img.png
+val/268933_ALI_img.png
+val/268936_ALI_img.png
+val/268943_ALI_img.png
+val/268953_ALI_img.png
+val/268954_ALI_img.png
+val/268955_ALI_img.png
+val/268957_ALI_img.png
+val/268958_ALI_img.png
+val/268959_ALI_img.png
+val/268963_ALI_img.png
+val/268965_ALI_img.png
+val/268968_ALI_img.png
+val/268970_ALI_img.png
+val/268972_ALI_img.png
+val/268974_ALI_img.png
+val/268975_ALI_img.png
+val/268978_ALI_img.png
+val/268981_ALI_img.png
+val/268991_ALI_img.png
+val/268993_ALI_img.png
+val/268996_ALI_img.png
+val/269003_ALI_img.png
+val/269008_ALI_img.png
+val/269010_ALI_img.png
+val/269012_ALI_img.png
+val/269022_ALI_img.png
+val/269029_ALI_img.png
+val/269034_ALI_img.png
+val/269035_ALI_img.png
+val/269049_ALI_img.png
+val/269056_ALI_img.png
+val/269057_ALI_img.png
+val/269069_ALI_img.png
+val/269070_ALI_img.png
+val/269086_ALI_img.png
+val/269092_ALI_img.png
+val/269094_ALI_img.png
+val/269107_ALI_img.png
+val/269108_ALI_img.png
+val/269124_ALI_img.png
+val/269133_ALI_img.png
+val/269136_ALI_img.png
+val/269143_ALI_img.png
+val/269146_ALI_img.png
+val/269150_ALI_img.png
+val/269153_ALI_img.png
+val/269162_ALI_img.png
+val/269166_ALI_img.png
+val/269176_ALI_img.png
+val/269177_ALI_img.png
+val/269181_ALI_img.png
+val/269186_ALI_img.png
+val/269202_ALI_img.png
+val/269209_ALI_img.png
+val/269210_ALI_img.png
+val/269214_ALI_img.png
+val/269229_ALI_img.png
+val/269232_ALI_img.png
+val/269234_ALI_img.png
+val/269235_ALI_img.png
+val/269240_ALI_img.png
+val/269245_ALI_img.png
+val/269250_ALI_img.png
+val/269253_ALI_img.png
+val/269259_ALI_img.png
+val/269260_ALI_img.png
+val/269268_ALI_img.png
+val/269269_ALI_img.png
+val/269272_ALI_img.png
+val/269273_ALI_img.png
+val/269278_ALI_img.png
+val/269286_ALI_img.png
+val/269297_ALI_img.png
+val/269314_ALI_img.png
+val/269333_ALI_img.png
+val/269341_ALI_img.png
+val/269348_ALI_img.png
+val/269350_ALI_img.png
+val/269354_ALI_img.png
+val/269355_ALI_img.png
+val/269378_ALI_img.png
+val/269385_ALI_img.png
+val/269387_ALI_img.png
+val/269392_ALI_img.png
+val/269398_ALI_img.png
+val/269420_ALI_img.png
+val/269424_ALI_img.png
+val/269435_ALI_img.png
+val/269436_ALI_img.png
+val/269437_ALI_img.png
+val/269444_ALI_img.png
+val/269447_ALI_img.png
+val/269449_ALI_img.png
+val/269450_ALI_img.png
+val/269454_ALI_img.png
+val/269459_ALI_img.png
+val/269460_ALI_img.png
+val/269499_ALI_img.png
+val/269502_ALI_img.png
+val/269515_ALI_img.png
+val/269518_ALI_img.png
+val/269527_ALI_img.png
+val/269530_ALI_img.png
+val/269531_ALI_img.png
+val/269533_ALI_img.png
+val/269535_ALI_img.png
+val/269541_ALI_img.png
+val/269546_ALI_img.png
+val/269550_ALI_img.png
+val/269552_ALI_img.png
+val/269553_ALI_img.png
+val/269559_ALI_img.png
+val/269562_ALI_img.png
+val/269563_ALI_img.png
+val/269567_ALI_img.png
+val/269573_ALI_img.png
+val/269575_ALI_img.png
+val/269576_ALI_img.png
+val/269577_ALI_img.png
+val/269581_ALI_img.png
+val/269591_ALI_img.png
+val/269595_ALI_img.png
+val/269599_ALI_img.png
+val/269602_ALI_img.png
+val/269604_ALI_img.png
+val/269607_ALI_img.png
+val/269608_ALI_img.png
+val/269621_ALI_img.png
+val/269625_ALI_img.png
+val/269629_ALI_img.png
+val/269637_ALI_img.png
+val/269638_ALI_img.png
+val/269642_ALI_img.png
+val/269650_ALI_img.png
+val/269651_ALI_img.png
+val/269652_ALI_img.png
+val/269657_ALI_img.png
+val/269659_ALI_img.png
+val/269660_ALI_img.png
+val/269682_ALI_img.png
+val/269689_ALI_img.png
+val/269701_ALI_img.png
+val/269705_ALI_img.png
+val/269707_ALI_img.png
+val/269727_ALI_img.png
+val/269730_ALI_img.png
+val/269744_ALI_img.png
+val/269748_ALI_img.png
+val/269752_ALI_img.png
+val/269754_ALI_img.png
+val/269763_ALI_img.png
+val/269764_ALI_img.png
+val/269766_ALI_img.png
+val/269767_ALI_img.png
+val/269775_ALI_img.png
+val/269777_ALI_img.png
+val/269779_ALI_img.png
+val/269780_ALI_img.png
+val/269793_ALI_img.png
+val/269794_ALI_img.png
+val/269799_ALI_img.png
+val/269800_ALI_img.png
+val/269801_ALI_img.png
+val/269813_ALI_img.png
+val/269816_ALI_img.png
+val/269825_ALI_img.png
+val/269826_ALI_img.png
+val/269831_ALI_img.png
+val/269838_ALI_img.png
+val/269842_ALI_img.png
+val/269851_ALI_img.png
+val/269854_ALI_img.png
+val/269855_ALI_img.png
+val/269857_ALI_img.png
+val/269864_ALI_img.png
+val/269866_ALI_img.png
+val/269869_ALI_img.png
+val/269874_ALI_img.png
+val/269876_ALI_img.png
+val/269879_ALI_img.png
+val/269881_ALI_img.png
+val/269885_ALI_img.png
+val/269891_ALI_img.png
+val/269892_ALI_img.png
+val/269893_ALI_img.png
+val/269894_ALI_img.png
+val/269897_ALI_img.png
+val/269899_ALI_img.png
+val/269903_ALI_img.png
+val/269909_ALI_img.png
+val/269911_ALI_img.png
+val/269914_ALI_img.png
+val/269916_ALI_img.png
+val/269919_ALI_img.png
+val/269930_ALI_img.png
+val/269934_ALI_img.png
+val/269936_ALI_img.png
+val/269940_ALI_img.png
+val/269957_ALI_img.png
+val/269963_ALI_img.png
+val/269966_ALI_img.png
+val/269969_ALI_img.png
+val/269976_ALI_img.png
+val/269980_ALI_img.png
+val/269989_ALI_img.png
+val/269993_ALI_img.png
+val/269994_ALI_img.png
+val/269998_ALI_img.png
+val/270000_ALI_img.png
+val/270001_ALI_img.png
+val/270006_ALI_img.png
+val/270013_ALI_img.png
+val/270015_ALI_img.png
+val/270018_ALI_img.png
+val/270020_ALI_img.png
+val/270021_ALI_img.png
+val/270025_ALI_img.png
+val/270026_ALI_img.png
+val/270043_ALI_img.png
+val/270052_ALI_img.png
+val/270053_ALI_img.png
+val/270054_ALI_img.png
+val/270056_ALI_img.png
+val/270062_ALI_img.png
+val/270066_ALI_img.png
+val/270067_ALI_img.png
+val/270074_ALI_img.png
+val/270078_ALI_img.png
+val/270079_ALI_img.png
+val/270082_ALI_img.png
+val/270085_ALI_img.png
+val/270087_ALI_img.png
+val/270088_ALI_img.png
+val/270092_ALI_img.png
+val/270099_ALI_img.png
+val/270100_ALI_img.png
+val/270101_ALI_img.png
+val/270103_ALI_img.png
+val/270104_ALI_img.png
+val/270110_ALI_img.png
+val/270112_ALI_img.png
+val/270113_ALI_img.png
+val/270116_ALI_img.png
+val/270124_ALI_img.png
+val/270132_ALI_img.png
+val/270135_ALI_img.png
+val/270144_ALI_img.png
+val/270154_ALI_img.png
+val/270155_ALI_img.png
+val/270161_ALI_img.png
+val/270162_ALI_img.png
+val/270176_ALI_img.png
+val/270178_ALI_img.png
+val/270199_ALI_img.png
+val/270204_ALI_img.png
+val/270233_ALI_img.png
+val/270730_ALI_img.png
+val/270972_ALI_img.png
+val/271077_ALI_img.png
+val/271275_ALI_img.png
+val/271333_ALI_img.png
+val/271867_ALI_img.png
+val/272602_ALI_img.png
+val/273419_ALI_img.png
+val/274002_ALI_img.png
+val/274860_ALI_img.png
+val/275901_ALI_img.png
+val/276571_ALI_img.png
+val/277831_ALI_img.png
+val/277967_ALI_img.png
+val/278835_ALI_img.png
+val/279242_ALI_img.png
+val/279283_ALI_img.png
+val/279347_ALI_img.png
+val/279544_ALI_img.png
+val/282086_ALI_img.png
+val/282105_ALI_img.png
+val/282185_ALI_img.png
+val/282390_ALI_img.png
+val/283177_ALI_img.png
+val/284880_ALI_img.png
+val/285331_ALI_img.png
+val/285480_ALI_img.png
+val/285677_ALI_img.png
+val/285863_ALI_img.png
+val/286181_ALI_img.png
+val/286199_ALI_img.png
+val/286377_ALI_img.png
+val/288267_ALI_img.png
+val/288607_ALI_img.png
+val/289101_ALI_img.png
+val/289145_ALI_img.png
+val/289363_ALI_img.png
+val/289419_ALI_img.png
+val/289874_ALI_img.png
+val/289938_ALI_img.png
+val/290891_ALI_img.png
+val/291366_ALI_img.png
+val/291388_ALI_img.png
+val/291611_ALI_img.png
+val/291703_ALI_img.png
+val/292739_ALI_img.png
+val/292887_ALI_img.png
+val/293165_ALI_img.png
+val/293392_ALI_img.png
+val/293789_ALI_img.png
+val/294561_ALI_img.png
+val/295985_ALI_img.png
+val/296350_ALI_img.png
+val/296721_ALI_img.png
+val/297546_ALI_img.png
+val/297612_ALI_img.png
+val/297754_ALI_img.png
+val/297771_ALI_img.png
+val/297917_ALI_img.png
+val/298353_ALI_img.png
+val/73717_DT_img.png
+val/73771_DT_img.png
+val/75799_DT_img.png
+val/78120_DT_img.png
+val/79685_DT_img.png
+val/80847_DT_img.png
+val/83994_DT_img.png
+val/84262_DT_img.png
+val/84335_DT_img.png
+val/87932_DT_img.png
+val/90896_DT_img.png
+val/92174_DT_img.png
+val/93302_DT_img.png
+val/93871_DT_img.png
+val/94887_DT_img.png
+val/95307_DT_img.png
+val/97627_DT_img.png
+val/98901_DT_img.png
+val/99353_DT_img.png
+val/99660_DT_img.png
\ No newline at end of file
diff --git a/FE2E/infer/dataset_normal/scannet/__init__.py b/FE2E/infer/dataset_normal/scannet/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..8dc97641a9e632e4c5891a13b8fda645e974b347
--- /dev/null
+++ b/FE2E/infer/dataset_normal/scannet/__init__.py
@@ -0,0 +1,64 @@
+""" Get samples from ScanNet (https://github.com/ScanNet/ScanNet)
+ NOTE: GT surface normals and data split are from FrameNet (ICCV 2019) - https://github.com/hjwdzh/FrameNet
+"""
+import os
+import cv2
+import numpy as np
+
+from infer.dataset_normal import Sample
+
+
+def get_sample(base_data_dir, sample_path, info):
+ # e.g. sample_path = "scene0532_00/000000_img.png"
+ scene_name = sample_path.split('/')[0]
+ img_name, img_ext = sample_path.split('/')[1].split('_img')
+
+ dataset_path = os.path.join(base_data_dir, 'dsine_eval', 'scannet')
+ img_path = '%s/%s' % (dataset_path, sample_path)
+ normal_png_path = img_path.replace('_img'+img_ext, '_normal.png')
+ normal_npy_path = img_path.replace('_img'+img_ext, '_normal.npy')
+ intrins_path = img_path.replace('_img'+img_ext, '_intrins.npy')
+ assert os.path.exists(img_path)
+
+ # read image (H, W, 3)
+ img = cv2.cvtColor(cv2.imread(img_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ img = img.astype(np.float32) / 255.0
+
+ # read normal (H, W, 3)
+ if os.path.exists(normal_png_path):
+ normal = cv2.cvtColor(cv2.imread(normal_png_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ normal_mask = np.sum(normal, axis=2, keepdims=True) > 0
+ normal = (normal.astype(np.float32) / 255.0) * 2.0 - 1.0
+ elif os.path.exists(normal_npy_path):
+ normal = np.load(normal_npy_path).astype(np.float32)
+ assert normal.ndim == 3 and normal.shape[2] == 3, f"Unexpected normal shape: {normal.shape}"
+ # FrameNet npy normals use opposite x-axis convention for this evaluation codepath.
+ normal[:, :, 0] *= -1.0
+ normal_mask = np.linalg.norm(normal, axis=2, keepdims=True) > 1e-6
+ else:
+ raise FileNotFoundError(f"Missing ScanNet normal file: {normal_png_path} or {normal_npy_path}")
+
+ # read intrins (3, 3)
+ if os.path.exists(intrins_path):
+ intrins = np.load(intrins_path)
+ else:
+ # Fallback intrinsics for ScanNet benchmark-sized frames.
+ intrins = np.array([
+ [577.870605, 0.0, 319.5],
+ [0.0, 577.870605, 239.5],
+ [0.0, 0.0, 1.0],
+ ], dtype=np.float32)
+
+ sample = Sample(
+ img=img,
+ normal=normal,
+ normal_mask=normal_mask,
+ intrins=intrins,
+
+ dataset_name='scannet',
+ scene_name=scene_name,
+ img_name=img_name,
+ info=info
+ )
+
+ return sample
diff --git a/FE2E/infer/dataset_normal/scannet/split/test.txt b/FE2E/infer/dataset_normal/scannet/split/test.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0c71d9f0e52ddef397d1158075b20b613caca50c
--- /dev/null
+++ b/FE2E/infer/dataset_normal/scannet/split/test.txt
@@ -0,0 +1,300 @@
+scene0532_00/000000_img.png
+scene0220_02/000450_img.png
+scene0061_00/000420_img.png
+scene0656_03/000490_img.png
+scene0525_01/000960_img.png
+scene0310_01/000630_img.png
+scene0628_00/000100_img.png
+scene0481_01/000900_img.png
+scene0608_02/001690_img.png
+scene0415_00/000750_img.png
+scene0603_00/001590_img.png
+scene0740_00/000510_img.png
+scene0740_00/002510_img.png
+scene0177_00/000550_img.png
+scene0395_01/000160_img.png
+scene0395_01/002160_img.png
+scene0343_00/000210_img.png
+scene0241_00/000970_img.png
+scene0717_00/000010_img.png
+scene0362_00/000890_img.png
+scene0457_02/000070_img.png
+scene0296_00/000040_img.png
+scene0157_00/000300_img.png
+scene0502_02/001130_img.png
+scene0101_01/000410_img.png
+scene0610_02/000730_img.png
+scene0610_02/002780_img.png
+scene0416_00/000950_img.png
+scene0685_02/000840_img.png
+scene0685_02/003050_img.png
+scene0662_01/001810_img.png
+scene0670_01/000840_img.png
+scene0670_01/002840_img.png
+scene0012_01/000160_img.png
+scene0012_01/002160_img.png
+scene0320_03/000790_img.png
+scene0780_00/000450_img.png
+scene0575_01/000510_img.png
+scene0575_01/002510_img.png
+scene0168_01/000100_img.png
+scene0335_02/000980_img.png
+scene0691_00/000400_img.png
+scene0778_00/001230_img.png
+scene0019_01/000490_img.png
+scene0554_00/001960_img.png
+scene0114_00/000260_img.png
+scene0457_01/000350_img.png
+scene0548_01/000150_img.png
+scene0548_01/002150_img.png
+scene0378_00/000610_img.png
+scene0505_00/000710_img.png
+scene0505_00/002710_img.png
+scene0695_01/001200_img.png
+scene0424_02/001060_img.png
+scene0627_00/001470_img.png
+scene0279_00/001200_img.png
+scene0291_01/001280_img.png
+scene0768_00/000330_img.png
+scene0768_00/002330_img.png
+scene0696_01/000340_img.png
+scene0145_00/000420_img.png
+scene0185_00/000370_img.png
+scene0185_00/002370_img.png
+scene0806_00/001070_img.png
+scene0261_03/000410_img.png
+scene0068_00/000570_img.png
+scene0804_00/000510_img.png
+scene0221_01/000490_img.png
+scene0630_03/000880_img.png
+scene0617_00/001270_img.png
+scene0206_02/001640_img.png
+scene0582_02/000590_img.png
+scene0031_01/000100_img.png
+scene0031_01/002100_img.png
+scene0505_04/001100_img.png
+scene0092_01/000600_img.png
+scene0542_00/000570_img.png
+scene0525_02/000480_img.png
+scene0756_00/000870_img.png
+scene0756_00/002870_img.png
+scene0061_01/001360_img.png
+scene0588_01/000940_img.png
+scene0256_02/000610_img.png
+scene0300_00/001430_img.png
+scene0451_05/001110_img.png
+scene0397_01/001390_img.png
+scene0372_00/000250_img.png
+scene0372_00/002280_img.png
+scene0647_01/000790_img.png
+scene0474_01/001600_img.png
+scene0404_00/000360_img.png
+scene0404_00/002360_img.png
+scene0702_01/000010_img.png
+scene0114_02/001420_img.png
+scene0460_00/000820_img.png
+scene0151_01/000390_img.png
+scene0151_01/002390_img.png
+scene0078_02/000520_img.png
+scene0772_00/001530_img.png
+scene0705_01/000490_img.png
+scene0408_01/000590_img.png
+scene0538_00/001430_img.png
+scene0651_00/000080_img.png
+scene0210_01/001040_img.png
+scene0002_00/000240_img.png
+scene0002_00/002240_img.png
+scene0002_00/004240_img.png
+scene0347_00/001040_img.png
+scene0072_02/000210_img.png
+scene0371_00/000410_img.png
+scene0211_00/001120_img.png
+scene0514_01/000050_img.png
+scene0473_01/000910_img.png
+scene0362_02/001970_img.png
+scene0024_02/001180_img.png
+scene0673_00/000280_img.png
+scene0176_00/000030_img.png
+scene0073_00/000400_img.png
+scene0186_01/000230_img.png
+scene0236_00/000490_img.png
+scene0210_00/000780_img.png
+scene0325_01/000920_img.png
+scene0044_01/000170_img.png
+scene0197_00/001300_img.png
+scene0472_02/001190_img.png
+scene0611_01/000010_img.png
+scene0758_00/000710_img.png
+scene0650_00/000870_img.png
+scene0728_00/000160_img.png
+scene0217_00/000450_img.png
+scene0335_01/000070_img.png
+scene0335_01/002070_img.png
+scene0504_00/001230_img.png
+scene0669_01/000780_img.png
+scene0143_01/000760_img.png
+scene0320_01/000460_img.png
+scene0645_01/000340_img.png
+scene0645_01/002340_img.png
+scene0645_01/004340_img.png
+scene0248_01/000300_img.png
+scene0416_04/000580_img.png
+scene0416_04/002580_img.png
+scene0534_00/000780_img.png
+scene0489_02/001010_img.png
+scene0379_00/000500_img.png
+scene0500_01/000480_img.png
+scene0561_01/000850_img.png
+scene0580_00/001200_img.png
+scene0580_00/003200_img.png
+scene0552_01/000430_img.png
+scene0744_00/000020_img.png
+scene0744_00/002020_img.png
+scene0044_00/001030_img.png
+scene0301_02/000140_img.png
+scene0422_00/000940_img.png
+scene0655_01/000700_img.png
+scene0803_00/001770_img.png
+scene0629_02/000530_img.png
+scene0609_01/000030_img.png
+scene0623_01/000930_img.png
+scene0596_00/000660_img.png
+scene0150_01/000150_img.png
+scene0501_02/001770_img.png
+scene0560_00/000420_img.png
+scene0406_02/000220_img.png
+scene0587_02/001010_img.png
+scene0540_00/000730_img.png
+scene0074_01/001390_img.png
+scene0620_01/000200_img.png
+scene0486_00/000320_img.png
+scene0486_00/002320_img.png
+scene0600_02/001350_img.png
+scene0085_00/001800_img.png
+scene0084_00/000560_img.png
+scene0319_00/000580_img.png
+scene0400_01/000890_img.png
+scene0548_02/000020_img.png
+scene0548_02/002110_img.png
+scene0244_01/000360_img.png
+scene0785_00/000630_img.png
+scene0785_00/002630_img.png
+scene0479_02/000530_img.png
+scene0121_00/000310_img.png
+scene0107_00/000410_img.png
+scene0328_00/000040_img.png
+scene0196_00/000350_img.png
+scene0404_01/000720_img.png
+scene0404_01/002720_img.png
+scene0081_02/000710_img.png
+scene0666_00/000360_img.png
+scene0367_00/000330_img.png
+scene0340_01/000460_img.png
+scene0300_01/000980_img.png
+scene0275_00/001230_img.png
+scene0036_00/000440_img.png
+scene0520_01/001350_img.png
+scene0113_01/000000_img.png
+scene0541_01/000020_img.png
+scene0034_01/001070_img.png
+scene0030_01/000160_img.png
+scene0438_00/000510_img.png
+scene0679_00/001210_img.png
+scene0546_00/000400_img.png
+scene0223_00/000600_img.png
+scene0403_00/001570_img.png
+scene0001_01/001170_img.png
+scene0014_00/001880_img.png
+scene0673_02/001480_img.png
+scene0794_00/000000_img.png
+scene0209_02/000210_img.png
+scene0801_00/000180_img.png
+scene0086_00/000800_img.png
+scene0501_00/001370_img.png
+scene0412_01/000070_img.png
+scene0339_00/000730_img.png
+scene0724_00/000500_img.png
+scene0654_01/001080_img.png
+scene0081_01/000460_img.png
+scene0576_02/001030_img.png
+scene0589_01/001010_img.png
+scene0428_00/001470_img.png
+scene0199_00/000110_img.png
+scene0513_00/000440_img.png
+scene0512_00/000110_img.png
+scene0508_00/000840_img.png
+scene0009_02/000360_img.png
+scene0303_00/001250_img.png
+scene0533_01/001240_img.png
+scene0445_01/000640_img.png
+scene0392_00/001870_img.png
+scene0111_01/001560_img.png
+scene0192_02/000620_img.png
+scene0396_00/000170_img.png
+scene0376_02/000320_img.png
+scene0100_01/000880_img.png
+scene0578_01/000920_img.png
+scene0765_00/000400_img.png
+scene0784_00/000420_img.png
+scene0784_00/002430_img.png
+scene0784_00/004430_img.png
+scene0065_02/000740_img.png
+scene0207_02/000040_img.png
+scene0207_02/002040_img.png
+scene0440_01/000500_img.png
+scene0220_01/000450_img.png
+scene0713_00/000000_img.png
+scene0713_00/002000_img.png
+scene0697_02/000070_img.png
+scene0697_02/002070_img.png
+scene0286_03/001170_img.png
+scene0393_02/000810_img.png
+scene0370_02/000080_img.png
+scene0370_02/002080_img.png
+scene0452_02/000950_img.png
+scene0226_00/001270_img.png
+scene0474_03/001610_img.png
+scene0304_00/000600_img.png
+scene0250_01/000820_img.png
+scene0250_01/002820_img.png
+scene0419_02/001480_img.png
+scene0548_00/000000_img.png
+scene0548_00/002050_img.png
+scene0568_00/000150_img.png
+scene0324_00/000080_img.png
+scene0567_00/000070_img.png
+scene0567_00/002070_img.png
+scene0659_01/001460_img.png
+scene0540_02/000120_img.png
+scene0488_01/000680_img.png
+scene0146_01/000260_img.png
+scene0580_01/001130_img.png
+scene0580_01/003130_img.png
+scene0421_02/001320_img.png
+scene0657_00/000090_img.png
+scene0588_02/001380_img.png
+scene0471_02/000570_img.png
+scene0186_00/000260_img.png
+scene0186_00/002260_img.png
+scene0065_01/000800_img.png
+scene0456_01/000710_img.png
+scene0524_01/001680_img.png
+scene0062_00/000690_img.png
+scene0134_01/000780_img.png
+scene0294_00/000280_img.png
+scene0294_00/002280_img.png
+scene0452_01/001090_img.png
+scene0142_00/000770_img.png
+scene0135_00/000330_img.png
+scene0279_02/000780_img.png
+scene0698_01/000390_img.png
+scene0520_00/000820_img.png
+scene0448_01/000850_img.png
+scene0276_00/000320_img.png
+scene0731_00/000220_img.png
+scene0599_01/001090_img.png
+scene0631_02/000210_img.png
+scene0748_00/000890_img.png
+scene0170_02/000190_img.png
+scene0215_01/000400_img.png
+scene0178_00/001330_img.png
\ No newline at end of file
diff --git a/FE2E/infer/dataset_normal/sintel/__init__.py b/FE2E/infer/dataset_normal/sintel/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..29af73a1b374d3a263890861f0813aae7dfcd21e
--- /dev/null
+++ b/FE2E/infer/dataset_normal/sintel/__init__.py
@@ -0,0 +1,49 @@
+""" Get samples from Sintel (http://sintel.is.tue.mpg.de/)
+ NOTE: We computed the GT surface normals by doing discontinuity-aware plane fitting
+"""
+import os
+import cv2
+import numpy as np
+os.environ["OPENCV_IO_ENABLE_OPENEXR"]="1"
+
+from infer.dataset_normal import Sample
+
+
+
+def get_sample(base_data_dir, sample_path, info):
+ # e.g. sample_path = "alley_1/frame_0001_img.png"
+ scene_name = sample_path.split('/')[0]
+ img_name, img_ext = sample_path.split('/')[1].split('_img')
+
+ dataset_path = os.path.join(base_data_dir, 'dsine_eval', 'sintel')
+ img_path = '%s/%s' % (dataset_path, sample_path)
+ normal_path = img_path.replace('_img'+img_ext, '_normal.exr')
+ intrins_path = img_path.replace('_img'+img_ext, '_intrins.npy')
+ assert os.path.exists(img_path)
+ assert os.path.exists(normal_path)
+ assert os.path.exists(intrins_path)
+
+ # read image (H, W, 3)
+ img = cv2.cvtColor(cv2.imread(img_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ img = img.astype(np.float32) / 255.0
+
+ # read normal (H, W, 3)
+ normal = cv2.cvtColor(cv2.imread(normal_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ normal_mask = np.linalg.norm(normal, axis=2, keepdims=True) > 0.5
+
+ # read intrins (3, 3)
+ intrins = np.load(intrins_path)
+
+ sample = Sample(
+ img=img,
+ normal=normal,
+ normal_mask=normal_mask,
+ intrins=intrins,
+
+ dataset_name='sintel',
+ scene_name=scene_name,
+ img_name=img_name,
+ info=info
+ )
+
+ return sample
\ No newline at end of file
diff --git a/FE2E/infer/dataset_normal/sintel/split/sintel.txt b/FE2E/infer/dataset_normal/sintel/split/sintel.txt
new file mode 100644
index 0000000000000000000000000000000000000000..03dd29dca88d2be4b36b3177ee5608a627c22840
--- /dev/null
+++ b/FE2E/infer/dataset_normal/sintel/split/sintel.txt
@@ -0,0 +1,1064 @@
+alley_1/frame_0001_img.png
+alley_1/frame_0002_img.png
+alley_1/frame_0003_img.png
+alley_1/frame_0004_img.png
+alley_1/frame_0005_img.png
+alley_1/frame_0006_img.png
+alley_1/frame_0007_img.png
+alley_1/frame_0008_img.png
+alley_1/frame_0009_img.png
+alley_1/frame_0010_img.png
+alley_1/frame_0011_img.png
+alley_1/frame_0012_img.png
+alley_1/frame_0013_img.png
+alley_1/frame_0014_img.png
+alley_1/frame_0015_img.png
+alley_1/frame_0016_img.png
+alley_1/frame_0017_img.png
+alley_1/frame_0018_img.png
+alley_1/frame_0019_img.png
+alley_1/frame_0020_img.png
+alley_1/frame_0021_img.png
+alley_1/frame_0022_img.png
+alley_1/frame_0023_img.png
+alley_1/frame_0024_img.png
+alley_1/frame_0025_img.png
+alley_1/frame_0026_img.png
+alley_1/frame_0027_img.png
+alley_1/frame_0028_img.png
+alley_1/frame_0029_img.png
+alley_1/frame_0030_img.png
+alley_1/frame_0031_img.png
+alley_1/frame_0032_img.png
+alley_1/frame_0033_img.png
+alley_1/frame_0034_img.png
+alley_1/frame_0035_img.png
+alley_1/frame_0036_img.png
+alley_1/frame_0037_img.png
+alley_1/frame_0038_img.png
+alley_1/frame_0039_img.png
+alley_1/frame_0040_img.png
+alley_1/frame_0041_img.png
+alley_1/frame_0042_img.png
+alley_1/frame_0043_img.png
+alley_1/frame_0044_img.png
+alley_1/frame_0045_img.png
+alley_1/frame_0046_img.png
+alley_1/frame_0047_img.png
+alley_1/frame_0048_img.png
+alley_1/frame_0049_img.png
+alley_1/frame_0050_img.png
+alley_2/frame_0001_img.png
+alley_2/frame_0002_img.png
+alley_2/frame_0003_img.png
+alley_2/frame_0004_img.png
+alley_2/frame_0005_img.png
+alley_2/frame_0006_img.png
+alley_2/frame_0007_img.png
+alley_2/frame_0008_img.png
+alley_2/frame_0009_img.png
+alley_2/frame_0010_img.png
+alley_2/frame_0011_img.png
+alley_2/frame_0012_img.png
+alley_2/frame_0013_img.png
+alley_2/frame_0014_img.png
+alley_2/frame_0015_img.png
+alley_2/frame_0016_img.png
+alley_2/frame_0017_img.png
+alley_2/frame_0018_img.png
+alley_2/frame_0019_img.png
+alley_2/frame_0020_img.png
+alley_2/frame_0021_img.png
+alley_2/frame_0022_img.png
+alley_2/frame_0023_img.png
+alley_2/frame_0024_img.png
+alley_2/frame_0025_img.png
+alley_2/frame_0026_img.png
+alley_2/frame_0027_img.png
+alley_2/frame_0028_img.png
+alley_2/frame_0029_img.png
+alley_2/frame_0030_img.png
+alley_2/frame_0031_img.png
+alley_2/frame_0032_img.png
+alley_2/frame_0033_img.png
+alley_2/frame_0034_img.png
+alley_2/frame_0035_img.png
+alley_2/frame_0036_img.png
+alley_2/frame_0037_img.png
+alley_2/frame_0038_img.png
+alley_2/frame_0039_img.png
+alley_2/frame_0040_img.png
+alley_2/frame_0041_img.png
+alley_2/frame_0042_img.png
+alley_2/frame_0043_img.png
+alley_2/frame_0044_img.png
+alley_2/frame_0045_img.png
+alley_2/frame_0046_img.png
+alley_2/frame_0047_img.png
+alley_2/frame_0048_img.png
+alley_2/frame_0049_img.png
+alley_2/frame_0050_img.png
+ambush_2/frame_0001_img.png
+ambush_2/frame_0002_img.png
+ambush_2/frame_0003_img.png
+ambush_2/frame_0004_img.png
+ambush_2/frame_0005_img.png
+ambush_2/frame_0006_img.png
+ambush_2/frame_0007_img.png
+ambush_2/frame_0008_img.png
+ambush_2/frame_0009_img.png
+ambush_2/frame_0010_img.png
+ambush_2/frame_0011_img.png
+ambush_2/frame_0012_img.png
+ambush_2/frame_0013_img.png
+ambush_2/frame_0014_img.png
+ambush_2/frame_0015_img.png
+ambush_2/frame_0016_img.png
+ambush_2/frame_0017_img.png
+ambush_2/frame_0018_img.png
+ambush_2/frame_0019_img.png
+ambush_2/frame_0020_img.png
+ambush_2/frame_0021_img.png
+ambush_4/frame_0001_img.png
+ambush_4/frame_0002_img.png
+ambush_4/frame_0003_img.png
+ambush_4/frame_0004_img.png
+ambush_4/frame_0005_img.png
+ambush_4/frame_0006_img.png
+ambush_4/frame_0007_img.png
+ambush_4/frame_0008_img.png
+ambush_4/frame_0009_img.png
+ambush_4/frame_0010_img.png
+ambush_4/frame_0011_img.png
+ambush_4/frame_0012_img.png
+ambush_4/frame_0013_img.png
+ambush_4/frame_0014_img.png
+ambush_4/frame_0015_img.png
+ambush_4/frame_0016_img.png
+ambush_4/frame_0017_img.png
+ambush_4/frame_0018_img.png
+ambush_4/frame_0019_img.png
+ambush_4/frame_0020_img.png
+ambush_4/frame_0021_img.png
+ambush_4/frame_0022_img.png
+ambush_4/frame_0023_img.png
+ambush_4/frame_0024_img.png
+ambush_4/frame_0025_img.png
+ambush_4/frame_0026_img.png
+ambush_4/frame_0027_img.png
+ambush_4/frame_0028_img.png
+ambush_4/frame_0029_img.png
+ambush_4/frame_0030_img.png
+ambush_4/frame_0031_img.png
+ambush_4/frame_0032_img.png
+ambush_4/frame_0033_img.png
+ambush_5/frame_0001_img.png
+ambush_5/frame_0002_img.png
+ambush_5/frame_0003_img.png
+ambush_5/frame_0004_img.png
+ambush_5/frame_0005_img.png
+ambush_5/frame_0006_img.png
+ambush_5/frame_0007_img.png
+ambush_5/frame_0008_img.png
+ambush_5/frame_0009_img.png
+ambush_5/frame_0010_img.png
+ambush_5/frame_0011_img.png
+ambush_5/frame_0012_img.png
+ambush_5/frame_0013_img.png
+ambush_5/frame_0014_img.png
+ambush_5/frame_0015_img.png
+ambush_5/frame_0016_img.png
+ambush_5/frame_0017_img.png
+ambush_5/frame_0018_img.png
+ambush_5/frame_0019_img.png
+ambush_5/frame_0020_img.png
+ambush_5/frame_0021_img.png
+ambush_5/frame_0022_img.png
+ambush_5/frame_0023_img.png
+ambush_5/frame_0024_img.png
+ambush_5/frame_0025_img.png
+ambush_5/frame_0026_img.png
+ambush_5/frame_0027_img.png
+ambush_5/frame_0028_img.png
+ambush_5/frame_0029_img.png
+ambush_5/frame_0030_img.png
+ambush_5/frame_0031_img.png
+ambush_5/frame_0032_img.png
+ambush_5/frame_0033_img.png
+ambush_5/frame_0034_img.png
+ambush_5/frame_0035_img.png
+ambush_5/frame_0036_img.png
+ambush_5/frame_0037_img.png
+ambush_5/frame_0038_img.png
+ambush_5/frame_0039_img.png
+ambush_5/frame_0040_img.png
+ambush_5/frame_0041_img.png
+ambush_5/frame_0042_img.png
+ambush_5/frame_0043_img.png
+ambush_5/frame_0044_img.png
+ambush_5/frame_0045_img.png
+ambush_5/frame_0046_img.png
+ambush_5/frame_0047_img.png
+ambush_5/frame_0048_img.png
+ambush_5/frame_0049_img.png
+ambush_5/frame_0050_img.png
+ambush_6/frame_0001_img.png
+ambush_6/frame_0002_img.png
+ambush_6/frame_0003_img.png
+ambush_6/frame_0004_img.png
+ambush_6/frame_0005_img.png
+ambush_6/frame_0006_img.png
+ambush_6/frame_0007_img.png
+ambush_6/frame_0008_img.png
+ambush_6/frame_0009_img.png
+ambush_6/frame_0010_img.png
+ambush_6/frame_0011_img.png
+ambush_6/frame_0012_img.png
+ambush_6/frame_0013_img.png
+ambush_6/frame_0014_img.png
+ambush_6/frame_0015_img.png
+ambush_6/frame_0016_img.png
+ambush_6/frame_0017_img.png
+ambush_6/frame_0018_img.png
+ambush_6/frame_0019_img.png
+ambush_6/frame_0020_img.png
+ambush_7/frame_0001_img.png
+ambush_7/frame_0002_img.png
+ambush_7/frame_0003_img.png
+ambush_7/frame_0004_img.png
+ambush_7/frame_0005_img.png
+ambush_7/frame_0006_img.png
+ambush_7/frame_0007_img.png
+ambush_7/frame_0008_img.png
+ambush_7/frame_0009_img.png
+ambush_7/frame_0010_img.png
+ambush_7/frame_0011_img.png
+ambush_7/frame_0012_img.png
+ambush_7/frame_0013_img.png
+ambush_7/frame_0014_img.png
+ambush_7/frame_0015_img.png
+ambush_7/frame_0016_img.png
+ambush_7/frame_0017_img.png
+ambush_7/frame_0018_img.png
+ambush_7/frame_0019_img.png
+ambush_7/frame_0020_img.png
+ambush_7/frame_0021_img.png
+ambush_7/frame_0022_img.png
+ambush_7/frame_0023_img.png
+ambush_7/frame_0024_img.png
+ambush_7/frame_0025_img.png
+ambush_7/frame_0026_img.png
+ambush_7/frame_0027_img.png
+ambush_7/frame_0028_img.png
+ambush_7/frame_0029_img.png
+ambush_7/frame_0030_img.png
+ambush_7/frame_0031_img.png
+ambush_7/frame_0032_img.png
+ambush_7/frame_0033_img.png
+ambush_7/frame_0034_img.png
+ambush_7/frame_0035_img.png
+ambush_7/frame_0036_img.png
+ambush_7/frame_0037_img.png
+ambush_7/frame_0038_img.png
+ambush_7/frame_0039_img.png
+ambush_7/frame_0040_img.png
+ambush_7/frame_0041_img.png
+ambush_7/frame_0042_img.png
+ambush_7/frame_0043_img.png
+ambush_7/frame_0044_img.png
+ambush_7/frame_0045_img.png
+ambush_7/frame_0046_img.png
+ambush_7/frame_0047_img.png
+ambush_7/frame_0048_img.png
+ambush_7/frame_0049_img.png
+ambush_7/frame_0050_img.png
+bamboo_1/frame_0001_img.png
+bamboo_1/frame_0002_img.png
+bamboo_1/frame_0003_img.png
+bamboo_1/frame_0004_img.png
+bamboo_1/frame_0005_img.png
+bamboo_1/frame_0006_img.png
+bamboo_1/frame_0007_img.png
+bamboo_1/frame_0008_img.png
+bamboo_1/frame_0009_img.png
+bamboo_1/frame_0010_img.png
+bamboo_1/frame_0011_img.png
+bamboo_1/frame_0012_img.png
+bamboo_1/frame_0013_img.png
+bamboo_1/frame_0014_img.png
+bamboo_1/frame_0015_img.png
+bamboo_1/frame_0016_img.png
+bamboo_1/frame_0017_img.png
+bamboo_1/frame_0018_img.png
+bamboo_1/frame_0019_img.png
+bamboo_1/frame_0020_img.png
+bamboo_1/frame_0021_img.png
+bamboo_1/frame_0022_img.png
+bamboo_1/frame_0023_img.png
+bamboo_1/frame_0024_img.png
+bamboo_1/frame_0025_img.png
+bamboo_1/frame_0026_img.png
+bamboo_1/frame_0027_img.png
+bamboo_1/frame_0028_img.png
+bamboo_1/frame_0029_img.png
+bamboo_1/frame_0030_img.png
+bamboo_1/frame_0031_img.png
+bamboo_1/frame_0032_img.png
+bamboo_1/frame_0033_img.png
+bamboo_1/frame_0034_img.png
+bamboo_1/frame_0035_img.png
+bamboo_1/frame_0036_img.png
+bamboo_1/frame_0037_img.png
+bamboo_1/frame_0038_img.png
+bamboo_1/frame_0039_img.png
+bamboo_1/frame_0040_img.png
+bamboo_1/frame_0041_img.png
+bamboo_1/frame_0042_img.png
+bamboo_1/frame_0043_img.png
+bamboo_1/frame_0044_img.png
+bamboo_1/frame_0045_img.png
+bamboo_1/frame_0046_img.png
+bamboo_1/frame_0047_img.png
+bamboo_1/frame_0048_img.png
+bamboo_1/frame_0049_img.png
+bamboo_1/frame_0050_img.png
+bamboo_2/frame_0001_img.png
+bamboo_2/frame_0002_img.png
+bamboo_2/frame_0003_img.png
+bamboo_2/frame_0004_img.png
+bamboo_2/frame_0005_img.png
+bamboo_2/frame_0006_img.png
+bamboo_2/frame_0007_img.png
+bamboo_2/frame_0008_img.png
+bamboo_2/frame_0009_img.png
+bamboo_2/frame_0010_img.png
+bamboo_2/frame_0011_img.png
+bamboo_2/frame_0012_img.png
+bamboo_2/frame_0013_img.png
+bamboo_2/frame_0014_img.png
+bamboo_2/frame_0015_img.png
+bamboo_2/frame_0016_img.png
+bamboo_2/frame_0017_img.png
+bamboo_2/frame_0018_img.png
+bamboo_2/frame_0019_img.png
+bamboo_2/frame_0020_img.png
+bamboo_2/frame_0021_img.png
+bamboo_2/frame_0022_img.png
+bamboo_2/frame_0023_img.png
+bamboo_2/frame_0024_img.png
+bamboo_2/frame_0025_img.png
+bamboo_2/frame_0026_img.png
+bamboo_2/frame_0027_img.png
+bamboo_2/frame_0028_img.png
+bamboo_2/frame_0029_img.png
+bamboo_2/frame_0030_img.png
+bamboo_2/frame_0031_img.png
+bamboo_2/frame_0032_img.png
+bamboo_2/frame_0033_img.png
+bamboo_2/frame_0034_img.png
+bamboo_2/frame_0035_img.png
+bamboo_2/frame_0036_img.png
+bamboo_2/frame_0037_img.png
+bamboo_2/frame_0038_img.png
+bamboo_2/frame_0039_img.png
+bamboo_2/frame_0040_img.png
+bamboo_2/frame_0041_img.png
+bamboo_2/frame_0042_img.png
+bamboo_2/frame_0043_img.png
+bamboo_2/frame_0044_img.png
+bamboo_2/frame_0045_img.png
+bamboo_2/frame_0046_img.png
+bamboo_2/frame_0047_img.png
+bamboo_2/frame_0048_img.png
+bamboo_2/frame_0049_img.png
+bamboo_2/frame_0050_img.png
+bandage_1/frame_0001_img.png
+bandage_1/frame_0002_img.png
+bandage_1/frame_0003_img.png
+bandage_1/frame_0004_img.png
+bandage_1/frame_0005_img.png
+bandage_1/frame_0006_img.png
+bandage_1/frame_0007_img.png
+bandage_1/frame_0008_img.png
+bandage_1/frame_0009_img.png
+bandage_1/frame_0010_img.png
+bandage_1/frame_0011_img.png
+bandage_1/frame_0012_img.png
+bandage_1/frame_0013_img.png
+bandage_1/frame_0014_img.png
+bandage_1/frame_0015_img.png
+bandage_1/frame_0016_img.png
+bandage_1/frame_0017_img.png
+bandage_1/frame_0018_img.png
+bandage_1/frame_0019_img.png
+bandage_1/frame_0020_img.png
+bandage_1/frame_0021_img.png
+bandage_1/frame_0022_img.png
+bandage_1/frame_0023_img.png
+bandage_1/frame_0024_img.png
+bandage_1/frame_0025_img.png
+bandage_1/frame_0026_img.png
+bandage_1/frame_0027_img.png
+bandage_1/frame_0028_img.png
+bandage_1/frame_0029_img.png
+bandage_1/frame_0030_img.png
+bandage_1/frame_0031_img.png
+bandage_1/frame_0032_img.png
+bandage_1/frame_0033_img.png
+bandage_1/frame_0034_img.png
+bandage_1/frame_0035_img.png
+bandage_1/frame_0036_img.png
+bandage_1/frame_0037_img.png
+bandage_1/frame_0038_img.png
+bandage_1/frame_0039_img.png
+bandage_1/frame_0040_img.png
+bandage_1/frame_0041_img.png
+bandage_1/frame_0042_img.png
+bandage_1/frame_0043_img.png
+bandage_1/frame_0044_img.png
+bandage_1/frame_0045_img.png
+bandage_1/frame_0046_img.png
+bandage_1/frame_0047_img.png
+bandage_1/frame_0048_img.png
+bandage_1/frame_0049_img.png
+bandage_1/frame_0050_img.png
+bandage_2/frame_0001_img.png
+bandage_2/frame_0002_img.png
+bandage_2/frame_0003_img.png
+bandage_2/frame_0004_img.png
+bandage_2/frame_0005_img.png
+bandage_2/frame_0006_img.png
+bandage_2/frame_0007_img.png
+bandage_2/frame_0008_img.png
+bandage_2/frame_0009_img.png
+bandage_2/frame_0010_img.png
+bandage_2/frame_0011_img.png
+bandage_2/frame_0012_img.png
+bandage_2/frame_0013_img.png
+bandage_2/frame_0014_img.png
+bandage_2/frame_0015_img.png
+bandage_2/frame_0016_img.png
+bandage_2/frame_0017_img.png
+bandage_2/frame_0018_img.png
+bandage_2/frame_0019_img.png
+bandage_2/frame_0020_img.png
+bandage_2/frame_0021_img.png
+bandage_2/frame_0022_img.png
+bandage_2/frame_0023_img.png
+bandage_2/frame_0024_img.png
+bandage_2/frame_0025_img.png
+bandage_2/frame_0026_img.png
+bandage_2/frame_0027_img.png
+bandage_2/frame_0028_img.png
+bandage_2/frame_0029_img.png
+bandage_2/frame_0030_img.png
+bandage_2/frame_0031_img.png
+bandage_2/frame_0032_img.png
+bandage_2/frame_0033_img.png
+bandage_2/frame_0034_img.png
+bandage_2/frame_0035_img.png
+bandage_2/frame_0036_img.png
+bandage_2/frame_0037_img.png
+bandage_2/frame_0038_img.png
+bandage_2/frame_0039_img.png
+bandage_2/frame_0040_img.png
+bandage_2/frame_0041_img.png
+bandage_2/frame_0042_img.png
+bandage_2/frame_0043_img.png
+bandage_2/frame_0044_img.png
+bandage_2/frame_0045_img.png
+bandage_2/frame_0046_img.png
+bandage_2/frame_0047_img.png
+bandage_2/frame_0048_img.png
+bandage_2/frame_0049_img.png
+bandage_2/frame_0050_img.png
+cave_2/frame_0001_img.png
+cave_2/frame_0002_img.png
+cave_2/frame_0003_img.png
+cave_2/frame_0004_img.png
+cave_2/frame_0005_img.png
+cave_2/frame_0006_img.png
+cave_2/frame_0007_img.png
+cave_2/frame_0008_img.png
+cave_2/frame_0009_img.png
+cave_2/frame_0010_img.png
+cave_2/frame_0011_img.png
+cave_2/frame_0012_img.png
+cave_2/frame_0013_img.png
+cave_2/frame_0014_img.png
+cave_2/frame_0015_img.png
+cave_2/frame_0016_img.png
+cave_2/frame_0017_img.png
+cave_2/frame_0018_img.png
+cave_2/frame_0019_img.png
+cave_2/frame_0020_img.png
+cave_2/frame_0021_img.png
+cave_2/frame_0022_img.png
+cave_2/frame_0023_img.png
+cave_2/frame_0024_img.png
+cave_2/frame_0025_img.png
+cave_2/frame_0026_img.png
+cave_2/frame_0027_img.png
+cave_2/frame_0028_img.png
+cave_2/frame_0029_img.png
+cave_2/frame_0030_img.png
+cave_2/frame_0031_img.png
+cave_2/frame_0032_img.png
+cave_2/frame_0033_img.png
+cave_2/frame_0034_img.png
+cave_2/frame_0035_img.png
+cave_2/frame_0036_img.png
+cave_2/frame_0037_img.png
+cave_2/frame_0038_img.png
+cave_2/frame_0039_img.png
+cave_2/frame_0040_img.png
+cave_2/frame_0041_img.png
+cave_2/frame_0042_img.png
+cave_2/frame_0043_img.png
+cave_2/frame_0044_img.png
+cave_2/frame_0045_img.png
+cave_2/frame_0046_img.png
+cave_2/frame_0047_img.png
+cave_2/frame_0048_img.png
+cave_2/frame_0049_img.png
+cave_2/frame_0050_img.png
+cave_4/frame_0001_img.png
+cave_4/frame_0002_img.png
+cave_4/frame_0003_img.png
+cave_4/frame_0004_img.png
+cave_4/frame_0005_img.png
+cave_4/frame_0006_img.png
+cave_4/frame_0007_img.png
+cave_4/frame_0008_img.png
+cave_4/frame_0009_img.png
+cave_4/frame_0010_img.png
+cave_4/frame_0011_img.png
+cave_4/frame_0012_img.png
+cave_4/frame_0013_img.png
+cave_4/frame_0014_img.png
+cave_4/frame_0015_img.png
+cave_4/frame_0016_img.png
+cave_4/frame_0017_img.png
+cave_4/frame_0018_img.png
+cave_4/frame_0019_img.png
+cave_4/frame_0020_img.png
+cave_4/frame_0021_img.png
+cave_4/frame_0022_img.png
+cave_4/frame_0023_img.png
+cave_4/frame_0024_img.png
+cave_4/frame_0025_img.png
+cave_4/frame_0026_img.png
+cave_4/frame_0027_img.png
+cave_4/frame_0028_img.png
+cave_4/frame_0029_img.png
+cave_4/frame_0030_img.png
+cave_4/frame_0031_img.png
+cave_4/frame_0032_img.png
+cave_4/frame_0033_img.png
+cave_4/frame_0034_img.png
+cave_4/frame_0035_img.png
+cave_4/frame_0036_img.png
+cave_4/frame_0037_img.png
+cave_4/frame_0038_img.png
+cave_4/frame_0039_img.png
+cave_4/frame_0040_img.png
+cave_4/frame_0041_img.png
+cave_4/frame_0042_img.png
+cave_4/frame_0043_img.png
+cave_4/frame_0044_img.png
+cave_4/frame_0045_img.png
+cave_4/frame_0046_img.png
+cave_4/frame_0047_img.png
+cave_4/frame_0048_img.png
+cave_4/frame_0049_img.png
+cave_4/frame_0050_img.png
+market_2/frame_0001_img.png
+market_2/frame_0002_img.png
+market_2/frame_0003_img.png
+market_2/frame_0004_img.png
+market_2/frame_0005_img.png
+market_2/frame_0006_img.png
+market_2/frame_0007_img.png
+market_2/frame_0008_img.png
+market_2/frame_0009_img.png
+market_2/frame_0010_img.png
+market_2/frame_0011_img.png
+market_2/frame_0012_img.png
+market_2/frame_0013_img.png
+market_2/frame_0014_img.png
+market_2/frame_0015_img.png
+market_2/frame_0016_img.png
+market_2/frame_0017_img.png
+market_2/frame_0018_img.png
+market_2/frame_0019_img.png
+market_2/frame_0020_img.png
+market_2/frame_0021_img.png
+market_2/frame_0022_img.png
+market_2/frame_0023_img.png
+market_2/frame_0024_img.png
+market_2/frame_0025_img.png
+market_2/frame_0026_img.png
+market_2/frame_0027_img.png
+market_2/frame_0028_img.png
+market_2/frame_0029_img.png
+market_2/frame_0030_img.png
+market_2/frame_0031_img.png
+market_2/frame_0032_img.png
+market_2/frame_0033_img.png
+market_2/frame_0034_img.png
+market_2/frame_0035_img.png
+market_2/frame_0036_img.png
+market_2/frame_0037_img.png
+market_2/frame_0038_img.png
+market_2/frame_0039_img.png
+market_2/frame_0040_img.png
+market_2/frame_0041_img.png
+market_2/frame_0042_img.png
+market_2/frame_0043_img.png
+market_2/frame_0044_img.png
+market_2/frame_0045_img.png
+market_2/frame_0046_img.png
+market_2/frame_0047_img.png
+market_2/frame_0048_img.png
+market_2/frame_0049_img.png
+market_2/frame_0050_img.png
+market_5/frame_0001_img.png
+market_5/frame_0002_img.png
+market_5/frame_0003_img.png
+market_5/frame_0004_img.png
+market_5/frame_0005_img.png
+market_5/frame_0006_img.png
+market_5/frame_0007_img.png
+market_5/frame_0008_img.png
+market_5/frame_0009_img.png
+market_5/frame_0010_img.png
+market_5/frame_0011_img.png
+market_5/frame_0012_img.png
+market_5/frame_0013_img.png
+market_5/frame_0014_img.png
+market_5/frame_0015_img.png
+market_5/frame_0016_img.png
+market_5/frame_0017_img.png
+market_5/frame_0018_img.png
+market_5/frame_0019_img.png
+market_5/frame_0020_img.png
+market_5/frame_0021_img.png
+market_5/frame_0022_img.png
+market_5/frame_0023_img.png
+market_5/frame_0024_img.png
+market_5/frame_0025_img.png
+market_5/frame_0026_img.png
+market_5/frame_0027_img.png
+market_5/frame_0028_img.png
+market_5/frame_0029_img.png
+market_5/frame_0030_img.png
+market_5/frame_0031_img.png
+market_5/frame_0032_img.png
+market_5/frame_0033_img.png
+market_5/frame_0034_img.png
+market_5/frame_0035_img.png
+market_5/frame_0036_img.png
+market_5/frame_0037_img.png
+market_5/frame_0038_img.png
+market_5/frame_0039_img.png
+market_5/frame_0040_img.png
+market_5/frame_0041_img.png
+market_5/frame_0042_img.png
+market_5/frame_0043_img.png
+market_5/frame_0044_img.png
+market_5/frame_0045_img.png
+market_5/frame_0046_img.png
+market_5/frame_0047_img.png
+market_5/frame_0048_img.png
+market_5/frame_0049_img.png
+market_5/frame_0050_img.png
+market_6/frame_0001_img.png
+market_6/frame_0002_img.png
+market_6/frame_0003_img.png
+market_6/frame_0004_img.png
+market_6/frame_0005_img.png
+market_6/frame_0006_img.png
+market_6/frame_0007_img.png
+market_6/frame_0008_img.png
+market_6/frame_0009_img.png
+market_6/frame_0010_img.png
+market_6/frame_0011_img.png
+market_6/frame_0012_img.png
+market_6/frame_0013_img.png
+market_6/frame_0014_img.png
+market_6/frame_0015_img.png
+market_6/frame_0016_img.png
+market_6/frame_0017_img.png
+market_6/frame_0018_img.png
+market_6/frame_0019_img.png
+market_6/frame_0020_img.png
+market_6/frame_0021_img.png
+market_6/frame_0022_img.png
+market_6/frame_0023_img.png
+market_6/frame_0024_img.png
+market_6/frame_0025_img.png
+market_6/frame_0026_img.png
+market_6/frame_0027_img.png
+market_6/frame_0028_img.png
+market_6/frame_0029_img.png
+market_6/frame_0030_img.png
+market_6/frame_0031_img.png
+market_6/frame_0032_img.png
+market_6/frame_0033_img.png
+market_6/frame_0034_img.png
+market_6/frame_0035_img.png
+market_6/frame_0036_img.png
+market_6/frame_0037_img.png
+market_6/frame_0038_img.png
+market_6/frame_0039_img.png
+market_6/frame_0040_img.png
+mountain_1/frame_0001_img.png
+mountain_1/frame_0002_img.png
+mountain_1/frame_0003_img.png
+mountain_1/frame_0004_img.png
+mountain_1/frame_0005_img.png
+mountain_1/frame_0006_img.png
+mountain_1/frame_0007_img.png
+mountain_1/frame_0008_img.png
+mountain_1/frame_0009_img.png
+mountain_1/frame_0010_img.png
+mountain_1/frame_0011_img.png
+mountain_1/frame_0012_img.png
+mountain_1/frame_0013_img.png
+mountain_1/frame_0014_img.png
+mountain_1/frame_0015_img.png
+mountain_1/frame_0016_img.png
+mountain_1/frame_0017_img.png
+mountain_1/frame_0018_img.png
+mountain_1/frame_0019_img.png
+mountain_1/frame_0020_img.png
+mountain_1/frame_0021_img.png
+mountain_1/frame_0022_img.png
+mountain_1/frame_0023_img.png
+mountain_1/frame_0024_img.png
+mountain_1/frame_0025_img.png
+mountain_1/frame_0026_img.png
+mountain_1/frame_0027_img.png
+mountain_1/frame_0028_img.png
+mountain_1/frame_0029_img.png
+mountain_1/frame_0030_img.png
+mountain_1/frame_0031_img.png
+mountain_1/frame_0032_img.png
+mountain_1/frame_0033_img.png
+mountain_1/frame_0034_img.png
+mountain_1/frame_0035_img.png
+mountain_1/frame_0036_img.png
+mountain_1/frame_0037_img.png
+mountain_1/frame_0038_img.png
+mountain_1/frame_0039_img.png
+mountain_1/frame_0040_img.png
+mountain_1/frame_0041_img.png
+mountain_1/frame_0042_img.png
+mountain_1/frame_0043_img.png
+mountain_1/frame_0044_img.png
+mountain_1/frame_0045_img.png
+mountain_1/frame_0046_img.png
+mountain_1/frame_0047_img.png
+mountain_1/frame_0048_img.png
+mountain_1/frame_0049_img.png
+mountain_1/frame_0050_img.png
+shaman_2/frame_0001_img.png
+shaman_2/frame_0002_img.png
+shaman_2/frame_0003_img.png
+shaman_2/frame_0004_img.png
+shaman_2/frame_0005_img.png
+shaman_2/frame_0006_img.png
+shaman_2/frame_0007_img.png
+shaman_2/frame_0008_img.png
+shaman_2/frame_0009_img.png
+shaman_2/frame_0010_img.png
+shaman_2/frame_0011_img.png
+shaman_2/frame_0012_img.png
+shaman_2/frame_0013_img.png
+shaman_2/frame_0014_img.png
+shaman_2/frame_0015_img.png
+shaman_2/frame_0016_img.png
+shaman_2/frame_0017_img.png
+shaman_2/frame_0018_img.png
+shaman_2/frame_0019_img.png
+shaman_2/frame_0020_img.png
+shaman_2/frame_0021_img.png
+shaman_2/frame_0022_img.png
+shaman_2/frame_0023_img.png
+shaman_2/frame_0024_img.png
+shaman_2/frame_0025_img.png
+shaman_2/frame_0026_img.png
+shaman_2/frame_0027_img.png
+shaman_2/frame_0028_img.png
+shaman_2/frame_0029_img.png
+shaman_2/frame_0030_img.png
+shaman_2/frame_0031_img.png
+shaman_2/frame_0032_img.png
+shaman_2/frame_0033_img.png
+shaman_2/frame_0034_img.png
+shaman_2/frame_0035_img.png
+shaman_2/frame_0036_img.png
+shaman_2/frame_0037_img.png
+shaman_2/frame_0038_img.png
+shaman_2/frame_0039_img.png
+shaman_2/frame_0040_img.png
+shaman_2/frame_0041_img.png
+shaman_2/frame_0042_img.png
+shaman_2/frame_0043_img.png
+shaman_2/frame_0044_img.png
+shaman_2/frame_0045_img.png
+shaman_2/frame_0046_img.png
+shaman_2/frame_0047_img.png
+shaman_2/frame_0048_img.png
+shaman_2/frame_0049_img.png
+shaman_2/frame_0050_img.png
+shaman_3/frame_0001_img.png
+shaman_3/frame_0002_img.png
+shaman_3/frame_0003_img.png
+shaman_3/frame_0004_img.png
+shaman_3/frame_0005_img.png
+shaman_3/frame_0006_img.png
+shaman_3/frame_0007_img.png
+shaman_3/frame_0008_img.png
+shaman_3/frame_0009_img.png
+shaman_3/frame_0010_img.png
+shaman_3/frame_0011_img.png
+shaman_3/frame_0012_img.png
+shaman_3/frame_0013_img.png
+shaman_3/frame_0014_img.png
+shaman_3/frame_0015_img.png
+shaman_3/frame_0016_img.png
+shaman_3/frame_0017_img.png
+shaman_3/frame_0018_img.png
+shaman_3/frame_0019_img.png
+shaman_3/frame_0020_img.png
+shaman_3/frame_0021_img.png
+shaman_3/frame_0022_img.png
+shaman_3/frame_0023_img.png
+shaman_3/frame_0024_img.png
+shaman_3/frame_0025_img.png
+shaman_3/frame_0026_img.png
+shaman_3/frame_0027_img.png
+shaman_3/frame_0028_img.png
+shaman_3/frame_0029_img.png
+shaman_3/frame_0030_img.png
+shaman_3/frame_0031_img.png
+shaman_3/frame_0032_img.png
+shaman_3/frame_0033_img.png
+shaman_3/frame_0034_img.png
+shaman_3/frame_0035_img.png
+shaman_3/frame_0036_img.png
+shaman_3/frame_0037_img.png
+shaman_3/frame_0038_img.png
+shaman_3/frame_0039_img.png
+shaman_3/frame_0040_img.png
+shaman_3/frame_0041_img.png
+shaman_3/frame_0042_img.png
+shaman_3/frame_0043_img.png
+shaman_3/frame_0044_img.png
+shaman_3/frame_0045_img.png
+shaman_3/frame_0046_img.png
+shaman_3/frame_0047_img.png
+shaman_3/frame_0048_img.png
+shaman_3/frame_0049_img.png
+shaman_3/frame_0050_img.png
+sleeping_1/frame_0001_img.png
+sleeping_1/frame_0002_img.png
+sleeping_1/frame_0003_img.png
+sleeping_1/frame_0004_img.png
+sleeping_1/frame_0005_img.png
+sleeping_1/frame_0006_img.png
+sleeping_1/frame_0007_img.png
+sleeping_1/frame_0008_img.png
+sleeping_1/frame_0009_img.png
+sleeping_1/frame_0010_img.png
+sleeping_1/frame_0011_img.png
+sleeping_1/frame_0012_img.png
+sleeping_1/frame_0013_img.png
+sleeping_1/frame_0014_img.png
+sleeping_1/frame_0015_img.png
+sleeping_1/frame_0016_img.png
+sleeping_1/frame_0017_img.png
+sleeping_1/frame_0018_img.png
+sleeping_1/frame_0019_img.png
+sleeping_1/frame_0020_img.png
+sleeping_1/frame_0021_img.png
+sleeping_1/frame_0022_img.png
+sleeping_1/frame_0023_img.png
+sleeping_1/frame_0024_img.png
+sleeping_1/frame_0025_img.png
+sleeping_1/frame_0026_img.png
+sleeping_1/frame_0027_img.png
+sleeping_1/frame_0028_img.png
+sleeping_1/frame_0029_img.png
+sleeping_1/frame_0030_img.png
+sleeping_1/frame_0031_img.png
+sleeping_1/frame_0032_img.png
+sleeping_1/frame_0033_img.png
+sleeping_1/frame_0034_img.png
+sleeping_1/frame_0035_img.png
+sleeping_1/frame_0036_img.png
+sleeping_1/frame_0037_img.png
+sleeping_1/frame_0038_img.png
+sleeping_1/frame_0039_img.png
+sleeping_1/frame_0040_img.png
+sleeping_1/frame_0041_img.png
+sleeping_1/frame_0042_img.png
+sleeping_1/frame_0043_img.png
+sleeping_1/frame_0044_img.png
+sleeping_1/frame_0045_img.png
+sleeping_1/frame_0046_img.png
+sleeping_1/frame_0047_img.png
+sleeping_1/frame_0048_img.png
+sleeping_1/frame_0049_img.png
+sleeping_1/frame_0050_img.png
+sleeping_2/frame_0001_img.png
+sleeping_2/frame_0002_img.png
+sleeping_2/frame_0003_img.png
+sleeping_2/frame_0004_img.png
+sleeping_2/frame_0005_img.png
+sleeping_2/frame_0006_img.png
+sleeping_2/frame_0007_img.png
+sleeping_2/frame_0008_img.png
+sleeping_2/frame_0009_img.png
+sleeping_2/frame_0010_img.png
+sleeping_2/frame_0011_img.png
+sleeping_2/frame_0012_img.png
+sleeping_2/frame_0013_img.png
+sleeping_2/frame_0014_img.png
+sleeping_2/frame_0015_img.png
+sleeping_2/frame_0016_img.png
+sleeping_2/frame_0017_img.png
+sleeping_2/frame_0018_img.png
+sleeping_2/frame_0019_img.png
+sleeping_2/frame_0020_img.png
+sleeping_2/frame_0021_img.png
+sleeping_2/frame_0022_img.png
+sleeping_2/frame_0023_img.png
+sleeping_2/frame_0024_img.png
+sleeping_2/frame_0025_img.png
+sleeping_2/frame_0026_img.png
+sleeping_2/frame_0027_img.png
+sleeping_2/frame_0028_img.png
+sleeping_2/frame_0029_img.png
+sleeping_2/frame_0030_img.png
+sleeping_2/frame_0031_img.png
+sleeping_2/frame_0032_img.png
+sleeping_2/frame_0033_img.png
+sleeping_2/frame_0034_img.png
+sleeping_2/frame_0035_img.png
+sleeping_2/frame_0036_img.png
+sleeping_2/frame_0037_img.png
+sleeping_2/frame_0038_img.png
+sleeping_2/frame_0039_img.png
+sleeping_2/frame_0040_img.png
+sleeping_2/frame_0041_img.png
+sleeping_2/frame_0042_img.png
+sleeping_2/frame_0043_img.png
+sleeping_2/frame_0044_img.png
+sleeping_2/frame_0045_img.png
+sleeping_2/frame_0046_img.png
+sleeping_2/frame_0047_img.png
+sleeping_2/frame_0048_img.png
+sleeping_2/frame_0049_img.png
+sleeping_2/frame_0050_img.png
+temple_2/frame_0001_img.png
+temple_2/frame_0002_img.png
+temple_2/frame_0003_img.png
+temple_2/frame_0004_img.png
+temple_2/frame_0005_img.png
+temple_2/frame_0006_img.png
+temple_2/frame_0007_img.png
+temple_2/frame_0008_img.png
+temple_2/frame_0009_img.png
+temple_2/frame_0010_img.png
+temple_2/frame_0011_img.png
+temple_2/frame_0012_img.png
+temple_2/frame_0013_img.png
+temple_2/frame_0014_img.png
+temple_2/frame_0015_img.png
+temple_2/frame_0016_img.png
+temple_2/frame_0017_img.png
+temple_2/frame_0018_img.png
+temple_2/frame_0019_img.png
+temple_2/frame_0020_img.png
+temple_2/frame_0021_img.png
+temple_2/frame_0022_img.png
+temple_2/frame_0023_img.png
+temple_2/frame_0024_img.png
+temple_2/frame_0025_img.png
+temple_2/frame_0026_img.png
+temple_2/frame_0027_img.png
+temple_2/frame_0028_img.png
+temple_2/frame_0029_img.png
+temple_2/frame_0030_img.png
+temple_2/frame_0031_img.png
+temple_2/frame_0032_img.png
+temple_2/frame_0033_img.png
+temple_2/frame_0034_img.png
+temple_2/frame_0035_img.png
+temple_2/frame_0036_img.png
+temple_2/frame_0037_img.png
+temple_2/frame_0038_img.png
+temple_2/frame_0039_img.png
+temple_2/frame_0040_img.png
+temple_2/frame_0041_img.png
+temple_2/frame_0042_img.png
+temple_2/frame_0043_img.png
+temple_2/frame_0044_img.png
+temple_2/frame_0045_img.png
+temple_2/frame_0046_img.png
+temple_2/frame_0047_img.png
+temple_2/frame_0048_img.png
+temple_2/frame_0049_img.png
+temple_2/frame_0050_img.png
+temple_3/frame_0001_img.png
+temple_3/frame_0002_img.png
+temple_3/frame_0003_img.png
+temple_3/frame_0004_img.png
+temple_3/frame_0005_img.png
+temple_3/frame_0006_img.png
+temple_3/frame_0007_img.png
+temple_3/frame_0008_img.png
+temple_3/frame_0009_img.png
+temple_3/frame_0010_img.png
+temple_3/frame_0011_img.png
+temple_3/frame_0012_img.png
+temple_3/frame_0013_img.png
+temple_3/frame_0014_img.png
+temple_3/frame_0015_img.png
+temple_3/frame_0016_img.png
+temple_3/frame_0017_img.png
+temple_3/frame_0018_img.png
+temple_3/frame_0019_img.png
+temple_3/frame_0020_img.png
+temple_3/frame_0021_img.png
+temple_3/frame_0022_img.png
+temple_3/frame_0023_img.png
+temple_3/frame_0024_img.png
+temple_3/frame_0025_img.png
+temple_3/frame_0026_img.png
+temple_3/frame_0027_img.png
+temple_3/frame_0028_img.png
+temple_3/frame_0029_img.png
+temple_3/frame_0030_img.png
+temple_3/frame_0031_img.png
+temple_3/frame_0032_img.png
+temple_3/frame_0033_img.png
+temple_3/frame_0034_img.png
+temple_3/frame_0035_img.png
+temple_3/frame_0036_img.png
+temple_3/frame_0037_img.png
+temple_3/frame_0038_img.png
+temple_3/frame_0039_img.png
+temple_3/frame_0040_img.png
+temple_3/frame_0041_img.png
+temple_3/frame_0042_img.png
+temple_3/frame_0043_img.png
+temple_3/frame_0044_img.png
+temple_3/frame_0045_img.png
+temple_3/frame_0046_img.png
+temple_3/frame_0047_img.png
+temple_3/frame_0048_img.png
+temple_3/frame_0049_img.png
+temple_3/frame_0050_img.png
\ No newline at end of file
diff --git a/FE2E/infer/image_utils.py b/FE2E/infer/image_utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..4721fabf708537e8dc40c0a89bb8e76a2067cd3b
--- /dev/null
+++ b/FE2E/infer/image_utils.py
@@ -0,0 +1,158 @@
+from PIL import Image
+import matplotlib
+import numpy as np
+
+from typing import List, Union
+import PIL.Image
+
+import torch
+from torchvision.transforms import InterpolationMode
+from torchvision.transforms.functional import resize
+
+def concatenate_images(*image_lists):
+ # Ensure at least one image list is provided
+ if not image_lists or not image_lists[0]:
+ raise ValueError("At least one non-empty image list must be provided")
+
+ # Determine the maximum width of any single row and the total height
+ max_width = 0
+ total_height = 0
+ row_widths = []
+ row_heights = []
+
+ # Compute dimensions for each row
+ for image_list in image_lists:
+ if image_list: # Ensure the list is not empty
+ width = sum(img.width for img in image_list)
+ height = image_list[0].height # Assuming all images in the list have the same height
+ max_width = max(max_width, width)
+ total_height += height
+ row_widths.append(width)
+ row_heights.append(height)
+
+ # Create a new image to concatenate everything into
+ new_image = Image.new('RGB', (max_width, total_height))
+
+ # Concatenate each row of images
+ y_offset = 0
+ for i, image_list in enumerate(image_lists):
+ x_offset = 0
+ for img in image_list:
+ new_image.paste(img, (x_offset, y_offset))
+ x_offset += img.width
+ y_offset += row_heights[i] # Move the offset down to the next row
+
+ return new_image
+
+
+def colorize_depth_map(depth, mask=None, reverse_color=False):
+ cm = matplotlib.colormaps["Spectral"]
+ # normalize
+ depth = ((depth - depth.min()) / (depth.max() - depth.min()))
+ # colorize
+ if reverse_color:
+ img_colored_np = cm(1 - depth, bytes=False)[:, :, 0:3] # Invert the depth values before applying colormap
+ else:
+ img_colored_np = cm(depth, bytes=False)[:, :, 0:3] # (h,w,3)
+
+ depth_colored = (img_colored_np * 255).astype(np.uint8)
+ if mask is not None:
+ masked_image = np.zeros_like(depth_colored)
+ masked_image[mask.numpy()] = depth_colored[mask.numpy()]
+ depth_colored_img = Image.fromarray(masked_image)
+ else:
+ depth_colored_img = Image.fromarray(depth_colored)
+ return depth_colored_img
+
+
+def resize_max_res(
+ img: torch.Tensor,
+ max_edge_resolution: int,
+ resample_method: InterpolationMode = InterpolationMode.BILINEAR,
+) -> torch.Tensor:
+ """
+ Resize image to limit maximum edge length while keeping aspect ratio.
+
+ Args:
+ img (`torch.Tensor`):
+ Image tensor to be resized. Expected shape: [B, C, H, W]
+ max_edge_resolution (`int`):
+ Maximum edge length (pixel).
+ resample_method (`PIL.Image.Resampling`):
+ Resampling method used to resize images.
+
+ Returns:
+ `torch.Tensor`: Resized image.
+ """
+ assert 4 == img.dim(), f"Invalid input shape {img.shape}"
+
+ original_height, original_width = img.shape[-2:]
+ downscale_factor = min(
+ max_edge_resolution / original_width, max_edge_resolution / original_height
+ )
+
+ new_width = int(original_width * downscale_factor)
+ new_height = int(original_height * downscale_factor)
+
+ resized_img = resize(img, (new_height, new_width), resample_method, antialias=True)
+ return resized_img
+
+def resize_back(
+ img: Union[torch.Tensor, np.ndarray, PIL.Image.Image, List[PIL.Image.Image]],
+ target_size: Union[int, tuple[int, int]],
+ resample_method: Union[InterpolationMode, int] = InterpolationMode.BILINEAR,
+) -> Union[torch.Tensor, np.ndarray, PIL.Image.Image, List[PIL.Image.Image]]:
+ """
+ Resize image to target size.
+
+ Args:
+ img (`Union[torch.Tensor, np.ndarray, PIL.Image.Image, List[PIL.Image.Image]]`):
+ Image to be resized.
+ target_size (`Union[int, tuple[int, int]]`):
+ Target size of the resized image.
+ resample_method (`Union[InterpolationMode, int]`):
+ Resampling method used to resize images.
+
+ Returns:
+ `Union[torch.Tensor, np.ndarray, PIL.Image.Image, List[PIL.Image.Image]]`: Resized image.
+ """
+ if isinstance(img, torch.Tensor): # [B, C, H, W]
+ resized_img = resize(img, target_size, resample_method, antialias=True)
+ if isinstance(img, np.ndarray): # [B, H, W, C]
+ # Conver to Torch.Tensor
+ img = torch.tensor(img).permute(0, 3, 1, 2)
+ resized_img = resize(img, target_size, resample_method, antialias=True)
+ # Convert back to np.ndarray
+ resized_img = resized_img.permute(0, 2, 3, 1).numpy()
+ elif isinstance(img, PIL.Image.Image):
+ target_size = (target_size[1], target_size[0]) # PIL uses (width, height)
+ resized_img = img.resize(target_size, resample_method)
+ elif isinstance(img, list) and all(isinstance(i, PIL.Image.Image) for i in img):
+ target_size = (target_size[1], target_size[0]) # PIL uses (width, height)
+ resized_img = [i.resize(target_size, resample_method) for i in img]
+ return resized_img
+
+def get_pil_resample_method(method_str: str) -> int:
+ resample_method_dict = {
+ "bilinear": Image.BILINEAR,
+ "bicubic": Image.BICUBIC,
+ "nearest": Image.NEAREST,
+ }
+ resample_method = resample_method_dict.get(method_str, None)
+ if resample_method is None:
+ raise ValueError(f"Unknown resampling method: {resample_method}")
+ else:
+ return resample_method
+
+def get_tv_resample_method(method_str: str) -> InterpolationMode:
+ resample_method_dict = {
+ "bilinear": InterpolationMode.BILINEAR,
+ "bicubic": InterpolationMode.BICUBIC,
+ "nearest": InterpolationMode.NEAREST_EXACT,
+ "nearest-exact": InterpolationMode.NEAREST_EXACT,
+ }
+ resample_method = resample_method_dict.get(method_str, None)
+ if resample_method is None:
+ raise ValueError(f"Unknown resampling method: {resample_method}")
+ else:
+ return resample_method
diff --git a/FE2E/infer/inference.py b/FE2E/infer/inference.py
new file mode 100644
index 0000000000000000000000000000000000000000..5802ddd612ebb582425f0cc09b120add6bb47c06
--- /dev/null
+++ b/FE2E/infer/inference.py
@@ -0,0 +1,569 @@
+import argparse
+import json
+import itertools
+import math
+import os
+import sys
+import time
+from pathlib import Path
+
+# 添加父目录到系统路径
+sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+
+import numpy as np
+import torch
+from einops import rearrange, repeat
+from PIL import Image
+from safetensors.torch import load_file
+from torchvision.transforms import functional as F
+from tqdm import tqdm
+import torch.nn.functional as Func
+
+import infer.sampling as sampling
+from modules.autoencoder import AutoEncoder
+from modules.model_edit import Step1XParams, Step1XEdit
+
+REPO_ROOT = Path(__file__).resolve().parents[1]
+DEFAULT_QWEN_DIR = REPO_ROOT / "Qwen"
+EMPTY_PROMPT_LATENT_PATH = REPO_ROOT / "latent" / "no_info.npz"
+
+
+def cudagc():
+ torch.cuda.empty_cache()
+ torch.cuda.ipc_collect()
+
+
+def load_state_dict(model, ckpt_path, device="cuda", strict=False, assign=True):
+ if Path(ckpt_path).suffix == ".safetensors":
+ state_dict = load_file(ckpt_path, device)
+ else:
+ state_dict = torch.load(ckpt_path, map_location="cpu")
+
+ missing, unexpected = model.load_state_dict(state_dict, strict=strict, assign=assign)
+ if len(missing) > 0 and len(unexpected) > 0:
+ print(f"Got {len(missing)} missing keys:\n\t" + "\n\t".join(missing))
+ print("\n" + "-" * 79 + "\n")
+ print(f"Got {len(unexpected)} unexpected keys:\n\t" + "\n\t".join(unexpected))
+ elif len(missing) > 0:
+ print(f"Got {len(missing)} missing keys:\n\t" + "\n\t".join(missing))
+ elif len(unexpected) > 0:
+ print(f"Got {len(unexpected)} unexpected keys:\n\t" + "\n\t".join(unexpected))
+ return model
+
+
+def load_models(dit_path=None, ae_path=None, qwen2vl_model_path=None, device="cuda", max_length=256, dtype=torch.bfloat16, args=None):
+ empty_llm = args is not None and hasattr(args, 'prompt_type') and args.prompt_type == 'empty'
+ if empty_llm:
+ print("[INFO] prompt_type=empty, 跳过Qwen模型加载")
+ qwen2vl_encoder = None
+ else:
+ # Lazy import to avoid pulling transformers/vision stack during evaluation with prompt_type=empty.
+ from modules.conditioner import Qwen25VL_7b_Embedder as Qwen2VLEmbedder
+ qwen2vl_encoder = Qwen2VLEmbedder(
+ qwen2vl_model_path,
+ device=device,
+ max_length=max_length,
+ dtype=dtype,
+ args=args,
+ )
+
+ with torch.device("meta"):
+ ae = AutoEncoder(
+ resolution=256,
+ in_channels=3,
+ ch=128,
+ out_ch=3,
+ ch_mult=[1, 2, 4, 4],
+ num_res_blocks=2,
+ z_channels=16,
+ scale_factor=0.3611,
+ shift_factor=0.1159,
+ )
+
+ step1x_params = Step1XParams(
+ in_channels=64,
+ out_channels=64,
+ vec_in_dim=768,
+ context_in_dim=4096,
+ hidden_size=3072,
+ mlp_ratio=4.0,
+ num_heads=24,
+ depth=19,
+ depth_single_blocks=38,
+ axes_dim=[16, 56, 56],
+ theta=10_000,
+ qkv_bias=True,
+ )
+ dit = Step1XEdit(step1x_params)
+
+ ae = load_state_dict(ae, ae_path, 'cpu')
+ dit = load_state_dict(dit, dit_path, 'cpu')
+
+ ae = ae.to(dtype=torch.float32)
+
+ return ae, dit, qwen2vl_encoder
+
+
+def equip_dit_with_lora_sd_scripts(ae, text_encoders, dit, lora, device='cuda'):
+ from safetensors.torch import load_file
+ weights_sd = load_file(lora)
+ is_lora = True
+ from library import lora_module
+ module = lora_module
+ lora_model, _ = module.create_network_from_weights(1.0, None, ae, text_encoders, dit, weights_sd, True)
+ lora_model.merge_to(text_encoders, dit, weights_sd)
+
+ lora_model.set_multiplier(1.0)
+ return lora_model
+
+class ImageGenerator:
+
+ def __init__(
+ self,
+ dit_path=None,
+ ae_path=None,
+ qwen2vl_model_path=None,
+ device="cuda",
+ max_length=640,
+ dtype=torch.bfloat16,
+ quantized=False,
+ offload=False,
+ lora=None,
+ args=None,
+ ) -> None:
+ self.device = torch.device(device)
+ self.args = args
+ self.ae, self.dit, self.llm_encoder = load_models(
+ dit_path=dit_path,
+ ae_path=ae_path,
+ qwen2vl_model_path=qwen2vl_model_path,
+ max_length=max_length,
+ dtype=dtype,
+ device=device,
+ args=args,
+ )
+ if not quantized:
+ self.dit = self.dit.to(dtype=torch.bfloat16)
+ else:
+ self.dit = self.dit.to(dtype=torch.float8_e4m3fn)
+ if not offload:
+ self.dit = self.dit.to(device=self.device)
+ self.ae = self.ae.to(device=self.device)
+ self.quantized = quantized
+ self.offload = offload
+ if lora is not None:
+ self.lora_module = equip_dit_with_lora_sd_scripts(
+ self.ae,
+ [self.llm_encoder],
+ self.dit,
+ lora,
+ device=self.dit.device,
+ )
+ else:
+ self.lora_module = None
+
+ def prepare(self, prompt, img, ref_image, ref_image_raw, empty_llm=False):
+ bs, _, h, w = img.shape
+ bs, _, ref_h, ref_w = ref_image.shape
+
+ assert h == ref_h and w == ref_w
+
+ if bs == 1 and not isinstance(prompt, str):
+ bs = len(prompt)
+ elif bs >= 1 and isinstance(prompt, str):
+ prompt = [prompt] * bs
+
+ img = rearrange(img, "b c (h ph) (w pw) -> b (h w) (c ph pw)", ph=2, pw=2) #2,16,82,110->2,2255,64
+ ref_img = rearrange(ref_image, "b c (ref_h ph) (ref_w pw) -> b (ref_h ref_w) (c ph pw)", ph=2, pw=2) # 将二维图像"压平"成一维序列 这是为 Transformer 模型准备的,因为它处理的是序列数据
+ if img.shape[0] == 1 and bs > 1:
+ img = repeat(img, "1 ... -> bs ...", bs=bs)
+ ref_img = repeat(ref_img, "1 ... -> bs ...", bs=bs)
+ #img 和 ref_img 已经不再是二维的图片了,而是变成了一个 "patches" (图像块) 的序列。一个块是64维度的。Transformer不知道这2255个图像块哪个在左上角,哪个在右下角。
+ img_ids = torch.zeros(h // 2, w // 2, 3) #41,55,3 # h 和 w 是潜在空间的高和宽,但 rearrange 操作把 2x2 的小块合并了# 所以实际的网格大小是 h/2 x w/2# 最后的 3 代表每个坐标有3个分量 (一个预留, Y坐标, X坐标)
+ img_ids[..., 1] = img_ids[..., 1] + torch.arange(h // 2)[:, None]
+ img_ids[..., 2] = img_ids[..., 2] + torch.arange(w // 2)[None, :] #通过广播机制,第 i 行的所有点的第二个分量都被赋值为 i
+ img_ids = repeat(img_ids, "h w c -> b (h w) c", b=bs) #将二维坐标网格"压平"成一维序列,并复制到对应的batch size
+
+ ref_img_ids = torch.zeros(ref_h // 2, ref_w // 2, 3)
+
+ ref_img_ids[..., 1] = ref_img_ids[..., 1] + torch.arange(ref_h // 2)[:, None]
+ ref_img_ids[..., 2] = ref_img_ids[..., 2] + torch.arange(ref_w // 2)[None, :]
+ ref_img_ids = repeat(ref_img_ids, "ref_h ref_w c -> b (ref_h ref_w) c", b=bs)
+
+ if isinstance(prompt, str):
+ prompt = [prompt]
+
+ if self.offload:
+ self.llm_encoder = self.llm_encoder.to(self.device)
+
+ if empty_llm:
+ empty_prompt_cache = getattr(self.args, "empty_prompt_cache", None) if self.args is not None else None
+ cache_path = Path(empty_prompt_cache) if empty_prompt_cache else EMPTY_PROMPT_LATENT_PATH
+ data = np.load(cache_path)
+ txt = torch.from_numpy(data['embeds']).to(img.device).unsqueeze(0)
+ txt = torch.cat([txt, txt], dim=0)
+ mask = torch.from_numpy(data['masks']).to(img.device).unsqueeze(0)
+ mask = torch.cat([mask, mask], dim=0)
+ else:
+ txt, mask = self.llm_encoder(prompt, ref_image_raw) #之所以都要复制一份,是因为有正负两种prompt
+
+ if self.offload:
+ self.llm_encoder = self.llm_encoder.cpu()
+ cudagc()
+
+ txt_ids = torch.zeros(bs, txt.shape[1], 3)
+
+ img = torch.cat([img, ref_img.to(device=img.device, dtype=img.dtype)], dim=-2) #2,4550,64 在patch上concat???
+ img_ids = torch.cat([img_ids, ref_img_ids], dim=-2)
+
+ return {
+ "img": img,
+ "mask": mask,
+ "img_ids": img_ids.to(img.device), #图像坐标
+ "llm_embedding": txt.to(img.device), #文字向量
+ "txt_ids": txt_ids.to(img.device), #文字坐标
+ }
+
+ @staticmethod
+ def process_diff_norm(diff_norm, k):
+ pow_result = torch.pow(diff_norm, k)
+
+ result = torch.where(
+ diff_norm > 1.0,
+ pow_result,
+ torch.where(diff_norm < 1.0, torch.ones_like(diff_norm), diff_norm),
+ )
+ return result
+
+ def denoise(
+ self,
+ img: torch.Tensor,
+ img_ids: torch.Tensor,
+ llm_embedding: torch.Tensor,
+ txt_ids: torch.Tensor,
+ timesteps: list[float],
+ cfg_guidance: float = 6.0,
+ mask=None,
+ show_progress=False,
+ timesteps_truncate=1.0,
+ ):
+ if self.offload:
+ self.dit = self.dit.to(self.device)
+ if show_progress:
+ pbar = tqdm(itertools.pairwise(timesteps), desc='denoising...')
+ else:
+ pbar = itertools.pairwise(timesteps)
+ '''
+ Cond 0 RGB
+ Uncd 0 RGB
+ '''
+ for t_curr, t_prev in pbar:
+ '''
+ 若输入维度是2,无所谓,维度是1则:
+ imgN D RGB
+ imgN D RGB
+ '''
+ if img.shape[0] == 1 and cfg_guidance != -1:
+ img = torch.cat([img, img], dim=0)
+ t_vec = torch.full((img.shape[0],), t_curr, dtype=img.dtype, device=img.device)
+
+ pred, feat = self.dit(
+ img=img,
+ img_ids=img_ids,
+ txt_ids=txt_ids,
+ timesteps=t_vec,
+ llm_embedding=llm_embedding,
+ t_vec=t_vec,
+ mask=mask,
+ )
+
+ assert cfg_guidance != -1, " cfg_guidance must not be -1 NOW!!!!"
+ cond, uncond = (
+ pred[0:pred.shape[0] // 2, :],
+ pred[pred.shape[0] // 2:, :],
+ )
+ '''
+ Cond D ??? <- pred
+ Uncd D ???
+ '''
+ pred = uncond + cfg_guidance * (cond - uncond) #1,4608,64
+ pred1 = cond #todo only support single denoise!!!
+ '''
+ Cond 0 RGB
+ + pred D ???
+ temI D ???
+ '''
+ tem_img = img[0:img.shape[0] // 2, :] + (t_prev - t_curr) * pred #1,4608,64
+ img_input_length = img.shape[1] // 2
+ '''
+ tmpI [D](√) ???(x)
+ cat Cond 0(x) [RGB](√)
+ imgN [D] [RGB]
+ '''
+ img = torch.cat(
+ [
+ tem_img[:, :img_input_length], #1,2304,64
+ img[:img.shape[0] // 2, img_input_length:], #1,2304,64
+ ],
+ dim=1) #1,4608,64
+ if self.offload:
+ self.dit = self.dit.cpu()
+ cudagc()
+
+ return img[:, :img.shape[1] // 2], pred1[:, img.shape[1] // 2:]
+
+ def double_denoise(self,img,img_ids,llm_embedding,txt_ids,timesteps,cfg_guidance=6.0,mask=None,height=None,width=None):
+ if img.shape[0] == 1 and cfg_guidance != -1:
+ img = torch.cat([img, img], dim=0)
+
+ t_vec = torch.full((img.shape[0],), 1.0, dtype=img.dtype, device=img.device)
+
+ pred, _ = self.dit(
+ img=img,
+ img_ids=img_ids,
+ txt_ids=txt_ids,
+ timesteps=t_vec,
+ llm_embedding=llm_embedding,
+ t_vec=t_vec,
+ mask=mask,
+ )
+
+ assert cfg_guidance != -1, " cfg_guidance must not be -1 NOW!!!!"
+ pred, uncond = (
+ pred[0:pred.shape[0] // 2, :],
+ pred[pred.shape[0] // 2:, :],
+ )
+ Lpred,Rpred = self.unpack_latents(pred, height//16, width//16)
+ return Lpred.to(torch.float32),Rpred.to(torch.float32)
+
+ @staticmethod
+ def unpack(x: torch.Tensor, height: int, width: int) -> torch.Tensor:
+ return rearrange(
+ x,
+ "b (h w) (c ph pw) -> b c (h ph) (w pw)",
+ h=math.ceil(height / 16),
+ w=math.ceil(width / 16),
+ ph=2,
+ pw=2,
+ )
+
+ @staticmethod
+ def unpack_latents(x: torch.Tensor, packed_latent_height: int, packed_latent_width: int):
+ """
+ x: [b (h w) (c ph pw)] -> [b c (h ph) (w pw)], ph=2, pw=2
+ """
+ import einops
+ x = einops.rearrange(x, "b (p h w) (c ph pw) -> b p c (h ph) (w pw)", h=packed_latent_height, w=packed_latent_width, ph=2, pw=2, p=2)
+ return x[:, 0], x[:, 1]
+
+ @staticmethod
+ def load_image(image):
+ from PIL import Image
+
+ if isinstance(image, np.ndarray):
+ image = torch.from_numpy(image).permute(2, 0, 1).float() / 255.0
+ image = image.unsqueeze(0)
+ return image
+ elif isinstance(image, Image.Image):
+ image = F.to_tensor(image.convert("RGB"))
+ image = image.unsqueeze(0)
+ return image
+ elif isinstance(image, torch.Tensor):
+ return image
+ elif isinstance(image, str):
+ image = F.to_tensor(Image.open(image).convert("RGB"))
+ image = image.unsqueeze(0)
+ return image
+ else:
+ raise ValueError(f"Unsupported image type: {type(image)}")
+
+ def output_process_image(self, resize_img, image_size):
+ res_image = resize_img.resize(image_size)
+ return res_image
+
+ def input_process_image(self, img):
+ if isinstance(img, torch.Tensor):
+ w, h = img.shape[-1], img.shape[-2]
+ elif isinstance(img, Image.Image):
+ w, h = img.size
+
+ if w <= 1024 and h <= 768:
+ w_new, h_new = 1024, 768
+ elif w <= 1280 and h <= 960:
+ w_new, h_new = 1216, 352
+ elif w <= 6048 and h <= 4032:
+ w_new, h_new = 864, 576
+ else:
+ w_new, h_new = w, h
+
+ if isinstance(img, torch.Tensor):
+ img_resized = Func.interpolate(img, (h_new, w_new), mode='bilinear', align_corners=False)
+ img_resized = img_resized.clamp(0, 1)
+ else:
+ img_resized = img.resize((w_new, h_new))
+
+ return img_resized, (w_new, h_new)
+
+ @torch.inference_mode()
+ def generate_image(
+ self,prompt,negative_prompt,ref_images,num_steps,cfg_guidance,seed,num_samples=1,init_image=None,image2image_strength=0.0,show_progress=False,size_level=512,args=None,judge=None,name=None
+ ):
+ assert num_samples == 1, "num_samples > 1 is not supported yet."
+
+ ref_images_raw, img_info = self.input_process_image(ref_images)
+ if isinstance(ref_images, Image.Image):
+ ref_images_raw = self.load_image(ref_images_raw)
+
+ height, width = ref_images_raw.shape[-2], ref_images_raw.shape[-1]
+
+ ref_images_raw = ref_images_raw.to(self.device)
+ if self.offload:
+ self.ae = self.ae.to(self.device)
+ ref_images = self.ae.encode(ref_images_raw.to(self.device) * 2 - 1) #bs,3,656,880 -> 1,16,82,110
+ #加入cache
+
+ if self.offload:
+ self.ae = self.ae.cpu()
+ cudagc()
+
+ seed = int(seed)
+ seed = torch.Generator(device="cpu").seed() if seed < 0 else seed
+
+ t0 = time.perf_counter()
+
+ if init_image is not None:
+ init_image = self.load_image(init_image)
+ init_image = init_image.to(self.device)
+ init_image = torch.nn.functional.interpolate(init_image, (height, width))
+ if self.offload:
+ self.ae = self.ae.to(self.device)
+ init_image = self.ae.encode(init_image.to() * 2 - 1)
+ if self.offload:
+ self.ae = self.ae.cpu()
+ cudagc()
+
+ if args is not None and hasattr(args, 'single_denoise') and not args.single_denoise:
+ x = torch.randn(num_samples,16,height // 8,width // 8,device=self.device,dtype=torch.bfloat16,generator=torch.Generator(device=self.device).manual_seed(seed),)
+ else:
+ x= torch.zeros(num_samples,16,height // 8,width // 8,device=self.device,dtype=torch.bfloat16,)
+
+
+ timesteps = sampling.get_schedule(num_steps, x.shape[-1] * x.shape[-2] // 4, shift=True)
+
+ if init_image is not None:
+ t_idx = int((1 - image2image_strength) * num_steps)
+ t = timesteps[t_idx]
+ timesteps = timesteps[t_idx:]
+ x = t * x + (1.0 - t) * init_image.to(x.dtype)
+
+ x = torch.cat([x, x], dim=0)
+ ref_images = torch.cat([ref_images, ref_images], dim=0) #这里是为了有无prompt
+ ref_images_raw = torch.cat([ref_images_raw, ref_images_raw], dim=0)
+
+ # 检查args和prompt_type属性
+ empty_llm = args is not None and hasattr(args, 'prompt_type') and args.prompt_type == 'empty'
+
+ inputs = self.prepare(
+ [prompt, negative_prompt],
+ x, #img这个gt给的是全噪声在推理
+ ref_image=ref_images,
+ ref_image_raw=ref_images_raw,
+ empty_llm=empty_llm)
+
+ with torch.autocast(device_type=self.device.type,dtype=torch.bfloat16):
+ # Lpred,Rpred = self.double_denoise(**inputs,cfg_guidance=cfg_guidance,timesteps=timesteps,height=height,width=width)#图像中包括ref image
+ Lpred,Rpred = self.denoise(**inputs,cfg_guidance=cfg_guidance,timesteps=timesteps,show_progress=show_progress,timesteps_truncate=1.0,)#图像中包括ref image
+ Lpred=self.unpack(Lpred.float(),height,width)
+ Rpred=self.unpack(Rpred.float(),height,width)
+ if judge is not None:
+ judge = Func.interpolate(judge, (height, width), mode='bilinear', align_corners=False)
+ training_gt=self.ae.encode(judge)
+ traing_loss = torch.nn.functional.mse_loss(Rpred,training_gt)
+ print(f"training_loss with rgb2: {traing_loss}")
+
+ norm = torch.linalg.norm(judge, dim=1, keepdim=True)
+ norm[norm < 1e-9] = 1e-9
+ judge = judge / norm
+ training_gt =self.ae.encode(judge)
+ training_loss = torch.nn.functional.mse_loss(Rpred,training_gt)
+ print(f"training_loss with normed_rgb: {training_loss}")
+ Lpred = self.ae.decode(Lpred)
+ Rpred = self.ae.decode(Rpred)
+
+
+ Lpred = Lpred.clamp(-1, 1)
+ Lpred = Lpred.mul(0.5).add(0.5)
+ Rpred = Rpred.clamp(-1, 1)
+ # Rpred = Rpred.mul(0.5).add(0.5)
+
+ images_list = []
+ for img in Rpred.float():
+ images_list.append(self.output_process_image(F.to_pil_image(img), img_info))
+ return images_list, Lpred.float(), Rpred.float()
+
+
+def main():
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--model_path', type=str, required=True, help='Path to the model checkpoint')
+ parser.add_argument('--input_dir', type=str, required=True, help='Path to the input image directory')
+ parser.add_argument('--output_dir', type=str, required=True, help='Path to the output image directory')
+ parser.add_argument('--json_path', type=str, required=True, help='Path to the JSON file containing image names and prompts')
+ parser.add_argument('--seed', type=int, default=42, help='Random seed for generation')
+ parser.add_argument('--num_steps', type=int, default=28, help='Number of diffusion steps')
+ parser.add_argument('--cfg_guidance', type=float, default=6.0, help='CFG guidance strength')
+ parser.add_argument('--size_level', default=512, type=int)
+ parser.add_argument('--offload', action='store_true', help='Use offload for large models')
+ parser.add_argument('--quantized', action='store_true', help='Use fp8 model weights')
+ parser.add_argument('--lora', type=str, default=None)
+ parser.add_argument('--qwen2vl_model_path', type=str, default=str(DEFAULT_QWEN_DIR), help='Path to the local Qwen2.5-VL model directory')
+ parser.add_argument('--empty_prompt_cache', type=str, default=str(EMPTY_PROMPT_LATENT_PATH), help='Path to the empty-prompt latent cache')
+ args = parser.parse_args()
+
+ assert os.path.exists(args.input_dir), f"Input directory {args.input_dir} does not exist."
+ assert os.path.exists(args.json_path), f"JSON file {args.json_path} does not exist."
+
+ args.output_dir = args.output_dir.rstrip('/') + ('-offload' if args.offload else "") + ('-quantized' if args.quantized else "") + f"-{args.size_level}"
+ os.makedirs(args.output_dir, exist_ok=True)
+
+ image_and_prompts = json.load(open(args.json_path, 'r'))
+
+ image_edit = ImageGenerator(
+ ae_path=os.path.join(args.model_path, 'vae.safetensors'),
+ dit_path=os.path.join(args.model_path, "step1x-edit-i1258-FP8.safetensors" if args.quantized else "step1x-edit-i1258.safetensors"),
+ qwen2vl_model_path=args.qwen2vl_model_path,
+ max_length=640,
+ quantized=args.quantized,
+ offload=args.offload,
+ lora=args.lora,
+ )
+
+ time_list = []
+ for image_name, prompt in image_and_prompts.items():
+ image_path = os.path.join(args.input_dir, image_name)
+ output_path = os.path.join(args.output_dir, image_name)
+ os.makedirs(os.path.dirname(output_path), exist_ok=True)
+ start_time = time.time()
+
+ images, _, _ = image_edit.generate_image(
+ prompt,
+ negative_prompt="",
+ ref_images=Image.open(image_path).convert("RGB"),
+ num_samples=1,
+ num_steps=args.num_steps,
+ cfg_guidance=args.cfg_guidance,
+ seed=args.seed,
+ show_progress=True,
+ size_level=args.size_level,
+ )
+
+ print(f"Time taken: {time.time() - start_time:.2f} seconds")
+ time_list.append(time.time() - start_time)
+
+ images[0].save(output_path, lossless=True)
+ if len(time_list) > 1:
+ print(f'average time for {args.output_dir}: ', sum(time_list[1:]) / len(time_list[1:]))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/FE2E/infer/inner_evaluation.py b/FE2E/infer/inner_evaluation.py
new file mode 100644
index 0000000000000000000000000000000000000000..2dd2d79cccdb316da88c76b7c8b6f5029c74396b
--- /dev/null
+++ b/FE2E/infer/inner_evaluation.py
@@ -0,0 +1,598 @@
+import logging
+import os
+import sys
+import csv # 保留csv库用于保存结果
+import multiprocessing as mp
+import time
+import numpy as np
+import torch
+from omegaconf import OmegaConf
+from tabulate import tabulate
+from torch.utils.data import DataLoader
+from tqdm.auto import tqdm
+import cv2
+from infer.dataset import (
+ BaseDepthDataset,
+ DatasetMode,
+ get_dataset,
+ get_pred_name,
+)
+from .util import metric, normal_utils
+from .util.alignment import (align_depth_least_square, depth2disparity, disparity2depth, depth2log_space, log_space2depth)
+from .util.metric import MetricTracker
+from infer.image_utils import colorize_depth_map
+
+eval_metrics = [
+ "abs_relative_difference",
+ "squared_relative_difference",
+ "rmse_linear",
+ "rmse_log",
+ "delta1_acc",
+ "delta2_acc",
+ "delta3_acc",
+]
+
+
+def save_visualization_worker(save_vis_path, safe_pred_name, cfg_suffix, depth_pred_np, depth_raw_np, valid_mask_np, input_rgb_data, rank):
+ """
+ 可视化保存的工作函数,在独立进程中运行
+ Args:
+ save_vis_path: 保存路径
+ safe_pred_name: 安全的预测文件名
+ cfg_suffix: cfg后缀
+ depth_pred_np: 预测深度图 numpy数组
+ depth_raw_np: GT深度图 numpy数组
+ valid_mask_np: 有效掩码 numpy数组
+ input_rgb_data: 输入RGB图像数据
+ rank: GPU rank
+ """
+ try:
+ # 转换为torch tensor用于colorize_depth_map
+ depth_pred_ts = torch.from_numpy(depth_pred_np)
+ depth_raw_ts = torch.from_numpy(depth_raw_np)
+ valid_mask_ts = torch.from_numpy(valid_mask_np)
+
+ # 1. 保存预测深度图
+ depth_pred_vis = colorize_depth_map(depth_pred_ts)
+ pred_save_path = os.path.join(save_vis_path, f"{safe_pred_name}{cfg_suffix}_pred.png")
+ depth_pred_vis.save(pred_save_path)
+ print(f"saved: {pred_save_path}")
+ # 3. 保存误差图
+ # 计算绝对相对误差
+ abs_rel_error = torch.abs(depth_pred_ts - depth_raw_ts) / (depth_raw_ts + 1e-6)
+ abs_rel_error = abs_rel_error * valid_mask_ts.float()
+
+ # 使用matplotlib生成误差图
+ import matplotlib
+ matplotlib.use('Agg') # 使用非交互式后端
+ import matplotlib.pyplot as plt
+ import matplotlib.cm as cm
+
+ error_np = abs_rel_error.numpy()
+ # 设置误差显示范围
+ vmax = 0.2 # 可以根据需要调整
+ error_normalized = np.clip(error_np / vmax, 0, 1)
+
+ # 应用颜色映射
+ jet_cmap = cm.get_cmap('jet')
+ error_colored = jet_cmap(error_normalized)[:, :, :3] # 去掉alpha通道
+ error_colored = (error_colored * 255).astype(np.uint8)
+
+ # 将无效区域设为黑色
+ error_colored[~valid_mask_np] = [0, 0, 0]
+
+ error_save_path = os.path.join(save_vis_path, f"{safe_pred_name}{cfg_suffix}_error.png")
+ plt.imsave(error_save_path, error_colored)
+ print(f"saved: {error_save_path}")
+ # 关闭matplotlib figure以释放内存
+ plt.close('all')
+
+ except Exception as e:
+ print(f"[VIS-Worker-{rank}] 可视化保存失败: {e}", file=sys.stderr)
+
+
+def prepare_input_rgb_data(input_rgb):
+ """
+ 预处理输入RGB数据,转换为numpy格式供子进程使用
+ """
+ if input_rgb is None:
+ return None
+
+ try:
+ # 处理不同格式的输入图像
+ if isinstance(input_rgb, torch.Tensor):
+ # 如果是torch tensor,转换为numpy
+ if input_rgb.dim() == 4: # Batch dimension
+ input_rgb = input_rgb[0]
+ if input_rgb.dim() == 3 and input_rgb.shape[0] == 3: # CHW格式
+ input_rgb = input_rgb.permute(1, 2, 0)
+
+ # 确保值在[0,1]范围内
+ if input_rgb.max() <= 1.0:
+ input_rgb = (input_rgb * 255).clamp(0, 255).byte()
+
+ input_rgb_np = input_rgb.cpu().numpy()
+
+ elif isinstance(input_rgb, np.ndarray):
+ input_rgb_np = input_rgb
+ # 确保值在正确范围内
+ if input_rgb_np.max() <= 1.0:
+ input_rgb_np = (input_rgb_np * 255).astype(np.uint8)
+ else:
+ # 假设是PIL图像或其他格式
+ input_rgb_np = np.array(input_rgb)
+
+ return input_rgb_np.copy() # 创建副本避免进程间共享问题
+
+ except Exception as e:
+ print(f"处理输入RGB数据失败: {e}", file=sys.stderr)
+ return None
+
+
+def evaluate_single_prediction(pred_depth, depth_raw, valid_mask, dataset, device, metric_funcs, alignment_max_res=None, save_pred_vis=False, save_vis_path=None, pred_name=None, cfg_suffix="", alignment="least_square", rank=0, input_rgb=None):
+ """Args: pred_depth: 预测的深度图 (numpy array, [0,1]) depth_raw: 真实深度图 (numpy array) valid_mask: 有效掩码 (numpy array) dataset: 数据集对象 device: 计算设备 metric_funcs: 评估指标函数列表 alignment_max_res: 对齐时的最大分辨率 save_pred_vis: 是否保存可视化结果 save_vis_path: 可视化保存路径 pred_name: 预测文件名 cfg_suffix: cfg后缀,用于区分不同的cfg设置
+ alignment: 对齐方式,可选值为"least_square"或"least_square_disparity"
+ rank: GPU rank,用于多进程图像保存
+ input_rgb: 输入RGB图像 (torch.Tensor or PIL.Image or numpy.ndarray)
+ Returns: sample_metric: 该样本的所有评估指标列表"""
+ # 确保预测深度图的维度正确
+ if len(pred_depth.shape) == 3:
+ pred_depth = pred_depth.mean(0) # [0,1]
+
+ # 调整预测深度图尺寸以匹配真实深度图
+ if pred_depth.shape != depth_raw.shape:
+ pred_depth = cv2.resize(pred_depth, (depth_raw.shape[1], depth_raw.shape[0]), interpolation=cv2.INTER_LINEAR)
+
+ if "least_square" == alignment:
+ depth_pred, scale, shift = align_depth_least_square(
+ gt_arr=depth_raw,
+ pred_arr=pred_depth,
+ valid_mask_arr=valid_mask,
+ return_scale_shift=True,
+ max_resolution=alignment_max_res,
+ )
+ elif "log_space" == alignment:
+ gt_log, gt_non_neg_mask = depth2log_space(depth=depth_raw, return_mask=True)
+ pred_non_neg_mask = pred_depth > 0
+ valid_nonnegative_mask = valid_mask & gt_non_neg_mask & pred_non_neg_mask
+
+ # 确保输入是numpy数组类型
+ if isinstance(gt_log, torch.Tensor):
+ gt_log = gt_log.cpu().numpy()
+
+ log_space_pred, scale, shift = align_depth_least_square(
+ gt_arr=gt_log,
+ pred_arr=pred_depth,
+ valid_mask_arr=valid_nonnegative_mask,
+ return_scale_shift=True,
+ max_resolution=alignment_max_res,
+ )
+ log_space_pred = np.clip(log_space_pred, a_min=None, a_max=5.)
+ depth_pred = log_space2depth(log_space_pred)
+ # 裁剪到数据集的深度范围
+ depth_pred = np.clip(depth_pred, a_min=dataset.min_depth, a_max=dataset.max_depth)
+
+ # 裁剪到 d > 0 以便评估
+ depth_pred = np.clip(depth_pred, a_min=1e-6, a_max=None)
+
+ # 转换到设备进行评估
+ depth_pred_ts = torch.from_numpy(depth_pred).to(device)
+ depth_raw_ts = torch.from_numpy(depth_raw).to(device)
+ valid_mask_ts = torch.from_numpy(valid_mask).to(device)
+
+ # 启动可视化保存进程(同步)
+ if save_pred_vis and save_vis_path is not None and pred_name is not None:
+ safe_pred_name = pred_name.replace('/', '_').replace('\\', '_')
+ input_rgb_data = prepare_input_rgb_data(input_rgb)
+ vis_process = mp.Process(
+ target=save_visualization_worker,
+ args=(
+ save_vis_path,
+ safe_pred_name,
+ cfg_suffix,
+ depth_pred.copy(),
+ depth_raw.copy(),
+ valid_mask.copy(),
+ input_rgb_data,
+ rank
+ )
+ )
+ vis_process.start()
+ # save_visualization_worker(save_vis_path, safe_pred_name, cfg_suffix, depth_pred.copy(), depth_raw.copy(), valid_mask.copy(), input_rgb_data, rank)
+
+ # 计算评估指标
+ sample_metric = []
+ for met_func in metric_funcs:
+ _metric = met_func(depth_pred_ts, depth_raw_ts, valid_mask_ts).item()
+ sample_metric.append(_metric)
+
+ return sample_metric
+
+
+def evaluation_depth_custom_parallel(rank, world_size, output_dir, dataset_config, args, pipeline, base_data_dir, pred_suffix="", alignment="least_square", alignment_max_res=None, prediction_dir=None, save_pred_vis=False):
+ """
+ 支持多GPU并行的深度评估函数
+ """
+ import time
+
+ os.makedirs(output_dir, exist_ok=True)
+
+ cuda_avail = torch.cuda.is_available()
+ device = torch.device(f"cuda:{rank}")
+
+ cfg_data = OmegaConf.load(dataset_config)
+
+ dataset: BaseDepthDataset = get_dataset(cfg_data, base_data_dir=base_data_dir, mode=DatasetMode.EVAL, prompt_type=args.prompt_type)
+
+ # 获取数据集名称,用于CSV表命名
+ dataset_name = dataset.__class__.__name__
+
+ # 初始化存储结果的数据列表
+ results_data = []
+
+ # 计算每个GPU处理的数据范围
+ total_samples = len(dataset)
+ if args.num_samples > 0:
+ total_samples = min(args.num_samples, total_samples)
+
+ chunk_size = total_samples // world_size
+ start_idx = rank * chunk_size
+ end_idx = start_idx + chunk_size if rank < world_size - 1 else total_samples
+
+ from torch.utils.data import SubsetRandomSampler
+ indices = list(range(start_idx, end_idx))
+
+ dataloader = DataLoader(dataset, batch_size=1, num_workers=0 if args.debug else 4, pin_memory=True, sampler=SubsetRandomSampler(indices),shuffle=False)
+
+ metric_funcs = [getattr(metric, _met) for _met in eval_metrics]
+
+ # 为cfg=1和cfg=6分别创建metric tracker
+ metric_tracker_Lpred = MetricTracker(*[m.__name__ for m in metric_funcs])
+ metric_tracker_Lpred.reset()
+ metric_tracker_Rpred = MetricTracker(*[m.__name__ for m in metric_funcs])
+ metric_tracker_Rpred.reset()
+
+ if save_pred_vis:
+ save_vis_path = os.path.join(output_dir, "vis")
+ os.makedirs(save_vis_path, exist_ok=True)
+
+ # 创建CSV保存目录 - 每个卡都创建
+ csv_save_path = os.path.join(output_dir, "csv_results")
+ os.makedirs(csv_save_path, exist_ok=True)
+ else:
+ save_vis_path = None
+ csv_save_path = None
+
+ processing_times = []
+ vis_processes = [] # 用于管理可视化进程
+ max_vis_processes = 4 # 限制同时运行的可视化进程数量
+
+ sample_count = 0
+ for data in dataloader:
+ sample_count += 1
+
+ depth_raw_ts = data["depth_raw_linear"].squeeze()
+ valid_mask_ts = data["valid_mask_raw"].squeeze()
+ rgb_name = data["rgb_relative_path"][0]
+
+ depth_raw = depth_raw_ts.numpy()
+ valid_mask = valid_mask_ts.numpy()
+
+ # Get predictions
+ rgb_basename = os.path.basename(rgb_name)
+ pred_basename = get_pred_name(rgb_basename, dataset.name_mode, suffix=pred_suffix)
+ pred_name = os.path.join(os.path.dirname(rgb_name), pred_basename)
+
+ start_time = time.time()
+ image_list, Lpred, Rpred = pipeline.generate_image(args.prompt if args.prompt_type == "query" else data["prompt"][0], negative_prompt="", ref_images=data["rgb"], num_samples=1, num_steps=args.num_steps, cfg_guidance=args.cfg_guidance, seed=args.seed + rank, show_progress=False, size_level=args.size_level, args=args)
+ end_time = time.time()
+ processing_times.append(end_time - start_time)
+
+ Lpred = Lpred[0].cpu().numpy()
+
+ # 保存可视化结果(使用新的多进程方式)
+ if save_pred_vis and save_vis_path is not None:
+ # 清理文件名,替换路径分隔符
+ safe_pred_name = pred_name.replace('/', '_').replace('\\', '_')
+
+ # 预处理输入RGB数据
+ input_rgb_data = prepare_input_rgb_data(data["rgb"])
+
+ # 限制同时运行的可视化进程数量
+ while len([p for p in vis_processes if p.is_alive()]) >= max_vis_processes:
+ # 等待一些进程完成
+ for p in vis_processes[:]:
+ if not p.is_alive():
+ vis_processes.remove(p)
+ if len([p for p in vis_processes if p.is_alive()]) >= max_vis_processes:
+ time.sleep(0.1) # 短暂等待
+
+ # 创建子进程进行可视化保存
+ vis_process = mp.Process(
+ target=save_visualization_worker,
+ args=(
+ save_vis_path,
+ safe_pred_name,
+ "_Lpred",
+ Lpred.copy(),
+ depth_raw.copy(),
+ valid_mask.copy(),
+ input_rgb_data,
+ rank
+ )
+ )
+ vis_process.start()
+ vis_processes.append(vis_process)
+
+ sample_metric_Lpred = evaluate_single_prediction(pred_depth=Lpred, depth_raw=depth_raw, valid_mask=valid_mask, dataset=dataset, device=device, metric_funcs=metric_funcs, alignment_max_res=alignment_max_res, save_pred_vis=False, save_vis_path=None, pred_name=pred_name, cfg_suffix="_Lpred", alignment=alignment, rank=rank, input_rgb=data["rgb"])
+
+ for i, met_func in enumerate(metric_funcs):
+ metric_name = met_func.__name__
+ metric_tracker_Lpred.update(metric_name, sample_metric_Lpred[i])
+
+ # 输出每个样本的结果
+ img_id = os.path.basename(rgb_name).replace('.png', '').replace('.jpg', '')
+ global_sample_idx = start_idx + sample_count
+
+ # CFG=1结果
+ abs_rel_Lpred = sample_metric_Lpred[0] # abs_relative_difference
+ rmse_Lpred = sample_metric_Lpred[2] # rmse_linear
+ delta1_Lpred = sample_metric_Lpred[4] # delta1_acc
+
+ # 修改输出格式
+ if args.save_viz:
+ print(f"|{global_sample_idx:03d}|{abs_rel_Lpred:.4f}|{rmse_Lpred:.4f}|{delta1_Lpred:.4f}|", file=sys.stderr)
+ elif not args.save_viz:
+ print(f"[GPU:{rank}] 样本:{global_sample_idx:03d}/{total_samples} | ID:{img_id:<12}", file=sys.stderr)
+ print(f" CFG=1: abs_rel:{abs_rel_Lpred:.4f} | rmse:{rmse_Lpred:.4f} | a1:{delta1_Lpred:.4f}", file=sys.stderr)
+ print(f" 时间: {processing_times[-1]:.2f}s", file=sys.stderr)
+
+ # 所有卡都保存结果到列表
+ if args.save_viz:
+ results_data.append({'GPU_Rank': rank, 'Sample_ID': global_sample_idx, 'Image_Name': rgb_name, 'abs_rel': abs_rel_Lpred, 'rmse': rmse_Lpred, 'delta1': delta1_Lpred, 'processing_time': processing_times[-1]})
+
+ # 等待所有可视化进程完成
+ if save_pred_vis:
+ print(f"[GPU:{rank}] 等待可视化进程完成...", file=sys.stderr)
+ for p in vis_processes:
+ p.join(timeout=30) # 设置超时时间
+ if p.is_alive():
+ print(f"[GPU:{rank}] 可视化进程超时,强制终止", file=sys.stderr)
+ p.terminate()
+ print(f"[GPU:{rank}] 所有可视化进程已完成", file=sys.stderr)
+
+ if args.save_viz and csv_save_path is not None:
+ csv_file_path = os.path.join(csv_save_path, f"{dataset_name}_results_rank{rank}.csv")
+
+ try:
+ with open(csv_file_path, 'w', newline='') as csvfile:
+ fieldnames = ['GPU_Rank', 'Sample_ID', 'Image_Name', 'abs_rel', 'rmse', 'delta1', 'processing_time']
+ writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
+ writer.writeheader()
+ for row in results_data:
+ writer.writerow(row)
+ print(f"[GPU:{rank}] 结果已保存至CSV: {csv_file_path}", file=sys.stderr)
+ except Exception as e:
+ print(f"[GPU:{rank}] 保存CSV失败: {e}", file=sys.stderr)
+
+ return metric_tracker_Lpred, metric_tracker_Rpred, processing_times
+
+
+def evaluation_normal_custom_parallel(rank, world_size, output_dir, base_data_dir, dataset_split_path, pipeline, args, eval_datasets, save_pred_vis=False):
+ """
+ 支持多GPU并行的normal评估函数
+ """
+ import time
+
+ os.makedirs(output_dir, exist_ok=True)
+ device = torch.device(f"cuda:{rank}")
+
+ # 为每个数据集创建结果字典
+ all_normal_errors = {}
+ all_processing_times = {}
+ all_dataset_metrics = {}
+
+ for dataset_name, split in eval_datasets:
+ # 创建数据加载器 - 减少num_workers避免资源竞争
+ try:
+ # 创建数据集
+ from infer.dataset_normal.normal_dataloader import NormalDataset
+ dataset = NormalDataset(base_data_dir, dataset_split_path, dataset_name=dataset_name, split=split, mode='test', epoch=0)
+
+ total_samples = len(dataset)
+ if args.num_samples > 0:
+ total_samples = min(args.num_samples, total_samples)
+
+ # 计算当前GPU需要处理的样本范围
+ samples_per_gpu = total_samples // world_size
+ start_idx = rank * samples_per_gpu
+ if rank == world_size - 1:
+ end_idx = total_samples
+ else:
+ end_idx = start_idx + samples_per_gpu
+
+ # 创建样本索引并使用SubsetRandomSampler
+ from torch.utils.data import SubsetRandomSampler
+ indices = list(range(start_idx, end_idx))
+
+ dataloader = DataLoader(dataset, batch_size=1, shuffle=False, num_workers=1, pin_memory=False, sampler=SubsetRandomSampler(indices))
+
+ if rank == 0:
+ print(f"[GPU:{rank}] 开始评估Normal数据集: {dataset_name}")
+
+ except Exception as e:
+ print(f"[GPU:{rank}] 创建数据加载器失败: {e}")
+ continue
+
+ dataset_output_dir = os.path.join(output_dir, dataset_name)
+ os.makedirs(dataset_output_dir, exist_ok=True)
+
+ if save_pred_vis:
+ save_vis_path = os.path.join(dataset_output_dir, "vis")
+ os.makedirs(save_vis_path, exist_ok=True)
+ else:
+ save_vis_path = None
+
+ processing_times = []
+ total_normal_errors = None
+ sample_count = 0
+ vis_processes = [] # 用于管理normal可视化进程
+ max_vis_processes = 5 # 限制同时运行的可视化进程数量(normal可视化更耗内存)
+
+ for data_dict in dataloader:
+ sample_count += 1
+
+ img = data_dict['img'].to(device)
+ scene_names = data_dict['scene_name']
+ img_names = data_dict['img_name']
+
+ # 获取原始图像尺寸
+ _, _, orig_H, orig_W = img.shape
+
+ start_time = time.time()
+ image_list,L_pred , norm_out = pipeline.generate_image("Predict the depth map for the image on the left and the normal map on the right.", negative_prompt="", ref_images=img, num_samples=1, num_steps=args.num_steps, cfg_guidance=args.cfg_guidance, seed=args.seed + rank, show_progress=False, size_level=args.size_level, args=args, judge=data_dict['normal'].to(device) if dataset_name == "vkitti" or dataset_name == "hypersim" else None, name=img_names)
+ end_time = time.time()
+ processing_times.append(end_time - start_time)
+
+ # 处理normal输出
+ norm_out = torch.nn.functional.interpolate(norm_out, size=(orig_H, orig_W), mode='bilinear', align_corners=False)
+ norm = torch.linalg.norm(norm_out, axis=1, keepdims=True)
+ norm[norm < 1e-9] = 1e-9
+ norm_out = norm_out / norm
+
+ pred_norm, pred_kappa = norm_out[:, :3, :, :], norm_out[:, 3:, :, :]
+ pred_kappa = None if pred_kappa.size(1) == 0 else pred_kappa
+
+ # 计算误差(如果有ground truth)
+ # if 'normal' in data_dict.keys():
+ gt_norm = data_dict['normal'].to(device)
+ gt_norm_mask = data_dict['normal_mask'].to(device)
+
+ pred_error = normal_utils.compute_normal_error(pred_norm, gt_norm)
+ if total_normal_errors is None:
+ total_normal_errors = pred_error[gt_norm_mask]
+ else:
+ total_normal_errors = torch.cat((total_normal_errors, pred_error[gt_norm_mask]), dim=0)
+
+ # 保存可视化结果(使用新的多进程方式)
+ if save_vis_path is not None:
+ # 限制同时运行的可视化进程数量
+ while len([p for p in vis_processes if p.is_alive()]) >= max_vis_processes:
+ # 等待一些进程完成
+ for p in vis_processes[:]:
+ if not p.is_alive():
+ vis_processes.remove(p)
+ if len([p for p in vis_processes if p.is_alive()]) >= max_vis_processes:
+ time.sleep(0.1) # 短暂等待
+
+ prefixs = ['%s_%s' % (i, j) for (i, j) in zip(scene_names, img_names)]
+
+ # 预处理数据
+ img_data, pred_norm_data, pred_kappa_data, gt_norm_data, gt_norm_mask_data, pred_error_data = prepare_normal_data_for_process(
+ img, pred_norm, pred_kappa, gt_norm, gt_norm_mask, pred_error
+ )
+
+ if img_data is not None: # 确保数据预处理成功
+ # 创建子进程进行可视化保存
+ vis_process = mp.Process(
+ target=save_normal_visualization_worker,
+ args=(
+ save_vis_path,
+ prefixs,
+ img_data,
+ pred_norm_data,
+ pred_kappa_data,
+ gt_norm_data,
+ gt_norm_mask_data,
+ pred_error_data,
+ rank
+ )
+ )
+ vis_process.start()
+ vis_processes.append(vis_process)
+
+ # 输出进度信息
+ global_sample_idx = start_idx + sample_count
+ img_id = '_'.join([scene_names[0], img_names[0]])
+
+ if rank == 0 or sample_count % 10 == 0: # 减少输出频率
+ print(f"[GPU:{rank}] | 样本:{global_sample_idx:03d} | ID:{img_id} | 时间:{processing_times[-1]:.2f}s| ", file=sys.stderr)
+
+ # 等待所有可视化进程结束
+ if save_pred_vis:
+ print(f"[GPU:{rank}] 等待Normal可视化进程完成...", file=sys.stderr)
+ for p in vis_processes:
+ p.join(timeout=60) # normal可视化需要更长时间,设置60秒超时
+ if p.is_alive():
+ print(f"[GPU:{rank}] Normal可视化进程超时,强制终止", file=sys.stderr)
+ p.terminate()
+ print(f"[GPU:{rank}] 所有Normal可视化进程已完成", file=sys.stderr)
+
+ # 计算当前GPU的指标
+ metrics = None
+ if total_normal_errors is not None and len(total_normal_errors) > 0:
+ metrics = normal_utils.compute_normal_metrics(total_normal_errors)
+ if rank == 0:
+ print(f"[GPU:{rank}] 数据集 {dataset_name} 部分结果:")
+ print("mean median rmse 5 7.5 11.25 22.5 30")
+ print("%.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f" % (metrics['mean'], metrics['median'], metrics['rmse'], metrics['a1'], metrics['a2'], metrics['a3'], metrics['a4'], metrics['a5']))
+
+ # 存储结果
+ all_normal_errors[dataset_name] = total_normal_errors.cpu() if total_normal_errors is not None else None
+ all_processing_times[dataset_name] = processing_times
+ all_dataset_metrics[dataset_name] = metrics
+
+ return all_normal_errors, all_processing_times, all_dataset_metrics
+
+def save_normal_visualization_worker(save_vis_path, prefixs, img_data, pred_norm_data, pred_kappa_data, gt_norm_data, gt_norm_mask_data, pred_error_data, rank):
+ """
+ Normal可视化保存的工作函数,在独立进程中运行
+ Args:
+ save_vis_path: 保存路径
+ prefixs: 文件名前缀列表
+ img_data: 输入图像数据 (numpy array)
+ pred_norm_data: 预测normal数据 (numpy array)
+ pred_kappa_data: 预测kappa数据 (numpy array or None)
+ gt_norm_data: GT normal数据 (numpy array)
+ gt_norm_mask_data: GT normal掩码数据 (numpy array)
+ pred_error_data: 预测误差数据 (numpy array)
+ rank: GPU rank
+ """
+ try:
+ import infer.visualize as vis_utils
+
+ # 转换为torch tensor用于可视化函数
+ img_ts = torch.from_numpy(img_data)
+ pred_norm_ts = torch.from_numpy(pred_norm_data)
+ pred_kappa_ts = torch.from_numpy(pred_kappa_data) if pred_kappa_data is not None else None
+ gt_norm_ts = torch.from_numpy(gt_norm_data)
+ gt_norm_mask_ts = torch.from_numpy(gt_norm_mask_data)
+ pred_error_ts = torch.from_numpy(pred_error_data)
+
+ # 使用matplotlib的非交互式后端
+ import matplotlib
+ matplotlib.use('Agg')
+
+ # 调用可视化函数
+ vis_utils.visualize_normal(save_vis_path, prefixs, img_ts, pred_norm_ts, pred_kappa_ts, gt_norm_ts, gt_norm_mask_ts, pred_error_ts)
+
+ except Exception as e:
+ print(f"[NORMAL-VIS-Worker-{rank}] Normal可视化保存失败: {e}", file=sys.stderr)
+
+
+def prepare_normal_data_for_process(img, pred_norm, pred_kappa, gt_norm, gt_norm_mask, pred_error):
+ """
+ 预处理normal数据,转换为numpy格式供子进程使用
+ """
+ try:
+ img_data = img.cpu().numpy()
+ pred_norm_data = pred_norm.cpu().numpy()
+ pred_kappa_data = pred_kappa.cpu().numpy() if pred_kappa is not None else None
+ gt_norm_data = gt_norm.cpu().numpy()
+ gt_norm_mask_data = gt_norm_mask.cpu().numpy()
+ pred_error_data = pred_error.cpu().numpy()
+
+ return img_data, pred_norm_data, pred_kappa_data, gt_norm_data, gt_norm_mask_data, pred_error_data
+ except Exception as e:
+ print(f"处理Normal数据失败: {e}", file=sys.stderr)
+ return None, None, None, None, None, None
diff --git a/FE2E/infer/sampling.py b/FE2E/infer/sampling.py
new file mode 100644
index 0000000000000000000000000000000000000000..16142b95c9165d3e645d5eabb2f2524481df068e
--- /dev/null
+++ b/FE2E/infer/sampling.py
@@ -0,0 +1,47 @@
+import math
+from collections.abc import Callable
+
+import torch
+from torch import Tensor
+
+
+def get_noise(num_samples: int, height: int, width: int, device: torch.device, dtype: torch.dtype, seed: int):
+ return torch.randn(
+ num_samples,
+ 16,
+ # allow for packing
+ 2 * math.ceil(height / 16),
+ 2 * math.ceil(width / 16),
+ device=device,
+ dtype=dtype,
+ generator=torch.Generator(device=device).manual_seed(seed),
+ )
+
+
+def time_shift(mu: float, sigma: float, t: Tensor):
+ return math.exp(mu) / (math.exp(mu) + (1 / t - 1) ** sigma)
+
+
+def get_lin_function(x1: float = 256, y1: float = 0.5, x2: float = 4096, y2: float = 1.15) -> Callable[[float], float]:
+ m = (y2 - y1) / (x2 - x1)
+ b = y1 - m * x1
+ return lambda x: m * x + b
+
+
+def get_schedule(
+ num_steps: int,
+ image_seq_len: int,
+ base_shift: float = 0.5,
+ max_shift: float = 1.15,
+ shift: bool = True,
+) -> list[float]:
+ # extra step for zero
+ timesteps = torch.linspace(1, 0, num_steps + 1)
+
+ # shifting the schedule to favor high timesteps for higher signal images
+ if shift:
+ # estimate mu based on linear estimation between two points
+ mu = get_lin_function(y1=base_shift, y2=max_shift)(image_seq_len)
+ timesteps = time_shift(mu, 1.0, timesteps)
+
+ return timesteps.tolist()
diff --git a/FE2E/infer/seed_all.py b/FE2E/infer/seed_all.py
new file mode 100644
index 0000000000000000000000000000000000000000..95795654e36d3fbc14e876dff50f348a1f5a9c0a
--- /dev/null
+++ b/FE2E/infer/seed_all.py
@@ -0,0 +1,33 @@
+# Copyright 2023 Bingxin Ke, ETH Zurich. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# --------------------------------------------------------------------------
+# If you find this code useful, we kindly ask you to cite our paper in your work.
+# Please find bibtex at: https://github.com/prs-eth/Marigold#-citation
+# More information about the method can be found at https://marigoldmonodepth.github.io
+# --------------------------------------------------------------------------
+
+
+import numpy as np
+import random
+import torch
+
+
+def seed_all(seed: int = 0):
+ """
+ Set random seeds of all components.
+ """
+ random.seed(seed)
+ np.random.seed(seed)
+ torch.manual_seed(seed)
+ torch.cuda.manual_seed_all(seed)
diff --git a/FE2E/infer/util/__init__.py b/FE2E/infer/util/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/FE2E/infer/util/alignment.py b/FE2E/infer/util/alignment.py
new file mode 100644
index 0000000000000000000000000000000000000000..21720fc389f1756da844045b42bb71ce812c45a0
--- /dev/null
+++ b/FE2E/infer/util/alignment.py
@@ -0,0 +1,88 @@
+# Author: Bingxin Ke
+# Last modified: 2024-01-11
+
+import numpy as np
+import torch
+
+
+def align_depth_least_square(
+ gt_arr: np.ndarray,
+ pred_arr: np.ndarray,
+ valid_mask_arr: np.ndarray,
+ return_scale_shift=True,
+ max_resolution=None,
+):
+ ori_shape = pred_arr.shape # input shape
+
+ gt = gt_arr.squeeze() # [H, W]
+ pred = pred_arr.squeeze()
+ valid_mask = valid_mask_arr.squeeze()
+
+ # Downsample
+ if max_resolution is not None:
+ scale_factor = np.min(max_resolution / np.array(ori_shape[-2:]))
+ if scale_factor < 1:
+ downscaler = torch.nn.Upsample(scale_factor=scale_factor, mode="nearest")
+ gt = downscaler(torch.as_tensor(gt).unsqueeze(0)).numpy()
+ pred = downscaler(torch.as_tensor(pred).unsqueeze(0)).numpy()
+ valid_mask = (
+ downscaler(torch.as_tensor(valid_mask).unsqueeze(0).float())
+ .bool()
+ .numpy()
+ )
+
+ assert (
+ gt.shape == pred.shape == valid_mask.shape
+ ), f"{gt.shape}, {pred.shape}, {valid_mask.shape}"
+
+ gt_masked = gt[valid_mask].reshape((-1, 1))
+ pred_masked = pred[valid_mask].reshape((-1, 1))
+
+ # numpy solver
+ _ones = np.ones_like(pred_masked)
+ A = np.concatenate([pred_masked, _ones], axis=-1)
+ X = np.linalg.lstsq(A, gt_masked, rcond=None)[0]
+ scale, shift = X
+
+ aligned_pred = pred_arr * scale + shift
+
+ # restore dimensions
+ aligned_pred = aligned_pred.reshape(ori_shape)
+
+ if return_scale_shift:
+ return aligned_pred, scale, shift
+ else:
+ return aligned_pred
+
+
+# ******************** disparity space ********************
+def depth2disparity(depth, return_mask=False):
+ if isinstance(depth, torch.Tensor):
+ disparity = torch.zeros_like(depth)
+ elif isinstance(depth, np.ndarray):
+ disparity = np.zeros_like(depth)
+ non_negtive_mask = depth > 0
+ disparity[non_negtive_mask] = 1.0 / depth[non_negtive_mask]
+ if return_mask:
+ return disparity, non_negtive_mask
+ else:
+ return disparity
+
+
+def disparity2depth(disparity, **kwargs):
+ return depth2disparity(disparity, **kwargs)
+
+# ******************** log space ********************
+def depth2log_space(depth, **kwargs):
+ if isinstance(depth, torch.Tensor):
+ log_space = torch.zeros_like(depth)
+ elif isinstance(depth, np.ndarray):
+ log_space = np.zeros_like(depth)
+ non_negtive_mask = depth > 0
+ log_space[non_negtive_mask] = np.log(depth[non_negtive_mask])
+ return log_space, non_negtive_mask
+
+def log_space2depth(log_space, **kwargs):
+ depth = np.exp(log_space)
+ return depth
+
diff --git a/FE2E/infer/util/metric.py b/FE2E/infer/util/metric.py
new file mode 100644
index 0000000000000000000000000000000000000000..b6f16b8c0379f252f98dbc80f33aca086796fa73
--- /dev/null
+++ b/FE2E/infer/util/metric.py
@@ -0,0 +1,151 @@
+import pandas as pd
+import torch
+
+
+# Adapted from: https://github.com/victoresque/pytorch-template/blob/master/utils/util.py
+class MetricTracker:
+ def __init__(self, *keys, writer=None):
+ self.writer = writer
+ self._data = pd.DataFrame(index=keys, columns=["total", "counts", "average"])
+ self.reset()
+
+ def reset(self):
+ for col in self._data.columns:
+ self._data[col].values[:] = 0.0
+
+ def update(self, key, value, n=1):
+ if self.writer is not None:
+ self.writer.add_scalar(key, value)
+ # 确保value是数值类型
+ value = float(value) if hasattr(value, '__float__') else value.item() if hasattr(value, 'item') else float(value)
+ self._data.at[key, "total"] += value * n
+ self._data.at[key, "counts"] += n
+ self._data.at[key, "average"] = self._data.at[key, "total"] / self._data.at[key, "counts"]
+
+ def avg(self, key):
+ return self._data.average[key]
+
+ def result(self):
+ return dict(self._data.average)
+
+def pixel_mean(pred, gt, valid_mask):
+ if valid_mask is not None:
+ masked_pred = pred * valid_mask
+ masked_gt = gt * valid_mask
+
+ valid_pixel_count = torch.sum(valid_mask, dim=(0,1))
+
+ pred_mean = torch.sum(masked_pred, dim=(0,1)) / valid_pixel_count
+ gt_mean = torch.sum(masked_gt, dim=(0,1)) / valid_pixel_count
+ else:
+ pred_mean = torch.mean(pred, dim=(0,1))
+ gt_mean = torch.mean(gt, dim=(0,1))
+
+ mean_difference = torch.abs(pred_mean - gt_mean)
+ return mean_difference
+
+def pixel_var(pred, gt, valid_mask):
+ if valid_mask is not None:
+ masked_pred = pred * valid_mask
+ masked_gt = gt * valid_mask
+
+ valid_pixel_count = torch.sum(valid_mask, dim=(0,1))
+
+ pred_mean = torch.sum(masked_pred, dim=(0,1)) / valid_pixel_count
+ gt_mean = torch.sum(masked_gt, dim=(0,1)) / valid_pixel_count
+
+ pred_var = torch.sum(valid_mask * (pred - pred_mean)**2, dim=(0,1)) / valid_pixel_count
+ gt_var = torch.sum(valid_mask * (gt - gt_mean)**2, dim=(0,1)) / valid_pixel_count
+ else:
+ pred_var = torch.var(pred, dim=(0,1))
+ gt_var = torch.var(gt, dim=(0,1))
+
+ var_difference = torch.abs(pred_var - gt_var)
+
+ return var_difference
+
+def abs_relative_difference(output, target, valid_mask=None):
+ actual_output = output
+ actual_target = target
+ abs_relative_diff = torch.abs(actual_output - actual_target) / actual_target
+ if valid_mask is not None:
+ abs_relative_diff[~valid_mask] = 0
+ n = valid_mask.sum((-1, -2))
+ else:
+ n = output.shape[-1] * output.shape[-2]
+ abs_relative_diff = torch.sum(abs_relative_diff, (-1, -2)) / n
+ return abs_relative_diff.mean()
+
+
+def squared_relative_difference(output, target, valid_mask=None):
+ actual_output = output
+ actual_target = target
+ square_relative_diff = (
+ torch.pow(torch.abs(actual_output - actual_target), 2) / actual_target
+ )
+ if valid_mask is not None:
+ square_relative_diff[~valid_mask] = 0
+ n = valid_mask.sum((-1, -2))
+ else:
+ n = output.shape[-1] * output.shape[-2]
+ square_relative_diff = torch.sum(square_relative_diff, (-1, -2)) / n
+ return square_relative_diff.mean()
+
+
+def rmse_linear(output, target, valid_mask=None):
+ actual_output = output
+ actual_target = target
+ diff = actual_output - actual_target
+ if valid_mask is not None:
+ diff[~valid_mask] = 0
+ n = valid_mask.sum((-1, -2))
+ else:
+ n = output.shape[-1] * output.shape[-2]
+ diff2 = torch.pow(diff, 2)
+ mse = torch.sum(diff2, (-1, -2)) / n
+ rmse = torch.sqrt(mse)
+ return rmse.mean()
+
+
+def rmse_log(output, target, valid_mask=None):
+ diff = torch.log(output) - torch.log(target)
+ if valid_mask is not None:
+ diff[~valid_mask] = 0
+ n = valid_mask.sum((-1, -2))
+ else:
+ n = output.shape[-1] * output.shape[-2]
+ diff2 = torch.pow(diff, 2)
+ mse = torch.sum(diff2, (-1, -2)) / n # [B]
+ rmse = torch.sqrt(mse)
+ return rmse.mean()
+
+
+
+
+# adapt from: https://github.com/imran3180/depth-map-prediction/blob/master/main.py
+def threshold_percentage(output, target, threshold_val, valid_mask=None):
+ d1 = output / target
+ d2 = target / output
+ max_d1_d2 = torch.max(d1, d2)
+ bit_mat = (max_d1_d2 < threshold_val).to(output.dtype)
+ if valid_mask is not None:
+ bit_mat = bit_mat * valid_mask.to(output.dtype)
+ n = valid_mask.sum((-1, -2))
+ else:
+ n = torch.tensor(output.shape[-1] * output.shape[-2], device=output.device)
+ n = torch.clamp(n, min=1)
+ count_mat = torch.sum(bit_mat, (-1, -2))
+ threshold_mat = count_mat / n.to(count_mat.dtype)
+ return threshold_mat.mean()
+
+
+def delta1_acc(pred, gt, valid_mask):
+ return threshold_percentage(pred, gt, 1.25, valid_mask)
+
+
+def delta2_acc(pred, gt, valid_mask):
+ return threshold_percentage(pred, gt, 1.25**2, valid_mask)
+
+
+def delta3_acc(pred, gt, valid_mask):
+ return threshold_percentage(pred, gt, 1.25**3, valid_mask)
diff --git a/FE2E/infer/util/normal_utils.py b/FE2E/infer/util/normal_utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..14b192b4d3c970c76070a2d18e00da841a228dab
--- /dev/null
+++ b/FE2E/infer/util/normal_utils.py
@@ -0,0 +1,78 @@
+import os
+import numpy as np
+import torch
+import torch.nn.functional as F
+import torch.distributed as dist
+
+
+def get_padding(orig_H, orig_W):
+ """ returns how the input of shape (orig_H, orig_W) should be padded
+ this ensures that both H and W are divisible by 32
+ """
+ if orig_W % 32 == 0:
+ l = 0
+ r = 0
+ else:
+ new_W = 32 * ((orig_W // 32) + 1)
+ l = (new_W - orig_W) // 2
+ r = (new_W - orig_W) - l
+
+ if orig_H % 32 == 0:
+ t = 0
+ b = 0
+ else:
+ new_H = 32 * ((orig_H // 32) + 1)
+ t = (new_H - orig_H) // 2
+ b = (new_H - orig_H) - t
+ return l, r, t, b
+
+def pad_input(img, intrins, lrtb=(0,0,0,0)):
+ """ pad input image
+ img should be a torch tensor of shape (B, 3, H, W)
+ intrins should be a torch tensor of shape (B, 3, 3)
+ """
+ l, r, t, b = lrtb
+ if l+r+t+b != 0:
+ pad_value_R = (0 - 0.485) / 0.229
+ pad_value_G = (0 - 0.456) / 0.224
+ pad_value_B = (0 - 0.406) / 0.225
+
+ img_R = F.pad(img[:,0:1,:,:], (l, r, t, b), mode="constant", value=pad_value_R)
+ img_G = F.pad(img[:,1:2,:,:], (l, r, t, b), mode="constant", value=pad_value_G)
+ img_B = F.pad(img[:,2:3,:,:], (l, r, t, b), mode="constant", value=pad_value_B)
+
+ img = torch.cat([img_R, img_G, img_B], dim=1)
+
+ if intrins is not None:
+ intrins[:, 0, 2] += l
+ intrins[:, 1, 2] += t
+ return img, intrins
+
+def compute_normal_error(pred_norm, gt_norm):
+ """ compute per-pixel surface normal error in degrees
+ NOTE: pred_norm and gt_norm should be torch tensors of shape (B, 3, ...)
+ """
+ pred_error = torch.cosine_similarity(pred_norm, gt_norm, dim=1)
+ pred_error = torch.clamp(pred_error, min=-1.0, max=1.0)
+ pred_error = torch.acos(pred_error) * 180.0 / np.pi
+ pred_error = pred_error.unsqueeze(1) # (B, 1, ...)
+ return pred_error
+
+def compute_normal_metrics(total_normal_errors):
+ """ compute surface normal metrics (used for benchmarking)
+ NOTE: total_normal_errors should be a 1D torch tensor of errors in degrees
+ """
+ total_normal_errors = total_normal_errors.detach().cpu().numpy()
+ num_pixels = total_normal_errors.shape[0]
+
+ metrics = {
+ 'mean': np.average(total_normal_errors),
+ 'median': np.median(total_normal_errors),
+ 'rmse': np.sqrt(np.sum(total_normal_errors * total_normal_errors) / num_pixels),
+ 'a1': 100.0 * (np.sum(total_normal_errors < 5) / num_pixels),
+ 'a2': 100.0 * (np.sum(total_normal_errors < 7.5) / num_pixels),
+ 'a3': 100.0 * (np.sum(total_normal_errors < 11.25) / num_pixels),
+ 'a4': 100.0 * (np.sum(total_normal_errors < 22.5) / num_pixels),
+ 'a5': 100.0 * (np.sum(total_normal_errors < 30) / num_pixels)
+ }
+ return metrics
\ No newline at end of file
diff --git a/FE2E/infer/visualize.py b/FE2E/infer/visualize.py
new file mode 100644
index 0000000000000000000000000000000000000000..c99e18b1c0835a6e6b3f5b935a736f9fed7a135a
--- /dev/null
+++ b/FE2E/infer/visualize.py
@@ -0,0 +1,130 @@
+import cv2
+import numpy as np
+
+import torch
+
+from matplotlib import cm
+import matplotlib.pyplot as plt
+
+import logging
+logger = logging.getLogger('root')
+
+
+
+def tensor_to_numpy(tensor_in):
+ """ torch tensor to numpy array
+ """
+ if tensor_in is not None:
+ if tensor_in.ndim == 3:
+ # (C, H, W) -> (H, W, C)
+ tensor_in = tensor_in.detach().cpu().permute(1, 2, 0).numpy()
+ elif tensor_in.ndim == 4:
+ # (B, C, H, W) -> (B, H, W, C)
+ tensor_in = tensor_in.detach().cpu().permute(0, 2, 3, 1).numpy()
+ else:
+ raise Exception('invalid tensor size')
+ return tensor_in
+
+# def unnormalize(img_in, img_stats={'mean': [0.485, 0.456, 0.406],
+# 'std': [0.229, 0.224, 0.225]}):
+def unnormalize(img_in, img_stats={'mean': [0.5,0.5,0.5], 'std': [0.5,0.5,0.5]}):
+ """ unnormalize input image
+ """
+ if torch.is_tensor(img_in):
+ img_in = tensor_to_numpy(img_in)
+
+ # 检查输入图像的数值范围,决定是否需要去归一化
+ img_min, img_max = img_in.min(), img_in.max()
+
+ # 如果图像已经在[0,1]范围内,直接转换为[0,255]
+ if img_min >= -0.1 and img_max <= 1.1: # 允许小的浮点误差
+ img_out = np.clip(img_in, 0, 1)
+ img_out = (img_out * 255.0).astype(np.uint8)
+ else:
+ # 如果图像在[-1,1]或其他归一化范围内,进行标准去归一化
+ img_out = np.zeros_like(img_in)
+ for ich in range(3):
+ img_out[..., ich] = img_in[..., ich] * img_stats['std'][ich]
+ img_out[..., ich] += img_stats['mean'][ich]
+ img_out = np.clip(img_out, 0, 1)
+ img_out = (img_out * 255.0).astype(np.uint8)
+
+ return img_out
+
+def normal_to_rgb(normal, normal_mask=None):
+ """ surface normal map to RGB
+ (used for visualization)
+
+ NOTE: x, y, z are mapped to R, G, B
+ NOTE: [-1, 1] are mapped to [0, 255]
+ """
+ if torch.is_tensor(normal):
+ normal = tensor_to_numpy(normal)
+ normal_mask = tensor_to_numpy(normal_mask)
+
+ normal_norm = np.linalg.norm(normal, axis=-1, keepdims=True)
+ normal_norm[normal_norm < 1e-12] = 1e-12
+ normal = normal / normal_norm
+
+ normal_rgb = (((normal + 1) * 0.5) * 255).astype(np.uint8)
+ if normal_mask is not None:
+ normal_rgb = normal_rgb * normal_mask # (B, H, W, 3)
+ return normal_rgb
+
+def kappa_to_alpha(pred_kappa, to_numpy=True):
+ """ Confidence kappa to uncertainty alpha
+ Assuming AngMF distribution (introduced in https://arxiv.org/abs/2109.09881)
+ """
+ if torch.is_tensor(pred_kappa) and to_numpy:
+ pred_kappa = tensor_to_numpy(pred_kappa)
+
+ if torch.is_tensor(pred_kappa):
+ alpha = ((2 * pred_kappa) / ((pred_kappa ** 2.0) + 1)) \
+ + ((torch.exp(- pred_kappa * np.pi) * np.pi) / (1 + torch.exp(- pred_kappa * np.pi)))
+ alpha = torch.rad2deg(alpha)
+ else:
+ alpha = ((2 * pred_kappa) / ((pred_kappa ** 2.0) + 1)) \
+ + ((np.exp(- pred_kappa * np.pi) * np.pi) / (1 + np.exp(- pred_kappa * np.pi)))
+ alpha = np.degrees(alpha)
+
+ return alpha
+
+
+def visualize_normal(target_dir, prefixs, img, pred_norm, pred_kappa,
+ gt_norm, gt_norm_mask, pred_error, num_vis=-1):
+ """ visualize normal
+ """
+ error_max = 60.0
+
+ # img = tensor_to_numpy(img) # (B, H, W, 3)
+ pred_norm = tensor_to_numpy(pred_norm) # (B, H, W, 3)
+ # pred_kappa = tensor_to_numpy(pred_kappa) # (B, H, W, 1)
+ gt_norm = tensor_to_numpy(gt_norm) # (B, H, W, 3)
+ gt_norm_mask = tensor_to_numpy(gt_norm_mask) # (B, H, W, 1)
+ pred_error = tensor_to_numpy(pred_error) # (B, H, W, 1)
+
+ num_vis = len(prefixs) if num_vis == -1 else num_vis
+ for i in range(num_vis):
+ # # img
+ # img_ = unnormalize(img[i, ...])
+ # target_path = '%s/%s_img.png' % (target_dir, prefixs[i])
+ # plt.imsave(target_path, img_)
+
+ # pred_norm
+ target_path = '%s/%s_norm.png' % (target_dir, prefixs[i])
+ plt.imsave(target_path, normal_to_rgb(pred_norm[i, ...]))
+
+ # # pred_kappa
+ # if pred_kappa is not None:
+ # pred_alpha = kappa_to_alpha(pred_kappa[i, :, :, 0])
+ # target_path = '%s/%s_pred_alpha.png' % (target_dir, prefixs[i])
+ # plt.imsave(target_path, pred_alpha, vmin=0.0, vmax=error_max, cmap='jet')
+
+ # gt_norm, pred_error
+ if gt_norm is not None:
+ target_path = '%s/%s_gt.png' % (target_dir, prefixs[i])
+ # plt.imsave(target_path, normal_to_rgb(gt_norm[i, ...], gt_norm_mask[i, ...]))
+
+ E = pred_error[i, :, :, 0] * gt_norm_mask[i, :, :, 0]
+ target_path = '%s/%s_pred_error.png' % (target_dir, prefixs[i])
+ plt.imsave(target_path, E, vmin=0, vmax=error_max, cmap='jet')
diff --git a/FE2E/library/__init__.py b/FE2E/library/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/FE2E/library/__pycache__/__init__.cpython-310.pyc b/FE2E/library/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..755628ae89685b1cc81f91d2439f8a235c0b674a
Binary files /dev/null and b/FE2E/library/__pycache__/__init__.cpython-310.pyc differ
diff --git a/FE2E/library/__pycache__/custom_offloading_utils.cpython-310.pyc b/FE2E/library/__pycache__/custom_offloading_utils.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..da6bfb3de82fa24e3f9302a68181ea2cf7966993
Binary files /dev/null and b/FE2E/library/__pycache__/custom_offloading_utils.cpython-310.pyc differ
diff --git a/FE2E/library/__pycache__/device_utils.cpython-310.pyc b/FE2E/library/__pycache__/device_utils.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..8681118afcf525d5794e0ca232270a903210e664
Binary files /dev/null and b/FE2E/library/__pycache__/device_utils.cpython-310.pyc differ
diff --git a/FE2E/library/__pycache__/lora_module.cpython-310.pyc b/FE2E/library/__pycache__/lora_module.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..2232c50cad30ec7813d7c0dc4257999e0f779ed7
Binary files /dev/null and b/FE2E/library/__pycache__/lora_module.cpython-310.pyc differ
diff --git a/FE2E/library/__pycache__/utils.cpython-310.pyc b/FE2E/library/__pycache__/utils.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..a426d4d070453b382444cc17ac71f50958072f6f
Binary files /dev/null and b/FE2E/library/__pycache__/utils.cpython-310.pyc differ
diff --git a/FE2E/library/custom_offloading_utils.py b/FE2E/library/custom_offloading_utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..84c2b743ec55caa93b4ead696b09a5cae94f913d
--- /dev/null
+++ b/FE2E/library/custom_offloading_utils.py
@@ -0,0 +1,227 @@
+from concurrent.futures import ThreadPoolExecutor
+import time
+from typing import Optional
+import torch
+import torch.nn as nn
+
+from library.device_utils import clean_memory_on_device
+
+
+def synchronize_device(device: torch.device):
+ if device.type == "cuda":
+ torch.cuda.synchronize()
+ elif device.type == "xpu":
+ torch.xpu.synchronize()
+ elif device.type == "mps":
+ torch.mps.synchronize()
+
+
+def swap_weight_devices_cuda(device: torch.device, layer_to_cpu: nn.Module, layer_to_cuda: nn.Module):
+ assert layer_to_cpu.__class__ == layer_to_cuda.__class__
+
+ weight_swap_jobs = []
+
+ # This is not working for all cases (e.g. SD3), so we need to find the corresponding modules
+ # for module_to_cpu, module_to_cuda in zip(layer_to_cpu.modules(), layer_to_cuda.modules()):
+ # print(module_to_cpu.__class__, module_to_cuda.__class__)
+ # if hasattr(module_to_cpu, "weight") and module_to_cpu.weight is not None:
+ # weight_swap_jobs.append((module_to_cpu, module_to_cuda, module_to_cpu.weight.data, module_to_cuda.weight.data))
+
+ modules_to_cpu = {k: v for k, v in layer_to_cpu.named_modules()}
+ for module_to_cuda_name, module_to_cuda in layer_to_cuda.named_modules():
+ if hasattr(module_to_cuda, "weight") and module_to_cuda.weight is not None:
+ module_to_cpu = modules_to_cpu.get(module_to_cuda_name, None)
+ if module_to_cpu is not None and module_to_cpu.weight.shape == module_to_cuda.weight.shape:
+ weight_swap_jobs.append((module_to_cpu, module_to_cuda, module_to_cpu.weight.data, module_to_cuda.weight.data))
+ else:
+ if module_to_cuda.weight.data.device.type != device.type:
+ # print(
+ # f"Module {module_to_cuda_name} not found in CPU model or shape mismatch, so not swapping and moving to device"
+ # )
+ module_to_cuda.weight.data = module_to_cuda.weight.data.to(device)
+
+ torch.cuda.current_stream().synchronize() # this prevents the illegal loss value
+
+ stream = torch.cuda.Stream()
+ with torch.cuda.stream(stream):
+ # cuda to cpu
+ for module_to_cpu, module_to_cuda, cuda_data_view, cpu_data_view in weight_swap_jobs:
+ cuda_data_view.record_stream(stream)
+ module_to_cpu.weight.data = cuda_data_view.data.to("cpu", non_blocking=True)
+
+ stream.synchronize()
+
+ # cpu to cuda
+ for module_to_cpu, module_to_cuda, cuda_data_view, cpu_data_view in weight_swap_jobs:
+ cuda_data_view.copy_(module_to_cuda.weight.data, non_blocking=True)
+ module_to_cuda.weight.data = cuda_data_view
+
+ stream.synchronize()
+ torch.cuda.current_stream().synchronize() # this prevents the illegal loss value
+
+
+def swap_weight_devices_no_cuda(device: torch.device, layer_to_cpu: nn.Module, layer_to_cuda: nn.Module):
+ """
+ not tested
+ """
+ assert layer_to_cpu.__class__ == layer_to_cuda.__class__
+
+ weight_swap_jobs = []
+ for module_to_cpu, module_to_cuda in zip(layer_to_cpu.modules(), layer_to_cuda.modules()):
+ if hasattr(module_to_cpu, "weight") and module_to_cpu.weight is not None:
+ weight_swap_jobs.append((module_to_cpu, module_to_cuda, module_to_cpu.weight.data, module_to_cuda.weight.data))
+
+ # device to cpu
+ for module_to_cpu, module_to_cuda, cuda_data_view, cpu_data_view in weight_swap_jobs:
+ module_to_cpu.weight.data = cuda_data_view.data.to("cpu", non_blocking=True)
+
+ synchronize_device()
+
+ # cpu to device
+ for module_to_cpu, module_to_cuda, cuda_data_view, cpu_data_view in weight_swap_jobs:
+ cuda_data_view.copy_(module_to_cuda.weight.data, non_blocking=True)
+ module_to_cuda.weight.data = cuda_data_view
+
+ synchronize_device()
+
+
+def weighs_to_device(layer: nn.Module, device: torch.device):
+ for module in layer.modules():
+ if hasattr(module, "weight") and module.weight is not None:
+ module.weight.data = module.weight.data.to(device, non_blocking=True)
+
+
+class Offloader:
+ """
+ common offloading class
+ """
+
+ def __init__(self, num_blocks: int, blocks_to_swap: int, device: torch.device, debug: bool = False):
+ self.num_blocks = num_blocks
+ self.blocks_to_swap = blocks_to_swap
+ self.device = device
+ self.debug = debug
+
+ self.thread_pool = ThreadPoolExecutor(max_workers=1)
+ self.futures = {}
+ self.cuda_available = device.type == "cuda"
+
+ def swap_weight_devices(self, block_to_cpu: nn.Module, block_to_cuda: nn.Module):
+ if self.cuda_available:
+ swap_weight_devices_cuda(self.device, block_to_cpu, block_to_cuda)
+ else:
+ swap_weight_devices_no_cuda(self.device, block_to_cpu, block_to_cuda)
+
+ def _submit_move_blocks(self, blocks, block_idx_to_cpu, block_idx_to_cuda):
+ def move_blocks(bidx_to_cpu, block_to_cpu, bidx_to_cuda, block_to_cuda):
+ if self.debug:
+ start_time = time.perf_counter()
+ print(f"Move block {bidx_to_cpu} to CPU and block {bidx_to_cuda} to {'CUDA' if self.cuda_available else 'device'}")
+
+ self.swap_weight_devices(block_to_cpu, block_to_cuda)
+
+ if self.debug:
+ print(f"Moved blocks {bidx_to_cpu} and {bidx_to_cuda} in {time.perf_counter()-start_time:.2f}s")
+ return bidx_to_cpu, bidx_to_cuda # , event
+
+ block_to_cpu = blocks[block_idx_to_cpu]
+ block_to_cuda = blocks[block_idx_to_cuda]
+
+ self.futures[block_idx_to_cuda] = self.thread_pool.submit(
+ move_blocks, block_idx_to_cpu, block_to_cpu, block_idx_to_cuda, block_to_cuda
+ )
+
+ def _wait_blocks_move(self, block_idx):
+ if block_idx not in self.futures:
+ return
+
+ if self.debug:
+ print(f"Wait for block {block_idx}")
+ start_time = time.perf_counter()
+
+ future = self.futures.pop(block_idx)
+ _, bidx_to_cuda = future.result()
+
+ assert block_idx == bidx_to_cuda, f"Block index mismatch: {block_idx} != {bidx_to_cuda}"
+
+ if self.debug:
+ print(f"Waited for block {block_idx}: {time.perf_counter()-start_time:.2f}s")
+
+
+class ModelOffloader(Offloader):
+ """
+ supports forward offloading
+ """
+
+ def __init__(self, blocks: list[nn.Module], num_blocks: int, blocks_to_swap: int, device: torch.device, debug: bool = False):
+ super().__init__(num_blocks, blocks_to_swap, device, debug)
+
+ # register backward hooks
+ self.remove_handles = []
+ for i, block in enumerate(blocks):
+ hook = self.create_backward_hook(blocks, i)
+ if hook is not None:
+ handle = block.register_full_backward_hook(hook)
+ self.remove_handles.append(handle)
+
+ def __del__(self):
+ for handle in self.remove_handles:
+ handle.remove()
+
+ def create_backward_hook(self, blocks: list[nn.Module], block_index: int) -> Optional[callable]:
+ # -1 for 0-based index
+ num_blocks_propagated = self.num_blocks - block_index - 1
+ swapping = num_blocks_propagated > 0 and num_blocks_propagated <= self.blocks_to_swap
+ waiting = block_index > 0 and block_index <= self.blocks_to_swap
+
+ if not swapping and not waiting:
+ return None
+
+ # create hook
+ block_idx_to_cpu = self.num_blocks - num_blocks_propagated
+ block_idx_to_cuda = self.blocks_to_swap - num_blocks_propagated
+ block_idx_to_wait = block_index - 1
+
+ def backward_hook(module, grad_input, grad_output):
+ if self.debug:
+ print(f"Backward hook for block {block_index}")
+
+ if swapping:
+ self._submit_move_blocks(blocks, block_idx_to_cpu, block_idx_to_cuda)
+ if waiting:
+ self._wait_blocks_move(block_idx_to_wait)
+ return None
+
+ return backward_hook
+
+ def prepare_block_devices_before_forward(self, blocks: list[nn.Module]):
+ if self.blocks_to_swap is None or self.blocks_to_swap == 0:
+ return
+
+ if self.debug:
+ print("Prepare block devices before forward")
+
+ for b in blocks[0 : self.num_blocks - self.blocks_to_swap]:
+ b.to(self.device)
+ weighs_to_device(b, self.device) # make sure weights are on device
+
+ for b in blocks[self.num_blocks - self.blocks_to_swap :]:
+ b.to(self.device) # move block to device first
+ weighs_to_device(b, "cpu") # make sure weights are on cpu
+
+ synchronize_device(self.device)
+ clean_memory_on_device(self.device)
+
+ def wait_for_block(self, block_idx: int):
+ if self.blocks_to_swap is None or self.blocks_to_swap == 0:
+ return
+ self._wait_blocks_move(block_idx)
+
+ def submit_move_blocks(self, blocks: list[nn.Module], block_idx: int):
+ if self.blocks_to_swap is None or self.blocks_to_swap == 0:
+ return
+ if block_idx >= self.blocks_to_swap:
+ return
+ block_idx_to_cpu = block_idx
+ block_idx_to_cuda = self.num_blocks - self.blocks_to_swap + block_idx
+ self._submit_move_blocks(blocks, block_idx_to_cpu, block_idx_to_cuda)
diff --git a/FE2E/library/device_utils.py b/FE2E/library/device_utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..d2e1974504fcc6010100b1c55222144fb596a54b
--- /dev/null
+++ b/FE2E/library/device_utils.py
@@ -0,0 +1,89 @@
+import functools
+import gc
+
+import torch
+try:
+ # intel gpu support for pytorch older than 2.5
+ # ipex is not needed after pytorch 2.5
+ import intel_extension_for_pytorch as ipex # noqa
+except Exception:
+ pass
+
+
+try:
+ HAS_CUDA = torch.cuda.is_available()
+except Exception:
+ HAS_CUDA = False
+
+try:
+ HAS_MPS = torch.backends.mps.is_available()
+except Exception:
+ HAS_MPS = False
+
+try:
+ HAS_XPU = torch.xpu.is_available()
+except Exception:
+ HAS_XPU = False
+
+
+def clean_memory():
+ gc.collect()
+ if HAS_CUDA:
+ torch.cuda.empty_cache()
+ if HAS_XPU:
+ torch.xpu.empty_cache()
+ if HAS_MPS:
+ torch.mps.empty_cache()
+
+
+def clean_memory_on_device(device: torch.device):
+ r"""
+ Clean memory on the specified device, will be called from training scripts.
+ """
+ gc.collect()
+
+ # device may "cuda" or "cuda:0", so we need to check the type of device
+ if device.type == "cuda":
+ torch.cuda.empty_cache()
+ if device.type == "xpu":
+ torch.xpu.empty_cache()
+ if device.type == "mps":
+ torch.mps.empty_cache()
+
+
+@functools.lru_cache(maxsize=None)
+def get_preferred_device() -> torch.device:
+ r"""
+ Do not call this function from training scripts. Use accelerator.device instead.
+ """
+ if HAS_CUDA:
+ device = torch.device("cuda")
+ elif HAS_XPU:
+ device = torch.device("xpu")
+ elif HAS_MPS:
+ device = torch.device("mps")
+ else:
+ device = torch.device("cpu")
+ print(f"get_preferred_device() -> {device}")
+ return device
+
+
+def init_ipex():
+ """
+ Apply IPEX to CUDA hijacks using `library.ipex.ipex_init`.
+
+ This function should run right after importing torch and before doing anything else.
+
+ If xpu is not available, this function does nothing.
+ """
+ try:
+ if HAS_XPU:
+ from library.ipex import ipex_init
+
+ is_initialized, error_message = ipex_init()
+ if not is_initialized:
+ print("failed to initialize ipex:", error_message)
+ else:
+ return
+ except Exception as e:
+ print("failed to initialize ipex:", e)
diff --git a/FE2E/library/lora_module.py b/FE2E/library/lora_module.py
new file mode 100644
index 0000000000000000000000000000000000000000..c5e3052eb3fa5313f09282aa5f81a8ef55bf7a62
--- /dev/null
+++ b/FE2E/library/lora_module.py
@@ -0,0 +1,1289 @@
+# temporary minimum implementation of LoRA
+# TODO commonize with the original implementation
+
+# LoRA network module
+# reference:
+# https://github.com/microsoft/LoRA/blob/main/loralib/layers.py
+# https://github.com/cloneofsimo/lora/blob/master/lora_diffusion/lora.py
+
+import math
+import os
+from contextlib import contextmanager
+from typing import Dict, List, Optional, Tuple, Type, Union
+from diffusers import AutoencoderKL
+import numpy as np
+import torch
+from torch import Tensor
+import re
+from library.utils import setup_logging
+
+setup_logging()
+import logging
+
+logger = logging.getLogger(__name__)
+
+
+NUM_DOUBLE_BLOCKS = 19
+NUM_SINGLE_BLOCKS = 38
+
+
+class LoRAModule(torch.nn.Module):
+ """
+ replaces forward method of the original Linear, instead of replacing the original Linear module.
+ """
+
+ def __init__(
+ self,
+ lora_name,
+ org_module: torch.nn.Module,
+ multiplier=1.0,
+ lora_dim=4,
+ alpha=1,
+ dropout=None,
+ rank_dropout=None,
+ module_dropout=None,
+ split_dims: Optional[List[int]] = None,
+ ggpo_beta: Optional[float] = None,
+ ggpo_sigma: Optional[float] = None,
+ ):
+ """
+ if alpha == 0 or None, alpha is rank (no scaling).
+ """
+ super().__init__()
+ self.lora_name = lora_name
+
+ if org_module.__class__.__name__ == "Conv2d":
+ in_dim = org_module.in_channels
+ out_dim = org_module.out_channels
+ else:
+ in_dim = org_module.in_features
+ out_dim = org_module.out_features
+
+ self.lora_dim = lora_dim
+ self.split_dims = split_dims
+
+ if split_dims is None:
+ if org_module.__class__.__name__ == "Conv2d":
+ kernel_size = org_module.kernel_size
+ stride = org_module.stride
+ padding = org_module.padding
+ self.lora_down = torch.nn.Conv2d(in_dim, self.lora_dim, kernel_size, stride, padding, bias=False)
+ self.lora_up = torch.nn.Conv2d(self.lora_dim, out_dim, (1, 1), (1, 1), bias=False)
+ else:
+ self.lora_down = torch.nn.Linear(in_dim, self.lora_dim, bias=False)
+ self.lora_up = torch.nn.Linear(self.lora_dim, out_dim, bias=False)
+
+ torch.nn.init.kaiming_uniform_(self.lora_down.weight, a=math.sqrt(5))
+ torch.nn.init.zeros_(self.lora_up.weight)
+ else:
+ # conv2d not supported
+ assert sum(split_dims) == out_dim, "sum of split_dims must be equal to out_dim"
+ assert org_module.__class__.__name__ == "Linear", "split_dims is only supported for Linear"
+ # print(f"split_dims: {split_dims}")
+ self.lora_down = torch.nn.ModuleList(
+ [torch.nn.Linear(in_dim, self.lora_dim, bias=False) for _ in range(len(split_dims))]
+ )
+ self.lora_up = torch.nn.ModuleList([torch.nn.Linear(self.lora_dim, split_dim, bias=False) for split_dim in split_dims])
+ for lora_down in self.lora_down:
+ torch.nn.init.kaiming_uniform_(lora_down.weight, a=math.sqrt(5))
+ for lora_up in self.lora_up:
+ torch.nn.init.zeros_(lora_up.weight)
+
+ if type(alpha) == torch.Tensor:
+ alpha = alpha.detach().float().numpy() # without casting, bf16 causes error
+ alpha = self.lora_dim if alpha is None or alpha == 0 else alpha
+ self.scale = alpha / self.lora_dim
+ self.register_buffer("alpha", torch.tensor(alpha)) # 定数として扱える
+
+ # same as microsoft's
+ self.multiplier = multiplier
+ self.org_module = org_module # remove in applying
+ self.dropout = dropout
+ self.rank_dropout = rank_dropout
+ self.module_dropout = module_dropout
+
+ self.ggpo_sigma = ggpo_sigma
+ self.ggpo_beta = ggpo_beta
+
+ if self.ggpo_beta is not None and self.ggpo_sigma is not None:
+ self.combined_weight_norms = None
+ self.grad_norms = None
+ self.perturbation_norm_factor = 1.0 / math.sqrt(org_module.weight.shape[0])
+ self.initialize_norm_cache(org_module.weight)
+ self.org_module_shape: tuple[int] = org_module.weight.shape
+
+ def apply_to(self):
+ self.org_forward = self.org_module.forward
+ self.org_module.forward = self.forward
+
+ del self.org_module
+
+ def forward(self, x):
+ org_forwarded = self.org_forward(x)
+
+ # module dropout
+ if self.module_dropout is not None and self.training:
+ if torch.rand(1) < self.module_dropout:
+ return org_forwarded
+
+ if self.split_dims is None:
+ lx = self.lora_down(x)
+
+ # normal dropout
+ if self.dropout is not None and self.training:
+ lx = torch.nn.functional.dropout(lx, p=self.dropout)
+
+ # rank dropout
+ if self.rank_dropout is not None and self.training:
+ mask = torch.rand((lx.size(0), self.lora_dim), device=lx.device) > self.rank_dropout
+ if len(lx.size()) == 3:
+ mask = mask.unsqueeze(1) # for Text Encoder
+ elif len(lx.size()) == 4:
+ mask = mask.unsqueeze(-1).unsqueeze(-1) # for Conv2d
+ lx = lx * mask
+
+ # scaling for rank dropout: treat as if the rank is changed
+ # maskから計算することも考えられるが、augmentation的な効果を期待してrank_dropoutを用いる
+ scale = self.scale * (1.0 / (1.0 - self.rank_dropout)) # redundant for readability
+ else:
+ scale = self.scale
+
+ lx = self.lora_up(lx)
+
+ # LoRA Gradient-Guided Perturbation Optimization
+ if self.training and self.ggpo_sigma is not None and self.ggpo_beta is not None and self.combined_weight_norms is not None and self.grad_norms is not None:
+ with torch.no_grad():
+ perturbation_scale = (self.ggpo_sigma * torch.sqrt(self.combined_weight_norms ** 2)) + (self.ggpo_beta * (self.grad_norms ** 2))
+ perturbation_scale_factor = (perturbation_scale * self.perturbation_norm_factor).to(self.device)
+ perturbation = torch.randn(self.org_module_shape, dtype=self.dtype, device=self.device)
+ perturbation.mul_(perturbation_scale_factor)
+ perturbation_output = x @ perturbation.T # Result: (batch × n)
+ return org_forwarded + (self.multiplier * scale * lx) + perturbation_output
+ else:
+ return org_forwarded + lx * self.multiplier * scale
+ else:
+ lxs = [lora_down(x) for lora_down in self.lora_down]
+
+ # normal dropout
+ if self.dropout is not None and self.training:
+ lxs = [torch.nn.functional.dropout(lx, p=self.dropout) for lx in lxs]
+
+ # rank dropout
+ if self.rank_dropout is not None and self.training:
+ masks = [torch.rand((lx.size(0), self.lora_dim), device=lx.device) > self.rank_dropout for lx in lxs]
+ for i in range(len(lxs)):
+ if len(lx.size()) == 3:
+ masks[i] = masks[i].unsqueeze(1)
+ elif len(lx.size()) == 4:
+ masks[i] = masks[i].unsqueeze(-1).unsqueeze(-1)
+ lxs[i] = lxs[i] * masks[i]
+
+ # scaling for rank dropout: treat as if the rank is changed
+ scale = self.scale * (1.0 / (1.0 - self.rank_dropout)) # redundant for readability
+ else:
+ scale = self.scale
+
+ lxs = [lora_up(lx) for lora_up, lx in zip(self.lora_up, lxs)]
+
+ return org_forwarded + torch.cat(lxs, dim=-1) * self.multiplier * scale
+
+ @torch.no_grad()
+ def initialize_norm_cache(self, org_module_weight: Tensor):
+ # Choose a reasonable sample size
+ n_rows = org_module_weight.shape[0]
+ sample_size = min(1000, n_rows) # Cap at 1000 samples or use all if smaller
+
+ # Sample random indices across all rows
+ indices = torch.randperm(n_rows)[:sample_size]
+
+ # Convert to a supported data type first, then index
+ # Use float32 for indexing operations
+ weights_float32 = org_module_weight.to(dtype=torch.float32)
+ sampled_weights = weights_float32[indices].to(device=self.device)
+
+ # Calculate sampled norms
+ sampled_norms = torch.norm(sampled_weights, dim=1, keepdim=True)
+
+ # Store the mean norm as our estimate
+ self.org_weight_norm_estimate = sampled_norms.mean()
+
+ # Optional: store standard deviation for confidence intervals
+ self.org_weight_norm_std = sampled_norms.std()
+
+ # Free memory
+ del sampled_weights, weights_float32
+
+ @torch.no_grad()
+ def validate_norm_approximation(self, org_module_weight: Tensor, verbose=True):
+ # Calculate the true norm (this will be slow but it's just for validation)
+ true_norms = []
+ chunk_size = 1024 # Process in chunks to avoid OOM
+
+ for i in range(0, org_module_weight.shape[0], chunk_size):
+ end_idx = min(i + chunk_size, org_module_weight.shape[0])
+ chunk = org_module_weight[i:end_idx].to(device=self.device, dtype=self.dtype)
+ chunk_norms = torch.norm(chunk, dim=1, keepdim=True)
+ true_norms.append(chunk_norms.cpu())
+ del chunk
+
+ true_norms = torch.cat(true_norms, dim=0)
+ true_mean_norm = true_norms.mean().item()
+
+ # Compare with our estimate
+ estimated_norm = self.org_weight_norm_estimate.item()
+
+ # Calculate error metrics
+ absolute_error = abs(true_mean_norm - estimated_norm)
+ relative_error = absolute_error / true_mean_norm * 100 # as percentage
+
+ if verbose:
+ logger.info(f"True mean norm: {true_mean_norm:.6f}")
+ logger.info(f"Estimated norm: {estimated_norm:.6f}")
+ logger.info(f"Absolute error: {absolute_error:.6f}")
+ logger.info(f"Relative error: {relative_error:.2f}%")
+
+ return {
+ 'true_mean_norm': true_mean_norm,
+ 'estimated_norm': estimated_norm,
+ 'absolute_error': absolute_error,
+ 'relative_error': relative_error
+ }
+
+
+ @torch.no_grad()
+ def update_norms(self):
+ # Not running GGPO so not currently running update norms
+ if self.ggpo_beta is None or self.ggpo_sigma is None:
+ return
+
+ # only update norms when we are training
+ if self.training is False:
+ return
+
+ module_weights = self.lora_up.weight @ self.lora_down.weight
+ module_weights.mul(self.scale)
+
+ self.weight_norms = torch.norm(module_weights, dim=1, keepdim=True)
+ self.combined_weight_norms = torch.sqrt((self.org_weight_norm_estimate**2) +
+ torch.sum(module_weights**2, dim=1, keepdim=True))
+
+ @torch.no_grad()
+ def update_grad_norms(self):
+ if self.training is False:
+ print(f"skipping update_grad_norms for {self.lora_name}")
+ return
+
+ lora_down_grad = None
+ lora_up_grad = None
+
+ for name, param in self.named_parameters():
+ if name == "lora_down.weight":
+ lora_down_grad = param.grad
+ elif name == "lora_up.weight":
+ lora_up_grad = param.grad
+
+ # Calculate gradient norms if we have both gradients
+ if lora_down_grad is not None and lora_up_grad is not None:
+ with torch.autocast(self.device.type):
+ approx_grad = self.scale * ((self.lora_up.weight @ lora_down_grad) + (lora_up_grad @ self.lora_down.weight))
+ self.grad_norms = torch.norm(approx_grad, dim=1, keepdim=True)
+
+
+ @property
+ def device(self):
+ return next(self.parameters()).device
+
+ @property
+ def dtype(self):
+ return next(self.parameters()).dtype
+
+
+class LoRAInfModule(LoRAModule):
+ def __init__(
+ self,
+ lora_name,
+ org_module: torch.nn.Module,
+ multiplier=1.0,
+ lora_dim=4,
+ alpha=1,
+ **kwargs,
+ ):
+ # no dropout for inference
+ super().__init__(lora_name, org_module, multiplier, lora_dim, alpha)
+
+ self.org_module_ref = [org_module] # 後から参照できるように
+ self.enabled = True
+ self.network: LoRANetwork = None
+
+ def set_network(self, network):
+ self.network = network
+
+ # freezeしてマージする
+ def merge_to(self, sd, dtype, device):
+ # extract weight from org_module
+ org_sd = self.org_module.state_dict()
+ weight = org_sd["weight"]
+ org_dtype = weight.dtype
+ org_device = weight.device
+ weight = weight.to(torch.float) # calc in float
+
+ if dtype is None:
+ dtype = org_dtype
+ if device is None:
+ device = org_device
+
+ if self.split_dims is None:
+ # get up/down weight
+ down_weight = sd["lora_down.weight"].to(torch.float).to(device)
+ up_weight = sd["lora_up.weight"].to(torch.float).to(device)
+
+ # merge weight
+ if len(weight.size()) == 2:
+ # linear
+ weight = weight + self.multiplier * (up_weight @ down_weight) * self.scale
+ elif down_weight.size()[2:4] == (1, 1):
+ # conv2d 1x1
+ weight = (
+ weight
+ + self.multiplier
+ * (up_weight.squeeze(3).squeeze(2) @ down_weight.squeeze(3).squeeze(2)).unsqueeze(2).unsqueeze(3)
+ * self.scale
+ )
+ else:
+ # conv2d 3x3
+ conved = torch.nn.functional.conv2d(down_weight.permute(1, 0, 2, 3), up_weight).permute(1, 0, 2, 3)
+ # logger.info(conved.size(), weight.size(), module.stride, module.padding)
+ weight = weight + self.multiplier * conved * self.scale
+
+ # set weight to org_module
+ org_sd["weight"] = weight.to(dtype)
+ self.org_module.load_state_dict(org_sd)
+ else:
+ # split_dims
+ total_dims = sum(self.split_dims)
+ for i in range(len(self.split_dims)):
+ # get up/down weight
+ down_weight = sd[f"lora_down.{i}.weight"].to(torch.float).to(device) # (rank, in_dim)
+ up_weight = sd[f"lora_up.{i}.weight"].to(torch.float).to(device) # (split dim, rank)
+
+ # pad up_weight -> (total_dims, rank)
+ padded_up_weight = torch.zeros((total_dims, up_weight.size(0)), device=device, dtype=torch.float)
+ padded_up_weight[sum(self.split_dims[:i]) : sum(self.split_dims[: i + 1])] = up_weight
+
+ # merge weight
+ weight = weight + self.multiplier * (up_weight @ down_weight) * self.scale
+
+ # set weight to org_module
+ org_sd["weight"] = weight.to(dtype)
+ self.org_module.load_state_dict(org_sd)
+
+ # 復元できるマージのため、このモジュールのweightを返す
+ def get_weight(self, multiplier=None):
+ if multiplier is None:
+ multiplier = self.multiplier
+
+ # get up/down weight from module
+ up_weight = self.lora_up.weight.to(torch.float)
+ down_weight = self.lora_down.weight.to(torch.float)
+
+ # pre-calculated weight
+ if len(down_weight.size()) == 2:
+ # linear
+ weight = self.multiplier * (up_weight @ down_weight) * self.scale
+ elif down_weight.size()[2:4] == (1, 1):
+ # conv2d 1x1
+ weight = (
+ self.multiplier
+ * (up_weight.squeeze(3).squeeze(2) @ down_weight.squeeze(3).squeeze(2)).unsqueeze(2).unsqueeze(3)
+ * self.scale
+ )
+ else:
+ # conv2d 3x3
+ conved = torch.nn.functional.conv2d(down_weight.permute(1, 0, 2, 3), up_weight).permute(1, 0, 2, 3)
+ weight = self.multiplier * conved * self.scale
+
+ return weight
+
+ def set_region(self, region):
+ self.region = region
+ self.region_mask = None
+
+ def default_forward(self, x):
+ # logger.info(f"default_forward {self.lora_name} {x.size()}")
+ if self.split_dims is None:
+ lx = self.lora_down(x)
+ lx = self.lora_up(lx)
+ return self.org_forward(x) + lx * self.multiplier * self.scale
+ else:
+ lxs = [lora_down(x) for lora_down in self.lora_down]
+ lxs = [lora_up(lx) for lora_up, lx in zip(self.lora_up, lxs)]
+ return self.org_forward(x) + torch.cat(lxs, dim=-1) * self.multiplier * self.scale
+
+ def forward(self, x):
+ if not self.enabled:
+ return self.org_forward(x)
+ return self.default_forward(x)
+
+
+def create_network(
+ multiplier: float,
+ network_dim: Optional[int],#LoRA 的秩(rank),决定 LoRA 模块的参数量。64
+ network_alpha: Optional[float],# alpha / dim 是缩放比例 32
+ ae: AutoencoderKL,
+ text_encoders,
+ base_dit,
+ neuron_dropout: Optional[float] = None,
+ **kwargs,
+):
+ if network_dim is None:
+ network_dim = 4 # default
+ if network_alpha is None:
+ network_alpha = 1.0
+
+ # extract dim/alpha for conv2d, and block dim
+ conv_dim = kwargs.get("conv_dim", None)
+ conv_alpha = kwargs.get("conv_alpha", None)
+ if conv_dim is not None:
+ conv_dim = int(conv_dim)
+ if conv_alpha is None:
+ conv_alpha = 1.0
+ else:
+ conv_alpha = float(conv_alpha)
+
+ # attn dim, mlp dim: only for DoubleStreamBlock. SingleStreamBlock is not supported because of combined qkv 用于为 DiT 模型中不同类型的模块(图像/文本注意力、MLP、调制层,以及单流/双流块)指定不同的 LoRA 秩。这些存储在 type_dims 列表中
+ img_attn_dim = kwargs.get("img_attn_dim", None)
+ txt_attn_dim = kwargs.get("txt_attn_dim", None)
+ img_mlp_dim = kwargs.get("img_mlp_dim", None)
+ txt_mlp_dim = kwargs.get("txt_mlp_dim", None)
+ img_mod_dim = kwargs.get("img_mod_dim", None)
+ txt_mod_dim = kwargs.get("txt_mod_dim", None)
+ single_dim = kwargs.get("single_dim", None) # SingleStreamBlock
+ single_mod_dim = kwargs.get("single_mod_dim", None) # SingleStreamBlock
+ if img_attn_dim is not None:
+ img_attn_dim = int(img_attn_dim)
+ if txt_attn_dim is not None:
+ txt_attn_dim = int(txt_attn_dim)
+ if img_mlp_dim is not None:
+ img_mlp_dim = int(img_mlp_dim)
+ if txt_mlp_dim is not None:
+ txt_mlp_dim = int(txt_mlp_dim)
+ if img_mod_dim is not None:
+ img_mod_dim = int(img_mod_dim)
+ if txt_mod_dim is not None:
+ txt_mod_dim = int(txt_mod_dim)
+ if single_dim is not None:
+ single_dim = int(single_dim)
+ if single_mod_dim is not None:
+ single_mod_dim = int(single_mod_dim)
+ type_dims = [img_attn_dim, txt_attn_dim, img_mlp_dim, txt_mlp_dim, img_mod_dim, txt_mod_dim, single_dim, single_mod_dim]
+ if all([d is None for d in type_dims]):
+ type_dims = None
+
+ # in_dims [img, time, vector, guidance, txt]用于指定输入层(图像、时间、向量、引导、文本)的 LoRA 秩
+ in_dims = kwargs.get("in_dims", None)
+ if in_dims is not None:
+ in_dims = in_dims.strip()
+ if in_dims.startswith("[") and in_dims.endswith("]"):
+ in_dims = in_dims[1:-1]
+ in_dims = [int(d) for d in in_dims.split(",")] # is it better to use ast.literal_eval?
+ assert len(in_dims) == 5, f"invalid in_dims: {in_dims}, must be 5 dimensions (img, time, vector, guidance, txt)"
+
+ # double/single train blocks
+ def parse_block_selection(selection: str, total_blocks: int) -> List[bool]:
+ """
+ Parse a block selection string and return a list of booleans.
+
+ Args:
+ selection (str): A string specifying which blocks to select.
+ total_blocks (int): The total number of blocks available.
+
+ Returns:
+ List[bool]: A list of booleans indicating which blocks are selected.
+ """
+ if selection == "all":
+ return [True] * total_blocks
+ if selection == "none" or selection == "":
+ return [False] * total_blocks
+
+ selected = [False] * total_blocks
+ ranges = selection.split(",")
+
+ for r in ranges:
+ if "-" in r:
+ start, end = map(str.strip, r.split("-"))
+ start = int(start)
+ end = int(end)
+ assert 0 <= start < total_blocks, f"invalid start index: {start}"
+ assert 0 <= end < total_blocks, f"invalid end index: {end}"
+ assert start <= end, f"invalid range: {start}-{end}"
+ for i in range(start, end + 1):
+ selected[i] = True
+ else:
+ index = int(r)
+ assert 0 <= index < total_blocks, f"invalid index: {index}"
+ selected[index] = True
+
+ return selected
+
+ train_double_block_indices = kwargs.get("train_double_block_indices", None)
+ train_single_block_indices = kwargs.get("train_single_block_indices", None)
+ if train_double_block_indices is not None:
+ train_double_block_indices = parse_block_selection(train_double_block_indices, NUM_DOUBLE_BLOCKS)
+ if train_single_block_indices is not None:
+ train_single_block_indices = parse_block_selection(train_single_block_indices, NUM_SINGLE_BLOCKS)
+
+ # rank/module dropout
+ rank_dropout = kwargs.get("rank_dropout", None)
+ if rank_dropout is not None:
+ rank_dropout = float(rank_dropout)
+ module_dropout = kwargs.get("module_dropout", None)
+ if module_dropout is not None:
+ module_dropout = float(module_dropout)
+
+ # single or double blocks
+ train_blocks = kwargs.get("train_blocks", None) # None (default), "all" (same as None), "single", "double"指定只训练 "all" (所有,默认), "single" (只训练单流块) 或 "double" (只训练双流块)
+ if train_blocks is not None:
+ assert train_blocks in ["all", "single", "double"], f"invalid train_blocks: {train_blocks}"
+
+ # split qkv
+ split_qkv = kwargs.get("split_qkv", False)#是否将 qkv 矩阵拆分为单独的权重
+ if split_qkv is not None:
+ split_qkv = True if split_qkv == "True" else False
+
+ ggpo_beta = kwargs.get("ggpo_beta", None)
+ ggpo_sigma = kwargs.get("ggpo_sigma", None)#与 LoRA Gradient-Guided Perturbation Optimization (GGPO) 训练策略相关的参数
+
+ if ggpo_beta is not None:
+ ggpo_beta = float(ggpo_beta)
+
+ if ggpo_sigma is not None:
+ ggpo_sigma = float(ggpo_sigma)
+
+
+ train_qwen = kwargs.get("train_qwen", False)
+ if train_qwen is not None:
+ train_qwen = True if train_qwen == "True" else False
+
+ # verbose
+ verbose = kwargs.get("verbose", False)
+ if verbose is not None:
+ verbose = True if verbose == "True" else False
+
+ # すごく引数が多いな ( ^ω^)・・・
+ network = LoRANetwork(
+ text_encoders,
+ base_dit,
+ multiplier=multiplier,
+ lora_dim=network_dim,
+ alpha=network_alpha,
+ dropout=neuron_dropout,
+ rank_dropout=rank_dropout,
+ module_dropout=module_dropout,
+ conv_lora_dim=conv_dim,
+ conv_alpha=conv_alpha,
+ train_blocks=train_blocks,
+ split_qkv=split_qkv,
+ train_qwen=train_qwen,
+ type_dims=type_dims,
+ in_dims=in_dims,
+ train_double_block_indices=train_double_block_indices,
+ train_single_block_indices=train_single_block_indices,
+ ggpo_beta=ggpo_beta,
+ ggpo_sigma=ggpo_sigma,
+ verbose=verbose,
+ )
+ # 用于设置 LoRA+ 的训练参数,学习率比例参数
+ loraplus_lr_ratio = kwargs.get("loraplus_lr_ratio", None)
+ loraplus_unet_lr_ratio = kwargs.get("loraplus_unet_lr_ratio", None)
+ loraplus_text_encoder_lr_ratio = kwargs.get("loraplus_text_encoder_lr_ratio", None)
+ loraplus_lr_ratio = float(loraplus_lr_ratio) if loraplus_lr_ratio is not None else None
+ loraplus_unet_lr_ratio = float(loraplus_unet_lr_ratio) if loraplus_unet_lr_ratio is not None else None
+ loraplus_text_encoder_lr_ratio = float(loraplus_text_encoder_lr_ratio) if loraplus_text_encoder_lr_ratio is not None else None
+ if loraplus_lr_ratio is not None or loraplus_unet_lr_ratio is not None or loraplus_text_encoder_lr_ratio is not None:
+ network.set_loraplus_lr_ratio(loraplus_lr_ratio, loraplus_unet_lr_ratio, loraplus_text_encoder_lr_ratio)
+
+ return network
+
+
+# Create network from weights for inference, weights are not loaded here (because can be merged)
+def create_network_from_weights(multiplier, file, ae, text_encoders, base_dit, weights_sd=None, for_inference=False, **kwargs):
+ if weights_sd is None:
+ if os.path.splitext(file)[1] == ".safetensors":
+ from safetensors.torch import load_file, safe_open
+
+ weights_sd = load_file(file)
+ else:
+ weights_sd = torch.load(file, map_location="cpu")
+
+ modules_dim = {}
+ modules_alpha = {}
+ train_qwen = None
+ for key, value in weights_sd.items():
+ if "." not in key:
+ continue
+
+ lora_name = key.split(".")[0]
+ if "alpha" in key:
+ modules_alpha[lora_name] = value
+ elif "lora_down" in key:
+ dim = value.size()[0]
+ modules_dim[lora_name] = dim
+ # logger.info(lora_name, value.size(), dim)
+
+ if train_qwen is None or train_qwen is False:
+ train_qwen = "lora_te3" in lora_name
+
+ if train_qwen is None:
+ train_qwen = False
+
+ split_qkv = False # split_qkv is not needed to care, because state_dict is qkv combined
+
+ module_class = LoRAInfModule if for_inference else LoRAModule
+
+ network = LoRANetwork(
+ text_encoders,
+ base_dit,
+ multiplier=multiplier,
+ modules_dim=modules_dim,
+ modules_alpha=modules_alpha,
+ module_class=module_class,
+ split_qkv=split_qkv,
+ train_qwen=train_qwen,
+ )
+ return network, weights_sd
+
+
+class LoRANetwork(torch.nn.Module):
+ DIT_TARGET_REPLACE_MODULE_DOUBLE = ["DoubleStreamBlock"]
+ DIT_TARGET_REPLACE_MODULE_SINGLE = ["SingleStreamBlock"]
+ TEXT_ENCODER_TARGET_REPLACE_MODULE = ["Qwen2MLP", "Qwen2_5_VLAttention"]
+ LORA_PREFIX_DIT = "lora_unet" # make ComfyUI compatible
+ LORA_PREFIX_TEXT_ENCODER = "lora_te" # make ComfyUI compatible
+
+ def __init__(
+ self,
+ text_encoders,
+ unet,
+ multiplier: float = 1.0,
+ lora_dim: int = 4,
+ alpha: float = 1,
+ dropout: Optional[float] = None,
+ rank_dropout: Optional[float] = None,
+ module_dropout: Optional[float] = None,
+ conv_lora_dim: Optional[int] = None,
+ conv_alpha: Optional[float] = None,
+ module_class: Type[object] = LoRAModule,
+ modules_dim: Optional[Dict[str, int]] = None,
+ modules_alpha: Optional[Dict[str, int]] = None,
+ train_blocks: Optional[str] = None,
+ split_qkv: bool = False,
+ train_qwen: bool = False,
+ type_dims: Optional[List[int]] = None,
+ in_dims: Optional[List[int]] = None,
+ train_double_block_indices: Optional[List[bool]] = None,
+ train_single_block_indices: Optional[List[bool]] = None,
+ ggpo_beta: Optional[float] = None,
+ ggpo_sigma: Optional[float] = None,
+ verbose: Optional[bool] = False,
+ ) -> None:
+ super().__init__()
+ self.multiplier = multiplier
+
+ self.lora_dim = lora_dim
+ self.alpha = alpha
+ self.conv_lora_dim = conv_lora_dim
+ self.conv_alpha = conv_alpha
+ self.dropout = dropout
+ self.rank_dropout = rank_dropout
+ self.module_dropout = module_dropout
+ self.train_blocks = train_blocks if train_blocks is not None else "all"
+ self.split_qkv = split_qkv
+ self.train_qwen = train_qwen
+
+ self.type_dims = type_dims
+ self.in_dims = in_dims
+ self.train_double_block_indices = train_double_block_indices
+ self.train_single_block_indices = train_single_block_indices
+
+ self.loraplus_lr_ratio = None
+ self.loraplus_unet_lr_ratio = None
+ self.loraplus_text_encoder_lr_ratio = None
+
+ if modules_dim is not None:
+ logger.info(f"create LoRA network from weights")
+ self.in_dims = [0] * 5 # create in_dims
+ # verbose = True
+ else:
+ logger.info(f"create LoRA network. base dim (rank): {lora_dim}, alpha: {alpha}")
+ logger.info(
+ f"neuron dropout: p={self.dropout}, rank dropout: p={self.rank_dropout}, module dropout: p={self.module_dropout}"
+ )
+
+ if ggpo_beta is not None and ggpo_sigma is not None:
+ logger.info(f"LoRA-GGPO training sigma: {ggpo_sigma} beta: {ggpo_beta}")
+
+ if self.split_qkv:
+ logger.info(f"split qkv for LoRA")
+ if self.train_blocks is not None:
+ logger.info(f"train {self.train_blocks} blocks only")
+
+
+ if train_qwen:
+ logger.info(f"train qwen as well")
+
+ # create module instances
+ def create_modules(
+ is_dit: bool,
+ text_encoder_idx: Optional[int],
+ root_module: torch.nn.Module,
+ target_replace_modules: List[str],
+ filter: Optional[str] = None,
+ default_dim: Optional[int] = None,
+ ) -> List[LoRAModule]:
+ prefix = (
+ self.LORA_PREFIX_DIT
+ if is_dit
+ else self.LORA_PREFIX_TEXT_ENCODER
+ )
+
+ loras = []
+ skipped = []
+ for name, module in root_module.named_modules():
+ if target_replace_modules is None or module.__class__.__name__ in target_replace_modules:
+ if target_replace_modules is None: # dirty hack for all modules
+ module = root_module # search all modules
+
+ for child_name, child_module in module.named_modules():
+ is_linear = child_module.__class__.__name__ == "Linear"
+ is_conv2d = child_module.__class__.__name__ == "Conv2d"
+ is_conv2d_1x1 = is_conv2d and child_module.kernel_size == (1, 1)
+
+ if is_linear or is_conv2d:
+ lora_name = prefix + "." + (name + "." if name else "") + child_name
+ lora_name = lora_name.replace(".", "_")
+
+ if filter is not None and not filter in lora_name:
+ continue
+
+ dim = None
+ alpha = None
+
+ if modules_dim is not None:
+ # モジュール指定あり
+ if lora_name in modules_dim:
+ dim = modules_dim[lora_name]
+ alpha = modules_alpha[lora_name]
+ else:
+ # 通常、すべて対象とする
+ if is_linear or is_conv2d_1x1:
+ dim = default_dim if default_dim is not None else self.lora_dim
+ alpha = self.alpha
+
+ if is_dit and type_dims is not None:
+ identifier = [
+ ("img_attn",),
+ ("txt_attn",),
+ ("img_mlp",),
+ ("txt_mlp",),
+ ("img_mod",),
+ ("txt_mod",),
+ ("single_blocks", "linear"),
+ ("modulation",),
+ ]
+ for i, d in enumerate(type_dims):
+ if d is not None and all([id in lora_name for id in identifier[i]]):
+ dim = d # may be 0 for skip
+ break
+
+ if (
+ is_dit
+ and dim
+ and (
+ self.train_double_block_indices is not None
+ or self.train_single_block_indices is not None
+ )
+ and ("double" in lora_name or "single" in lora_name)
+ ):
+ # "lora_unet_double_blocks_0_..." or "lora_unet_single_blocks_0_..."
+ block_index = int(lora_name.split("_")[4]) # bit dirty
+ if (
+ "double" in lora_name
+ and self.train_double_block_indices is not None
+ and not self.train_double_block_indices[block_index]
+ ):
+ dim = 0
+ elif (
+ "single" in lora_name
+ and self.train_single_block_indices is not None
+ and not self.train_single_block_indices[block_index]
+ ):
+ dim = 0
+
+ elif self.conv_lora_dim is not None:
+ dim = self.conv_lora_dim
+ alpha = self.conv_alpha
+
+ if dim is None or dim == 0:
+ # skipした情報を出力
+ if is_linear or is_conv2d_1x1 or (self.conv_lora_dim is not None):
+ skipped.append(lora_name)
+ continue
+
+ # qkv split
+ split_dims = None
+ if is_dit and split_qkv:
+ if "double" in lora_name and "qkv" in lora_name:
+ split_dims = [3072] * 3
+ elif "single" in lora_name and "linear1" in lora_name:
+ split_dims = [3072] * 3 + [12288]
+
+ lora = module_class(
+ lora_name,
+ child_module,
+ self.multiplier,
+ dim,
+ alpha,
+ dropout=dropout,
+ rank_dropout=rank_dropout,
+ module_dropout=module_dropout,
+ split_dims=split_dims,
+ ggpo_beta=ggpo_beta,
+ ggpo_sigma=ggpo_sigma,
+ )
+ loras.append(lora)
+
+ if target_replace_modules is None:
+ break # all modules are searched
+ return loras, skipped
+
+ # create LoRA for text encoder
+ # 毎回すべてのモジュールを作るのは無駄なので要検討
+ self.text_encoder_loras: List[Union[LoRAModule, LoRAInfModule]] = []
+ skipped_te = []
+ for i, text_encoder in enumerate(text_encoders):
+ index = i
+ if not train_qwen:
+ break
+
+ logger.info(f"create LoRA for Text Encoder {index+1}:")
+
+ text_encoder_loras, skipped = create_modules(False, index, text_encoder, LoRANetwork.TEXT_ENCODER_TARGET_REPLACE_MODULE)
+ logger.info(f"create LoRA for Text Encoder {index+1}: {len(text_encoder_loras)} modules.")
+ self.text_encoder_loras.extend(text_encoder_loras)
+ skipped_te += skipped
+
+ # create LoRA for U-Net
+ if self.train_blocks == "all":
+ target_replace_modules = LoRANetwork.DIT_TARGET_REPLACE_MODULE_DOUBLE + LoRANetwork.DIT_TARGET_REPLACE_MODULE_SINGLE
+ elif self.train_blocks == "single":
+ target_replace_modules = LoRANetwork.DIT_TARGET_REPLACE_MODULE_SINGLE
+ elif self.train_blocks == "double":
+ target_replace_modules = LoRANetwork.DIT_TARGET_REPLACE_MODULE_DOUBLE
+
+ self.unet_loras: List[Union[LoRAModule, LoRAInfModule]]
+ self.unet_loras, skipped_un = create_modules(True, None, unet, target_replace_modules)
+
+ # img, time, vector, guidance, txt
+ if self.in_dims:
+ for filter, in_dim in zip(["_img_in", "_time_in", "_vector_in", "_guidance_in", "_txt_in"], self.in_dims):
+ loras, _ = create_modules(True, None, unet, None, filter=filter, default_dim=in_dim)
+ self.unet_loras.extend(loras)
+
+ logger.info(f"create LoRA for DIT {self.train_blocks} blocks: {len(self.unet_loras)} modules.")
+ if verbose:
+ for lora in self.unet_loras:
+ logger.info(f"\t{lora.lora_name:50} {lora.lora_dim}, {lora.alpha}")
+
+ skipped = skipped_te + skipped_un
+ if verbose and len(skipped) > 0:
+ logger.warning(
+ f"because dim (rank) is 0, {len(skipped)} LoRA modules are skipped / dim (rank)が0の為、次の{len(skipped)}個のLoRAモジュールはスキップされます:"
+ )
+ for name in skipped:
+ logger.info(f"\t{name}")
+
+ # assertion
+ names = set()
+ for lora in self.text_encoder_loras + self.unet_loras:
+ assert lora.lora_name not in names, f"duplicated lora name: {lora.lora_name}"
+ names.add(lora.lora_name)
+
+ def set_multiplier(self, multiplier):
+ self.multiplier = multiplier
+ for lora in self.text_encoder_loras + self.unet_loras:
+ lora.multiplier = self.multiplier
+
+ def set_enabled(self, is_enabled):
+ for lora in self.text_encoder_loras + self.unet_loras:
+ lora.enabled = is_enabled
+
+ def update_norms(self):
+ for lora in self.text_encoder_loras + self.unet_loras:
+ lora.update_norms()
+
+ def update_grad_norms(self):
+ for lora in self.text_encoder_loras + self.unet_loras:
+ lora.update_grad_norms()
+
+ def grad_norms(self) -> Tensor | None:
+ grad_norms = []
+ for lora in self.text_encoder_loras + self.unet_loras:
+ if hasattr(lora, "grad_norms") and lora.grad_norms is not None:
+ grad_norms.append(lora.grad_norms.mean(dim=0))
+ return torch.stack(grad_norms) if len(grad_norms) > 0 else None
+
+ def weight_norms(self) -> Tensor | None:
+ weight_norms = []
+ for lora in self.text_encoder_loras + self.unet_loras:
+ if hasattr(lora, "weight_norms") and lora.weight_norms is not None:
+ weight_norms.append(lora.weight_norms.mean(dim=0))
+ return torch.stack(weight_norms) if len(weight_norms) > 0 else None
+
+ def combined_weight_norms(self) -> Tensor | None:
+ combined_weight_norms = []
+ for lora in self.text_encoder_loras + self.unet_loras:
+ if hasattr(lora, "combined_weight_norms") and lora.combined_weight_norms is not None:
+ combined_weight_norms.append(lora.combined_weight_norms.mean(dim=0))
+ return torch.stack(combined_weight_norms) if len(combined_weight_norms) > 0 else None
+
+
+ def load_weights(self, file):
+ if os.path.splitext(file)[1] == ".safetensors":
+ from safetensors.torch import load_file
+
+ weights_sd = load_file(file)
+ else:
+ weights_sd = torch.load(file, map_location="cpu")
+
+ info = self.load_state_dict(weights_sd, False)
+ return info
+
+ def load_state_dict(self, state_dict, strict=True):
+ # override to convert original weight to split qkv
+ if not self.split_qkv:
+ return super().load_state_dict(state_dict, strict)
+
+ # split qkv
+ for key in list(state_dict.keys()):
+ if "double" in key and "qkv" in key:
+ split_dims = [3072] * 3
+ elif "single" in key and "linear1" in key:
+ split_dims = [3072] * 3 + [12288]
+ else:
+ continue
+
+ weight = state_dict[key]
+ lora_name = key.split(".")[0]
+ if "lora_down" in key and "weight" in key:
+ # dense weight (rank*3, in_dim)
+ split_weight = torch.chunk(weight, len(split_dims), dim=0)
+ for i, split_w in enumerate(split_weight):
+ state_dict[f"{lora_name}.lora_down.{i}.weight"] = split_w
+
+ del state_dict[key]
+ # print(f"split {key}: {weight.shape} to {[w.shape for w in split_weight]}")
+ elif "lora_up" in key and "weight" in key:
+ # sparse weight (out_dim=sum(split_dims), rank*3)
+ rank = weight.size(1) // len(split_dims)
+ i = 0
+ for j in range(len(split_dims)):
+ state_dict[f"{lora_name}.lora_up.{j}.weight"] = weight[i : i + split_dims[j], j * rank : (j + 1) * rank]
+ i += split_dims[j]
+ del state_dict[key]
+
+
+ return super().load_state_dict(state_dict, strict)
+
+ def state_dict(self, destination=None, prefix="", keep_vars=False):
+ if not self.split_qkv:
+ return super().state_dict(destination, prefix, keep_vars)
+
+ # merge qkv
+ state_dict = super().state_dict(destination, prefix, keep_vars)
+ new_state_dict = {}
+ for key in list(state_dict.keys()):
+ if "double" in key and "qkv" in key:
+ split_dims = [3072] * 3
+ elif "single" in key and "linear1" in key:
+ split_dims = [3072] * 3 + [12288]
+ else:
+ new_state_dict[key] = state_dict[key]
+ continue
+
+ if key not in state_dict:
+ continue # already merged
+
+ lora_name = key.split(".")[0]
+
+ # (rank, in_dim) * 3
+ down_weights = [state_dict.pop(f"{lora_name}.lora_down.{i}.weight") for i in range(len(split_dims))]
+ # (split dim, rank) * 3
+ up_weights = [state_dict.pop(f"{lora_name}.lora_up.{i}.weight") for i in range(len(split_dims))]
+
+ alpha = state_dict.pop(f"{lora_name}.alpha")
+
+ # merge down weight
+ down_weight = torch.cat(down_weights, dim=0) # (rank, split_dim) * 3 -> (rank*3, sum of split_dim)
+
+ # merge up weight (sum of split_dim, rank*3)
+ rank = up_weights[0].size(1)
+ up_weight = torch.zeros((sum(split_dims), down_weight.size(0)), device=down_weight.device, dtype=down_weight.dtype)
+ i = 0
+ for j in range(len(split_dims)):
+ up_weight[i : i + split_dims[j], j * rank : (j + 1) * rank] = up_weights[j]
+ i += split_dims[j]
+
+ new_state_dict[f"{lora_name}.lora_down.weight"] = down_weight
+ new_state_dict[f"{lora_name}.lora_up.weight"] = up_weight
+ new_state_dict[f"{lora_name}.alpha"] = alpha
+
+ # print(
+ # f"merged {lora_name}: {lora_name}, {[w.shape for w in down_weights]}, {[w.shape for w in up_weights]} to {down_weight.shape}, {up_weight.shape}"
+ # )
+ print(f"new key: {lora_name}.lora_down.weight, {lora_name}.lora_up.weight, {lora_name}.alpha")
+
+ return new_state_dict
+
+ def apply_to(self, text_encoders, dit, apply_text_encoder=True, apply_unet=True):
+ if apply_text_encoder:
+ logger.info(f"enable LoRA for text encoder: {len(self.text_encoder_loras)} modules")
+ else:
+ self.text_encoder_loras = []
+
+ if apply_unet:
+ logger.info(f"enable LoRA for U-Net: {len(self.unet_loras)} modules")
+ else:
+ self.unet_loras = []
+
+ for lora in self.text_encoder_loras + self.unet_loras:
+ lora.apply_to()
+ self.add_module(lora.lora_name, lora)
+
+ # マージできるかどうかを返す
+ def is_mergeable(self):
+ return True
+
+ # TODO refactor to common function with apply_to
+ def merge_to(self, text_encoders, dit, weights_sd, dtype=None, device=None):
+ apply_text_encoder = apply_unet = False
+ for key in weights_sd.keys():
+ if key.startswith(LoRANetwork.LORA_PREFIX_TEXT_ENCODER):
+ apply_text_encoder = True
+ elif key.startswith(LoRANetwork.LORA_PREFIX_DIT):
+ apply_unet = True
+
+ if apply_text_encoder:
+ logger.info("enable LoRA for text encoder")
+ else:
+ self.text_encoder_loras = []
+
+ if apply_unet:
+ logger.info("enable LoRA for U-Net")
+ else:
+ self.unet_loras = []
+
+ for lora in self.text_encoder_loras + self.unet_loras:
+ sd_for_lora = {}
+ for key in weights_sd.keys():
+ if key.startswith(lora.lora_name):
+ sd_for_lora[key[len(lora.lora_name) + 1 :]] = weights_sd[key]
+ lora.merge_to(sd_for_lora, dtype, device)
+
+ logger.info(f"weights are merged")
+
+ def set_loraplus_lr_ratio(self, loraplus_lr_ratio, loraplus_unet_lr_ratio, loraplus_text_encoder_lr_ratio):
+ self.loraplus_lr_ratio = loraplus_lr_ratio
+ self.loraplus_unet_lr_ratio = loraplus_unet_lr_ratio
+ self.loraplus_text_encoder_lr_ratio = loraplus_text_encoder_lr_ratio
+
+ logger.info(f"LoRA+ UNet LR Ratio: {self.loraplus_unet_lr_ratio or self.loraplus_lr_ratio}")
+ logger.info(f"LoRA+ Text Encoder LR Ratio: {self.loraplus_text_encoder_lr_ratio or self.loraplus_lr_ratio}")
+
+ def prepare_optimizer_params_with_multiple_te_lrs(self, text_encoder_lr, unet_lr, default_lr):
+ # make sure text_encoder_lr as list of two elements
+ # if float, use the same value for both text encoders
+ if text_encoder_lr is None or (isinstance(text_encoder_lr, list) and len(text_encoder_lr) == 0):
+ text_encoder_lr = [default_lr, default_lr]
+ elif isinstance(text_encoder_lr, float) or isinstance(text_encoder_lr, int):
+ text_encoder_lr = [float(text_encoder_lr), float(text_encoder_lr)]
+ elif len(text_encoder_lr) == 1:
+ text_encoder_lr = [text_encoder_lr[0], text_encoder_lr[0]]
+
+ self.requires_grad_(True)
+
+ all_params = []
+ lr_descriptions = []
+
+ def assemble_params(loras, lr, loraplus_ratio):
+ param_groups = {"lora": {}, "plus": {}}
+ for lora in loras:
+ for name, param in lora.named_parameters():
+ if loraplus_ratio is not None and "lora_up" in name:
+ param_groups["plus"][f"{lora.lora_name}.{name}"] = param
+ else:
+ param_groups["lora"][f"{lora.lora_name}.{name}"] = param
+
+ params = []
+ descriptions = []
+ for key in param_groups.keys():
+ param_data = {"params": param_groups[key].values()}
+
+ if len(param_data["params"]) == 0:
+ continue
+
+ if lr is not None:
+ if key == "plus":
+ param_data["lr"] = lr * loraplus_ratio
+ else:
+ param_data["lr"] = lr
+
+ if param_data.get("lr", None) == 0 or param_data.get("lr", None) is None:
+ logger.info("NO LR skipping!")
+ continue
+
+ params.append(param_data)
+ descriptions.append("plus" if key == "plus" else "")
+
+ return params, descriptions
+
+ if self.text_encoder_loras:
+ loraplus_lr_ratio = self.loraplus_text_encoder_lr_ratio or self.loraplus_lr_ratio
+
+ # split text encoder loras for te1 and te3
+ te_loras = [lora for lora in self.text_encoder_loras if lora.lora_name.startswith(self.LORA_PREFIX_TEXT_ENCODER)]
+ if len(te_loras) > 0:
+ logger.info(f"Text Encoder: {len(te_loras)} modules, LR {text_encoder_lr[0]}")
+ params, descriptions = assemble_params(te_loras, text_encoder_lr[0], loraplus_lr_ratio)
+ all_params.extend(params)
+ lr_descriptions.extend(["textencoder" + (" " + d if d else "") for d in descriptions])
+
+ if self.unet_loras:
+ params, descriptions = assemble_params(
+ self.unet_loras,
+ unet_lr if unet_lr is not None else default_lr,
+ self.loraplus_unet_lr_ratio or self.loraplus_lr_ratio,
+ )
+ all_params.extend(params)
+ lr_descriptions.extend(["unet" + (" " + d if d else "") for d in descriptions])
+
+ return all_params, lr_descriptions
+
+ def enable_gradient_checkpointing(self):
+ # not supported
+ pass
+
+ def prepare_grad_etc(self, text_encoder, unet):
+ self.requires_grad_(True)
+
+ def on_epoch_start(self, text_encoder, unet):
+ self.train()
+
+ def get_trainable_params(self):
+ return self.parameters()
+
+ def save_weights(self, file, dtype, metadata=None):
+ if metadata is not None and len(metadata) == 0:
+ metadata = None
+
+ state_dict = self.state_dict()
+
+ if dtype is not None:
+ for key in list(state_dict.keys()):
+ v = state_dict[key]
+ v = v.detach().clone().to("cpu").to(dtype)
+ state_dict[key] = v
+
+ if os.path.splitext(file)[1] == ".safetensors":
+ from safetensors.torch import save_file
+ from library import train_util
+
+ # Precalculate model hashes to save time on indexing
+ if metadata is None:
+ metadata = {}
+ model_hash, legacy_hash = train_util.precalculate_safetensors_hashes(state_dict, metadata)
+ metadata["sshs_model_hash"] = model_hash
+ metadata["sshs_legacy_hash"] = legacy_hash
+
+ save_file(state_dict, file, metadata)
+ else:
+ torch.save(state_dict, file)
+
+ def backup_weights(self):
+ # 重みのバックアップを行う
+ loras: List[LoRAInfModule] = self.text_encoder_loras + self.unet_loras
+ for lora in loras:
+ org_module = lora.org_module_ref[0]
+ if not hasattr(org_module, "_lora_org_weight"):
+ sd = org_module.state_dict()
+ org_module._lora_org_weight = sd["weight"].detach().clone()
+ org_module._lora_restored = True
+
+ def restore_weights(self):
+ # 重みのリストアを行う
+ loras: List[LoRAInfModule] = self.text_encoder_loras + self.unet_loras
+ for lora in loras:
+ org_module = lora.org_module_ref[0]
+ if not org_module._lora_restored:
+ sd = org_module.state_dict()
+ sd["weight"] = org_module._lora_org_weight
+ org_module.load_state_dict(sd)
+ org_module._lora_restored = True
+
+ def pre_calculation(self):
+ # 事前計算を行う
+ loras: List[LoRAInfModule] = self.text_encoder_loras + self.unet_loras
+ for lora in loras:
+ org_module = lora.org_module_ref[0]
+ sd = org_module.state_dict()
+
+ org_weight = sd["weight"]
+ lora_weight = lora.get_weight().to(org_weight.device, dtype=org_weight.dtype)
+ sd["weight"] = org_weight + lora_weight
+ assert sd["weight"].shape == org_weight.shape
+ org_module.load_state_dict(sd)
+
+ org_module._lora_restored = False
+ lora.enabled = False
+
+ def apply_max_norm_regularization(self, max_norm_value, device):
+ downkeys = []
+ upkeys = []
+ alphakeys = []
+ norms = []
+ keys_scaled = 0
+
+ state_dict = self.state_dict()
+ for key in state_dict.keys():
+ if "lora_down" in key and "weight" in key:
+ downkeys.append(key)
+ upkeys.append(key.replace("lora_down", "lora_up"))
+ alphakeys.append(key.replace("lora_down.weight", "alpha"))
+
+ for i in range(len(downkeys)):
+ down = state_dict[downkeys[i]].to(device)
+ up = state_dict[upkeys[i]].to(device)
+ alpha = state_dict[alphakeys[i]].to(device)
+ dim = down.shape[0]
+ scale = alpha / dim
+
+ if up.shape[2:] == (1, 1) and down.shape[2:] == (1, 1):
+ updown = (up.squeeze(2).squeeze(2) @ down.squeeze(2).squeeze(2)).unsqueeze(2).unsqueeze(3)
+ elif up.shape[2:] == (3, 3) or down.shape[2:] == (3, 3):
+ updown = torch.nn.functional.conv2d(down.permute(1, 0, 2, 3), up).permute(1, 0, 2, 3)
+ else:
+ updown = up @ down
+
+ updown *= scale
+
+ norm = updown.norm().clamp(min=max_norm_value / 2)
+ desired = torch.clamp(norm, max=max_norm_value)
+ ratio = desired.cpu() / norm.cpu()
+ sqrt_ratio = ratio**0.5
+ if ratio != 1:
+ keys_scaled += 1
+ state_dict[upkeys[i]] *= sqrt_ratio
+ state_dict[downkeys[i]] *= sqrt_ratio
+ scalednorm = updown.norm() * ratio
+ norms.append(scalednorm.item())
+
+ return keys_scaled, sum(norms) / len(norms), max(norms)
\ No newline at end of file
diff --git a/FE2E/library/utils.py b/FE2E/library/utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..e3cd1f2a49cb4999a2c5bbcef9df4404128ec68f
--- /dev/null
+++ b/FE2E/library/utils.py
@@ -0,0 +1,26 @@
+import logging
+import sys
+
+
+def setup_logging(args=None, log_level=None, reset=False):
+ if logging.root.handlers:
+ if reset:
+ for handler in logging.root.handlers[:]:
+ logging.root.removeHandler(handler)
+ else:
+ return
+
+ if log_level is None and args is not None:
+ log_level = getattr(args, "console_log_level", None)
+ if log_level is None:
+ log_level = "INFO"
+ log_level = getattr(logging, str(log_level).upper())
+
+ handler = logging.StreamHandler(sys.stdout)
+ handler.setFormatter(logging.Formatter("%(message)s"))
+
+ logging.root.setLevel(log_level)
+ logging.root.addHandler(handler)
+
+
+setup_logging()
diff --git a/FE2E/logs/verify_eth3d_8gpu_20260317_172004.log b/FE2E/logs/verify_eth3d_8gpu_20260317_172004.log
new file mode 100644
index 0000000000000000000000000000000000000000..c73c840f649b7c40658b24299bbaab8105391b45
--- /dev/null
+++ b/FE2E/logs/verify_eth3d_8gpu_20260317_172004.log
@@ -0,0 +1,1442 @@
+即将使用 8 个GPU进行并行推理...
+Depth评估数据集: ['eth3d']
+[INFO] prompt_type=empty, 跳过Qwen模型加载
+[INFO] prompt_type=empty, 跳过Qwen模型加载
+[INFO] prompt_type=empty, 跳过Qwen模型加载
+[INFO] prompt_type=empty, 跳过Qwen模型加载
+[main_worker] 开始加载 pipeline, device=cuda:0, datasets=['eth3d']
+[INFO] prompt_type=empty, 跳过Qwen模型加载
+[INFO] prompt_type=empty, 跳过Qwen模型加载
+[INFO] prompt_type=empty, 跳过Qwen模型加载
+[INFO] prompt_type=empty, 跳过Qwen模型加载
+create LoRA network from weights
+train all blocks only
+create LoRA network from weights
+train all blocks only
+create LoRA network from weights
+train all blocks only
+create LoRA network from weights
+train all blocks only
+create LoRA network from weights
+train all blocks only
+create LoRA network from weights
+train all blocks only
+create LoRA network from weights
+train all blocks only
+create LoRA network from weights
+train all blocks only
+create LoRA for DIT all blocks: 304 modules.
+enable LoRA for U-Net
+create LoRA for DIT all blocks: 304 modules.
+enable LoRA for U-Net
+weights are merged
+create LoRA for DIT all blocks: 304 modules.
+enable LoRA for U-Net
+create LoRA for DIT all blocks: 304 modules.
+enable LoRA for U-Net
+create LoRA for DIT all blocks: 304 modules.
+enable LoRA for U-Net
+weights are merged
+create LoRA for DIT all blocks: 304 modules.
+enable LoRA for U-Net
+create LoRA for DIT all blocks: 304 modules.
+enable LoRA for U-Net
+create LoRA for DIT all blocks: 304 modules.
+enable LoRA for U-Net
+weights are merged
+weights are merged
+weights are merged
+weights are merged
+weights are merged
+weights are merged
+Successfully loading pipeline from /mmu_mllm_hdd_2/wjy/Step1X-Edit/pretrain.
+模型标识符: LDRN
+
+开始评估数据集: eth3d
+输出目录: ./infer/eval_verify_eth3d_8gpu/LDRN/eth3d
+================================================================================
+[GPU:2] 样本:113/454 | ID:DSC_0363.JPG
+ CFG=1: abs_rel:0.0250 | rmse:0.3425 | a1:0.9997
+ 时间: 5.63s
+[GPU:7] 样本:393/454 | ID:DSC_6559.JPG
+ CFG=1: abs_rel:0.0282 | rmse:0.3350 | a1:0.9982
+ 时间: 5.60s
+[GPU:2] 样本:114/454 | ID:DSC_0387.JPG
+ CFG=1: abs_rel:0.0287 | rmse:0.5338 | a1:0.9992
+ 时间: 1.06s
+[GPU:7] 样本:394/454 | ID:DSC_9287.JPG
+ CFG=1: abs_rel:0.0195 | rmse:0.3558 | a1:0.9996
+ 时间: 1.06s
+[GPU:5] 样本:281/454 | ID:DSC_0679.JPG
+ CFG=1: abs_rel:0.0213 | rmse:0.2297 | a1:0.9996
+ 时间: 5.92s
+[GPU:4] 样本:225/454 | ID:DSC_0582.JPG
+ CFG=1: abs_rel:0.0419 | rmse:0.4228 | a1:0.9923
+ 时间: 5.56s
+[GPU:6] 样本:337/454 | ID:DSC_0717.JPG
+ CFG=1: abs_rel:0.0335 | rmse:1.3345 | a1:0.9940
+ 时间: 5.41s
+[GPU:0] 样本:001/454 | ID:DSC_0262.JPG
+ CFG=1: abs_rel:0.0186 | rmse:0.1223 | a1:0.9995
+ 时间: 5.87s
+[GPU:1] 样本:057/454 | ID:DSC_0348.JPG
+ CFG=1: abs_rel:0.0329 | rmse:0.7702 | a1:0.9956
+ 时间: 5.27s
+[GPU:2] 样本:115/454 | ID:DSC_0358.JPG
+ CFG=1: abs_rel:0.0532 | rmse:0.9252 | a1:0.9873
+ 时间: 1.06s
+[GPU:7] 样本:395/454 | ID:DSC_6547.JPG
+ CFG=1: abs_rel:0.0272 | rmse:0.4811 | a1:0.9903
+ 时间: 1.06s
+[GPU:5] 样本:282/454 | ID:DSC_0650.JPG
+ CFG=1: abs_rel:0.0418 | rmse:0.3949 | a1:0.9912
+ 时间: 1.07s
+[GPU:4] 样本:226/454 | ID:DSC_0598.JPG
+ CFG=1: abs_rel:0.0531 | rmse:0.6518 | a1:0.9802
+ 时间: 1.05s
+[GPU:0] 样本:002/454 | ID:DSC_0259.JPG
+ CFG=1: abs_rel:0.0488 | rmse:1.7162 | a1:0.9972
+ 时间: 1.05s
+[GPU:1] 样本:058/454 | ID:DSC_0335.JPG
+ CFG=1: abs_rel:0.0320 | rmse:0.6190 | a1:0.9992
+ 时间: 1.05s
+[GPU:6] 样本:338/454 | ID:DSC_6500.JPG
+ CFG=1: abs_rel:0.0180 | rmse:0.0906 | a1:0.9995
+ 时间: 1.07s
+[GPU:3] 样本:169/454 | ID:DSC_0436.JPG
+ CFG=1: abs_rel:0.0272 | rmse:0.1492 | a1:0.9991
+ 时间: 4.66s
+[GPU:2] 样本:116/454 | ID:DSC_0354.JPG
+ CFG=1: abs_rel:0.0203 | rmse:0.3947 | a1:0.9987
+ 时间: 1.05s
+[GPU:7] 样本:396/454 | ID:DSC_6519.JPG
+ CFG=1: abs_rel:0.0282 | rmse:0.0958 | a1:0.9986
+ 时间: 1.04s
+[GPU:4] 样本:227/454 | ID:DSC_0603.JPG
+ CFG=1: abs_rel:0.0834 | rmse:0.7150 | a1:0.9629
+ 时间: 1.07s
+[GPU:2] 样本:117/454 | ID:DSC_0420.JPG
+ CFG=1: abs_rel:0.0201 | rmse:0.2986 | a1:0.9998
+ 时间: 0.99s
+[GPU:5] 样本:283/454 | ID:DSC_0658.JPG
+ CFG=1: abs_rel:0.0350 | rmse:0.2123 | a1:0.9933
+ 时间: 1.08s
+[GPU:1] 样本:059/454 | ID:DSC_0305.JPG
+ CFG=1: abs_rel:0.0293 | rmse:0.5077 | a1:0.9998
+ 时间: 1.06s
+[GPU:0] 样本:003/454 | ID:DSC_0270.JPG
+ CFG=1: abs_rel:0.0156 | rmse:0.1312 | a1:0.9988
+ 时间: 1.01s
+[GPU:3] 样本:170/454 | ID:DSC_0457.JPG
+ CFG=1: abs_rel:0.0191 | rmse:0.2004 | a1:0.9994
+ 时间: 1.05s
+[GPU:6] 样本:339/454 | ID:DSC_6506.JPG
+ CFG=1: abs_rel:0.0268 | rmse:0.1160 | a1:0.9999
+ 时间: 1.06s
+[GPU:7] 样本:397/454 | ID:DSC_9283.JPG
+ CFG=1: abs_rel:0.0199 | rmse:0.1121 | a1:0.9995
+ 时间: 1.05s
+[GPU:4] 样本:228/454 | ID:DSC_0616.JPG
+ CFG=1: abs_rel:0.0307 | rmse:0.0580 | a1:0.9997
+ 时间: 1.06s
+[GPU:5] 样本:284/454 | ID:DSC_0635.JPG
+ CFG=1: abs_rel:0.0094 | rmse:0.0298 | a1:1.0000
+ 时间: 1.07s
+[GPU:1] 样本:060/454 | ID:DSC_0295.JPG
+ CFG=1: abs_rel:0.0148 | rmse:0.1009 | a1:0.9998
+ 时间: 1.07s
+[GPU:6] 样本:340/454 | ID:DSC_0699.JPG
+ CFG=1: abs_rel:0.0531 | rmse:1.8422 | a1:0.9902
+ 时间: 1.07s
+[GPU:2] 样本:118/454 | ID:DSC_0409.JPG
+ CFG=1: abs_rel:0.0227 | rmse:0.5063 | a1:0.9978
+ 时间: 1.06s
+[GPU:0] 样本:004/454 | ID:DSC_0276.JPG
+ CFG=1: abs_rel:0.0201 | rmse:0.3308 | a1:0.9996
+ 时间: 1.08s
+[GPU:7] 样本:398/454 | ID:DSC_6541.JPG
+ CFG=1: abs_rel:0.0279 | rmse:0.7751 | a1:0.9842
+ 时间: 1.06s
+[GPU:3] 样本:171/454 | ID:DSC_0442.JPG
+ CFG=1: abs_rel:0.0090 | rmse:0.0440 | a1:1.0000
+ 时间: 1.06s
+[GPU:4] 样本:229/454 | ID:DSC_0618.JPG
+ CFG=1: abs_rel:0.0317 | rmse:0.0576 | a1:0.9988
+ 时间: 1.07s
+[GPU:5] 样本:285/454 | ID:DSC_0690.JPG
+ CFG=1: abs_rel:0.0361 | rmse:0.5139 | a1:0.9986
+ 时间: 1.06s
+[GPU:1] 样本:061/454 | ID:DSC_0298.JPG
+ CFG=1: abs_rel:0.0312 | rmse:0.1861 | a1:0.9990
+ 时间: 1.07s
+[GPU:2] 样本:119/454 | ID:DSC_0389.JPG
+ CFG=1: abs_rel:0.0517 | rmse:0.9473 | a1:0.9770
+ 时间: 1.09s
+[GPU:6] 样本:341/454 | ID:DSC_0715.JPG
+ CFG=1: abs_rel:0.0686 | rmse:1.6566 | a1:0.9938
+ 时间: 1.07s
+[GPU:7] 样本:399/454 | ID:DSC_9276.JPG
+ CFG=1: abs_rel:0.0393 | rmse:0.6179 | a1:0.9828
+ 时间: 1.07s
+[GPU:0] 样本:005/454 | ID:DSC_0229.JPG
+ CFG=1: abs_rel:0.0527 | rmse:0.1190 | a1:0.9997
+ 时间: 1.07s
+[GPU:3] 样本:172/454 | ID:DSC_0484.JPG
+ CFG=1: abs_rel:0.0427 | rmse:0.2303 | a1:0.9998
+ 时间: 0.94s
+[GPU:4] 样本:230/454 | ID:DSC_0569.JPG
+ CFG=1: abs_rel:0.0891 | rmse:0.4799 | a1:0.9499
+ 时间: 0.99s
+[GPU:5] 样本:286/454 | ID:DSC_0640.JPG
+ CFG=1: abs_rel:0.0336 | rmse:0.1206 | a1:0.9931
+ 时间: 1.11s
+[GPU:1] 样本:062/454 | ID:DSC_0332.JPG
+ CFG=1: abs_rel:0.0395 | rmse:0.6804 | a1:0.9989
+ 时间: 1.07s
+[GPU:2] 样本:120/454 | ID:DSC_0360.JPG
+ CFG=1: abs_rel:0.0395 | rmse:0.7538 | a1:0.9947
+ 时间: 1.06s
+[GPU:6] 样本:342/454 | ID:DSC_6497.JPG
+ CFG=1: abs_rel:0.0157 | rmse:0.0924 | a1:0.9995
+ 时间: 1.07s
+[GPU:7] 样本:400/454 | ID:DSC_9297.JPG
+ CFG=1: abs_rel:0.0325 | rmse:0.1190 | a1:0.9993
+ 时间: 1.09s
+[GPU:0] 样本:006/454 | ID:DSC_0284.JPG
+ CFG=1: abs_rel:0.0374 | rmse:0.7863 | a1:0.9953
+ 时间: 1.08s
+[GPU:4] 样本:231/454 | ID:DSC_0626.JPG
+ CFG=1: abs_rel:0.0118 | rmse:0.0220 | a1:1.0000
+ 时间: 1.07s
+[GPU:3] 样本:173/454 | ID:DSC_0465.JPG
+ CFG=1: abs_rel:0.0378 | rmse:0.1698 | a1:1.0000
+ 时间: 1.04s
+[GPU:1] 样本:063/454 | ID:DSC_0303.JPG
+ CFG=1: abs_rel:0.0338 | rmse:0.5443 | a1:0.9998
+ 时间: 1.07s
+[GPU:5] 样本:287/454 | ID:DSC_0668.JPG
+ CFG=1: abs_rel:0.0276 | rmse:0.2423 | a1:0.9990
+ 时间: 1.06s
+[GPU:6] 样本:343/454 | ID:DSC_0693.JPG
+ CFG=1: abs_rel:0.0299 | rmse:0.8802 | a1:0.9919
+ 时间: 1.05s
+[GPU:2] 样本:121/454 | ID:DSC_0427.JPG
+ CFG=1: abs_rel:0.0419 | rmse:0.1926 | a1:0.9982
+ 时间: 1.06s
+[GPU:7] 样本:401/454 | ID:DSC_9267.JPG
+ CFG=1: abs_rel:0.0198 | rmse:0.4571 | a1:0.9979
+ 时间: 1.06s
+[GPU:0] 样本:007/454 | ID:DSC_0243.JPG
+ CFG=1: abs_rel:0.0270 | rmse:0.0868 | a1:0.9984
+ 时间: 1.03s
+[GPU:4] 样本:232/454 | ID:DSC_0578.JPG
+ CFG=1: abs_rel:0.0660 | rmse:0.5535 | a1:0.9765
+ 时间: 1.08s
+[GPU:1] 样本:064/454 | ID:DSC_0324.JPG
+ CFG=1: abs_rel:0.0245 | rmse:0.4824 | a1:0.9998
+ 时间: 1.08s
+[GPU:3] 样本:174/454 | ID:DSC_0451.JPG
+ CFG=1: abs_rel:0.0257 | rmse:1.4905 | a1:0.9923
+ 时间: 1.05s
+[GPU:6] 样本:344/454 | ID:DSC_6493.JPG
+ CFG=1: abs_rel:0.0236 | rmse:0.0842 | a1:0.9996
+ 时间: 1.05s
+[GPU:5] 样本:288/454 | ID:DSC_0678.JPG
+ CFG=1: abs_rel:0.0271 | rmse:0.2599 | a1:0.9998
+ 时间: 1.09s
+[GPU:2] 样本:122/454 | ID:DSC_0364.JPG
+ CFG=1: abs_rel:0.0343 | rmse:0.6719 | a1:0.9892
+ 时间: 1.14s
+[GPU:7] 样本:402/454 | ID:DSC_9296.JPG
+ CFG=1: abs_rel:0.0241 | rmse:0.1382 | a1:0.9995
+ 时间: 1.12s
+[GPU:4] 样本:233/454 | ID:DSC_0599.JPG
+ CFG=1: abs_rel:0.0501 | rmse:0.5273 | a1:0.9790
+ 时间: 1.04s
+[GPU:0] 样本:008/454 | ID:DSC_0220.JPG
+ CFG=1: abs_rel:0.0300 | rmse:0.0809 | a1:0.9995
+ 时间: 1.06s
+[GPU:1] 样本:065/454 | ID:DSC_0341.JPG
+ CFG=1: abs_rel:0.0264 | rmse:0.6364 | a1:0.9962
+ 时间: 1.05s
+[GPU:3] 样本:175/454 | ID:DSC_0447.JPG
+ CFG=1: abs_rel:0.0150 | rmse:0.3378 | a1:0.9984
+ 时间: 1.04s
+[GPU:5] 样本:289/454 | ID:DSC_0636.JPG
+ CFG=1: abs_rel:0.0137 | rmse:0.0400 | a1:1.0000
+ 时间: 1.07s
+[GPU:2] 样本:123/454 | ID:DSC_0402.JPG
+ CFG=1: abs_rel:0.0616 | rmse:1.0368 | a1:0.9819
+ 时间: 1.08s
+[GPU:6] 样本:345/454 | ID:DSC_6509.JPG
+ CFG=1: abs_rel:0.0380 | rmse:0.1517 | a1:0.9996
+ 时间: 1.05s
+[GPU:4] 样本:234/454 | ID:DSC_0595.JPG
+ CFG=1: abs_rel:0.0704 | rmse:1.0380 | a1:0.9777
+ 时间: 1.08s
+[GPU:7] 样本:403/454 | ID:DSC_9258.JPG
+ CFG=1: abs_rel:0.0201 | rmse:0.1828 | a1:0.9985
+ 时间: 1.06s
+[GPU:1] 样本:066/454 | ID:DSC_0293.JPG
+ CFG=1: abs_rel:0.0164 | rmse:0.1162 | a1:0.9990
+ 时间: 1.07s
+[GPU:0] 样本:009/454 | ID:DSC_0278.JPG
+ CFG=1: abs_rel:0.0314 | rmse:1.1386 | a1:0.9987
+ 时间: 1.08s
+[GPU:5] 样本:290/454 | ID:DSC_0683.JPG
+ CFG=1: abs_rel:0.0334 | rmse:0.3600 | a1:0.9991
+ 时间: 1.00s
+[GPU:3] 样本:176/454 | ID:DSC_0433.JPG
+ CFG=1: abs_rel:0.0263 | rmse:0.1104 | a1:1.0000
+ 时间: 1.05s
+[GPU:6] 样本:346/454 | ID:DSC_0700.JPG
+ CFG=1: abs_rel:0.0661 | rmse:2.0336 | a1:0.9821
+ 时间: 1.07s
+[GPU:4] 样本:235/454 | ID:DSC_0567.JPG
+ CFG=1: abs_rel:0.0519 | rmse:0.4385 | a1:0.9811
+ 时间: 1.06s
+[GPU:2] 样本:124/454 | ID:DSC_0431.JPG
+ CFG=1: abs_rel:0.0241 | rmse:0.1014 | a1:1.0000
+ 时间: 1.08s
+[GPU:7] 样本:404/454 | ID:DSC_9284.JPG
+ CFG=1: abs_rel:0.0261 | rmse:0.4681 | a1:0.9977
+ 时间: 1.01s
+[GPU:0] 样本:010/454 | ID:DSC_0285.JPG
+ CFG=1: abs_rel:0.0471 | rmse:0.8400 | a1:0.9950
+ 时间: 1.06s
+[GPU:1] 样本:067/454 | ID:DSC_0339.JPG
+ CFG=1: abs_rel:0.0293 | rmse:0.6138 | a1:0.9957
+ 时间: 1.07s
+[GPU:5] 样本:291/454 | ID:DSC_0646.JPG
+ CFG=1: abs_rel:0.0299 | rmse:0.1269 | a1:0.9995
+ 时间: 1.08s
+[GPU:6] 样本:347/454 | ID:DSC_6510.JPG
+ CFG=1: abs_rel:0.0309 | rmse:0.0982 | a1:0.9997
+ 时间: 1.07s
+[GPU:4] 样本:236/454 | ID:DSC_0622.JPG
+ CFG=1: abs_rel:0.0260 | rmse:0.0512 | a1:1.0000
+ 时间: 1.06s
+[GPU:2] 样本:125/454 | ID:DSC_0421.JPG
+ CFG=1: abs_rel:0.0567 | rmse:2.2512 | a1:0.9865
+ 时间: 1.06s
+[GPU:3] 样本:177/454 | ID:DSC_0464.JPG
+ CFG=1: abs_rel:0.0226 | rmse:0.1096 | a1:1.0000
+ 时间: 1.09s
+[GPU:7] 样本:405/454 | ID:DSC_6520.JPG
+ CFG=1: abs_rel:0.0360 | rmse:0.1507 | a1:0.9989
+ 时间: 1.06s
+[GPU:0] 样本:011/454 | ID:DSC_0289.JPG
+ CFG=1: abs_rel:0.0233 | rmse:0.1701 | a1:0.9989
+ 时间: 1.07s
+[GPU:5] 样本:292/454 | ID:DSC_0643.JPG
+ CFG=1: abs_rel:0.0429 | rmse:0.1182 | a1:0.9999
+ 时间: 1.07s
+[GPU:1] 样本:068/454 | ID:DSC_0318.JPG
+ CFG=1: abs_rel:0.0190 | rmse:0.2287 | a1:0.9997
+ 时间: 1.06s
+[GPU:6] 样本:348/454 | ID:DSC_6499.JPG
+ CFG=1: abs_rel:0.0214 | rmse:0.1100 | a1:0.9997
+ 时间: 1.05s
+[GPU:4] 样本:237/454 | ID:DSC_0623.JPG
+ CFG=1: abs_rel:0.0251 | rmse:0.0495 | a1:1.0000
+ 时间: 1.05s
+[GPU:2] 样本:126/454 | ID:DSC_0398.JPG
+ CFG=1: abs_rel:0.0480 | rmse:0.9587 | a1:0.9801
+ 时间: 1.10s
+[GPU:3] 样本:178/454 | ID:DSC_0449.JPG
+ CFG=1: abs_rel:0.0264 | rmse:0.7301 | a1:0.9963
+ 时间: 1.10s
+[GPU:7] 样本:406/454 | ID:DSC_9279.JPG
+ CFG=1: abs_rel:0.0223 | rmse:0.1223 | a1:1.0000
+ 时间: 1.05s
+[GPU:5] 样本:293/454 | ID:DSC_0649.JPG
+ CFG=1: abs_rel:0.0436 | rmse:0.3429 | a1:0.9921
+ 时间: 1.07s
+[GPU:0] 样本:012/454 | ID:DSC_0236.JPG
+ CFG=1: abs_rel:0.0185 | rmse:0.0678 | a1:0.9984
+ 时间: 1.07s
+[GPU:1] 样本:069/454 | ID:DSC_0340.JPG
+ CFG=1: abs_rel:0.0231 | rmse:0.5524 | a1:0.9957
+ 时间: 1.07s
+[GPU:4] 样本:238/454 | ID:DSC_0576.JPG
+ CFG=1: abs_rel:0.0626 | rmse:0.6813 | a1:0.9826
+ 时间: 1.06s
+[GPU:2] 样本:127/454 | ID:DSC_0365.JPG
+ CFG=1: abs_rel:0.0637 | rmse:1.8149 | a1:0.9703
+ 时间: 1.13s
+[GPU:6] 样本:349/454 | ID:DSC_0698.JPG
+ CFG=1: abs_rel:0.0565 | rmse:1.6441 | a1:0.9815
+ 时间: 1.07s
+[GPU:7] 样本:407/454 | ID:DSC_9302.JPG
+ CFG=1: abs_rel:0.0226 | rmse:0.2922 | a1:0.9988
+ 时间: 1.05s
+[GPU:3] 样本:179/454 | ID:DSC_0452.JPG
+ CFG=1: abs_rel:0.0206 | rmse:0.2214 | a1:0.9996
+ 时间: 1.04s
+[GPU:5] 样本:294/454 | ID:DSC_0682.JPG
+ CFG=1: abs_rel:0.0348 | rmse:0.3412 | a1:0.9992
+ 时间: 1.08s
+[GPU:4] 样本:239/454 | ID:DSC_0568.JPG
+ CFG=1: abs_rel:0.0810 | rmse:0.4769 | a1:0.9609
+ 时间: 1.06s
+[GPU:2] 样本:128/454 | ID:DSC_0361.JPG
+ CFG=1: abs_rel:0.0191 | rmse:0.3466 | a1:0.9999
+ 时间: 1.08s
+[GPU:1] 样本:070/454 | ID:DSC_0346.JPG
+ CFG=1: abs_rel:0.0297 | rmse:0.5923 | a1:0.9971
+ 时间: 1.06s
+[GPU:0] 样本:013/454 | ID:DSC_0222.JPG
+ CFG=1: abs_rel:0.0132 | rmse:0.0423 | a1:0.9998
+ 时间: 1.10s
+[GPU:6] 样本:350/454 | ID:DSC_6516.JPG
+ CFG=1: abs_rel:0.0399 | rmse:0.1444 | a1:0.9992
+ 时间: 1.07s
+[GPU:3] 样本:180/454 | ID:DSC_0476.JPG
+ CFG=1: abs_rel:0.0179 | rmse:0.4304 | a1:0.9965
+ 时间: 1.07s
+[GPU:7] 样本:408/454 | ID:DSC_9274.JPG
+ CFG=1: abs_rel:0.0088 | rmse:0.0559 | a1:1.0000
+ 时间: 1.10s
+[GPU:4] 样本:240/454 | ID:DSC_0571.JPG
+ CFG=1: abs_rel:0.1131 | rmse:0.5744 | a1:0.9286
+ 时间: 1.06s
+[GPU:5] 样本:295/454 | ID:DSC_0647.JPG
+ CFG=1: abs_rel:0.0220 | rmse:0.0916 | a1:0.9998
+ 时间: 1.07s
+[GPU:6] 样本:351/454 | ID:DSC_0701.JPG
+ CFG=1: abs_rel:0.0477 | rmse:1.5600 | a1:0.9920
+ 时间: 1.06s
+[GPU:1] 样本:071/454 | ID:DSC_0306.JPG
+ CFG=1: abs_rel:0.0170 | rmse:0.2558 | a1:0.9998
+ 时间: 1.08s
+[GPU:2] 样本:129/454 | ID:DSC_0404.JPG
+ CFG=1: abs_rel:0.1116 | rmse:1.5929 | a1:0.9362
+ 时间: 1.08s
+[GPU:0] 样本:014/454 | ID:DSC_0252.JPG
+ CFG=1: abs_rel:0.0364 | rmse:0.0807 | a1:0.9994
+ 时间: 1.08s
+[GPU:4] 样本:241/454 | ID:DSC_0584.JPG
+ CFG=1: abs_rel:0.0786 | rmse:0.7184 | a1:0.9471
+ 时间: 1.05s
+[GPU:7] 样本:409/454 | ID:DSC_9263.JPG
+ CFG=1: abs_rel:0.0283 | rmse:0.5611 | a1:0.9890
+ 时间: 1.07s
+[GPU:3] 样本:181/454 | ID:DSC_0455.JPG
+ CFG=1: abs_rel:0.0220 | rmse:0.2556 | a1:0.9994
+ 时间: 1.05s
+[GPU:5] 样本:296/454 | ID:DSC_0676.JPG
+ CFG=1: abs_rel:0.0182 | rmse:0.2472 | a1:0.9973
+ 时间: 1.08s
+[GPU:6] 样本:352/454 | ID:DSC_6512.JPG
+ CFG=1: abs_rel:0.0305 | rmse:0.0859 | a1:0.9996
+ 时间: 1.06s
+[GPU:0] 样本:015/454 | ID:DSC_0248.JPG
+ CFG=1: abs_rel:0.0259 | rmse:0.0870 | a1:0.9991
+ 时间: 1.08s
+[GPU:1] 样本:072/454 | ID:DSC_0333.JPG
+ CFG=1: abs_rel:0.0345 | rmse:0.6351 | a1:0.9993
+ 时间: 1.06s
+[GPU:2] 样本:130/454 | ID:DSC_0349.JPG
+ CFG=1: abs_rel:0.0442 | rmse:1.0633 | a1:0.9917
+ 时间: 1.09s
+[GPU:4] 样本:242/454 | ID:DSC_0585.JPG
+ CFG=1: abs_rel:0.0684 | rmse:0.8505 | a1:0.9770
+ 时间: 1.06s
+[GPU:7] 样本:410/454 | ID:DSC_9290.JPG
+ CFG=1: abs_rel:0.7042 | rmse:4.8550 | a1:0.1599
+ 时间: 1.06s
+[GPU:5] 样本:297/454 | ID:DSC_0637.JPG
+ CFG=1: abs_rel:0.0229 | rmse:0.0664 | a1:0.9998
+ 时间: 1.07s
+[GPU:6] 样本:353/454 | ID:DSC_6511.JPG
+ CFG=1: abs_rel:0.0295 | rmse:0.0856 | a1:0.9998
+ 时间: 1.04s
+[GPU:2] 样本:131/454 | ID:DSC_0359.JPG
+ CFG=1: abs_rel:0.0686 | rmse:1.2656 | a1:0.9918
+ 时间: 1.08s
+[GPU:3] 样本:182/454 | ID:DSC_0441.JPG
+ CFG=1: abs_rel:0.0114 | rmse:0.0568 | a1:1.0000
+ 时间: 1.05s
+[GPU:0] 样本:016/454 | ID:DSC_0269.JPG
+ CFG=1: abs_rel:0.0204 | rmse:0.1568 | a1:0.9993
+ 时间: 1.06s
+[GPU:1] 样本:073/454 | ID:DSC_0311.JPG
+ CFG=1: abs_rel:0.0236 | rmse:0.4260 | a1:0.9994
+ 时间: 1.06s
+[GPU:7] 样本:411/454 | ID:DSC_6535.JPG
+ CFG=1: abs_rel:0.0397 | rmse:0.4867 | a1:0.9976
+ 时间: 1.06s
+[GPU:5] 样本:298/454 | ID:DSC_0677.JPG
+ CFG=1: abs_rel:0.0308 | rmse:0.3459 | a1:0.9984
+ 时间: 1.06s
+[GPU:4] 样本:243/454 | ID:DSC_0620.JPG
+ CFG=1: abs_rel:0.0311 | rmse:0.0556 | a1:0.9998
+ 时间: 1.06s
+[GPU:6] 样本:354/454 | ID:DSC_6494.JPG
+ CFG=1: abs_rel:0.0246 | rmse:0.0846 | a1:0.9975
+ 时间: 1.05s
+[GPU:2] 样本:132/454 | ID:DSC_0406.JPG
+ CFG=1: abs_rel:0.0787 | rmse:1.2296 | a1:0.9791
+ 时间: 1.10s
+[GPU:3] 样本:183/454 | ID:DSC_0480.JPG
+ CFG=1: abs_rel:0.0225 | rmse:0.6617 | a1:0.9946
+ 时间: 1.08s
+[GPU:1] 样本:074/454 | ID:DSC_0296.JPG
+ CFG=1: abs_rel:0.0146 | rmse:0.1035 | a1:0.9997
+ 时间: 1.14s
+[GPU:0] 样本:017/454 | ID:DSC_0279.JPG
+ CFG=1: abs_rel:0.0486 | rmse:1.5071 | a1:0.9971
+ 时间: 1.08s
+[GPU:5] 样本:299/454 | ID:DSC_0691.JPG
+ CFG=1: abs_rel:0.0549 | rmse:0.7419 | a1:0.9994
+ 时间: 1.09s
+[GPU:4] 样本:244/454 | ID:DSC_0617.JPG
+ CFG=1: abs_rel:0.0335 | rmse:0.0587 | a1:0.9993
+ 时间: 1.06s
+[GPU:6] 样本:355/454 | ID:DSC_0711.JPG
+ CFG=1: abs_rel:0.0537 | rmse:0.8782 | a1:0.9819
+ 时间: 1.05s
+[GPU:7] 样本:412/454 | ID:DSC_9273.JPG
+ CFG=1: abs_rel:0.0221 | rmse:0.1779 | a1:0.9995
+ 时间: 1.06s
+[GPU:1] 样本:075/454 | ID:DSC_0302.JPG
+ CFG=1: abs_rel:0.0250 | rmse:0.4334 | a1:0.9996
+ 时间: 1.07s
+[GPU:2] 样本:133/454 | ID:DSC_0350.JPG
+ CFG=1: abs_rel:0.0350 | rmse:0.9132 | a1:0.9919
+ 时间: 1.11s
+[GPU:3] 样本:184/454 | ID:DSC_0438.JPG
+ CFG=1: abs_rel:0.0439 | rmse:0.2011 | a1:0.9963
+ 时间: 1.03s
+[GPU:0] 样本:018/454 | ID:DSC_0277.JPG
+ CFG=1: abs_rel:0.0224 | rmse:0.4107 | a1:0.9996
+ 时间: 1.07s
+[GPU:4] 样本:245/454 | ID:DSC_0606.JPG
+ CFG=1: abs_rel:0.0778 | rmse:0.8213 | a1:0.9697
+ 时间: 1.07s
+[GPU:6] 样本:356/454 | ID:DSC_0706.JPG
+ CFG=1: abs_rel:0.0521 | rmse:0.3384 | a1:0.9999
+ 时间: 1.05s
+[GPU:5] 样本:300/454 | ID:DSC_0656.JPG
+ CFG=1: abs_rel:0.0415 | rmse:0.1761 | a1:0.9776
+ 时间: 1.08s
+[GPU:7] 样本:413/454 | ID:DSC_6558.JPG
+ CFG=1: abs_rel:0.0210 | rmse:0.3137 | a1:0.9984
+ 时间: 1.05s
+[GPU:1] 样本:076/454 | ID:DSC_0328.JPG
+ CFG=1: abs_rel:0.0326 | rmse:0.5015 | a1:0.9986
+ 时间: 1.07s
+[GPU:2] 样本:134/454 | ID:DSC_0395.JPG
+ CFG=1: abs_rel:0.0288 | rmse:1.7256 | a1:0.9852
+ 时间: 1.09s
+[GPU:3] 样本:185/454 | ID:DSC_0478.JPG
+ CFG=1: abs_rel:0.0309 | rmse:0.6131 | a1:0.9935
+ 时间: 1.08s
+[GPU:4] 样本:246/454 | ID:DSC_0604.JPG
+ CFG=1: abs_rel:0.0811 | rmse:0.5267 | a1:0.9543
+ 时间: 1.04s
+[GPU:0] 样本:019/454 | ID:DSC_0264.JPG
+ CFG=1: abs_rel:0.0231 | rmse:0.1433 | a1:0.9996
+ 时间: 1.06s
+[GPU:5] 样本:301/454 | ID:DSC_0685.JPG
+ CFG=1: abs_rel:0.0321 | rmse:0.4290 | a1:0.9960
+ 时间: 1.08s
+[GPU:6] 样本:357/454 | ID:DSC_0716.JPG
+ CFG=1: abs_rel:0.0417 | rmse:1.4240 | a1:0.9958
+ 时间: 1.07s
+[GPU:7] 样本:414/454 | ID:DSC_9282.JPG
+ CFG=1: abs_rel:0.0105 | rmse:0.0659 | a1:1.0000
+ 时间: 1.05s
+[GPU:1] 样本:077/454 | ID:DSC_0320.JPG
+ CFG=1: abs_rel:0.0184 | rmse:0.4294 | a1:0.9979
+ 时间: 1.05s
+[GPU:2] 样本:135/454 | ID:DSC_0391.JPG
+ CFG=1: abs_rel:0.0196 | rmse:0.4944 | a1:0.9971
+ 时间: 1.06s
+[GPU:4] 样本:247/454 | ID:DSC_0489.JPG
+ CFG=1: abs_rel:0.0252 | rmse:0.2471 | a1:0.9992
+ 时间: 1.06s
+[GPU:3] 样本:186/454 | ID:DSC_0487.JPG
+ CFG=1: abs_rel:0.0237 | rmse:0.3361 | a1:0.9994
+ 时间: 1.07s
+[GPU:5] 样本:302/454 | ID:DSC_0641.JPG
+ CFG=1: abs_rel:0.0300 | rmse:0.1399 | a1:0.9643
+ 时间: 1.09s
+[GPU:6] 样本:358/454 | ID:DSC_0709.JPG
+ CFG=1: abs_rel:0.0217 | rmse:0.1570 | a1:0.9998
+ 时间: 1.06s
+[GPU:0] 样本:020/454 | ID:DSC_0267.JPG
+ CFG=1: abs_rel:0.0118 | rmse:0.0888 | a1:0.9997
+ 时间: 1.03s
+[GPU:7] 样本:415/454 | ID:DSC_6557.JPG
+ CFG=1: abs_rel:0.0212 | rmse:0.2961 | a1:0.9998
+ 时间: 1.05s
+[GPU:1] 样本:078/454 | ID:DSC_0299.JPG
+ CFG=1: abs_rel:0.0176 | rmse:0.1704 | a1:0.9990
+ 时间: 1.08s
+[GPU:2] 样本:136/454 | ID:DSC_0392.JPG
+ CFG=1: abs_rel:0.0191 | rmse:0.2421 | a1:0.9993
+ 时间: 1.10s
+[GPU:4] 样本:248/454 | ID:DSC_0577.JPG
+ CFG=1: abs_rel:0.0758 | rmse:0.9382 | a1:0.9837
+ 时间: 1.06s
+[GPU:5] 样本:303/454 | ID:DSC_0688.JPG
+ CFG=1: abs_rel:0.0503 | rmse:0.6811 | a1:0.9990
+ 时间: 1.08s
+[GPU:7] 样本:416/454 | ID:DSC_6540.JPG
+ CFG=1: abs_rel:0.0492 | rmse:1.2120 | a1:0.9815
+ 时间: 1.06s
+[GPU:6] 样本:359/454 | ID:DSC_6508.JPG
+ CFG=1: abs_rel:0.0227 | rmse:0.1160 | a1:0.9995
+ 时间: 1.07s
+[GPU:3] 样本:187/454 | ID:DSC_0471.JPG
+ CFG=1: abs_rel:0.0155 | rmse:0.0644 | a1:1.0000
+ 时间: 1.05s
+[GPU:0] 样本:021/454 | ID:DSC_0274.JPG
+ CFG=1: abs_rel:0.0217 | rmse:0.2356 | a1:0.9997
+ 时间: 1.08s
+[GPU:1] 样本:079/454 | ID:DSC_0326.JPG
+ CFG=1: abs_rel:0.0806 | rmse:1.3230 | a1:0.9492
+ 时间: 1.06s
+[GPU:2] 样本:137/454 | ID:DSC_0396.JPG
+ CFG=1: abs_rel:0.0562 | rmse:1.5430 | a1:0.9722
+ 时间: 1.11s
+[GPU:4] 样本:249/454 | ID:DSC_0593.JPG
+ CFG=1: abs_rel:0.0464 | rmse:0.3716 | a1:0.9897
+ 时间: 1.01s
+[GPU:5] 样本:304/454 | ID:DSC_0639.JPG
+ CFG=1: abs_rel:0.0308 | rmse:0.1290 | a1:0.9976
+ 时间: 0.73s
+[GPU:7] 样本:417/454 | ID:DSC_9264.JPG
+ CFG=1: abs_rel:0.0374 | rmse:0.7512 | a1:0.9861
+ 时间: 1.08s
+[GPU:6] 样本:360/454 | ID:DSC_6513.JPG
+ CFG=1: abs_rel:0.0390 | rmse:0.1050 | a1:0.9993
+ 时间: 1.06s
+[GPU:1] 样本:080/454 | ID:DSC_0319.JPG
+ CFG=1: abs_rel:0.0228 | rmse:0.3844 | a1:0.9990
+ 时间: 1.07s
+[GPU:3] 样本:188/454 | ID:DSC_0472.JPG
+ CFG=1: abs_rel:0.0097 | rmse:0.0395 | a1:1.0000
+ 时间: 1.06s
+[GPU:0] 样本:022/454 | ID:DSC_0235.JPG
+ CFG=1: abs_rel:0.0124 | rmse:0.0409 | a1:0.9999
+ 时间: 1.08s
+[GPU:2] 样本:138/454 | ID:DSC_0355.JPG
+ CFG=1: abs_rel:0.0238 | rmse:0.5167 | a1:0.9986
+ 时间: 1.07s
+[GPU:4] 样本:250/454 | ID:DSC_0594.JPG
+ CFG=1: abs_rel:0.0341 | rmse:0.4110 | a1:0.9916
+ 时间: 1.07s
+[GPU:5] 样本:305/454 | ID:DSC_0664.JPG
+ CFG=1: abs_rel:0.0297 | rmse:0.1341 | a1:0.9965
+ 时间: 1.08s
+[GPU:7] 样本:418/454 | ID:DSC_9268.JPG
+ CFG=1: abs_rel:0.0256 | rmse:0.4769 | a1:0.9957
+ 时间: 1.05s
+[GPU:6] 样本:361/454 | ID:DSC_0713.JPG
+ CFG=1: abs_rel:0.0514 | rmse:0.7309 | a1:0.9971
+ 时间: 1.06s
+[GPU:1] 样本:081/454 | ID:DSC_0308.JPG
+ CFG=1: abs_rel:0.0134 | rmse:0.1283 | a1:1.0000
+ 时间: 1.09s
+[GPU:4] 样本:251/454 | ID:DSC_0630.JPG
+ CFG=1: abs_rel:0.0116 | rmse:0.0213 | a1:1.0000
+ 时间: 1.06s
+[GPU:2] 样本:139/454 | ID:DSC_0397.JPG
+ CFG=1: abs_rel:0.0516 | rmse:1.1639 | a1:0.9702
+ 时间: 1.10s
+[GPU:0] 样本:023/454 | ID:DSC_0242.JPG
+ CFG=1: abs_rel:0.0363 | rmse:0.0911 | a1:0.9988
+ 时间: 1.09s
+[GPU:5] 样本:306/454 | ID:DSC_0654.JPG
+ CFG=1: abs_rel:0.0380 | rmse:0.1857 | a1:0.9733
+ 时间: 1.08s
+[GPU:3] 样本:189/454 | ID:DSC_0432.JPG
+ CFG=1: abs_rel:0.0240 | rmse:0.1081 | a1:1.0000
+ 时间: 1.07s
+[GPU:7] 样本:419/454 | ID:DSC_6539.JPG
+ CFG=1: abs_rel:0.0429 | rmse:0.9552 | a1:0.9910
+ 时间: 1.07s
+[GPU:6] 样本:362/454 | ID:DSC_6502.JPG
+ CFG=1: abs_rel:0.0236 | rmse:0.1502 | a1:0.9943
+ 时间: 1.05s
+[GPU:4] 样本:252/454 | ID:DSC_0602.JPG
+ CFG=1: abs_rel:0.0789 | rmse:0.6547 | a1:0.9601
+ 时间: 1.03s
+[GPU:2] 样本:140/454 | ID:DSC_0366.JPG
+ CFG=1: abs_rel:0.0679 | rmse:1.3082 | a1:0.9620
+ 时间: 1.11s
+[GPU:0] 样本:024/454 | ID:DSC_0261.JPG
+ CFG=1: abs_rel:0.0196 | rmse:0.6789 | a1:0.9963
+ 时间: 1.07s
+[GPU:1] 样本:082/454 | ID:DSC_0313.JPG
+ CFG=1: abs_rel:0.0213 | rmse:0.4052 | a1:0.9967
+ 时间: 0.97s
+[GPU:7] 样本:420/454 | ID:DSC_9291.JPG
+ CFG=1: abs_rel:0.2542 | rmse:2.8955 | a1:0.8095
+ 时间: 1.06s
+[GPU:3] 样本:190/454 | ID:DSC_0450.JPG
+ CFG=1: abs_rel:0.0219 | rmse:1.0747 | a1:0.9936
+ 时间: 1.04s
+[GPU:5] 样本:307/454 | ID:DSC_0669.JPG
+ CFG=1: abs_rel:0.0295 | rmse:0.2407 | a1:0.9990
+ 时间: 1.06s
+[GPU:6] 样本:363/454 | ID:DSC_0705.JPG
+ CFG=1: abs_rel:0.0192 | rmse:0.1582 | a1:0.9995
+ 时间: 1.07s
+[GPU:4] 样本:253/454 | ID:DSC_0590.JPG
+ CFG=1: abs_rel:0.1172 | rmse:0.6014 | a1:0.9426
+ 时间: 1.06s
+[GPU:2] 样本:141/454 | ID:DSC_0394.JPG
+ CFG=1: abs_rel:0.0323 | rmse:1.5935 | a1:0.9918
+ 时间: 1.08s
+[GPU:0] 样本:025/454 | ID:DSC_0287.JPG
+ CFG=1: abs_rel:0.0160 | rmse:0.0980 | a1:0.9996
+ 时间: 1.07s
+[GPU:7] 样本:421/454 | ID:DSC_9289.JPG
+ CFG=1: abs_rel:0.3579 | rmse:3.3208 | a1:0.6918
+ 时间: 1.04s
+[GPU:1] 样本:083/454 | ID:DSC_0314.JPG
+ CFG=1: abs_rel:0.0248 | rmse:0.3986 | a1:0.9991
+ 时间: 1.06s
+[GPU:5] 样本:308/454 | ID:DSC_0653.JPG
+ CFG=1: abs_rel:0.0455 | rmse:0.4196 | a1:0.9840
+ 时间: 1.07s
+[GPU:3] 样本:191/454 | ID:DSC_0445.JPG
+ CFG=1: abs_rel:0.0144 | rmse:0.0579 | a1:1.0000
+ 时间: 1.07s
+[GPU:6] 样本:364/454 | ID:DSC_6492.JPG
+ CFG=1: abs_rel:0.0200 | rmse:0.0922 | a1:0.9993
+ 时间: 1.09s
+[GPU:4] 样本:254/454 | ID:DSC_0627.JPG
+ CFG=1: abs_rel:0.0109 | rmse:0.0210 | a1:1.0000
+ 时间: 1.07s
+[GPU:0] 样本:026/454 | ID:DSC_0260.JPG
+ CFG=1: abs_rel:0.0936 | rmse:3.1940 | a1:0.8791
+ 时间: 1.10s
+[GPU:2] 样本:142/454 | ID:DSC_0411.JPG
+ CFG=1: abs_rel:0.0265 | rmse:0.5715 | a1:0.9990
+ 时间: 1.02s
+[GPU:7] 样本:422/454 | ID:DSC_9265.JPG
+ CFG=1: abs_rel:0.0322 | rmse:0.6980 | a1:0.9882
+ 时间: 1.05s
+[GPU:1] 样本:084/454 | ID:DSC_0344.JPG
+ CFG=1: abs_rel:0.0230 | rmse:0.5574 | a1:0.9972
+ 时间: 1.07s
+[GPU:5] 样本:309/454 | ID:DSC_0681.JPG
+ CFG=1: abs_rel:0.0220 | rmse:0.2790 | a1:0.9986
+ 时间: 1.10s
+[GPU:4] 样本:255/454 | ID:DSC_0574.JPG
+ CFG=1: abs_rel:0.0706 | rmse:0.5955 | a1:0.9850
+ 时间: 1.08s
+[GPU:6] 样本:365/454 | ID:DSC_6495.JPG
+ CFG=1: abs_rel:0.0175 | rmse:0.0885 | a1:0.9997
+ 时间: 1.06s
+[GPU:7] 样本:423/454 | ID:DSC_9292.JPG
+ CFG=1: abs_rel:0.2791 | rmse:3.1786 | a1:0.4996
+ 时间: 1.07s
+[GPU:0] 样本:027/454 | ID:DSC_0249.JPG
+ CFG=1: abs_rel:0.0249 | rmse:0.0542 | a1:0.9998
+ 时间: 1.07s
+[GPU:3] 样本:192/454 | ID:DSC_0443.JPG
+ CFG=1: abs_rel:0.0115 | rmse:0.0584 | a1:1.0000
+ 时间: 1.06s
+[GPU:2] 样本:143/454 | ID:DSC_0414.JPG
+ CFG=1: abs_rel:0.0325 | rmse:1.8232 | a1:0.9886
+ 时间: 1.12s
+[GPU:1] 样本:085/454 | ID:DSC_0322.JPG
+ CFG=1: abs_rel:0.0157 | rmse:0.4923 | a1:0.9972
+ 时间: 1.05s
+[GPU:5] 样本:310/454 | ID:DSC_0648.JPG
+ CFG=1: abs_rel:0.0603 | rmse:0.2492 | a1:0.9482
+ 时间: 0.98s
+[GPU:4] 样本:256/454 | ID:DSC_0583.JPG
+ CFG=1: abs_rel:0.1403 | rmse:1.1044 | a1:0.9025
+ 时间: 1.06s
+[GPU:6] 样本:366/454 | ID:DSC_0694.JPG
+ CFG=1: abs_rel:0.0570 | rmse:1.6602 | a1:0.9708
+ 时间: 1.06s
+[GPU:7] 样本:424/454 | ID:DSC_9272.JPG
+ CFG=1: abs_rel:0.0121 | rmse:0.0967 | a1:1.0000
+ 时间: 1.03s
+[GPU:2] 样本:144/454 | ID:DSC_0351.JPG
+ CFG=1: abs_rel:0.0311 | rmse:1.0415 | a1:0.9902
+ 时间: 1.07s
+[GPU:3] 样本:193/454 | ID:DSC_0467.JPG
+ CFG=1: abs_rel:0.0499 | rmse:0.2534 | a1:0.9935
+ 时间: 1.05s
+[GPU:0] 样本:028/454 | ID:DSC_0237.JPG
+ CFG=1: abs_rel:0.0301 | rmse:0.0920 | a1:0.9996
+ 时间: 1.09s
+[GPU:5] 样本:311/454 | ID:DSC_0642.JPG
+ CFG=1: abs_rel:0.0260 | rmse:0.1079 | a1:0.9992
+ 时间: 1.08s
+[GPU:1] 样本:086/454 | ID:DSC_0337.JPG
+ CFG=1: abs_rel:0.0191 | rmse:0.4445 | a1:0.9984
+ 时间: 1.06s
+[GPU:4] 样本:257/454 | ID:DSC_0614.JPG
+ CFG=1: abs_rel:0.0219 | rmse:0.0456 | a1:0.9999
+ 时间: 1.07s
+[GPU:6] 样本:367/454 | ID:DSC_6514.JPG
+ CFG=1: abs_rel:0.0226 | rmse:0.1093 | a1:0.9993
+ 时间: 1.07s
+[GPU:2] 样本:145/454 | ID:DSC_0419.JPG
+ CFG=1: abs_rel:0.0142 | rmse:0.2840 | a1:0.9999
+ 时间: 1.09s
+[GPU:1] 样本:087/454 | ID:DSC_0297.JPG
+ CFG=1: abs_rel:0.0263 | rmse:0.1867 | a1:0.9994
+ 时间: 1.06s
+[GPU:7] 样本:425/454 | ID:DSC_9260.JPG
+ CFG=1: abs_rel:0.0170 | rmse:0.1323 | a1:0.9996
+ 时间: 1.07s
+[GPU:4] 样本:258/454 | ID:DSC_0579.JPG
+ CFG=1: abs_rel:0.0774 | rmse:0.6734 | a1:0.9558
+ 时间: 1.05s
+[GPU:3] 样本:194/454 | ID:DSC_0481.JPG
+ CFG=1: abs_rel:0.0136 | rmse:0.1227 | a1:0.9995
+ 时间: 1.05s
+[GPU:0] 样本:029/454 | ID:DSC_0239.JPG
+ CFG=1: abs_rel:0.0479 | rmse:0.1241 | a1:0.9699
+ 时间: 1.07s
+[GPU:5] 样本:312/454 | ID:DSC_0666.JPG
+ CFG=1: abs_rel:0.0750 | rmse:0.3348 | a1:0.9275
+ 时间: 1.07s
+[GPU:6] 样本:368/454 | ID:DSC_0697.JPG
+ CFG=1: abs_rel:0.0615 | rmse:1.5011 | a1:0.9802
+ 时间: 1.11s
+[GPU:2] 样本:146/454 | ID:DSC_0415.JPG
+ CFG=1: abs_rel:0.0438 | rmse:1.9574 | a1:0.9887
+ 时间: 1.07s
+[GPU:4] 样本:259/454 | ID:DSC_0570.JPG
+ CFG=1: abs_rel:0.0945 | rmse:0.4988 | a1:0.9692
+ 时间: 1.06s
+[GPU:1] 样本:088/454 | ID:DSC_0316.JPG
+ CFG=1: abs_rel:0.0204 | rmse:0.2773 | a1:0.9999
+ 时间: 1.11s
+[GPU:7] 样本:426/454 | ID:DSC_9266.JPG
+ CFG=1: abs_rel:0.0204 | rmse:0.3925 | a1:0.9971
+ 时间: 1.07s
+[GPU:0] 样本:030/454 | ID:DSC_0283.JPG
+ CFG=1: abs_rel:0.0915 | rmse:1.4393 | a1:0.9221
+ 时间: 1.07s
+[GPU:5] 样本:313/454 | ID:DSC_0660.JPG
+ CFG=1: abs_rel:0.0269 | rmse:0.1588 | a1:0.9902
+ 时间: 1.06s
+[GPU:6] 样本:369/454 | ID:DSC_0707.JPG
+ CFG=1: abs_rel:0.0137 | rmse:0.0938 | a1:0.9998
+ 时间: 1.05s
+[GPU:3] 样本:195/454 | ID:DSC_0483.JPG
+ CFG=1: abs_rel:0.0211 | rmse:0.2842 | a1:0.9995
+ 时间: 1.00s
+[GPU:4] 样本:260/454 | ID:DSC_0629.JPG
+ CFG=1: abs_rel:0.0094 | rmse:0.0173 | a1:1.0000
+ 时间: 1.08s
+[GPU:2] 样本:147/454 | ID:DSC_0393.JPG
+ CFG=1: abs_rel:0.0169 | rmse:0.5294 | a1:0.9947
+ 时间: 1.08s
+[GPU:1] 样本:089/454 | ID:DSC_0300.JPG
+ CFG=1: abs_rel:0.0270 | rmse:0.3795 | a1:0.9994
+ 时间: 1.08s
+[GPU:7] 样本:427/454 | ID:DSC_9280.JPG
+ CFG=1: abs_rel:0.0303 | rmse:0.6101 | a1:0.9841
+ 时间: 1.05s
+[GPU:5] 样本:314/454 | ID:DSC_0662.JPG
+ CFG=1: abs_rel:0.0251 | rmse:0.1891 | a1:0.9955
+ 时间: 1.09s
+[GPU:6] 样本:370/454 | ID:DSC_0710.JPG
+ CFG=1: abs_rel:0.0330 | rmse:0.2341 | a1:0.9995
+ 时间: 1.07s
+[GPU:0] 样本:031/454 | ID:DSC_0240.JPG
+ CFG=1: abs_rel:0.0305 | rmse:0.0816 | a1:0.9995
+ 时间: 1.10s
+[GPU:3] 样本:196/454 | ID:DSC_0473.JPG
+ CFG=1: abs_rel:0.0141 | rmse:0.1196 | a1:0.9996
+ 时间: 1.04s
+[GPU:1] 样本:090/454 | ID:DSC_0329.JPG
+ CFG=1: abs_rel:0.0198 | rmse:0.2703 | a1:1.0000
+ 时间: 1.04s
+[GPU:2] 样本:148/454 | ID:DSC_0357.JPG
+ CFG=1: abs_rel:0.0528 | rmse:0.8358 | a1:0.9833
+ 时间: 1.08s
+[GPU:4] 样本:261/454 | ID:DSC_0619.JPG
+ CFG=1: abs_rel:0.0301 | rmse:0.0554 | a1:0.9996
+ 时间: 1.07s
+[GPU:7] 样本:428/454 | ID:DSC_9295.JPG
+ CFG=1: abs_rel:0.0251 | rmse:0.1635 | a1:0.9998
+ 时间: 1.05s
+[GPU:6] 样本:371/454 | ID:DSC_6518.JPG
+ CFG=1: abs_rel:0.0344 | rmse:0.1203 | a1:0.9983
+ 时间: 1.04s
+[GPU:5] 样本:315/454 | ID:DSC_0652.JPG
+ CFG=1: abs_rel:0.0344 | rmse:0.3658 | a1:0.9930
+ 时间: 1.08s
+[GPU:0] 样本:032/454 | ID:DSC_0254.JPG
+ CFG=1: abs_rel:0.0398 | rmse:0.1148 | a1:0.9987
+ 时间: 1.07s
+[GPU:3] 样本:197/454 | ID:DSC_0448.JPG
+ CFG=1: abs_rel:0.0200 | rmse:0.7197 | a1:0.9969
+ 时间: 1.04s
+[GPU:2] 样本:149/454 | ID:DSC_0362.JPG
+ CFG=1: abs_rel:0.0137 | rmse:0.3368 | a1:1.0000
+ 时间: 1.07s
+[GPU:4] 样本:262/454 | ID:DSC_0605.JPG
+ CFG=1: abs_rel:0.0936 | rmse:1.4170 | a1:0.9420
+ 时间: 0.98s
+[GPU:1] 样本:091/454 | ID:DSC_0342.JPG
+ CFG=1: abs_rel:0.0252 | rmse:0.6117 | a1:0.9969
+ 时间: 1.07s
+[GPU:5] 样本:316/454 | ID:DSC_0686.JPG
+ CFG=1: abs_rel:0.0395 | rmse:0.5316 | a1:0.9969
+ 时间: 1.07s
+[GPU:7] 样本:429/454 | ID:DSC_6536.JPG
+ CFG=1: abs_rel:0.0338 | rmse:0.5418 | a1:0.9982
+ 时间: 1.05s
+[GPU:6] 样本:372/454 | ID:DSC_0718.JPG
+ CFG=1: abs_rel:0.0685 | rmse:1.6156 | a1:0.9946
+ 时间: 1.07s
+[GPU:4] 样本:263/454 | ID:DSC_0597.JPG
+ CFG=1: abs_rel:0.1277 | rmse:0.8846 | a1:0.8838
+ 时间: 1.09s
+[GPU:0] 样本:033/454 | ID:DSC_0221.JPG
+ CFG=1: abs_rel:0.0121 | rmse:0.0441 | a1:0.9998
+ 时间: 1.08s
+[GPU:2] 样本:150/454 | ID:DSC_0352.JPG
+ CFG=1: abs_rel:0.0365 | rmse:1.3271 | a1:0.9876
+ 时间: 1.06s
+[GPU:3] 样本:198/454 | ID:DSC_0462.JPG
+ CFG=1: abs_rel:0.0211 | rmse:0.1060 | a1:1.0000
+ 时间: 1.06s
+[GPU:1] 样本:092/454 | ID:DSC_0334.JPG
+ CFG=1: abs_rel:0.0352 | rmse:0.6888 | a1:0.9984
+ 时间: 1.07s
+[GPU:5] 样本:317/454 | ID:DSC_0680.JPG
+ CFG=1: abs_rel:0.0191 | rmse:0.1933 | a1:0.9994
+ 时间: 1.07s
+[GPU:7] 样本:430/454 | ID:DSC_6556.JPG
+ CFG=1: abs_rel:0.0322 | rmse:0.3101 | a1:0.9999
+ 时间: 1.06s
+[GPU:6] 样本:373/454 | ID:DSC_6515.JPG
+ CFG=1: abs_rel:0.0304 | rmse:0.1121 | a1:0.9996
+ 时间: 1.07s
+[GPU:4] 样本:264/454 | ID:DSC_0628.JPG
+ CFG=1: abs_rel:0.0086 | rmse:0.0156 | a1:1.0000
+ 时间: 1.07s
+[GPU:0] 样本:034/454 | ID:DSC_0268.JPG
+ CFG=1: abs_rel:0.0114 | rmse:0.1019 | a1:0.9994
+ 时间: 1.07s
+[GPU:1] 样本:093/454 | ID:DSC_0331.JPG
+ CFG=1: abs_rel:0.0412 | rmse:0.6224 | a1:0.9901
+ 时间: 1.07s
+[GPU:2] 样本:151/454 | ID:DSC_0430.JPG
+ CFG=1: abs_rel:0.0206 | rmse:0.0935 | a1:1.0000
+ 时间: 1.07s
+[GPU:7] 样本:431/454 | ID:DSC_9269.JPG
+ CFG=1: abs_rel:0.0200 | rmse:0.3555 | a1:0.9973
+ 时间: 1.04s
+[GPU:5] 样本:318/454 | ID:DSC_0655.JPG
+ CFG=1: abs_rel:0.0404 | rmse:0.2110 | a1:0.9671
+ 时间: 1.07s
+[GPU:3] 样本:199/454 | ID:DSC_0469.JPG
+ CFG=1: abs_rel:0.0222 | rmse:0.0873 | a1:1.0000
+ 时间: 1.05s
+[GPU:6] 样本:374/454 | ID:DSC_0714.JPG
+ CFG=1: abs_rel:0.0415 | rmse:0.9344 | a1:0.9792
+ 时间: 1.06s
+[GPU:4] 样本:265/454 | ID:DSC_0589.JPG
+ CFG=1: abs_rel:0.1492 | rmse:0.8521 | a1:0.8329
+ 时间: 1.06s
+[GPU:0] 样本:035/454 | ID:DSC_0288.JPG
+ CFG=1: abs_rel:0.0174 | rmse:0.1147 | a1:0.9994
+ 时间: 1.10s
+[GPU:1] 样本:094/454 | ID:DSC_0345.JPG
+ CFG=1: abs_rel:0.0242 | rmse:0.5522 | a1:0.9970
+ 时间: 1.07s
+[GPU:2] 样本:152/454 | ID:DSC_0353.JPG
+ CFG=1: abs_rel:0.0288 | rmse:0.5924 | a1:0.9965
+ 时间: 1.06s
+[GPU:5] 样本:319/454 | ID:DSC_0663.JPG
+ CFG=1: abs_rel:0.0198 | rmse:0.1246 | a1:0.9996
+ 时间: 1.07s
+[GPU:7] 样本:432/454 | ID:DSC_6538.JPG
+ CFG=1: abs_rel:0.0339 | rmse:0.4337 | a1:0.9943
+ 时间: 1.05s
+[GPU:4] 样本:266/454 | ID:DSC_0580.JPG
+ CFG=1: abs_rel:0.0769 | rmse:0.4887 | a1:0.9673
+ 时间: 1.06s
+[GPU:6] 样本:375/454 | ID:DSC_6504.JPG
+ CFG=1: abs_rel:0.0475 | rmse:0.2978 | a1:0.9760
+ 时间: 1.04s
+[GPU:3] 样本:200/454 | ID:DSC_0459.JPG
+ CFG=1: abs_rel:0.0321 | rmse:0.1923 | a1:0.9993
+ 时间: 1.05s
+[GPU:1] 样本:095/454 | ID:DSC_0301.JPG
+ CFG=1: abs_rel:0.0279 | rmse:0.4019 | a1:0.9999
+ 时间: 1.06s
+[GPU:0] 样本:036/454 | ID:DSC_0271.JPG
+ CFG=1: abs_rel:0.0165 | rmse:0.1362 | a1:0.9992
+ 时间: 1.08s
+[GPU:2] 样本:153/454 | ID:DSC_0410.JPG
+ CFG=1: abs_rel:0.0238 | rmse:0.5507 | a1:0.9984
+ 时间: 1.06s
+[GPU:7] 样本:433/454 | ID:DSC_9281.JPG
+ CFG=1: abs_rel:0.0291 | rmse:0.4866 | a1:0.9964
+ 时间: 1.05s
+[GPU:4] 样本:267/454 | ID:DSC_0591.JPG
+ CFG=1: abs_rel:0.0615 | rmse:0.4453 | a1:0.9904
+ 时间: 1.07s
+[GPU:5] 样本:320/454 | ID:DSC_0670.JPG
+ CFG=1: abs_rel:0.0445 | rmse:0.3178 | a1:0.9959
+ 时间: 1.07s
+[GPU:6] 样本:376/454 | ID:DSC_0704.JPG
+ CFG=1: abs_rel:0.0216 | rmse:0.1454 | a1:0.9994
+ 时间: 1.06s
+[GPU:3] 样本:201/454 | ID:DSC_0458.JPG
+ CFG=1: abs_rel:0.0260 | rmse:0.2925 | a1:0.9987
+ 时间: 1.06s
+[GPU:1] 样本:096/454 | ID:DSC_0338.JPG
+ CFG=1: abs_rel:0.0259 | rmse:0.5518 | a1:0.9974
+ 时间: 1.08s
+[GPU:4] 样本:268/454 | ID:DSC_0592.JPG
+ CFG=1: abs_rel:0.0520 | rmse:0.4957 | a1:0.9899
+ 时间: 1.06s
+[GPU:2] 样本:154/454 | ID:DSC_0422.JPG
+ CFG=1: abs_rel:0.0503 | rmse:1.6409 | a1:0.9893
+ 时间: 1.10s
+[GPU:5] 样本:321/454 | ID:DSC_0644.JPG
+ CFG=1: abs_rel:0.0285 | rmse:0.0772 | a1:0.9999
+ 时间: 1.06s
+[GPU:0] 样本:037/454 | ID:DSC_0275.JPG
+ CFG=1: abs_rel:0.0191 | rmse:0.2423 | a1:0.9997
+ 时间: 1.08s
+[GPU:6] 样本:377/454 | ID:DSC_6517.JPG
+ CFG=1: abs_rel:0.0239 | rmse:0.0940 | a1:0.9994
+ 时间: 1.06s
+[GPU:7] 样本:434/454 | ID:DSC_9293.JPG
+ CFG=1: abs_rel:0.1967 | rmse:1.4765 | a1:0.8165
+ 时间: 1.05s
+[GPU:1] 样本:097/454 | ID:DSC_0294.JPG
+ CFG=1: abs_rel:0.0125 | rmse:0.0851 | a1:0.9991
+ 时间: 0.99s
+[GPU:3] 样本:202/454 | ID:DSC_0434.JPG
+ CFG=1: abs_rel:0.0388 | rmse:0.1498 | a1:0.9997
+ 时间: 1.09s
+[GPU:4] 样本:269/454 | ID:DSC_0624.JPG
+ CFG=1: abs_rel:0.0210 | rmse:0.0438 | a1:1.0000
+ 时间: 1.02s
+[GPU:2] 样本:155/454 | ID:DSC_0399.JPG
+ CFG=1: abs_rel:0.0374 | rmse:0.7337 | a1:0.9852
+ 时间: 1.07s
+[GPU:5] 样本:322/454 | ID:DSC_0659.JPG
+ CFG=1: abs_rel:0.0401 | rmse:0.2025 | a1:0.9908
+ 时间: 1.08s
+[GPU:6] 样本:378/454 | ID:DSC_6491.JPG
+ CFG=1: abs_rel:0.0291 | rmse:0.1207 | a1:0.9992
+ 时间: 1.07s
+[GPU:7] 样本:435/454 | ID:DSC_9300.JPG
+ CFG=1: abs_rel:0.0245 | rmse:0.2386 | a1:0.9992
+ 时间: 1.06s
+[GPU:0] 样本:038/454 | ID:DSC_0223.JPG
+ CFG=1: abs_rel:0.0038 | rmse:0.0107 | a1:1.0000
+ 时间: 1.08s
+[GPU:1] 样本:098/454 | ID:DSC_0327.JPG
+ CFG=1: abs_rel:0.0829 | rmse:1.2292 | a1:0.9410
+ 时间: 1.07s
+[GPU:4] 样本:270/454 | ID:DSC_0631.JPG
+ CFG=1: abs_rel:0.0206 | rmse:0.0350 | a1:1.0000
+ 时间: 1.04s
+[GPU:3] 样本:203/454 | ID:DSC_0477.JPG
+ CFG=1: abs_rel:0.0269 | rmse:0.7090 | a1:0.9939
+ 时间: 1.04s
+[GPU:2] 样本:156/454 | ID:DSC_0401.JPG
+ CFG=1: abs_rel:0.0502 | rmse:0.9707 | a1:0.9831
+ 时间: 1.09s
+[GPU:6] 样本:379/454 | ID:DSC_0692.JPG
+ CFG=1: abs_rel:0.0334 | rmse:0.4509 | a1:0.9976
+ 时间: 1.06s
+[GPU:5] 样本:323/454 | ID:DSC_0671.JPG
+ CFG=1: abs_rel:0.0591 | rmse:0.3318 | a1:0.9884
+ 时间: 1.08s
+[GPU:0] 样本:039/454 | ID:DSC_0286.JPG
+ CFG=1: abs_rel:0.0164 | rmse:0.0958 | a1:0.9997
+ 时间: 1.06s
+[GPU:7] 样本:436/454 | ID:DSC_9294.JPG
+ CFG=1: abs_rel:0.0819 | rmse:0.6638 | a1:0.9790
+ 时间: 1.06s
+[GPU:1] 样本:099/454 | ID:DSC_0310.JPG
+ CFG=1: abs_rel:0.0155 | rmse:0.1179 | a1:0.9997
+ 时间: 1.09s
+[GPU:4] 样本:271/454 | ID:DSC_0596.JPG
+ CFG=1: abs_rel:0.0995 | rmse:0.5261 | a1:0.9405
+ 时间: 1.06s
+[GPU:2] 样本:157/454 | ID:DSC_0390.JPG
+ CFG=1: abs_rel:0.0204 | rmse:0.2709 | a1:0.9998
+ 时间: 1.08s
+[GPU:3] 样本:204/454 | ID:DSC_0482.JPG
+ CFG=1: abs_rel:0.0248 | rmse:0.2280 | a1:0.9996
+ 时间: 1.05s
+[GPU:0] 样本:040/454 | ID:DSC_0291.JPG
+ CFG=1: abs_rel:0.0229 | rmse:0.1593 | a1:0.9978
+ 时间: 1.08s
+[GPU:7] 样本:437/454 | ID:DSC_6553.JPG
+ CFG=1: abs_rel:0.0247 | rmse:0.6574 | a1:0.9962
+ 时间: 1.02s
+[GPU:5] 样本:324/454 | ID:DSC_0645.JPG
+ CFG=1: abs_rel:0.0333 | rmse:0.0876 | a1:0.9998
+ 时间: 1.08s
+[GPU:6] 样本:380/454 | ID:DSC_6507.JPG
+ CFG=1: abs_rel:0.0329 | rmse:0.1469 | a1:0.9991
+ 时间: 1.05s
+[GPU:1] 样本:100/454 | ID:DSC_0325.JPG
+ CFG=1: abs_rel:0.0279 | rmse:0.5184 | a1:0.9997
+ 时间: 1.07s
+[GPU:4] 样本:272/454 | ID:DSC_0573.JPG
+ CFG=1: abs_rel:0.0622 | rmse:0.3839 | a1:0.9910
+ 时间: 1.05s
+[GPU:2] 样本:158/454 | ID:DSC_0386.JPG
+ CFG=1: abs_rel:0.0294 | rmse:0.5741 | a1:0.9986
+ 时间: 1.06s
+[GPU:5] 样本:325/454 | ID:DSC_0632.JPG
+ CFG=1: abs_rel:0.0154 | rmse:0.0253 | a1:1.0000
+ 时间: 1.10s
+[GPU:0] 样本:041/454 | ID:DSC_0290.JPG
+ CFG=1: abs_rel:0.0182 | rmse:0.1380 | a1:0.9986
+ 时间: 1.08s
+[GPU:3] 样本:205/454 | ID:DSC_0475.JPG
+ CFG=1: abs_rel:0.0279 | rmse:1.0703 | a1:0.9945
+ 时间: 1.07s
+[GPU:7] 样本:438/454 | ID:DSC_9275.JPG
+ CFG=1: abs_rel:0.0241 | rmse:0.3577 | a1:0.9990
+ 时间: 1.05s
+[GPU:6] 样本:381/454 | ID:DSC_6503.JPG
+ CFG=1: abs_rel:0.0331 | rmse:0.1915 | a1:0.9836
+ 时间: 1.07s
+[GPU:4] 样本:273/454 | ID:DSC_0586.JPG
+ CFG=1: abs_rel:0.0820 | rmse:1.0521 | a1:0.9339
+ 时间: 1.07s
+[GPU:1] 样本:101/454 | ID:DSC_0347.JPG
+ CFG=1: abs_rel:0.0287 | rmse:0.6334 | a1:0.9969
+ 时间: 1.05s
+[GPU:5] 样本:326/454 | ID:DSC_0634.JPG
+ CFG=1: abs_rel:0.0170 | rmse:0.0499 | a1:0.9999
+ 时间: 1.03s
+[GPU:2] 样本:159/454 | ID:DSC_0429.JPG
+ CFG=1: abs_rel:0.0197 | rmse:0.0917 | a1:1.0000
+ 时间: 1.06s
+[GPU:0] 样本:042/454 | ID:DSC_0228.JPG
+ CFG=1: abs_rel:0.0068 | rmse:0.0417 | a1:0.9944
+ 时间: 1.07s
+[GPU:3] 样本:206/454 | ID:DSC_0466.JPG
+ CFG=1: abs_rel:0.0445 | rmse:0.2271 | a1:0.9950
+ 时间: 1.06s
+[GPU:4] 样本:274/454 | ID:DSC_0588.JPG
+ CFG=1: abs_rel:0.1031 | rmse:0.5451 | a1:0.9599
+ 时间: 1.04s
+[GPU:6] 样本:382/454 | ID:DSC_0712.JPG
+ CFG=1: abs_rel:0.0755 | rmse:0.8093 | a1:0.9853
+ 时间: 1.07s
+[GPU:7] 样本:439/454 | ID:DSC_9277.JPG
+ CFG=1: abs_rel:0.0225 | rmse:0.2569 | a1:0.9986
+ 时间: 1.05s
+[GPU:1] 样本:102/454 | ID:DSC_0323.JPG
+ CFG=1: abs_rel:0.0277 | rmse:0.5681 | a1:0.9992
+ 时间: 1.05s
+[GPU:5] 样本:327/454 | ID:DSC_0638.JPG
+ CFG=1: abs_rel:0.0146 | rmse:0.0487 | a1:1.0000
+ 时间: 1.08s
+[GPU:2] 样本:160/454 | ID:DSC_0405.JPG
+ CFG=1: abs_rel:0.0950 | rmse:1.4937 | a1:0.8385
+ 时间: 1.08s
+[GPU:4] 样本:275/454 | ID:DSC_0581.JPG
+ CFG=1: abs_rel:0.0824 | rmse:0.5362 | a1:0.9853
+ 时间: 1.05s
+[GPU:6] 样本:383/454 | ID:DSC_0695.JPG
+ CFG=1: abs_rel:0.0609 | rmse:0.8156 | a1:0.9917
+ 时间: 1.05s
+[GPU:7] 样本:440/454 | ID:DSC_9303.JPG
+ CFG=1: abs_rel:0.0239 | rmse:0.2894 | a1:0.9989
+ 时间: 1.05s
+[GPU:0] 样本:043/454 | ID:DSC_0266.JPG
+ CFG=1: abs_rel:0.0200 | rmse:0.1456 | a1:0.9998
+ 时间: 1.08s
+[GPU:3] 样本:207/454 | ID:DSC_0435.JPG
+ CFG=1: abs_rel:0.0529 | rmse:0.2005 | a1:0.9994
+ 时间: 1.04s
+[GPU:1] 样本:103/454 | ID:DSC_0315.JPG
+ CFG=1: abs_rel:0.0231 | rmse:0.2891 | a1:1.0000
+ 时间: 1.07s
+[GPU:5] 样本:328/454 | ID:DSC_0651.JPG
+ CFG=1: abs_rel:0.0380 | rmse:0.3665 | a1:0.9976
+ 时间: 1.08s
+[GPU:2] 样本:161/454 | ID:DSC_0356.JPG
+ CFG=1: abs_rel:0.0228 | rmse:0.5095 | a1:0.9984
+ 时间: 1.10s
+[GPU:4] 样本:276/454 | ID:DSC_0615.JPG
+ CFG=1: abs_rel:0.0295 | rmse:0.0545 | a1:0.9997
+ 时间: 1.08s
+[GPU:6] 样本:384/454 | ID:DSC_6487.JPG
+ CFG=1: abs_rel:0.0125 | rmse:0.0385 | a1:0.9998
+ 时间: 1.06s
+[GPU:0] 样本:044/454 | ID:DSC_0253.JPG
+ CFG=1: abs_rel:0.0248 | rmse:0.0687 | a1:0.9992
+ 时间: 1.06s
+[GPU:7] 样本:441/454 | ID:DSC_9257.JPG
+ CFG=1: abs_rel:0.0180 | rmse:0.1409 | a1:0.9997
+ 时间: 1.05s
+[GPU:3] 样本:208/454 | ID:DSC_0454.JPG
+ CFG=1: abs_rel:0.0327 | rmse:0.1987 | a1:0.9998
+ 时间: 1.06s
+[GPU:5] 样本:329/454 | ID:DSC_0687.JPG
+ CFG=1: abs_rel:0.0437 | rmse:0.5990 | a1:0.9989
+ 时间: 1.09s
+[GPU:1] 样本:104/454 | ID:DSC_0321.JPG
+ CFG=1: abs_rel:0.0200 | rmse:0.4731 | a1:0.9976
+ 时间: 1.07s
+[GPU:4] 样本:277/454 | ID:DSC_0572.JPG
+ CFG=1: abs_rel:0.1066 | rmse:0.7679 | a1:0.9763
+ 时间: 0.99s
+[GPU:6] 样本:385/454 | ID:DSC_0702.JPG
+ CFG=1: abs_rel:0.0480 | rmse:1.4577 | a1:0.9889
+ 时间: 1.05s
+[GPU:2] 样本:162/454 | ID:DSC_0407.JPG
+ CFG=1: abs_rel:0.0393 | rmse:0.7195 | a1:0.9922
+ 时间: 1.07s
+[GPU:0] 样本:045/454 | ID:DSC_0263.JPG
+ CFG=1: abs_rel:0.0241 | rmse:0.2215 | a1:0.9970
+ 时间: 1.06s
+[GPU:7] 样本:442/454 | ID:DSC_9301.JPG
+ CFG=1: abs_rel:0.0290 | rmse:0.2887 | a1:0.9989
+ 时间: 1.05s
+[GPU:5] 样本:330/454 | ID:DSC_0684.JPG
+ CFG=1: abs_rel:0.0411 | rmse:0.4096 | a1:0.9989
+ 时间: 1.08s
+[GPU:1] 样本:105/454 | ID:DSC_0304.JPG
+ CFG=1: abs_rel:0.0340 | rmse:0.5831 | a1:0.9996
+ 时间: 1.06s
+[GPU:4] 样本:278/454 | ID:DSC_0575.JPG
+ CFG=1: abs_rel:0.0370 | rmse:0.4306 | a1:0.9908
+ 时间: 1.05s
+[GPU:3] 样本:209/454 | ID:DSC_0470.JPG
+ CFG=1: abs_rel:0.0265 | rmse:0.1080 | a1:1.0000
+ 时间: 1.05s
+[GPU:6] 样本:386/454 | ID:DSC_0703.JPG
+ CFG=1: abs_rel:0.0189 | rmse:0.1891 | a1:0.9969
+ 时间: 1.05s
+[GPU:2] 样本:163/454 | ID:DSC_0388.JPG
+ CFG=1: abs_rel:0.0564 | rmse:0.9185 | a1:0.9832
+ 时间: 1.07s
+[GPU:0] 样本:046/454 | ID:DSC_0273.JPG
+ CFG=1: abs_rel:0.0162 | rmse:0.1057 | a1:1.0000
+ 时间: 1.07s
+[GPU:5] 样本:331/454 | ID:DSC_0675.JPG
+ CFG=1: abs_rel:0.0113 | rmse:0.0575 | a1:1.0000
+ 时间: 1.07s
+[GPU:7] 样本:443/454 | ID:DSC_6537.JPG
+ CFG=1: abs_rel:0.0418 | rmse:0.7019 | a1:0.9950
+ 时间: 1.04s
+[GPU:1] 样本:106/454 | ID:DSC_0307.JPG
+ CFG=1: abs_rel:0.0142 | rmse:0.1936 | a1:0.9999
+ 时间: 1.05s
+[GPU:4] 样本:279/454 | ID:DSC_0625.JPG
+ CFG=1: abs_rel:0.0159 | rmse:0.0370 | a1:0.9999
+ 时间: 1.04s
+[GPU:2] 样本:164/454 | ID:DSC_0400.JPG
+ CFG=1: abs_rel:0.0657 | rmse:1.0872 | a1:0.9856
+ 时间: 1.05s
+[GPU:3] 样本:210/454 | ID:DSC_0453.JPG
+ CFG=1: abs_rel:0.0315 | rmse:0.3282 | a1:0.9996
+ 时间: 1.04s
+[GPU:6] 样本:387/454 | ID:DSC_6489.JPG
+ CFG=1: abs_rel:0.0286 | rmse:0.1532 | a1:0.9967
+ 时间: 1.05s
+[GPU:0] 样本:047/454 | ID:DSC_0250.JPG
+ CFG=1: abs_rel:0.0360 | rmse:0.0796 | a1:0.9969
+ 时间: 1.08s
+[GPU:7] 样本:444/454 | ID:DSC_6548.JPG
+ CFG=1: abs_rel:0.0261 | rmse:0.6310 | a1:0.9953
+ 时间: 1.07s
+[GPU:4] 样本:280/454 | ID:DSC_0587.JPG
+ CFG=1: abs_rel:0.0718 | rmse:0.4491 | a1:0.9738
+ 时间: 1.03s
+[GPU:5] 样本:332/454 | ID:DSC_0667.JPG
+ CFG=1: abs_rel:0.0377 | rmse:0.1960 | a1:0.9924
+ 时间: 1.08s
+[GPU:1] 样本:107/454 | ID:DSC_0312.JPG
+ CFG=1: abs_rel:0.0216 | rmse:0.4031 | a1:0.9976
+ 时间: 1.05s
+[rank4]:[W317 17:24:21.198027481 ProcessGroupNCCL.cpp:4561] [PG ID 0 PG GUID 0 Rank 4] using GPU 4 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect. Specify device_ids in barrier() to force use of a particular device, or call init_process_group() with a device_id.
+[GPU:2] 样本:165/454 | ID:DSC_0408.JPG
+ CFG=1: abs_rel:0.0255 | rmse:0.5291 | a1:0.9966
+ 时间: 1.05s
+[GPU:6] 样本:388/454 | ID:DSC_6490.JPG
+ CFG=1: abs_rel:0.0262 | rmse:0.1496 | a1:0.9988
+ 时间: 1.00s
+[GPU:3] 样本:211/454 | ID:DSC_0461.JPG
+ CFG=1: abs_rel:0.0255 | rmse:0.1188 | a1:1.0000
+ 时间: 1.05s
+[GPU:5] 样本:333/454 | ID:DSC_0689.JPG
+ CFG=1: abs_rel:0.0371 | rmse:0.5354 | a1:0.9989
+ 时间: 1.06s
+[GPU:7] 样本:445/454 | ID:DSC_9299.JPG
+ CFG=1: abs_rel:0.0224 | rmse:0.2050 | a1:0.9985
+ 时间: 1.05s
+[GPU:0] 样本:048/454 | ID:DSC_0241.JPG
+ CFG=1: abs_rel:0.0257 | rmse:0.0891 | a1:0.9985
+ 时间: 1.06s
+[GPU:1] 样本:108/454 | ID:DSC_0330.JPG
+ CFG=1: abs_rel:0.0261 | rmse:0.3769 | a1:0.9999
+ 时间: 1.02s
+[GPU:6] 样本:389/454 | ID:DSC_0696.JPG
+ CFG=1: abs_rel:0.0707 | rmse:1.5623 | a1:0.9767
+ 时间: 1.06s
+[GPU:2] 样本:166/454 | ID:DSC_0428.JPG
+ CFG=1: abs_rel:0.0275 | rmse:0.1409 | a1:1.0000
+ 时间: 1.07s
+[GPU:3] 样本:212/454 | ID:DSC_0437.JPG
+ CFG=1: abs_rel:0.0500 | rmse:0.2340 | a1:0.9964
+ 时间: 1.05s
+[GPU:7] 样本:446/454 | ID:DSC_9271.JPG
+ CFG=1: abs_rel:0.0133 | rmse:0.2616 | a1:0.9988
+ 时间: 1.04s
+[GPU:5] 样本:334/454 | ID:DSC_0657.JPG
+ CFG=1: abs_rel:0.0208 | rmse:0.1395 | a1:0.9998
+ 时间: 1.00s
+[GPU:1] 样本:109/454 | ID:DSC_0309.JPG
+ CFG=1: abs_rel:0.0192 | rmse:0.1821 | a1:0.9986
+ 时间: 1.06s
+[GPU:0] 样本:049/454 | ID:DSC_0238.JPG
+ CFG=1: abs_rel:0.0278 | rmse:0.0756 | a1:1.0000
+ 时间: 1.05s
+[GPU:6] 样本:390/454 | ID:DSC_6505.JPG
+ CFG=1: abs_rel:0.0314 | rmse:0.1391 | a1:0.9891
+ 时间: 1.06s
+[GPU:2] 样本:167/454 | ID:DSC_0412.JPG
+ CFG=1: abs_rel:0.0305 | rmse:0.6014 | a1:0.9993
+ 时间: 1.07s
+[GPU:7] 样本:447/454 | ID:DSC_9298.JPG
+ CFG=1: abs_rel:0.0407 | rmse:1.0096 | a1:0.9883
+ 时间: 1.04s
+[GPU:5] 样本:335/454 | ID:DSC_0665.JPG
+ CFG=1: abs_rel:0.0456 | rmse:0.2080 | a1:0.9787
+ 时间: 1.06s
+[GPU:3] 样本:213/454 | ID:DSC_0468.JPG
+ CFG=1: abs_rel:0.0559 | rmse:0.2566 | a1:0.9999
+ 时间: 1.04s
+[GPU:1] 样本:110/454 | ID:DSC_0336.JPG
+ CFG=1: abs_rel:0.0264 | rmse:0.5358 | a1:0.9992
+ 时间: 1.05s
+[GPU:0] 样本:050/454 | ID:DSC_0272.JPG
+ CFG=1: abs_rel:0.0123 | rmse:0.0952 | a1:0.9997
+ 时间: 1.07s
+[GPU:6] 样本:391/454 | ID:DSC_0708.JPG
+ CFG=1: abs_rel:0.0125 | rmse:0.0584 | a1:1.0000
+ 时间: 1.07s
+[GPU:2] 样本:168/454 | ID:DSC_0413.JPG
+ CFG=1: abs_rel:0.0392 | rmse:1.7465 | a1:0.9863
+ 时间: 1.06s
+[GPU:7] 样本:448/454 | ID:DSC_9285.JPG
+ CFG=1: abs_rel:0.0324 | rmse:0.7551 | a1:0.9867
+ 时间: 1.04s
+[GPU:5] 样本:336/454 | ID:DSC_0661.JPG
+ CFG=1: abs_rel:0.0250 | rmse:0.1861 | a1:0.9850
+ 时间: 1.05s
+[rank5]:[W317 17:24:29.249599912 ProcessGroupNCCL.cpp:4561] [PG ID 0 PG GUID 0 Rank 5] using GPU 5 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect. Specify device_ids in barrier() to force use of a particular device, or call init_process_group() with a device_id.
+[rank2]:[W317 17:24:29.263941100 ProcessGroupNCCL.cpp:4561] [PG ID 0 PG GUID 0 Rank 2] using GPU 2 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect. Specify device_ids in barrier() to force use of a particular device, or call init_process_group() with a device_id.
+[GPU:1] 样本:111/454 | ID:DSC_0343.JPG
+ CFG=1: abs_rel:0.0230 | rmse:0.5739 | a1:0.9966
+ 时间: 1.06s
+[GPU:3] 样本:214/454 | ID:DSC_0444.JPG
+ CFG=1: abs_rel:0.0272 | rmse:0.1248 | a1:1.0000
+ 时间: 0.97s
+[GPU:0] 样本:051/454 | ID:DSC_0251.JPG
+ CFG=1: abs_rel:0.0372 | rmse:0.0835 | a1:0.9982
+ 时间: 1.06s
+[GPU:6] 样本:392/454 | ID:DSC_6496.JPG
+ CFG=1: abs_rel:0.0713 | rmse:0.2786 | a1:0.9684
+ 时间: 1.06s
+[GPU:7] 样本:449/454 | ID:DSC_6560.JPG
+ CFG=1: abs_rel:0.0342 | rmse:0.4617 | a1:0.9985
+ 时间: 1.05s
+[rank6]:[W317 17:24:31.606571260 ProcessGroupNCCL.cpp:4561] [PG ID 0 PG GUID 0 Rank 6] using GPU 6 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect. Specify device_ids in barrier() to force use of a particular device, or call init_process_group() with a device_id.
+[GPU:0] 样本:052/454 | ID:DSC_0219.JPG
+ CFG=1: abs_rel:0.0329 | rmse:0.0832 | a1:0.9989
+ 时间: 1.07s
+[GPU:1] 样本:112/454 | ID:DSC_0317.JPG
+ CFG=1: abs_rel:0.0194 | rmse:0.3503 | a1:0.9997
+ 时间: 1.08s
+[GPU:3] 样本:215/454 | ID:DSC_0460.JPG
+ CFG=1: abs_rel:0.0270 | rmse:0.1337 | a1:0.9992
+ 时间: 1.04s
+[GPU:7] 样本:450/454 | ID:DSC_9270.JPG
+ CFG=1: abs_rel:0.0159 | rmse:0.3067 | a1:0.9981
+ 时间: 1.05s
+[rank1]:[W317 17:24:33.513583109 ProcessGroupNCCL.cpp:4561] [PG ID 0 PG GUID 0 Rank 1] using GPU 1 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect. Specify device_ids in barrier() to force use of a particular device, or call init_process_group() with a device_id.
+[GPU:3] 样本:216/454 | ID:DSC_0485.JPG
+ CFG=1: abs_rel:0.0172 | rmse:0.2073 | a1:0.9995
+ 时间: 1.05s
+[GPU:0] 样本:053/454 | ID:DSC_0231.JPG
+ CFG=1: abs_rel:0.0102 | rmse:0.0425 | a1:1.0000
+ 时间: 1.09s
+[GPU:7] 样本:451/454 | ID:DSC_9259.JPG
+ CFG=1: abs_rel:0.0141 | rmse:0.1330 | a1:0.9994
+ 时间: 1.07s
+[GPU:0] 样本:054/454 | ID:DSC_0292.JPG
+ CFG=1: abs_rel:0.0185 | rmse:0.1333 | a1:0.9990
+ 时间: 1.00s
+[GPU:3] 样本:217/454 | ID:DSC_0446.JPG
+ CFG=1: abs_rel:0.0143 | rmse:0.0814 | a1:1.0000
+ 时间: 1.05s
+[GPU:7] 样本:452/454 | ID:DSC_9261.JPG
+ CFG=1: abs_rel:0.0268 | rmse:0.2370 | a1:1.0000
+ 时间: 1.04s
+[GPU:0] 样本:055/454 | ID:DSC_0230.JPG
+ CFG=1: abs_rel:0.0196 | rmse:0.0724 | a1:0.9994
+ 时间: 1.06s
+[GPU:3] 样本:218/454 | ID:DSC_0439.JPG
+ CFG=1: abs_rel:0.0499 | rmse:0.2456 | a1:0.9962
+ 时间: 1.03s
+[GPU:7] 样本:453/454 | ID:DSC_9262.JPG
+ CFG=1: abs_rel:0.0206 | rmse:0.2244 | a1:0.9997
+ 时间: 1.04s
+[GPU:0] 样本:056/454 | ID:DSC_0255.JPG
+ CFG=1: abs_rel:0.0417 | rmse:0.0836 | a1:0.9981
+ 时间: 1.05s
+[rank0]:[W317 17:24:41.638034277 ProcessGroupNCCL.cpp:4561] [PG ID 0 PG GUID 0 Rank 0] using GPU 0 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect. Specify device_ids in barrier() to force use of a particular device, or call init_process_group() with a device_id.
+NCCL version 2.21.5+cuda12.4
+[GPU:3] 样本:219/454 | ID:DSC_0463.JPG
+ CFG=1: abs_rel:0.0214 | rmse:0.1117 | a1:1.0000
+ 时间: 1.03s
+[GPU:7] 样本:454/454 | ID:DSC_9278.JPG
+ CFG=1: abs_rel:0.0193 | rmse:0.1610 | a1:1.0000
+ 时间: 1.05s
+[rank7]:[W317 17:24:43.345722791 ProcessGroupNCCL.cpp:4561] [PG ID 0 PG GUID 0 Rank 7] using GPU 7 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect. Specify device_ids in barrier() to force use of a particular device, or call init_process_group() with a device_id.
+[GPU:3] 样本:220/454 | ID:DSC_0474.JPG
+ CFG=1: abs_rel:0.0330 | rmse:0.5488 | a1:0.9965
+ 时间: 1.03s
+[GPU:3] 样本:221/454 | ID:DSC_0486.JPG
+ CFG=1: abs_rel:0.0213 | rmse:0.2603 | a1:0.9994
+ 时间: 1.04s
+[GPU:3] 样本:222/454 | ID:DSC_0456.JPG
+ CFG=1: abs_rel:0.0183 | rmse:0.2422 | a1:0.9995
+ 时间: 1.04s
+[GPU:3] 样本:223/454 | ID:DSC_0488.JPG
+ CFG=1: abs_rel:0.0225 | rmse:0.2958 | a1:0.9998
+ 时间: 1.04s
+[GPU:3] 样本:224/454 | ID:DSC_0440.JPG
+ CFG=1: abs_rel:0.0152 | rmse:0.0784 | a1:1.0000
+ 时间: 1.05s
+[rank3]:[W317 17:24:54.647361498 ProcessGroupNCCL.cpp:4561] [PG ID 0 PG GUID 0 Rank 3] using GPU 3 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect. Specify device_ids in barrier() to force use of a particular device, or call init_process_group() with a device_id.
+
+数据集 eth3d 评估完成!
+----------------------------------------------------------------------------------------------------
+| Dataset | Model | CFG | abs_rel | sq_rel | rmse | rmse_log | a1 | a2 | a3 |
+| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
+| eth3d | LDRN | CFG=1 | 0.0379 | 0.0520 | 0.4701 | 0.0546 | 0.9877 | 0.9966 | 0.9985 |
+样本数: 1
+平均处理时间: 1.14秒/图像
+----------------------------------------------------------------------------------------------------
+
+结果保存至: ./infer/eval_verify_eth3d_8gpu/LDRN/eth3d
+
+所有数据集评估完成! 结果保存在: ./infer/eval_verify_eth3d_8gpu/LDRN
+双CFG评估结果摘要已保存至: ./infer/eval_verify_eth3d_8gpu/LDRN/LDRN.txt
diff --git a/FE2E/logs/verify_scannet_normal_8gpu_20260317_171345.log b/FE2E/logs/verify_scannet_normal_8gpu_20260317_171345.log
new file mode 100644
index 0000000000000000000000000000000000000000..f4c19d761bf8647dee01dfb5bf8be0610760872a
--- /dev/null
+++ b/FE2E/logs/verify_scannet_normal_8gpu_20260317_171345.log
@@ -0,0 +1,152 @@
+即将使用 8 个GPU进行并行推理...
+Normal评估数据集: [('scannet', 'test')]
+[INFO] prompt_type=empty, 跳过Qwen模型加载
+[INFO] prompt_type=empty, 跳过Qwen模型加载
+[INFO] prompt_type=empty, 跳过Qwen模型加载
+[INFO] prompt_type=empty, 跳过Qwen模型加载
+[INFO] prompt_type=empty, 跳过Qwen模型加载
+[INFO] prompt_type=empty, 跳过Qwen模型加载
+[INFO] prompt_type=empty, 跳过Qwen模型加载
+[INFO] prompt_type=empty, 跳过Qwen模型加载
+create LoRA network from weights
+train all blocks only
+create LoRA network from weights
+train all blocks only
+create LoRA network from weights
+train all blocks only
+create LoRA network from weights
+create LoRA network from weights
+train all blocks only
+train all blocks only
+create LoRA network from weights
+create LoRA network from weights
+train all blocks only
+train all blocks only
+create LoRA network from weights
+train all blocks only
+create LoRA for DIT all blocks: 304 modules.
+enable LoRA for U-Net
+create LoRA for DIT all blocks: 304 modules.
+enable LoRA for U-Net
+create LoRA for DIT all blocks: 304 modules.
+enable LoRA for U-Net
+create LoRA for DIT all blocks: 304 modules.
+enable LoRA for U-Net
+create LoRA for DIT all blocks: 304 modules.
+enable LoRA for U-Net
+create LoRA for DIT all blocks: 304 modules.
+enable LoRA for U-Net
+create LoRA for DIT all blocks: 304 modules.
+enable LoRA for U-Net
+create LoRA for DIT all blocks: 304 modules.
+enable LoRA for U-Net
+weights are merged
+weights are merged
+weights are merged
+weights are merged
+weights are merged
+Successfully loading pipeline from /mmu_mllm_hdd_2/wjy/Step1X-Edit/pretrain.
+weights are merged
+模型标识符: LDRN
+输出目录: ./infer/eval_verify_scannet_normal_8gpu/LDRN/normal
+
+开始并行Normal评估,使用8个GPU
+================================================================================
+weights are merged
+weights are merged
+Defining test transform for scannet dataset
+Defining test transform for scannet dataset ... DONE
+Defining test transform for scannet dataset
+Defining test transform for scannet dataset
+Defining test transform for scannet dataset ... DONE
+Defining test transform for scannet dataset ... DONE
+Defining test transform for scannet dataset
+Defining test transform for scannet dataset
+Defining test transform for scannet dataset ... DONE
+Defining test transform for scannet dataset
+Defining test transform for scannet dataset ... DONE
+Defining test transform for scannet dataset
+Defining test transform for scannet dataset ... DONE
+Defining test transform for scannet dataset ... DONE
+Defining test transform for scannet dataset
+Defining test transform for scannet dataset ... DONE
+[GPU:0] 开始评估Normal数据集: scannet
+[GPU:0] | 样本:001 | ID:scene0740_00_002510 | 时间:37.46s|
+[GPU:0] | 样本:002 | ID:scene0395_01_000160 | 时间:1.37s|
+[GPU:0] | 样本:003 | ID:scene0481_01_000900 | 时间:1.36s|
+[GPU:0] | 样本:004 | ID:scene0608_02_001690 | 时间:1.36s|
+[GPU:0] | 样本:005 | ID:scene0061_00_000420 | 时间:1.29s|
+[GPU:0] | 样本:006 | ID:scene0670_01_002840 | 时间:1.36s|
+[GPU:0] | 样本:007 | ID:scene0662_01_001810 | 时间:1.36s|
+[GPU:0] | 样本:008 | ID:scene0362_00_000890 | 时间:1.36s|
+[GPU:0] | 样本:009 | ID:scene0320_03_000790 | 时间:1.36s|
+[GPU:7] | 样本:269 | ID:scene0065_01_000800 | 时间:1.33s|
+[GPU:2] | 样本:084 | ID:scene0460_00_000820 | 时间:1.34s|
+[GPU:3] | 样本:121 | ID:scene0673_00_000280 | 时间:1.34s|
+[GPU:0] | 样本:010 | ID:scene0685_02_003050 | 时间:1.36s|
+[GPU:5] | 样本:195 | ID:scene0113_01_000000 | 时间:1.36s|
+[GPU:1] | 样本:047 | ID:scene0617_00_001270 | 时间:1.37s|
+[GPU:4] | 样本:158 | ID:scene0623_01_000930 | 时间:1.37s|
+[GPU:6] | 样本:232 | ID:scene0370_02_000080 | 时间:1.38s|
+[GPU:0] | 样本:011 | ID:scene0656_03_000490 | 时间:1.36s|
+[GPU:0] | 样本:012 | ID:scene0343_00_000210 | 时间:1.36s|
+[GPU:0] | 样本:013 | ID:scene0220_02_000450 | 时间:1.36s|
+[GPU:0] | 样本:014 | ID:scene0525_01_000960 | 时间:1.36s|
+[GPU:0] | 样本:015 | ID:scene0012_01_002160 | 时间:1.27s|
+[GPU:0] | 样本:016 | ID:scene0532_00_000000 | 时间:1.36s|
+[GPU:0] | 样本:017 | ID:scene0415_00_000750 | 时间:1.36s|
+[GPU:0] | 样本:018 | ID:scene0395_01_002160 | 时间:1.36s|
+[GPU:0] | 样本:019 | ID:scene0717_00_000010 | 时间:1.36s|
+[GPU:7] | 样本:279 | ID:scene0421_02_001320 | 时间:1.26s|
+[GPU:2] | 样本:094 | ID:scene0061_01_001360 | 时间:1.33s|
+[GPU:3] | 样本:131 | ID:scene0335_01_000070 | 时间:1.34s|
+[GPU:5] | 样本:205 | ID:scene0223_00_000600 | 时间:1.35s|
+[GPU:0] | 样本:020 | ID:scene0610_02_002780 | 时间:1.36s|
+[GPU:4] | 样本:168 | ID:scene0552_01_000430 | 时间:1.36s|
+[GPU:1] | 样本:057 | ID:scene0168_01_000100 | 时间:1.37s|
+[GPU:6] | 样本:242 | ID:scene0192_02_000620 | 时间:1.38s|
+[GPU:0] | 样本:021 | ID:scene0603_00_001590 | 时间:1.36s|
+[GPU:0] | 样本:022 | ID:scene0610_02_000730 | 时间:1.36s|
+[GPU:0] | 样本:023 | ID:scene0296_00_000040 | 时间:1.36s|
+[GPU:0] | 样本:024 | ID:scene0241_00_000970 | 时间:1.36s|
+[GPU:0] | 样本:025 | ID:scene0310_01_000630 | 时间:1.36s|
+[GPU:0] | 样本:026 | ID:scene0157_00_000300 | 时间:1.36s|
+[GPU:0] | 样本:027 | ID:scene0685_02_000840 | 时间:1.36s|
+[GPU:0] | 样本:028 | ID:scene0780_00_000450 | 时间:1.36s|
+[GPU:0] | 样本:029 | ID:scene0502_02_001130 | 时间:1.29s|
+[GPU:7] | 样本:289 | ID:scene0142_00_000770 | 时间:1.25s|
+[GPU:3] | 样本:141 | ID:scene0489_02_001010 | 时间:1.33s|
+[GPU:2] | 样本:104 | ID:scene0702_01_000010 | 时间:1.34s|
+[GPU:5] | 样本:215 | ID:scene0199_00_000110 | 时间:1.35s|
+[GPU:0] | 样本:030 | ID:scene0670_01_000840 | 时间:1.35s|
+[GPU:4] | 样本:178 | ID:scene0580_00_003200 | 时间:1.36s|
+[GPU:1] | 样本:067 | ID:scene0114_00_000260 | 时间:1.37s|
+[GPU:6] | 样本:252 | ID:scene0303_00_001250 | 时间:1.38s|
+[GPU:0] | 样本:031 | ID:scene0177_00_000550 | 时间:1.36s|
+[GPU:0] | 样本:032 | ID:scene0101_01_000410 | 时间:1.36s|
+[GPU:0] | 样本:033 | ID:scene0457_02_000070 | 时间:1.36s|
+[GPU:0] | 样本:034 | ID:scene0416_00_000950 | 时间:1.36s|
+[GPU:0] | 样本:035 | ID:scene0628_00_000100 | 时间:1.36s|
+[GPU:0] | 样本:036 | ID:scene0012_01_000160 | 时间:1.36s|
+[rank3]:[W317 17:17:44.487769143 ProcessGroupNCCL.cpp:4561] [PG ID 0 PG GUID 0 Rank 3] using GPU 3 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect. Specify device_ids in barrier() to force use of a particular device, or call init_process_group() with a device_id.
+[rank2]:[W317 17:17:44.641546822 ProcessGroupNCCL.cpp:4561] [PG ID 0 PG GUID 0 Rank 2] using GPU 2 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect. Specify device_ids in barrier() to force use of a particular device, or call init_process_group() with a device_id.
+[GPU:0] | 样本:037 | ID:scene0740_00_000510 | 时间:1.36s|
+[rank5]:[W317 17:17:44.073973966 ProcessGroupNCCL.cpp:4561] [PG ID 0 PG GUID 0 Rank 5] using GPU 5 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect. Specify device_ids in barrier() to force use of a particular device, or call init_process_group() with a device_id.
+[rank4]:[W317 17:17:45.324552418 ProcessGroupNCCL.cpp:4561] [PG ID 0 PG GUID 0 Rank 4] using GPU 4 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect. Specify device_ids in barrier() to force use of a particular device, or call init_process_group() with a device_id.
+[GPU:0] 数据集 scannet 部分结果:
+mean median rmse 5 7.5 11.25 22.5 30
+13.906 7.185 22.345 34.657 51.755 66.404 82.500 87.368
+[rank0]:[W317 17:17:45.345975260 ProcessGroupNCCL.cpp:4561] [PG ID 0 PG GUID 0 Rank 0] using GPU 0 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect. Specify device_ids in barrier() to force use of a particular device, or call init_process_group() with a device_id.
+NCCL version 2.21.5+cuda12.4
+[rank1]:[W317 17:17:45.723495394 ProcessGroupNCCL.cpp:4561] [PG ID 0 PG GUID 0 Rank 1] using GPU 1 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect. Specify device_ids in barrier() to force use of a particular device, or call init_process_group() with a device_id.
+[rank6]:[W317 17:17:45.090530024 ProcessGroupNCCL.cpp:4561] [PG ID 0 PG GUID 0 Rank 6] using GPU 6 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect. Specify device_ids in barrier() to force use of a particular device, or call init_process_group() with a device_id.
+[GPU:7] | 样本:299 | ID:scene0419_02_001480 | 时间:1.33s|
+[rank7]:[W317 17:17:49.782526750 ProcessGroupNCCL.cpp:4561] [PG ID 0 PG GUID 0 Rank 7] using GPU 7 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect. Specify device_ids in barrier() to force use of a particular device, or call init_process_group() with a device_id.
+
+合并数据集 scannet 的结果...
+数据集 scannet 最终结果:
+mean median rmse 5 7.5 11.25 22.5 30
+13.817 6.952 22.539 35.720 53.152 67.213 82.621 87.374
+结果已保存至: ./infer/eval_verify_scannet_normal_8gpu/LDRN/normal/scannet/eval_metrics.txt
+
+Normal评估总结已保存至: ./infer/eval_verify_scannet_normal_8gpu/LDRN/normal/LDRN_normal_summary.txt
diff --git a/FE2E/modules/__init__.py b/FE2E/modules/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/FE2E/modules/__pycache__/__init__.cpython-310.pyc b/FE2E/modules/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..68f4518c1e6a87c9ff7571f5cd959e7f1cfbdeda
Binary files /dev/null and b/FE2E/modules/__pycache__/__init__.cpython-310.pyc differ
diff --git a/FE2E/modules/__pycache__/attention.cpython-310.pyc b/FE2E/modules/__pycache__/attention.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..fca355fe3dd45a1c97f0c5974c21525ae66dbc3d
Binary files /dev/null and b/FE2E/modules/__pycache__/attention.cpython-310.pyc differ
diff --git a/FE2E/modules/__pycache__/autoencoder.cpython-310.pyc b/FE2E/modules/__pycache__/autoencoder.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..5be13abf537f0f79293576e859d1734cf5ae5909
Binary files /dev/null and b/FE2E/modules/__pycache__/autoencoder.cpython-310.pyc differ
diff --git a/FE2E/modules/__pycache__/connector_edit.cpython-310.pyc b/FE2E/modules/__pycache__/connector_edit.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..5d46f4a9b4b0333fb704a1592014badfeb7da0ba
Binary files /dev/null and b/FE2E/modules/__pycache__/connector_edit.cpython-310.pyc differ
diff --git a/FE2E/modules/__pycache__/layers.cpython-310.pyc b/FE2E/modules/__pycache__/layers.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..5efb49cf1c63dbaa962be0066f85d7e749731796
Binary files /dev/null and b/FE2E/modules/__pycache__/layers.cpython-310.pyc differ
diff --git a/FE2E/modules/__pycache__/model_edit.cpython-310.pyc b/FE2E/modules/__pycache__/model_edit.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..1ef28e22c2782d4637bbea2cff54328e178936a3
Binary files /dev/null and b/FE2E/modules/__pycache__/model_edit.cpython-310.pyc differ
diff --git a/FE2E/modules/attention.py b/FE2E/modules/attention.py
new file mode 100644
index 0000000000000000000000000000000000000000..d2c6c43ce770ccf25283fb875363ee0ee5e4a87a
--- /dev/null
+++ b/FE2E/modules/attention.py
@@ -0,0 +1,133 @@
+import math
+
+import torch
+import torch.nn.functional as F
+
+
+try:
+ import flash_attn
+ from flash_attn.flash_attn_interface import (
+ _flash_attn_forward,
+ flash_attn_func,
+ flash_attn_varlen_func,
+ )
+except ImportError:
+ flash_attn = None
+ flash_attn_varlen_func = None
+ _flash_attn_forward = None
+ flash_attn_func = None
+
+MEMORY_LAYOUT = {
+ # flash模式:
+ # 预处理: 输入 [batch_size, seq_len, num_heads, head_dim]
+ # 后处理: 保持形状不变
+ "flash": (
+ lambda x: x, # 保持形状
+ lambda x: x, # 保持形状
+ ),
+ # torch/vanilla模式:
+ # 预处理: 交换序列和注意力头的维度 [B,S,A,D] -> [B,A,S,D]
+ # 后处理: 交换回原始维度 [B,A,S,D] -> [B,S,A,D]
+ "torch": (
+ lambda x: x.transpose(1, 2), # (B,S,A,D) -> (B,A,S,D)
+ lambda x: x.transpose(1, 2), # (B,A,S,D) -> (B,S,A,D)
+ ),
+ "vanilla": (
+ lambda x: x.transpose(1, 2),
+ lambda x: x.transpose(1, 2),
+ ),
+}
+
+
+def attention(
+ q,
+ k,
+ v,
+ mode="flash",
+ drop_rate=0,
+ attn_mask=None,
+ causal=False,
+):
+ """
+ 执行QKV自注意力计算
+
+ Args:
+ q (torch.Tensor): 查询张量,形状 [batch_size, seq_len, num_heads, head_dim]
+ k (torch.Tensor): 键张量,形状 [batch_size, seq_len_kv, num_heads, head_dim]
+ v (torch.Tensor): 值张量,形状 [batch_size, seq_len_kv, num_heads, head_dim]
+ mode (str): 注意力模式,可选 'flash', 'torch', 'vanilla'
+ drop_rate (float): 注意力矩阵的dropout概率
+ attn_mask (torch.Tensor): 注意力掩码,形状根据模式不同而变化
+ causal (bool): 是否使用因果注意力(仅关注前面位置)
+
+ Returns:
+ torch.Tensor: 注意力输出,形状 [batch_size, seq_len, num_heads * head_dim]
+ """
+ # 获取预处理和后处理函数
+ pre_attn_layout, post_attn_layout = MEMORY_LAYOUT[mode]
+
+ # 应用预处理变换
+ q = pre_attn_layout(q) # 形状根据模式变化
+ k = pre_attn_layout(k)
+ v = pre_attn_layout(v)
+
+ if mode == "torch":
+ # 使用PyTorch原生的scaled_dot_product_attention
+ if attn_mask is not None and attn_mask.dtype != torch.bool:
+ attn_mask = attn_mask.to(q.dtype)
+ x = F.scaled_dot_product_attention(
+ q, k, v, attn_mask=attn_mask, dropout_p=drop_rate, is_causal=causal
+ )
+ elif mode == "flash":
+ assert flash_attn_func is not None, "flash_attn_func未定义"
+ assert attn_mask is None, "不支持的注意力掩码"
+ x: torch.Tensor = flash_attn_func(
+ q, k, v, dropout_p=drop_rate, causal=causal, softmax_scale=None
+ ) # type: ignore
+ elif mode == "vanilla":
+ # 手动实现注意力机制
+ scale_factor = 1 / math.sqrt(q.size(-1)) # 缩放因子 1/sqrt(d_k)
+
+ b, a, s, _ = q.shape # 获取形状参数
+ s1 = k.size(2) # 键值序列长度
+
+ # 初始化注意力偏置
+ attn_bias = torch.zeros(b, a, s, s1, dtype=q.dtype, device=q.device)
+
+ # 处理因果掩码
+ if causal:
+ assert attn_mask is None, "因果掩码和注意力掩码不能同时使用"
+ # 生成下三角因果掩码
+ temp_mask = torch.ones(b, a, s, s, dtype=torch.bool, device=q.device).tril(
+ diagonal=0
+ )
+ attn_bias.masked_fill_(temp_mask.logical_not(), float("-inf"))
+ attn_bias = attn_bias.to(q.dtype)
+
+ # 处理自定义注意力掩码
+ if attn_mask is not None:
+ if attn_mask.dtype == torch.bool:
+ attn_bias.masked_fill_(attn_mask.logical_not(), float("-inf"))
+ else:
+ attn_bias += attn_mask # 允许类似ALiBi的位置偏置
+
+ # 计算注意力矩阵
+ attn = (q @ k.transpose(-2, -1)) * scale_factor # [B,A,S,S1]
+ attn += attn_bias
+
+ # softmax和dropout
+ attn = attn.softmax(dim=-1)
+ attn = torch.dropout(attn, p=drop_rate, train=True)
+
+ # 计算输出
+ x = attn @ v # [B,A,S,D]
+ else:
+ raise NotImplementedError(f"不支持的注意力模式: {mode}")
+
+ # 应用后处理变换
+ x = post_attn_layout(x) # 恢复原始维度顺序
+
+ # 合并注意力头维度
+ b, s, a, d = x.shape
+ out = x.reshape(b, s, -1) # [B,S,A*D]
+ return out
diff --git a/FE2E/modules/autoencoder.py b/FE2E/modules/autoencoder.py
new file mode 100644
index 0000000000000000000000000000000000000000..d82bcfbe14e46da8040c72c26922dfdae0d32e0c
--- /dev/null
+++ b/FE2E/modules/autoencoder.py
@@ -0,0 +1,334 @@
+# Modified from Flux
+#
+# Copyright 2024 Black Forest Labs
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This source code is licensed under the license found in the
+# LICENSE file in the root directory of this source tree.
+import torch
+from einops import rearrange
+from torch import Tensor, nn
+
+
+def swish(x: Tensor) -> Tensor:
+ return x * torch.sigmoid(x)
+
+
+class AttnBlock(nn.Module):
+ def __init__(self, in_channels: int):
+ super().__init__()
+ self.in_channels = in_channels
+
+ self.norm = nn.GroupNorm(num_groups=32, num_channels=in_channels, eps=1e-6, affine=True)
+
+ self.q = nn.Conv2d(in_channels, in_channels, kernel_size=1)
+ self.k = nn.Conv2d(in_channels, in_channels, kernel_size=1)
+ self.v = nn.Conv2d(in_channels, in_channels, kernel_size=1)
+ self.proj_out = nn.Conv2d(in_channels, in_channels, kernel_size=1)
+
+ def attention(self, h_: Tensor) -> Tensor:
+ h_ = self.norm(h_)
+ q = self.q(h_)
+ k = self.k(h_)
+ v = self.v(h_)
+
+ b, c, h, w = q.shape
+ q = rearrange(q, "b c h w -> b 1 (h w) c").contiguous()
+ k = rearrange(k, "b c h w -> b 1 (h w) c").contiguous()
+ v = rearrange(v, "b c h w -> b 1 (h w) c").contiguous()
+ h_ = nn.functional.scaled_dot_product_attention(q, k, v)
+
+ return rearrange(h_, "b 1 (h w) c -> b c h w", h=h, w=w, c=c, b=b)
+
+ def forward(self, x: Tensor) -> Tensor:
+ return x + self.proj_out(self.attention(x))
+
+
+class ResnetBlock(nn.Module):
+ def __init__(self, in_channels: int, out_channels: int):
+ super().__init__()
+ self.in_channels = in_channels
+ out_channels = in_channels if out_channels is None else out_channels
+ self.out_channels = out_channels
+
+ self.norm1 = nn.GroupNorm(num_groups=32, num_channels=in_channels, eps=1e-6, affine=True)
+ self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=1, padding=1)
+ self.norm2 = nn.GroupNorm(num_groups=32, num_channels=out_channels, eps=1e-6, affine=True)
+ self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=1, padding=1)
+ if self.in_channels != self.out_channels:
+ self.nin_shortcut = nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=1, padding=0)
+
+ def forward(self, x):
+ h = x
+ h = self.norm1(h)
+ h = swish(h)
+ h = self.conv1(h)
+
+ h = self.norm2(h)
+ h = swish(h)
+ h = self.conv2(h)
+
+ if self.in_channels != self.out_channels:
+ x = self.nin_shortcut(x)
+
+ return x + h
+
+
+class Downsample(nn.Module):
+ def __init__(self, in_channels: int):
+ super().__init__()
+ # no asymmetric padding in torch conv, must do it ourselves
+ self.conv = nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=2, padding=0)
+
+ def forward(self, x: Tensor):
+ pad = (0, 1, 0, 1)
+ x = nn.functional.pad(x, pad, mode="constant", value=0)
+ x = self.conv(x)
+ return x
+
+
+class Upsample(nn.Module):
+ def __init__(self, in_channels: int):
+ super().__init__()
+ self.conv = nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=1)
+
+ def forward(self, x: Tensor):
+ x = nn.functional.interpolate(x, scale_factor=2.0, mode="nearest")
+ x = self.conv(x)
+ return x
+
+
+class Encoder(nn.Module):
+ def __init__(
+ self,
+ resolution: int,
+ in_channels: int,
+ ch: int,
+ ch_mult: list[int],
+ num_res_blocks: int,
+ z_channels: int,
+ ):
+ super().__init__()
+ self.ch = ch
+ self.num_resolutions = len(ch_mult)
+ self.num_res_blocks = num_res_blocks
+ self.resolution = resolution
+ self.in_channels = in_channels
+ # downsampling
+ self.conv_in = nn.Conv2d(in_channels, self.ch, kernel_size=3, stride=1, padding=1)
+
+ curr_res = resolution
+ in_ch_mult = (1, *tuple(ch_mult))
+ self.in_ch_mult = in_ch_mult
+ self.down = nn.ModuleList()
+ block_in = self.ch
+ for i_level in range(self.num_resolutions):
+ block = nn.ModuleList()
+ attn = nn.ModuleList()
+ block_in = ch * in_ch_mult[i_level]
+ block_out = ch * ch_mult[i_level]
+ for _ in range(self.num_res_blocks):
+ block.append(ResnetBlock(in_channels=block_in, out_channels=block_out))
+ block_in = block_out
+ down = nn.Module()
+ down.block = block
+ down.attn = attn
+ if i_level != self.num_resolutions - 1:
+ down.downsample = Downsample(block_in)
+ curr_res = curr_res // 2
+ self.down.append(down)
+
+ # middle
+ self.mid = nn.Module()
+ self.mid.block_1 = ResnetBlock(in_channels=block_in, out_channels=block_in)
+ self.mid.attn_1 = AttnBlock(block_in)
+ self.mid.block_2 = ResnetBlock(in_channels=block_in, out_channels=block_in)
+
+ # end
+ self.norm_out = nn.GroupNorm(num_groups=32, num_channels=block_in, eps=1e-6, affine=True)
+ self.conv_out = nn.Conv2d(block_in, 2 * z_channels, kernel_size=3, stride=1, padding=1)
+
+ def forward(self, x: Tensor) -> Tensor:
+ # downsampling
+ hs = [self.conv_in(x)]
+ for i_level in range(self.num_resolutions):
+ for i_block in range(self.num_res_blocks):
+ h = self.down[i_level].block[i_block](hs[-1])
+ if len(self.down[i_level].attn) > 0:
+ h = self.down[i_level].attn[i_block](h)
+ hs.append(h)
+ if i_level != self.num_resolutions - 1:
+ hs.append(self.down[i_level].downsample(hs[-1]))
+
+ # middle
+ h = hs[-1]
+ h = self.mid.block_1(h)
+ h = self.mid.attn_1(h)
+ h = self.mid.block_2(h)
+ # end
+ h = self.norm_out(h)
+ h = swish(h)
+ h = self.conv_out(h)
+ return h
+
+
+class Decoder(nn.Module):
+ def __init__(
+ self,
+ ch: int,
+ out_ch: int,
+ ch_mult: list[int],
+ num_res_blocks: int,
+ in_channels: int,
+ resolution: int,
+ z_channels: int,
+ ):
+ super().__init__()
+ self.ch = ch
+ self.num_resolutions = len(ch_mult)
+ self.num_res_blocks = num_res_blocks
+ self.resolution = resolution
+ self.in_channels = in_channels
+ self.ffactor = 2 ** (self.num_resolutions - 1)
+
+ # compute in_ch_mult, block_in and curr_res at lowest res
+ block_in = ch * ch_mult[self.num_resolutions - 1]
+ curr_res = resolution // 2 ** (self.num_resolutions - 1)
+ self.z_shape = (1, z_channels, curr_res, curr_res)
+
+ # z to block_in
+ self.conv_in = nn.Conv2d(z_channels, block_in, kernel_size=3, stride=1, padding=1)
+
+ # middle
+ self.mid = nn.Module()
+ self.mid.block_1 = ResnetBlock(in_channels=block_in, out_channels=block_in)
+ self.mid.attn_1 = AttnBlock(block_in)
+ self.mid.block_2 = ResnetBlock(in_channels=block_in, out_channels=block_in)
+
+ # upsampling
+ self.up = nn.ModuleList()
+ for i_level in reversed(range(self.num_resolutions)):
+ block = nn.ModuleList()
+ attn = nn.ModuleList()
+ block_out = ch * ch_mult[i_level]
+ for _ in range(self.num_res_blocks + 1):
+ block.append(ResnetBlock(in_channels=block_in, out_channels=block_out))
+ block_in = block_out
+ up = nn.Module()
+ up.block = block
+ up.attn = attn
+ if i_level != 0:
+ up.upsample = Upsample(block_in)
+ curr_res = curr_res * 2
+ self.up.insert(0, up) # prepend to get consistent order
+
+ # end
+ self.norm_out = nn.GroupNorm(num_groups=32, num_channels=block_in, eps=1e-6, affine=True)
+ self.conv_out = nn.Conv2d(block_in, out_ch, kernel_size=3, stride=1, padding=1)
+
+ def forward(self, z: Tensor) -> Tensor:
+ # z to block_in
+ h = self.conv_in(z)
+
+ # middle
+ h = self.mid.block_1(h)
+ h = self.mid.attn_1(h)
+ h = self.mid.block_2(h)
+
+ # upsampling
+ for i_level in reversed(range(self.num_resolutions)):
+ for i_block in range(self.num_res_blocks + 1):
+ h = self.up[i_level].block[i_block](h)
+ if len(self.up[i_level].attn) > 0:
+ h = self.up[i_level].attn[i_block](h)
+ if i_level != 0:
+ h = self.up[i_level].upsample(h)
+
+ # end
+ h = self.norm_out(h)
+ h = swish(h)
+ h = self.conv_out(h)
+ return h
+
+
+class DiagonalGaussian(nn.Module):
+ def __init__(self, sample: bool = True, chunk_dim: int = 1):
+ super().__init__()
+ self.sample = sample
+ self.chunk_dim = chunk_dim
+
+ def forward(self, z: Tensor) -> Tensor:
+ mean, logvar = torch.chunk(z, 2, dim=self.chunk_dim)
+ if self.sample:
+ std = torch.exp(0.5 * logvar)
+ return mean + std * torch.randn_like(mean)
+ else:
+ return mean
+
+
+class AutoEncoder(nn.Module):
+ def __init__(
+ self,
+ resolution: int,
+ in_channels: int,
+ ch: int,
+ out_ch: int,
+ ch_mult: list[int],
+ num_res_blocks: int,
+ z_channels: int,
+ scale_factor: float,
+ shift_factor: float,
+ ):
+ super().__init__()
+ self.encoder = Encoder(
+ resolution=resolution,
+ in_channels=in_channels,
+ ch=ch,
+ ch_mult=ch_mult,
+ num_res_blocks=num_res_blocks,
+ z_channels=z_channels,
+ )
+ self.decoder = Decoder(
+ resolution=resolution,
+ in_channels=in_channels,
+ ch=ch,
+ out_ch=out_ch,
+ ch_mult=ch_mult,
+ num_res_blocks=num_res_blocks,
+ z_channels=z_channels,
+ )
+ self.reg = DiagonalGaussian()
+
+ self.scale_factor = scale_factor
+ self.shift_factor = shift_factor
+
+ @property
+ def device(self) -> torch.device:
+ return next(self.parameters()).device
+
+ @property
+ def dtype(self) -> torch.dtype:
+ return next(self.parameters()).dtype
+
+ def encode(self, x: Tensor) -> Tensor:
+ z = self.reg(self.encoder(x))
+ z = self.scale_factor * (z - self.shift_factor)
+ return z
+
+ def decode(self, z: Tensor) -> Tensor:
+ z = z / self.scale_factor + self.shift_factor
+ return self.decoder(z)
+
+ def forward(self, x: Tensor) -> Tensor:
+ return self.decode(self.encode(x))
diff --git a/FE2E/modules/conditioner.py b/FE2E/modules/conditioner.py
new file mode 100644
index 0000000000000000000000000000000000000000..3532a02e8ac19856e20e3857705cb883b865bc74
--- /dev/null
+++ b/FE2E/modules/conditioner.py
@@ -0,0 +1,239 @@
+import torch
+from qwen_vl_utils import process_vision_info
+from transformers import (
+ AutoProcessor,
+ Qwen2VLForConditionalGeneration,
+ Qwen2_5_VLForConditionalGeneration,
+)
+from torchvision.transforms import ToPILImage
+
+to_pil = ToPILImage()
+
+Qwen25VL_7b_PREFIX = '''You are an expert image analyst specializing in 3D scene understanding. Your goal is to describe the 3D structure and layout of the scene in the image to aid in depth estimation tasks.
+- Focus your description on elements crucial for 3D understanding. Incorporate observations about key **objects**, their **spatial relationships** (like positions, relative distances, and relative sizes using real-world orientation), the overall **layout**, potential **camera perspective**, and visible **depth cues** (like occlusion or perspective lines) into a unified description.
+- Be concise but informative, and assume it is a real-world image. Only describe what you are very confident about.
+User Prompt:'''
+
+Qwen25VL_7b_PREFIX2 = '''Given a user prompt, generate an "Enhanced prompt" that provides detailed visual descriptions suitable for image generation. Evaluate the level of detail in the user prompt:
+- If the prompt is simple, focus on adding specifics about colors, shapes, sizes, textures, and spatial relationships to create vivid and concrete scenes.
+- If the prompt is already detailed, refine and enhance the existing details slightly without overcomplicating.\n
+Here are examples of how to transform or refine prompts:
+- User Prompt: A cat sleeping -> Enhanced: A small, fluffy white cat curled up in a round shape, sleeping peacefully on a warm sunny windowsill, surrounded by pots of blooming red flowers.
+- User Prompt: A busy city street -> Enhanced: A bustling city street scene at dusk, featuring glowing street lamps, a diverse crowd of people in colorful clothing, and a double-decker bus passing by towering glass skyscrapers.\n
+Please generate only the enhanced description for the prompt below and avoid including any additional commentary or evaluations:
+User Prompt:'''
+
+Qwen25VL_7b_PREFIX3 = '''You are a helpful assistant. Describe the image in detail. User Prompt:'''
+
+def split_string(s):
+ # 将中文引号替换为英文引号
+ s = s.replace("“", '"').replace("”", '"') # use english quotes
+ result = []
+ # 标记是否在引号内
+ in_quotes = False
+ temp = ""
+
+ # 遍历字符串中的每个字符及其索引
+ for idx, char in enumerate(s):
+ # 如果字符是引号且索引大于 155
+ if char == '"' and idx > 155:
+ # 将引号添加到临时字符串
+ temp += char
+ # 如果不在引号内
+ if not in_quotes:
+ # 将临时字符串添加到结果列表
+ result.append(temp)
+ # 清空临时字符串
+ temp = ""
+
+ # 切换引号状态
+ in_quotes = not in_quotes
+ continue
+ # 如果在引号内
+ if in_quotes:
+ # 如果字符是空格
+ if char.isspace():
+ pass # have space token
+
+ # 将字符用中文引号包裹后添加到结果列表
+ result.append("“" + char + "”")
+ else:
+ # 将字符添加到临时字符串
+ temp += char
+
+ # 如果临时字符串不为空
+ if temp:
+ # 将临时字符串添加到结果列表
+ result.append(temp)
+
+ return result
+
+
+class Qwen25VL_7b_Embedder(torch.nn.Module):
+ def __init__(self, model_path, max_length=640, dtype=torch.bfloat16, device="cuda",args=None):
+ super(Qwen25VL_7b_Embedder, self).__init__()
+ self.max_length = max_length
+
+ self.model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
+ model_path,
+ torch_dtype=dtype,
+ attn_implementation="flash_attention_2",
+ ).to(torch.cuda.current_device())
+
+ self.model.requires_grad_(False)
+ self.processor = AutoProcessor.from_pretrained(
+ model_path, min_pixels=256 * 28 * 28, max_pixels=324 * 28 * 28
+ )
+
+ self.prefix = Qwen25VL_7b_PREFIX if (args is not None) and (not args.old_prompt) else Qwen25VL_7b_PREFIX2
+ self.prefix = Qwen25VL_7b_PREFIX3 if (args is not None) and (args.prompt_type == "rgb" or args.prompt_type == "empty") else self.prefix
+ self.prefix_len = self.calculate_len_of_prefix()
+
+ @property
+ def device(self) -> torch.device:
+ return next(self.parameters()).device
+
+ @property
+ def dtype(self) -> torch.dtype:
+ return next(self.parameters()).dtype
+
+ def calculate_len_of_prefix(self):
+ messages_specific = [{"role": "user", "content": []}]
+ messages_specific[0]["content"].append({"type": "text", "text": f"{self.prefix}"})
+
+ text_specific = self.processor.apply_chat_template(
+ messages_specific, tokenize=False, add_generation_prompt=True, add_vision_id=True
+ )
+
+
+ inputs_specific = self.processor(
+ text=[text_specific],
+ padding=True,
+ # return_tensors="pt",
+ )
+ len_specific = len(inputs_specific["input_ids"][0]) - 6 # 223 - 6 = self.prefix_len
+ return len_specific
+
+ def forward(self, caption, ref_images):
+ text_list = caption
+ embs = torch.zeros(
+ len(text_list),
+ self.max_length,
+ self.model.config.hidden_size,
+ dtype=torch.bfloat16,
+ device=torch.cuda.current_device(),
+ )
+ hidden_states = torch.zeros(
+ len(text_list),
+ self.max_length,
+ self.model.config.hidden_size,
+ dtype=torch.bfloat16,
+ device=torch.cuda.current_device(),
+ )
+ masks = torch.zeros(
+ len(text_list),
+ self.max_length,
+ dtype=torch.long,
+ device=torch.cuda.current_device(),
+ )
+ input_ids_list = []
+ attention_mask_list = []
+ emb_list = []
+
+ def split_string(s):
+ s = s.replace("“", '"').replace("”", '"').replace("'", '''"''') # use english quotes
+ result = []
+ in_quotes = False
+ temp = ""
+
+ for idx,char in enumerate(s):
+ if char == '"' and idx>155:
+ temp += char
+ if not in_quotes:
+ result.append(temp)
+ temp = ""
+
+ in_quotes = not in_quotes
+ continue
+ if in_quotes:
+ if char.isspace():
+ pass # have space token
+
+ result.append("“" + char + "”")
+ else:
+ temp += char
+
+ if temp:
+ result.append(temp)
+
+ return result
+
+
+ for idx, (txt, imgs) in enumerate(zip(text_list, ref_images)):
+
+ messages = [{"role": "user", "content": []}]
+ messages[0]["content"].append({"type": "text", "text": f"{self.prefix}"})
+ messages[0]["content"].append({"type": "image", "image": to_pil(imgs)})
+ # 再添加 text
+ messages[0]["content"].append({"type": "text", "text": f"{txt}"})
+ # Preparation for inference
+ text = self.processor.apply_chat_template(
+ messages, tokenize=False, add_generation_prompt=True, add_vision_id=True
+ )
+ image_inputs, video_inputs = process_vision_info(messages)
+ inputs = self.processor(
+ text=[text],
+ images=image_inputs,
+ padding=True,
+ return_tensors="pt",
+ )
+
+ old_inputs_ids = inputs.input_ids
+ text_split_list = split_string(text)
+ token_list = []
+ for text_each in text_split_list:
+ txt_inputs = self.processor(
+ text=text_each,
+ images=None,
+ videos=None,
+ padding=True,
+ return_tensors="pt",
+ )
+ token_each = txt_inputs.input_ids
+ if token_each[0][0] == 2073 and token_each[0][-1] == 854:
+ token_each = token_each[:, 1:-1]
+ token_list.append(token_each)
+ else:
+ token_list.append(token_each)
+
+ new_txt_ids = torch.cat(token_list, dim=1).to("cuda")
+
+ new_txt_ids = new_txt_ids.to(old_inputs_ids.device)
+
+ idx1 = (old_inputs_ids == 151653).nonzero(as_tuple=True)[1][0]
+ idx2 = (new_txt_ids == 151653).nonzero(as_tuple=True)[1][0]
+ inputs.input_ids = (
+ torch.cat([old_inputs_ids[0, :idx1], new_txt_ids[0, idx2:]], dim=0)
+ .unsqueeze(0)
+ .to("cuda")
+ )
+ inputs.attention_mask = (inputs.input_ids > 0).long().to("cuda")
+ outputs = self.model(
+ input_ids=inputs.input_ids,
+ attention_mask=inputs.attention_mask,
+ pixel_values=inputs.pixel_values.to("cuda"),
+ image_grid_thw=inputs.image_grid_thw.to("cuda"),
+ output_hidden_states=True,
+ )
+
+ emb = outputs["hidden_states"][-1]
+
+ embs[idx, : min(self.max_length, emb.shape[1] - self.prefix_len)] = emb[0, self.prefix_len:][:self.max_length] #2,640,3584
+
+ masks[idx, : min(self.max_length, emb.shape[1] - self.prefix_len)] = torch.ones(
+ (min(self.max_length, emb.shape[1] - self.prefix_len)),
+ dtype=torch.long,
+ device=torch.cuda.current_device(),
+ )
+
+ return embs, masks
\ No newline at end of file
diff --git a/FE2E/modules/connector_edit.py b/FE2E/modules/connector_edit.py
new file mode 100644
index 0000000000000000000000000000000000000000..7aa589d7ccba1cc2517f25537076e97362df98e4
--- /dev/null
+++ b/FE2E/modules/connector_edit.py
@@ -0,0 +1,486 @@
+from typing import Optional
+
+import torch
+import torch.nn
+from einops import rearrange
+from torch import nn
+
+from .layers import MLP, TextProjection, TimestepEmbedder, apply_gate, attention
+
+
+class RMSNorm(nn.Module):
+ def __init__(
+ self,
+ dim: int,
+ elementwise_affine=True,
+ eps: float = 1e-6,
+ device=None,
+ dtype=None,
+ ):
+ """
+ Initialize the RMSNorm normalization layer.
+
+ Args:
+ dim (int): The dimension of the input tensor.
+ eps (float, optional): A small value added to the denominator for numerical stability. Default is 1e-6.
+
+ Attributes:
+ eps (float): A small value added to the denominator for numerical stability.
+ weight (nn.Parameter): Learnable scaling parameter.
+
+ """
+ factory_kwargs = {"device": device, "dtype": dtype}
+ super().__init__()
+ self.eps = eps
+ if elementwise_affine:
+ self.weight = nn.Parameter(torch.ones(dim, **factory_kwargs))
+
+ def _norm(self, x):
+ """
+ Apply the RMSNorm normalization to the input tensor.
+
+ Args:
+ x (torch.Tensor): The input tensor.
+
+ Returns:
+ torch.Tensor: The normalized tensor.
+
+ """
+ return x * torch.rsqrt(x.pow(2).mean(-1, keepdim=True) + self.eps)
+
+ def forward(self, x):
+ """
+ Forward pass through the RMSNorm layer.
+
+ Args:
+ x (torch.Tensor): The input tensor.
+
+ Returns:
+ torch.Tensor: The output tensor after applying RMSNorm.
+
+ """
+ output = self._norm(x.float()).type_as(x)
+ if hasattr(self, "weight"):
+ output = output * self.weight
+ return output
+
+
+def get_norm_layer(norm_layer):
+ """
+ Get the normalization layer.
+
+ Args:
+ norm_layer (str): The type of normalization layer.
+
+ Returns:
+ norm_layer (nn.Module): The normalization layer.
+ """
+ if norm_layer == "layer":
+ return nn.LayerNorm
+ elif norm_layer == "rms":
+ return RMSNorm
+ else:
+ raise NotImplementedError(f"Norm layer {norm_layer} is not implemented")
+
+
+def get_activation_layer(act_type):
+ """get activation layer
+
+ Args:
+ act_type (str): the activation type
+
+ Returns:
+ torch.nn.functional: the activation layer
+ """
+ if act_type == "gelu":
+ return lambda: nn.GELU()
+ elif act_type == "gelu_tanh":
+ return lambda: nn.GELU(approximate="tanh")
+ elif act_type == "relu":
+ return nn.ReLU
+ elif act_type == "silu":
+ return nn.SiLU
+ else:
+ raise ValueError(f"Unknown activation type: {act_type}")
+
+class IndividualTokenRefinerBlock(torch.nn.Module):
+ def __init__(
+ self,
+ hidden_size,
+ heads_num,
+ mlp_width_ratio: str = 4.0,
+ mlp_drop_rate: float = 0.0,
+ act_type: str = "silu",
+ qk_norm: bool = False,
+ qk_norm_type: str = "layer",
+ qkv_bias: bool = True,
+ need_CA: bool = False,
+ dtype: Optional[torch.dtype] = None,
+ device: Optional[torch.device] = None,
+ ):
+ factory_kwargs = {"device": device, "dtype": dtype}
+ super().__init__()
+ self.need_CA = need_CA
+ self.heads_num = heads_num
+ head_dim = hidden_size // heads_num
+ mlp_hidden_dim = int(hidden_size * mlp_width_ratio)
+
+ self.norm1 = nn.LayerNorm(
+ hidden_size, elementwise_affine=True, eps=1e-6, **factory_kwargs
+ )
+ self.self_attn_qkv = nn.Linear(
+ hidden_size, hidden_size * 3, bias=qkv_bias, **factory_kwargs
+ )
+ qk_norm_layer = get_norm_layer(qk_norm_type)
+ self.self_attn_q_norm = (
+ qk_norm_layer(head_dim, elementwise_affine=True, eps=1e-6, **factory_kwargs)
+ if qk_norm
+ else nn.Identity()
+ )
+ self.self_attn_k_norm = (
+ qk_norm_layer(head_dim, elementwise_affine=True, eps=1e-6, **factory_kwargs)
+ if qk_norm
+ else nn.Identity()
+ )
+ self.self_attn_proj = nn.Linear(
+ hidden_size, hidden_size, bias=qkv_bias, **factory_kwargs
+ )
+
+ self.norm2 = nn.LayerNorm(
+ hidden_size, elementwise_affine=True, eps=1e-6, **factory_kwargs
+ )
+ act_layer = get_activation_layer(act_type)
+ self.mlp = MLP(
+ in_channels=hidden_size,
+ hidden_channels=mlp_hidden_dim,
+ act_layer=act_layer,
+ drop=mlp_drop_rate,
+ **factory_kwargs,
+ )
+
+ self.adaLN_modulation = nn.Sequential(
+ act_layer(),
+ nn.Linear(hidden_size, 2 * hidden_size, bias=True, **factory_kwargs),
+ )
+
+ if self.need_CA:
+ self.cross_attnblock=CrossAttnBlock(hidden_size=hidden_size,
+ heads_num=heads_num,
+ mlp_width_ratio=mlp_width_ratio,
+ mlp_drop_rate=mlp_drop_rate,
+ act_type=act_type,
+ qk_norm=qk_norm,
+ qk_norm_type=qk_norm_type,
+ qkv_bias=qkv_bias,
+ **factory_kwargs,)
+ # Zero-initialize the modulation
+ nn.init.zeros_(self.adaLN_modulation[1].weight)
+ nn.init.zeros_(self.adaLN_modulation[1].bias)
+
+ def forward(
+ self,
+ x: torch.Tensor,
+ c: torch.Tensor, # timestep_aware_representations + context_aware_representations
+ attn_mask: torch.Tensor = None,
+ y: torch.Tensor = None,
+ ):
+ gate_msa, gate_mlp = self.adaLN_modulation(c).chunk(2, dim=1)
+
+ norm_x = self.norm1(x)
+ qkv = self.self_attn_qkv(norm_x)
+ q, k, v = rearrange(qkv, "B L (K H D) -> K B L H D", K=3, H=self.heads_num)
+ # Apply QK-Norm if needed
+ q = self.self_attn_q_norm(q).to(v)
+ k = self.self_attn_k_norm(k).to(v)
+
+ # Self-Attention
+ attn = attention(q, k, v, mode="torch", attn_mask=attn_mask)
+
+ x = x + apply_gate(self.self_attn_proj(attn), gate_msa)
+
+ if self.need_CA:
+ x = self.cross_attnblock(x, c, attn_mask, y)
+
+ # FFN Layer
+ x = x + apply_gate(self.mlp(self.norm2(x)), gate_mlp)
+
+ return x
+
+
+
+
+class CrossAttnBlock(torch.nn.Module):
+ def __init__(
+ self,
+ hidden_size,
+ heads_num,
+ mlp_width_ratio: str = 4.0,
+ mlp_drop_rate: float = 0.0,
+ act_type: str = "silu",
+ qk_norm: bool = False,
+ qk_norm_type: str = "layer",
+ qkv_bias: bool = True,
+ dtype: Optional[torch.dtype] = None,
+ device: Optional[torch.device] = None,
+ ):
+ factory_kwargs = {"device": device, "dtype": dtype}
+ super().__init__()
+ self.heads_num = heads_num
+ head_dim = hidden_size // heads_num
+
+ self.norm1 = nn.LayerNorm(
+ hidden_size, elementwise_affine=True, eps=1e-6, **factory_kwargs
+ )
+ self.norm1_2 = nn.LayerNorm(
+ hidden_size, elementwise_affine=True, eps=1e-6, **factory_kwargs
+ )
+ self.self_attn_q = nn.Linear(
+ hidden_size, hidden_size, bias=qkv_bias, **factory_kwargs
+ )
+ self.self_attn_kv = nn.Linear(
+ hidden_size, hidden_size*2, bias=qkv_bias, **factory_kwargs
+ )
+ qk_norm_layer = get_norm_layer(qk_norm_type)
+ self.self_attn_q_norm = (
+ qk_norm_layer(head_dim, elementwise_affine=True, eps=1e-6, **factory_kwargs)
+ if qk_norm
+ else nn.Identity()
+ )
+ self.self_attn_k_norm = (
+ qk_norm_layer(head_dim, elementwise_affine=True, eps=1e-6, **factory_kwargs)
+ if qk_norm
+ else nn.Identity()
+ )
+ self.self_attn_proj = nn.Linear(
+ hidden_size, hidden_size, bias=qkv_bias, **factory_kwargs
+ )
+
+ self.norm2 = nn.LayerNorm(
+ hidden_size, elementwise_affine=True, eps=1e-6, **factory_kwargs
+ )
+ act_layer = get_activation_layer(act_type)
+
+ self.adaLN_modulation = nn.Sequential(
+ act_layer(),
+ nn.Linear(hidden_size, 2 * hidden_size, bias=True, **factory_kwargs),
+ )
+ # Zero-initialize the modulation
+ nn.init.zeros_(self.adaLN_modulation[1].weight)
+ nn.init.zeros_(self.adaLN_modulation[1].bias)
+
+ def forward(
+ self,
+ x: torch.Tensor,
+ c: torch.Tensor, # timestep_aware_representations + context_aware_representations
+ attn_mask: torch.Tensor = None,
+ y: torch.Tensor=None,
+
+ ):
+ gate_msa, gate_mlp = self.adaLN_modulation(c).chunk(2, dim=1)
+
+ norm_x = self.norm1(x)
+ norm_y = self.norm1_2(y)
+ q = self.self_attn_q(norm_x)
+ q = rearrange(q, "B L (H D) -> B L H D", H=self.heads_num)
+ kv = self.self_attn_kv(norm_y)
+ k, v = rearrange(kv, "B L (K H D) -> K B L H D", K=2, H=self.heads_num)
+ # Apply QK-Norm if needed
+ q = self.self_attn_q_norm(q).to(v)
+ k = self.self_attn_k_norm(k).to(v)
+
+ # Self-Attention
+ attn = attention(q, k, v, mode="torch", attn_mask=attn_mask)
+
+ x = x + apply_gate(self.self_attn_proj(attn), gate_msa)
+
+ return x
+
+
+
+class IndividualTokenRefiner(torch.nn.Module):
+ def __init__(
+ self,
+ hidden_size,
+ heads_num,
+ depth,
+ mlp_width_ratio: float = 4.0,
+ mlp_drop_rate: float = 0.0,
+ act_type: str = "silu",
+ qk_norm: bool = False,
+ qk_norm_type: str = "layer",
+ qkv_bias: bool = True,
+ need_CA:bool=False,
+ dtype: Optional[torch.dtype] = None,
+ device: Optional[torch.device] = None,
+ ):
+
+ factory_kwargs = {"device": device, "dtype": dtype}
+ super().__init__()
+ self.need_CA = need_CA
+ self.blocks = nn.ModuleList(
+ [
+ IndividualTokenRefinerBlock(
+ hidden_size=hidden_size,
+ heads_num=heads_num,
+ mlp_width_ratio=mlp_width_ratio,
+ mlp_drop_rate=mlp_drop_rate,
+ act_type=act_type,
+ qk_norm=qk_norm,
+ qk_norm_type=qk_norm_type,
+ qkv_bias=qkv_bias,
+ need_CA=self.need_CA,
+ **factory_kwargs,
+ )
+ for _ in range(depth)
+ ]
+ )
+
+
+ def forward(
+ self,
+ x: torch.Tensor,
+ c: torch.LongTensor,
+ mask: Optional[torch.Tensor] = None,
+ y:torch.Tensor=None,
+ ):
+ self_attn_mask = None
+ if mask is not None:
+ batch_size = mask.shape[0]
+ seq_len = mask.shape[1]
+ mask = mask.to(x.device)
+ # batch_size x 1 x seq_len x seq_len
+ self_attn_mask_1 = mask.view(batch_size, 1, 1, seq_len).repeat(
+ 1, 1, seq_len, 1
+ )
+ # batch_size x 1 x seq_len x seq_len
+ self_attn_mask_2 = self_attn_mask_1.transpose(2, 3)
+ # batch_size x 1 x seq_len x seq_len, 1 for broadcasting of heads_num
+ self_attn_mask = (self_attn_mask_1 & self_attn_mask_2).bool()
+ # avoids self-attention weight being NaN for padding tokens
+ self_attn_mask[:, :, :, 0] = True
+
+
+ for block in self.blocks:
+ x = block(x, c, self_attn_mask,y)
+
+ return x
+
+
+class SingleTokenRefiner(torch.nn.Module):
+ """
+ A single token refiner block for llm text embedding refine.
+ """
+ def __init__(
+ self,
+ in_channels,
+ hidden_size,
+ heads_num,
+ depth,
+ mlp_width_ratio: float = 4.0,
+ mlp_drop_rate: float = 0.0,
+ act_type: str = "silu",
+ qk_norm: bool = False,
+ qk_norm_type: str = "layer",
+ qkv_bias: bool = True,
+ need_CA:bool=False,
+ attn_mode: str = "torch",
+ dtype: Optional[torch.dtype] = None,
+ device: Optional[torch.device] = None,
+ ):
+ factory_kwargs = {"device": device, "dtype": dtype}
+ super().__init__()
+ self.attn_mode = attn_mode
+ self.need_CA = need_CA
+ assert self.attn_mode == "torch", "Only support 'torch' mode for token refiner."
+
+ self.input_embedder = nn.Linear(
+ in_channels, hidden_size, bias=True, **factory_kwargs
+ )
+ if self.need_CA:
+ self.input_embedder_CA = nn.Linear(
+ in_channels, hidden_size, bias=True, **factory_kwargs
+ )
+
+ act_layer = get_activation_layer(act_type)
+ # Build timestep embedding layer
+ self.t_embedder = TimestepEmbedder(hidden_size, act_layer, **factory_kwargs)
+ # Build context embedding layer
+ self.c_embedder = TextProjection(
+ in_channels, hidden_size, act_layer, **factory_kwargs
+ )
+
+ self.individual_token_refiner = IndividualTokenRefiner(
+ hidden_size=hidden_size,
+ heads_num=heads_num,
+ depth=depth,
+ mlp_width_ratio=mlp_width_ratio,
+ mlp_drop_rate=mlp_drop_rate,
+ act_type=act_type,
+ qk_norm=qk_norm,
+ qk_norm_type=qk_norm_type,
+ qkv_bias=qkv_bias,
+ need_CA=need_CA,
+ **factory_kwargs,
+ )
+
+ def forward(
+ self,
+ x: torch.Tensor,
+ t: torch.LongTensor,
+ mask: Optional[torch.LongTensor] = None,
+ y: torch.LongTensor=None,
+ ):
+ timestep_aware_representations = self.t_embedder(t)
+
+ if mask is None:
+ context_aware_representations = x.mean(dim=1)
+ else:
+ mask_float = mask.unsqueeze(-1) # [b, s1, 1]
+ context_aware_representations = (x * mask_float).sum(
+ dim=1
+ ) / mask_float.sum(dim=1)
+ context_aware_representations = self.c_embedder(context_aware_representations)
+ c = timestep_aware_representations + context_aware_representations
+
+ x = self.input_embedder(x)
+ if self.need_CA:
+ y = self.input_embedder_CA(y)
+ x = self.individual_token_refiner(x, c, mask, y)
+ else:
+ x = self.individual_token_refiner(x, c, mask)
+
+ return x
+
+
+
+class Qwen2Connector(torch.nn.Module):
+ def __init__(
+ self,
+ in_channels=3584,
+ hidden_size=4096,
+ heads_num=32,
+ depth=2,
+ need_CA=False,
+ device=None,
+ dtype=torch.bfloat16,
+ ):
+ super().__init__()
+ factory_kwargs = {"device": device, "dtype":dtype}
+
+ self.S =SingleTokenRefiner(in_channels=in_channels,hidden_size=hidden_size,heads_num=heads_num,depth=depth,need_CA=need_CA,**factory_kwargs)
+ self.global_proj_out=nn.Linear(in_channels,768)
+
+ self.scale_factor = nn.Parameter(torch.zeros(1))
+ with torch.no_grad():
+ self.scale_factor.data += -(1 - 0.09)
+
+ def forward(self, x,t,mask):
+ t = t * 1000 # fix the times embedding bug
+ mask_float = mask.unsqueeze(-1) # [b, s1, 1]
+ x_mean = (x * mask_float).sum(
+ dim=1
+ ) / mask_float.sum(dim=1) * (1 + self.scale_factor.to(x.dtype))
+
+ global_out=self.global_proj_out(x_mean)
+ encoder_hidden_states = self.S(x,t,mask)
+ return encoder_hidden_states,global_out
\ No newline at end of file
diff --git a/FE2E/modules/layers.py b/FE2E/modules/layers.py
new file mode 100644
index 0000000000000000000000000000000000000000..fc4057ece9b8a11ca64d2cdb23ad598f2c5e9cbf
--- /dev/null
+++ b/FE2E/modules/layers.py
@@ -0,0 +1,737 @@
+# Modified from Flux
+#
+# Copyright 2024 Black Forest Labs
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This source code is licensed under the license found in the
+# LICENSE file in the root directory of this source tree.
+
+import math # noqa: I001
+from dataclasses import dataclass
+from functools import partial
+
+import torch
+import torch.nn.functional as F
+from einops import rearrange
+from liger_kernel.ops.rms_norm import LigerRMSNormFunction
+from torch import Tensor, nn
+from torch.utils.checkpoint import checkpoint
+
+try:
+ import flash_attn
+ from flash_attn.flash_attn_interface import (
+ _flash_attn_forward,
+ flash_attn_varlen_func,
+ )
+except ImportError:
+ flash_attn = None
+ flash_attn_varlen_func = None
+ _flash_attn_forward = None
+
+def to_cuda(x):
+ if isinstance(x, torch.Tensor):
+ return x.cuda()
+ elif isinstance(x, (list, tuple)):
+ return [to_cuda(elem) for elem in x]
+ elif isinstance(x, dict):
+ return {k: to_cuda(v) for k, v in x.items()}
+ else:
+ return x
+
+
+def to_cpu(x):
+ if isinstance(x, torch.Tensor):
+ return x.cpu()
+ elif isinstance(x, (list, tuple)):
+ return [to_cpu(elem) for elem in x]
+ elif isinstance(x, dict):
+ return {k: to_cpu(v) for k, v in x.items()}
+ else:
+ return x
+
+MEMORY_LAYOUT = {
+ "flash": (
+ lambda x: x.view(x.shape[0] * x.shape[1], *x.shape[2:]),
+ lambda x: x,
+ ),
+ "torch": (
+ lambda x: x.transpose(1, 2),
+ lambda x: x.transpose(1, 2),
+ ),
+ "vanilla": (
+ lambda x: x.transpose(1, 2),
+ lambda x: x.transpose(1, 2),
+ ),
+}
+
+
+def attention(
+ q,
+ k,
+ v,
+ mode="flash",
+ drop_rate=0,
+ attn_mask=None,
+ causal=False,
+ cu_seqlens_q=None,
+ cu_seqlens_kv=None,
+ max_seqlen_q=None,
+ max_seqlen_kv=None,
+ batch_size=1,
+):
+ """
+ Perform QKV self attention.
+
+ Args:
+ q (torch.Tensor): Query tensor with shape [b, s, a, d], where a is the number of heads.
+ k (torch.Tensor): Key tensor with shape [b, s1, a, d]
+ v (torch.Tensor): Value tensor with shape [b, s1, a, d]
+ mode (str): Attention mode. Choose from 'self_flash', 'cross_flash', 'torch', and 'vanilla'.
+ drop_rate (float): Dropout rate in attention map. (default: 0)
+ attn_mask (torch.Tensor): Attention mask with shape [b, s1] (cross_attn), or [b, a, s, s1] (torch or vanilla).
+ (default: None)
+ causal (bool): Whether to use causal attention. (default: False)
+ cu_seqlens_q (torch.Tensor): dtype torch.int32. The cumulative sequence lengths of the sequences in the batch,
+ used to index into q.
+ cu_seqlens_kv (torch.Tensor): dtype torch.int32. The cumulative sequence lengths of the sequences in the batch,
+ used to index into kv.
+ max_seqlen_q (int): The maximum sequence length in the batch of q.
+ max_seqlen_kv (int): The maximum sequence length in the batch of k and v.
+
+ Returns:
+ torch.Tensor: Output tensor after self attention with shape [b, s, ad]
+ """
+ pre_attn_layout, post_attn_layout = MEMORY_LAYOUT[mode]
+ q = pre_attn_layout(q)
+ k = pre_attn_layout(k)
+ v = pre_attn_layout(v)
+
+ if mode == "torch":
+ if attn_mask is not None and attn_mask.dtype != torch.bool:
+ attn_mask = attn_mask.to(q.dtype)
+ x = F.scaled_dot_product_attention(
+ q, k, v, attn_mask=attn_mask, dropout_p=drop_rate, is_causal=causal
+ )
+ elif mode == "flash":
+ assert flash_attn_varlen_func is not None
+ x: torch.Tensor = flash_attn_varlen_func(
+ q,
+ k,
+ v,
+ cu_seqlens_q,
+ cu_seqlens_kv,
+ max_seqlen_q,
+ max_seqlen_kv,
+ ) # type: ignore
+ # x with shape [(bxs), a, d]
+ x = x.view(batch_size, max_seqlen_q, x.shape[-2], x.shape[-1]) # type: ignore # reshape x to [b, s, a, d]
+ elif mode == "vanilla":
+ scale_factor = 1 / math.sqrt(q.size(-1))
+
+ b, a, s, _ = q.shape
+ s1 = k.size(2)
+ attn_bias = torch.zeros(b, a, s, s1, dtype=q.dtype, device=q.device)
+ if causal:
+ # Only applied to self attention
+ assert attn_mask is None, (
+ "Causal mask and attn_mask cannot be used together"
+ )
+ temp_mask = torch.ones(b, a, s, s, dtype=torch.bool, device=q.device).tril(
+ diagonal=0
+ )
+ attn_bias.masked_fill_(temp_mask.logical_not(), float("-inf"))
+ attn_bias.to(q.dtype)
+
+ if attn_mask is not None:
+ if attn_mask.dtype == torch.bool:
+ attn_bias.masked_fill_(attn_mask.logical_not(), float("-inf"))
+ else:
+ attn_bias += attn_mask
+
+ # TODO: Maybe force q and k to be float32 to avoid numerical overflow
+ attn = (q @ k.transpose(-2, -1)) * scale_factor
+ attn += attn_bias
+ attn = attn.softmax(dim=-1)
+ attn = torch.dropout(attn, p=drop_rate, train=True)
+ x = attn @ v
+ else:
+ raise NotImplementedError(f"Unsupported attention mode: {mode}")
+
+ x = post_attn_layout(x)
+ b, s, a, d = x.shape
+ out = x.reshape(b, s, -1)
+ return out
+
+
+def apply_gate(x, gate=None, tanh=False):
+ """AI is creating summary for apply_gate
+
+ Args:
+ x (torch.Tensor): input tensor.
+ gate (torch.Tensor, optional): gate tensor. Defaults to None.
+ tanh (bool, optional): whether to use tanh function. Defaults to False.
+
+ Returns:
+ torch.Tensor: the output tensor after apply gate.
+ """
+ if gate is None:
+ return x
+ if tanh:
+ return x * gate.unsqueeze(1).tanh()
+ else:
+ return x * gate.unsqueeze(1)
+
+
+class MLP(nn.Module):
+ """MLP as used in Vision Transformer, MLP-Mixer and related networks"""
+
+ def __init__(
+ self,
+ in_channels,
+ hidden_channels=None,
+ out_features=None,
+ act_layer=nn.GELU,
+ norm_layer=None,
+ bias=True,
+ drop=0.0,
+ use_conv=False,
+ device=None,
+ dtype=None,
+ ):
+ super().__init__()
+ out_features = out_features or in_channels
+ hidden_channels = hidden_channels or in_channels
+ bias = (bias, bias)
+ drop_probs = (drop, drop)
+ linear_layer = partial(nn.Conv2d, kernel_size=1) if use_conv else nn.Linear
+
+ self.fc1 = linear_layer(
+ in_channels, hidden_channels, bias=bias[0], device=device, dtype=dtype
+ )
+ self.act = act_layer()
+ self.drop1 = nn.Dropout(drop_probs[0])
+ self.norm = (
+ norm_layer(hidden_channels, device=device, dtype=dtype)
+ if norm_layer is not None
+ else nn.Identity()
+ )
+ self.fc2 = linear_layer(
+ hidden_channels, out_features, bias=bias[1], device=device, dtype=dtype
+ )
+ self.drop2 = nn.Dropout(drop_probs[1])
+
+ def forward(self, x):
+ x = self.fc1(x)
+ x = self.act(x)
+ x = self.drop1(x)
+ x = self.norm(x)
+ x = self.fc2(x)
+ x = self.drop2(x)
+ return x
+
+
+class TextProjection(nn.Module):
+ """
+ Projects text embeddings. Also handles dropout for classifier-free guidance.
+
+ Adapted from https://github.com/PixArt-alpha/PixArt-alpha/blob/master/diffusion/model/nets/PixArt_blocks.py
+ """
+
+ def __init__(self, in_channels, hidden_size, act_layer, dtype=None, device=None):
+ factory_kwargs = {"dtype": dtype, "device": device}
+ super().__init__()
+ self.linear_1 = nn.Linear(
+ in_features=in_channels,
+ out_features=hidden_size,
+ bias=True,
+ **factory_kwargs,
+ )
+ self.act_1 = act_layer()
+ self.linear_2 = nn.Linear(
+ in_features=hidden_size,
+ out_features=hidden_size,
+ bias=True,
+ **factory_kwargs,
+ )
+
+ def forward(self, caption):
+ hidden_states = self.linear_1(caption)
+ hidden_states = self.act_1(hidden_states)
+ hidden_states = self.linear_2(hidden_states)
+ return hidden_states
+
+
+class TimestepEmbedder(nn.Module):
+ """
+ Embeds scalar timesteps into vector representations.
+ """
+
+ def __init__(
+ self,
+ hidden_size,
+ act_layer,
+ frequency_embedding_size=256,
+ max_period=10000,
+ out_size=None,
+ dtype=None,
+ device=None,
+ ):
+ factory_kwargs = {"dtype": dtype, "device": device}
+ super().__init__()
+ self.frequency_embedding_size = frequency_embedding_size
+ self.max_period = max_period
+ if out_size is None:
+ out_size = hidden_size
+
+ self.mlp = nn.Sequential(
+ nn.Linear(
+ frequency_embedding_size, hidden_size, bias=True, **factory_kwargs
+ ),
+ act_layer(),
+ nn.Linear(hidden_size, out_size, bias=True, **factory_kwargs),
+ )
+ nn.init.normal_(self.mlp[0].weight, std=0.02) # type: ignore
+ nn.init.normal_(self.mlp[2].weight, std=0.02) # type: ignore
+
+ @staticmethod
+ def timestep_embedding(t, dim, max_period=10000):
+ """
+ Create sinusoidal timestep embeddings.
+
+ Args:
+ t (torch.Tensor): a 1-D Tensor of N indices, one per batch element. These may be fractional.
+ dim (int): the dimension of the output.
+ max_period (int): controls the minimum frequency of the embeddings.
+
+ Returns:
+ embedding (torch.Tensor): An (N, D) Tensor of positional embeddings.
+
+ .. ref_link: https://github.com/openai/glide-text2im/blob/main/glide_text2im/nn.py
+ """
+ half = dim // 2
+ freqs = torch.exp(
+ -math.log(max_period)
+ * torch.arange(start=0, end=half, dtype=torch.float32)
+ / half
+ ).to(device=t.device)
+ args = t[:, None].float() * freqs[None]
+ embedding = torch.cat([torch.cos(args), torch.sin(args)], dim=-1)
+ if dim % 2:
+ embedding = torch.cat(
+ [embedding, torch.zeros_like(embedding[:, :1])], dim=-1
+ )
+ return embedding
+
+ def forward(self, t):
+ t_freq = self.timestep_embedding(
+ t, self.frequency_embedding_size, self.max_period
+ ).type(self.mlp[0].weight.dtype) # type: ignore
+ t_emb = self.mlp(t_freq)
+ return t_emb
+
+
+class EmbedND(nn.Module):
+ def __init__(self, dim: int, theta: int, axes_dim: list[int]):
+ super().__init__()
+ self.dim = dim
+ self.theta = theta
+ self.axes_dim = axes_dim
+
+ def forward(self, ids: Tensor) -> Tensor:
+ n_axes = ids.shape[-1]
+ emb = torch.cat(
+ [rope(ids[..., i], self.axes_dim[i], self.theta) for i in range(n_axes)],
+ dim=-3,
+ )
+
+ return emb.unsqueeze(1)
+
+
+class MLPEmbedder(nn.Module):
+ def __init__(self, in_dim: int, hidden_dim: int):
+ super().__init__()
+ self.in_layer = nn.Linear(in_dim, hidden_dim, bias=True)
+ self.silu = nn.SiLU()
+ self.out_layer = nn.Linear(hidden_dim, hidden_dim, bias=True)
+
+ self.gradient_checkpointing = False
+
+ def enable_gradient_checkpointing(self):
+ self.gradient_checkpointing = True
+
+ def disable_gradient_checkpointing(self):
+ self.gradient_checkpointing = False
+
+ def _forward(self, x: Tensor) -> Tensor:
+ return self.out_layer(self.silu(self.in_layer(x)))
+
+ def forward(self, *args, **kwargs):
+ if self.training and self.gradient_checkpointing:
+ return checkpoint(self._forward, *args, use_reentrant=False, **kwargs)
+ else:
+ return self._forward(*args, **kwargs)
+
+
+def rope(pos, dim: int, theta: int):
+ assert dim % 2 == 0
+ scale = torch.arange(0, dim, 2, dtype=torch.float64, device=pos.device) / dim
+ omega = 1.0 / (theta**scale)
+ out = torch.einsum("...n,d->...nd", pos, omega)
+ out = torch.stack(
+ [torch.cos(out), -torch.sin(out), torch.sin(out), torch.cos(out)], dim=-1
+ )
+ out = rearrange(out, "b n d (i j) -> b n d i j", i=2, j=2)
+ return out.float()
+
+
+def attention_after_rope(q, k, v, pe):
+ q, k = apply_rope(q, k, pe)
+
+ from .attention import attention
+
+ x = attention(q, k, v, mode="flash")
+ return x
+
+
+@torch.compile(mode="max-autotune-no-cudagraphs", dynamic=True)
+def apply_rope(xq, xk, freqs_cis):
+ # 将 num_heads 和 seq_len 的维度交换回原函数的处理顺序
+ xq = xq.transpose(1, 2) # [batch, num_heads, seq_len, head_dim]
+ xk = xk.transpose(1, 2)
+
+ # 将 head_dim 拆分为复数部分(实部和虚部)
+ xq_ = xq.float().reshape(*xq.shape[:-1], -1, 1, 2)
+ xk_ = xk.float().reshape(*xk.shape[:-1], -1, 1, 2)
+
+ # 应用旋转位置编码(复数乘法)
+ xq_out = freqs_cis[..., 0] * xq_[..., 0] + freqs_cis[..., 1] * xq_[..., 1]
+ xk_out = freqs_cis[..., 0] * xk_[..., 0] + freqs_cis[..., 1] * xk_[..., 1]
+
+ # 恢复张量形状并转置回目标维度顺序
+ xq_out = xq_out.reshape(*xq.shape).type_as(xq).transpose(1, 2)
+ xk_out = xk_out.reshape(*xk.shape).type_as(xk).transpose(1, 2)
+
+ return xq_out, xk_out
+
+
+@torch.compile(mode="max-autotune-no-cudagraphs", dynamic=True)
+def scale_add_residual(
+ x: torch.Tensor, scale: torch.Tensor, residual: torch.Tensor
+) -> torch.Tensor:
+ return x * scale + residual
+
+
+@torch.compile(mode="max-autotune-no-cudagraphs", dynamic=True)
+def layernorm_and_scale_shift(
+ x: torch.Tensor, scale: torch.Tensor, shift: torch.Tensor
+) -> torch.Tensor:
+ return torch.nn.functional.layer_norm(x, (x.size(-1),)) * (scale + 1) + shift
+
+
+class SelfAttention(nn.Module):
+ def __init__(self, dim: int, num_heads: int = 8, qkv_bias: bool = False):
+ super().__init__()
+ self.num_heads = num_heads
+ head_dim = dim // num_heads
+
+ self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)
+ self.norm = QKNorm(head_dim)
+ self.proj = nn.Linear(dim, dim)
+
+ def forward(self, x: Tensor, pe: Tensor) -> Tensor:
+ qkv = self.qkv(x)
+ q, k, v = rearrange(qkv, "B L (K H D) -> K B L H D", K=3, H=self.num_heads)
+ q, k = self.norm(q, k, v)
+ x = attention_after_rope(q, k, v, pe=pe)
+ x = self.proj(x)
+ return x
+
+
+@dataclass
+class ModulationOut:
+ shift: Tensor
+ scale: Tensor
+ gate: Tensor
+
+
+class RMSNorm(torch.nn.Module):
+ def __init__(self, dim: int):
+ super().__init__()
+ self.scale = nn.Parameter(torch.ones(dim))
+
+ @staticmethod
+ def rms_norm_fast(x, weight, eps):
+ return LigerRMSNormFunction.apply(
+ x,
+ weight,
+ eps,
+ 0.0,
+ "gemma",
+ True,
+ )
+
+ @staticmethod
+ def rms_norm(x, weight, eps):
+ x_dtype = x.dtype
+ x = x.float()
+ rrms = torch.rsqrt(torch.mean(x**2, dim=-1, keepdim=True) + eps)
+ return (x * rrms).to(dtype=x_dtype) * weight
+
+ def forward(self, x: Tensor):
+ return self.rms_norm_fast(x, self.scale.to(x.dtype), 1e-6)
+
+
+class QKNorm(torch.nn.Module):
+ def __init__(self, dim: int):
+ super().__init__()
+ self.query_norm = RMSNorm(dim)
+ self.key_norm = RMSNorm(dim)
+
+ def forward(self, q: Tensor, k: Tensor, v: Tensor) -> tuple[Tensor, Tensor]:
+ q = self.query_norm(q)
+ k = self.key_norm(k)
+ return q.to(v), k.to(v)
+
+
+class Modulation(nn.Module):
+ def __init__(self, dim: int, double: bool):
+ super().__init__()
+ self.is_double = double
+ self.multiplier = 6 if double else 3
+ self.lin = nn.Linear(dim, self.multiplier * dim, bias=True)
+
+ def forward(self, vec: Tensor) -> tuple[ModulationOut, ModulationOut | None]:
+ out = self.lin(nn.functional.silu(vec))[:, None, :].chunk(
+ self.multiplier, dim=-1
+ )
+
+ return (
+ ModulationOut(*out[:3]),
+ ModulationOut(*out[3:]) if self.is_double else None,
+ )
+
+
+class DoubleStreamBlock(nn.Module):
+ def __init__(
+ self, hidden_size: int, num_heads: int, mlp_ratio: float, qkv_bias: bool = False
+ ):
+ super().__init__()
+
+ mlp_hidden_dim = int(hidden_size * mlp_ratio)
+ self.num_heads = num_heads
+ self.hidden_size = hidden_size
+ self.img_mod = Modulation(hidden_size, double=True)
+ self.img_norm1 = nn.LayerNorm(hidden_size, elementwise_affine=False, eps=1e-6)
+ self.img_attn = SelfAttention(
+ dim=hidden_size, num_heads=num_heads, qkv_bias=qkv_bias
+ )
+
+ self.img_norm2 = nn.LayerNorm(hidden_size, elementwise_affine=False, eps=1e-6)
+ self.img_mlp = nn.Sequential(
+ nn.Linear(hidden_size, mlp_hidden_dim, bias=True),
+ nn.GELU(approximate="tanh"),
+ nn.Linear(mlp_hidden_dim, hidden_size, bias=True),
+ )
+
+ self.txt_mod = Modulation(hidden_size, double=True)
+ self.txt_norm1 = nn.LayerNorm(hidden_size, elementwise_affine=False, eps=1e-6)
+ self.txt_attn = SelfAttention(
+ dim=hidden_size, num_heads=num_heads, qkv_bias=qkv_bias
+ )
+
+ self.txt_norm2 = nn.LayerNorm(hidden_size, elementwise_affine=False, eps=1e-6)
+ self.txt_mlp = nn.Sequential(
+ nn.Linear(hidden_size, mlp_hidden_dim, bias=True),
+ nn.GELU(approximate="tanh"),
+ nn.Linear(mlp_hidden_dim, hidden_size, bias=True),
+ )
+
+ self.gradient_checkpointing = False
+ self.cpu_offload_checkpointing = False
+
+ def enable_gradient_checkpointing(self, cpu_offload: bool = False):
+ self.gradient_checkpointing = True
+ self.cpu_offload_checkpointing = cpu_offload
+
+ def disable_gradient_checkpointing(self):
+ self.gradient_checkpointing = False
+ self.cpu_offload_checkpointing = False
+
+ def _forward(
+ self, img: Tensor, txt: Tensor, vec: Tensor, pe: Tensor
+ ) -> tuple[Tensor, Tensor]:
+ img_mod1, img_mod2 = self.img_mod(vec)
+ txt_mod1, txt_mod2 = self.txt_mod(vec)
+
+ # prepare image for attention
+ img_modulated = self.img_norm1(img)
+ img_modulated = (1 + img_mod1.scale) * img_modulated + img_mod1.shift
+ img_qkv = self.img_attn.qkv(img_modulated)
+ img_q, img_k, img_v = rearrange(
+ img_qkv, "B L (K H D) -> K B L H D", K=3, H=self.num_heads
+ )
+ img_q, img_k = self.img_attn.norm(img_q, img_k, img_v)
+
+ # prepare txt for attention
+ txt_modulated = self.txt_norm1(txt)
+ txt_modulated = (1 + txt_mod1.scale) * txt_modulated + txt_mod1.shift
+ txt_qkv = self.txt_attn.qkv(txt_modulated)
+ txt_q, txt_k, txt_v = rearrange(
+ txt_qkv, "B L (K H D) -> K B L H D", K=3, H=self.num_heads
+ )
+ txt_q, txt_k = self.txt_attn.norm(txt_q, txt_k, txt_v)
+
+ # run actual attention
+ q = torch.cat((txt_q, img_q), dim=1)
+ k = torch.cat((txt_k, img_k), dim=1)
+ v = torch.cat((txt_v, img_v), dim=1)
+
+ attn = attention_after_rope(q, k, v, pe=pe)
+ txt_attn, img_attn = attn[:, : txt.shape[1]], attn[:, txt.shape[1] :]
+
+ # calculate the img bloks
+ img = img + img_mod1.gate * self.img_attn.proj(img_attn)
+ img_mlp = self.img_mlp(
+ (1 + img_mod2.scale) * self.img_norm2(img) + img_mod2.shift
+ )
+ img = scale_add_residual(img_mlp, img_mod2.gate, img)
+
+ # calculate the txt bloks
+ txt = txt + txt_mod1.gate * self.txt_attn.proj(txt_attn)
+ txt_mlp = self.txt_mlp(
+ (1 + txt_mod2.scale) * self.txt_norm2(txt) + txt_mod2.shift
+ )
+ txt = scale_add_residual(txt_mlp, txt_mod2.gate, txt)
+ return img, txt
+
+ def forward(
+ self, img: Tensor, txt: Tensor, vec: Tensor, pe: Tensor
+ ) -> tuple[Tensor, Tensor]:
+ if self.training and self.gradient_checkpointing:
+ if not self.cpu_offload_checkpointing:
+ return checkpoint(self._forward, img, txt, vec, pe, use_reentrant=False)
+ # cpu offload checkpointing
+
+ def create_custom_forward(func):
+ def custom_forward(*inputs):
+ cuda_inputs = to_cuda(inputs)
+ outputs = func(*cuda_inputs)
+ return to_cpu(outputs)
+
+ return custom_forward
+
+ return torch.utils.checkpoint.checkpoint(
+ create_custom_forward(self._forward), img, txt, vec, pe, use_reentrant=False
+ )
+
+ else:
+ return self._forward(img, txt, vec, pe)
+
+class SingleStreamBlock(nn.Module):
+ """
+ A DiT block with parallel linear layers as described in
+ https://arxiv.org/abs/2302.05442 and adapted modulation interface.
+ """
+
+ def __init__(
+ self,
+ hidden_size: int,
+ num_heads: int,
+ mlp_ratio: float = 4.0,
+ qk_scale: float | None = None,
+ ):
+ super().__init__()
+ self.hidden_dim = hidden_size
+ self.num_heads = num_heads
+ head_dim = hidden_size // num_heads
+ self.scale = qk_scale or head_dim**-0.5
+
+ self.mlp_hidden_dim = int(hidden_size * mlp_ratio)
+ # qkv and mlp_in
+ self.linear1 = nn.Linear(hidden_size, hidden_size * 3 + self.mlp_hidden_dim)
+ # proj and mlp_out
+ self.linear2 = nn.Linear(hidden_size + self.mlp_hidden_dim, hidden_size)
+
+ self.norm = QKNorm(head_dim)
+
+ self.hidden_size = hidden_size
+ self.pre_norm = nn.LayerNorm(hidden_size, elementwise_affine=False, eps=1e-6)
+
+ self.mlp_act = nn.GELU(approximate="tanh")
+ self.modulation = Modulation(hidden_size, double=False)
+
+ self.gradient_checkpointing = False
+ self.cpu_offload_checkpointing = False
+
+ def enable_gradient_checkpointing(self, cpu_offload: bool = False):
+ self.gradient_checkpointing = True
+ self.cpu_offload_checkpointing = cpu_offload
+
+ def disable_gradient_checkpointing(self):
+ self.gradient_checkpointing = False
+ self.cpu_offload_checkpointing = False
+
+ def _forward(self, x: Tensor, vec: Tensor, pe: Tensor) -> Tensor:
+ mod, _ = self.modulation(vec)
+ x_mod = (1 + mod.scale) * self.pre_norm(x) + mod.shift
+ qkv, mlp = torch.split(
+ self.linear1(x_mod), [3 * self.hidden_size, self.mlp_hidden_dim], dim=-1
+ )
+
+ q, k, v = rearrange(qkv, "B L (K H D) -> K B L H D", K=3, H=self.num_heads)
+ q, k = self.norm(q, k, v)
+
+ # compute attention
+ attn = attention_after_rope(q, k, v, pe=pe)
+ # compute activation in mlp stream, cat again and run second linear layer
+ output = self.linear2(torch.cat((attn, self.mlp_act(mlp)), 2))
+ return scale_add_residual(output, mod.gate, x)
+
+ def forward(self, x: Tensor, vec: Tensor, pe: Tensor) -> Tensor:
+ if self.training and self.gradient_checkpointing:
+ if not self.cpu_offload_checkpointing:
+ return checkpoint(self._forward, x, vec, pe, use_reentrant=False)
+
+ # cpu offload checkpointing
+
+ def create_custom_forward(func):
+ def custom_forward(*inputs):
+ cuda_inputs = to_cuda(inputs)
+ outputs = func(*cuda_inputs)
+ return to_cpu(outputs)
+
+ return custom_forward
+
+ return torch.utils.checkpoint.checkpoint(
+ create_custom_forward(self._forward), x, vec, pe, use_reentrant=False
+ )
+ else:
+ return self._forward(x, vec, pe)
+
+class LastLayer(nn.Module):
+ def __init__(self, hidden_size: int, patch_size: int, out_channels: int):
+ super().__init__()
+ self.norm_final = nn.LayerNorm(hidden_size, elementwise_affine=False, eps=1e-6)
+ self.linear = nn.Linear(
+ hidden_size, patch_size * patch_size * out_channels, bias=True
+ )
+ self.adaLN_modulation = nn.Sequential(
+ nn.SiLU(), nn.Linear(hidden_size, 2 * hidden_size, bias=True)
+ )
+
+ def forward(self, x: Tensor, vec: Tensor) -> Tensor:
+ shift, scale = self.adaLN_modulation(vec).chunk(2, dim=1)
+ x = (1 + scale[:, None, :]) * self.norm_final(x) + shift[:, None, :]
+ x = self.linear(x)
+ return x
diff --git a/FE2E/modules/model_edit.py b/FE2E/modules/model_edit.py
new file mode 100644
index 0000000000000000000000000000000000000000..3d0b32f04ccfe84188cc3304c552a414d4851468
--- /dev/null
+++ b/FE2E/modules/model_edit.py
@@ -0,0 +1,229 @@
+import math
+from dataclasses import dataclass
+
+import numpy as np
+import torch
+
+from library import custom_offloading_utils
+
+from torch import Tensor, nn
+
+from .connector_edit import Qwen2Connector
+from .layers import DoubleStreamBlock, EmbedND, LastLayer, MLPEmbedder, SingleStreamBlock
+
+
+@dataclass
+class Step1XParams:
+ in_channels: int
+ out_channels: int
+ vec_in_dim: int
+ context_in_dim: int
+ hidden_size: int
+ mlp_ratio: float
+ num_heads: int
+ depth: int
+ depth_single_blocks: int
+ axes_dim: list[int]
+ theta: int
+ qkv_bias: bool
+
+
+class Step1XEdit(nn.Module):
+ """
+ Transformer model for flow matching on sequences.
+ """
+
+ def __init__(self, params: Step1XParams, args=None):
+ super().__init__()
+
+ self.params = params
+ self.in_channels = params.in_channels
+ self.out_channels = params.out_channels
+ if params.hidden_size % params.num_heads != 0:
+ raise ValueError(f"Hidden size {params.hidden_size} must be divisible by num_heads {params.num_heads}")
+ pe_dim = params.hidden_size // params.num_heads
+ if sum(params.axes_dim) != pe_dim:
+ raise ValueError(f"Got {params.axes_dim} but expected positional dim {pe_dim}")
+ self.hidden_size = params.hidden_size
+ self.num_heads = params.num_heads
+ self.pe_embedder = EmbedND(dim=pe_dim, theta=params.theta, axes_dim=params.axes_dim)
+ self.img_in = nn.Linear(self.in_channels, self.hidden_size, bias=True)
+ self.time_in = MLPEmbedder(in_dim=256, hidden_dim=self.hidden_size)
+ self.vector_in = MLPEmbedder(params.vec_in_dim, self.hidden_size)
+ self.txt_in = nn.Linear(params.context_in_dim, self.hidden_size)
+
+ self.double_blocks = nn.ModuleList([DoubleStreamBlock(
+ self.hidden_size,
+ self.num_heads,
+ mlp_ratio=params.mlp_ratio,
+ qkv_bias=params.qkv_bias,
+ ) for _ in range(params.depth)])
+
+ self.single_blocks = nn.ModuleList([SingleStreamBlock(self.hidden_size, self.num_heads, mlp_ratio=params.mlp_ratio) for _ in range(params.depth_single_blocks)])
+
+ self.final_layer = LastLayer(self.hidden_size, 1, self.out_channels)
+
+ self.connector = Qwen2Connector()
+
+ # adapted from kohya definition
+ self.gradient_checkpointing = False
+ self.cpu_offload_checkpointing = False
+ self.blocks_to_swap = None
+
+ self.offloader_double = None
+ self.offloader_single = None
+ self.num_double_blocks = len(self.double_blocks)
+ self.num_single_blocks = len(self.single_blocks)
+
+ self.disperse_loss = args is not None and args.disperse_loss
+
+ @property
+ def device(self):
+ return next(self.parameters()).device
+
+ @property
+ def dtype(self):
+ return next(self.parameters()).dtype
+
+ def enable_gradient_checkpointing(self, cpu_offload: bool = False):
+ self.gradient_checkpointing = True
+ self.cpu_offload_checkpointing = cpu_offload
+
+ self.time_in.enable_gradient_checkpointing()
+ self.vector_in.enable_gradient_checkpointing()
+
+ for block in self.double_blocks + self.single_blocks:
+ block.enable_gradient_checkpointing(cpu_offload=cpu_offload)
+
+ print(f"Base model: Gradient checkpointing enabled. CPU offload: {cpu_offload}")
+
+ def disable_gradient_checkpointing(self):
+ self.gradient_checkpointing = False
+ self.cpu_offload_checkpointing = False
+
+ self.time_in.disable_gradient_checkpointing()
+ self.vector_in.disable_gradient_checkpointing()
+
+ for block in self.double_blocks + self.single_blocks:
+ block.disable_gradient_checkpointing()
+
+ print("Base Model: Gradient checkpointing disabled.")
+
+ def enable_block_swap(self, num_blocks: int, device: torch.device):
+ self.blocks_to_swap = num_blocks
+ double_blocks_to_swap = num_blocks // 2
+ single_blocks_to_swap = (num_blocks - double_blocks_to_swap) * 2
+
+ assert double_blocks_to_swap <= self.num_double_blocks - 2 and single_blocks_to_swap <= self.num_single_blocks - 2, (f"Cannot swap more than {self.num_double_blocks - 2} double blocks and {self.num_single_blocks - 2} single blocks. "
+ f"Requested {double_blocks_to_swap} double blocks and {single_blocks_to_swap} single blocks.")
+
+ self.offloader_double = custom_offloading_utils.ModelOffloader(
+ self.double_blocks, self.num_double_blocks, double_blocks_to_swap, device # , debug=True
+ )
+ self.offloader_single = custom_offloading_utils.ModelOffloader(
+ self.single_blocks, self.num_single_blocks, single_blocks_to_swap, device # , debug=True
+ )
+ print(f"Base model: Block swap enabled. Swapping {num_blocks} blocks, double blocks: {double_blocks_to_swap}, single blocks: {single_blocks_to_swap}.")
+
+ def move_to_device_except_swap_blocks(self, device: torch.device):
+ # assume model is on cpu. do not move blocks to device to reduce temporary memory usage
+ if self.blocks_to_swap:
+ save_double_blocks = self.double_blocks
+ save_single_blocks = self.single_blocks
+ self.double_blocks = None
+ self.single_blocks = None
+
+ self.to(device)
+
+ if self.blocks_to_swap:
+ self.double_blocks = save_double_blocks
+ self.single_blocks = save_single_blocks
+
+ def prepare_block_swap_before_forward(self):
+ if self.blocks_to_swap is None or self.blocks_to_swap == 0:
+ return
+ self.offloader_double.prepare_block_devices_before_forward(self.double_blocks)
+ self.offloader_single.prepare_block_devices_before_forward(self.single_blocks)
+
+ @staticmethod
+ def timestep_embedding(t: Tensor, dim, max_period=10000, time_factor: float = 1000.0):
+ """
+ Create sinusoidal timestep embeddings.
+ :param t: a 1-D Tensor of N indices, one per batch element.
+ These may be fractional.
+ :param dim: the dimension of the output.
+ :param max_period: controls the minimum frequency of the embeddings.
+ :return: an (N, D) Tensor of positional embeddings.
+ """
+ t = time_factor * t
+ half = dim // 2
+ freqs = torch.exp(-math.log(max_period) * torch.arange(start=0, end=half, dtype=torch.float32) / half).to(t.device)
+
+ args = t[:, None].float() * freqs[None]
+ embedding = torch.cat([torch.cos(args), torch.sin(args)], dim=-1)
+ if dim % 2:
+ embedding = torch.cat([embedding, torch.zeros_like(embedding[:, :1])], dim=-1)
+ if torch.is_floating_point(t):
+ embedding = embedding.to(t)
+ return embedding
+
+ def forward(
+ self,
+ img: Tensor,
+ img_ids: Tensor,
+ txt_ids: Tensor,
+ timesteps: Tensor,
+ llm_embedding: Tensor,
+ t_vec: Tensor,
+ mask: Tensor,
+ ): #4068*3 ; #640*3;;640*3584
+ feat = None
+ llm_embedding = llm_embedding.detach()
+ txt, y = self.connector( #->640*4096,1*768
+ llm_embedding, t_vec, mask)
+ if img.ndim != 3 or txt.ndim != 3:
+ raise ValueError("Input img and txt tensors must have 3 dimensions.")
+
+ img = self.img_in(img) #->4068*3072
+ vec = self.time_in(self.timestep_embedding(timesteps, 256))
+
+ vec = vec + self.vector_in(y)
+ txt = self.txt_in(txt)
+ ids = torch.cat((txt_ids, img_ids), dim=1)
+ pe = self.pe_embedder(ids)
+
+ if not self.blocks_to_swap:
+ for block in self.double_blocks:
+ img, txt = block(img=img, txt=txt, vec=vec, pe=pe)
+
+ img = torch.cat((txt, img), 1)
+ for i, block in enumerate(self.single_blocks):
+ img = block(img, vec=vec, pe=pe)
+ if i == 9 and self.disperse_loss:
+ feat = img#1*6748*3072
+ else:
+ for block_idx, block in enumerate(self.double_blocks):
+ self.offloader_double.wait_for_block(block_idx)
+ img, txt = block(img=img, txt=txt, vec=vec, pe=pe)
+ self.offloader_double.submit_move_blocks(self.double_blocks, block_idx)
+
+ img = torch.cat((txt, img), 1)
+
+ for block_idx, block in enumerate(self.single_blocks):
+ self.offloader_single.wait_for_block(block_idx)
+ img = block(img, vec=vec, pe=pe)
+ self.offloader_single.submit_move_blocks(self.single_blocks, block_idx)
+ img = img[:, txt.shape[1]:, ...]
+
+ if self.training and self.cpu_offload_checkpointing:
+ img = img.to(self.device)
+ vec = vec.to(self.device)
+
+ img = self.final_layer(img, vec) # (N, T, patch_size ** 2 * out_channels)
+ return img, feat
+
+
+if __name__ == "__main__":
+ # Example usage
+ params = Step1XParams(in_channels=768, out_channels=768, vec_in_dim=256, context_in_dim=768, hidden_size=768, mlp_ratio=4.0, num_heads=12, depth=12, depth_single_blocks=6, axes_dim=[1, 2, 3], theta=10000, qkv_bias=True)
+ model = Step1XEdit(params)
diff --git a/FE2E/requirements.txt b/FE2E/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6d0cc4cccdb74290f5ab8c07956d9324a8b135c1
--- /dev/null
+++ b/FE2E/requirements.txt
@@ -0,0 +1,16 @@
+torch==2.6.0
+torchvision==0.21.0
+einops==0.8.1
+liger-kernel
+transformers==4.49.0
+qwen_vl_utils==0.0.10
+safetensors==0.4.5
+diffusers[torch]==0.32.2
+pillow==11.1.0
+numpy==1.25.0
+opencv-python==4.8.1.78
+omegaconf==2.3.0
+matplotlib==3.10.1
+tabulate==0.9.0
+tqdm==4.67.1
+rich==13.9.4
diff --git a/FE2E/scripts/get_flash_attn.py b/FE2E/scripts/get_flash_attn.py
new file mode 100644
index 0000000000000000000000000000000000000000..5ad046f26d2d226c3d4feb104801ae64dad67593
--- /dev/null
+++ b/FE2E/scripts/get_flash_attn.py
@@ -0,0 +1,59 @@
+import platform
+import sys
+
+import torch
+
+
+def get_cuda_version():
+ if torch.cuda.is_available():
+ cuda_version = torch.version.cuda
+ return f"cu{cuda_version.replace('.', '')[:2]}" # 例如:cu121
+ return "cpu"
+
+
+def get_torch_version():
+ return f"torch{torch.__version__.split('+')[0]}"[:-2] # 例如:torch2.2
+
+
+def get_python_version():
+ version = sys.version_info
+ return f"cp{version.major}{version.minor}" # 例如:cp310
+
+
+def get_abi_flag():
+ return "abiTRUE" if torch._C._GLIBCXX_USE_CXX11_ABI else "abiFALSE"
+
+
+def get_platform():
+ system = platform.system().lower()
+ machine = platform.machine().lower()
+ if system == "linux" and machine == "x86_64":
+ return "linux_x86_64"
+ elif system == "windows" and machine == "amd64":
+ return "win_amd64"
+ elif system == "darwin" and machine == "x86_64":
+ return "macosx_x86_64"
+ else:
+ raise ValueError(f"Unsupported platform: {system}_{machine}")
+
+
+def generate_flash_attn_filename(flash_attn_version="2.7.2.post1"):
+ cuda_version = get_cuda_version()
+ torch_version = get_torch_version()
+ python_version = get_python_version()
+ abi_flag = get_abi_flag()
+ platform_tag = get_platform()
+
+ filename = (
+ f"flash_attn-{flash_attn_version}+{cuda_version}{torch_version}cxx11{abi_flag}-"
+ f"{python_version}-{python_version}-{platform_tag}.whl"
+ )
+ return filename
+
+
+if __name__ == "__main__":
+ try:
+ filename = generate_flash_attn_filename()
+ print("Generated filename:", filename)
+ except Exception as e:
+ print("Error generating filename:", e)
\ No newline at end of file
diff --git a/Lotus-2/utils/image_utils.py b/Lotus-2/utils/image_utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..afbf044b391c79e1f7e6b4cdb9e107206ad4dc50
--- /dev/null
+++ b/Lotus-2/utils/image_utils.py
@@ -0,0 +1,180 @@
+from PIL import Image
+import matplotlib
+import numpy as np
+import cv2
+from PIL import Image
+import torch
+from torchvision.transforms import InterpolationMode
+from torchvision.transforms.functional import resize
+
+
+def resize_image(image, target_size):
+ """
+ Resize output image to target size
+ Args:
+ image: Image in PIL.Image, numpy.array or torch.tensor format
+ target_size: tuple, target size (H, W)
+ Returns:
+ Resized image in original format
+ """
+ if isinstance(image, list):
+ return [resize_image(img, target_size) for img in image]
+
+ if isinstance(image, Image.Image):
+ return image.resize(target_size[::-1], Image.BILINEAR)
+ elif isinstance(image, np.ndarray):
+ # Handle numpy array with shape (1, H, W, 3)
+ if image.ndim == 4:
+ resized = np.stack([cv2.resize(img, target_size[::-1]) for img in image])
+ return resized
+ else:
+ return cv2.resize(image, target_size[::-1])
+ elif isinstance(image, torch.Tensor):
+ # Handle tensor with shape (1, 3, H, W)
+ if image.dim() == 4:
+ return torch.nn.functional.interpolate(
+ image,
+ size=target_size,
+ mode='bilinear',
+ align_corners=False
+ )
+ else:
+ return torch.nn.functional.interpolate(
+ image.unsqueeze(0),
+ size=target_size,
+ mode='bilinear',
+ align_corners=False
+ ).squeeze(0)
+ else:
+ raise ValueError(f"Unsupported image format: {type(image)}")
+
+def resize_image_first(image_tensor, process_res=None):
+ if process_res:
+ max_edge = max(image_tensor.shape[2], image_tensor.shape[3])
+ if max_edge > process_res:
+ scale = process_res / max_edge
+ new_height = int(image_tensor.shape[2] * scale)
+ new_width = int(image_tensor.shape[3] * scale)
+ image_tensor = resize_image(image_tensor, (new_height, new_width))
+
+ image_tensor = resize_to_multiple_of_16(image_tensor)
+
+ return image_tensor
+
+def resize_to_multiple_of_16(image_tensor):
+ """
+ Resize image tensor to make shorter side closest multiple of 16 while maintaining aspect ratio
+ Args:
+ image_tensor: Input tensor of shape (B, C, H, W)
+ Returns:
+ Resized tensor where shorter side is multiple of 16
+ """
+ # Calculate scale ratio based on shorter side to make it closest multiple of 16
+ h, w = image_tensor.shape[2], image_tensor.shape[3]
+ min_side = min(h, w)
+ scale = (min_side // 16) * 16 / min_side
+
+ # Calculate new height and width
+ new_h = int(h * scale)
+ new_w = int(w * scale)
+
+ # Ensure both height and width are multiples of 16
+ new_h = (new_h // 16) * 16
+ new_w = (new_w // 16) * 16
+
+ # Resize image while maintaining aspect ratio
+ resized_tensor = torch.nn.functional.interpolate(
+ image_tensor,
+ size=(new_h, new_w),
+ mode='bilinear',
+ align_corners=False
+ )
+ return resized_tensor
+
+def colorize_depth_map(depth, mask=None, reverse_color=False):
+ cm = matplotlib.colormaps["Spectral"]
+ # normalize
+ depth = ((depth - depth.min()) / (depth.max() - depth.min()))
+ # colorize
+ if reverse_color:
+ img_colored_np = cm(1 - depth, bytes=False)[:, :, 0:3] # Invert the depth values before applying colormap
+ else:
+ img_colored_np = cm(depth, bytes=False)[:, :, 0:3] # (h,w,3)
+
+ depth_colored = (img_colored_np * 255).astype(np.uint8)
+ if mask is not None:
+ masked_image = np.zeros_like(depth_colored)
+ masked_image[mask.numpy()] = depth_colored[mask.numpy()]
+ depth_colored_img = Image.fromarray(masked_image)
+ else:
+ depth_colored_img = Image.fromarray(depth_colored)
+ return depth_colored_img
+
+
+def concatenate_images(*image_lists):
+ # Ensure at least one image list is provided
+ if not image_lists or not image_lists[0]:
+ raise ValueError("At least one non-empty image list must be provided")
+
+ # Determine the maximum width of any single row and the total height
+ max_width = 0
+ total_height = 0
+ row_widths = []
+ row_heights = []
+
+ # Compute dimensions for each row
+ for image_list in image_lists:
+ if image_list: # Ensure the list is not empty
+ width = sum(img.width for img in image_list)
+ height = image_list[0].height # Assuming all images in the list have the same height
+ max_width = max(max_width, width)
+ total_height += height
+ row_widths.append(width)
+ row_heights.append(height)
+
+ # Create a new image to concatenate everything into
+ new_image = Image.new('RGB', (max_width, total_height))
+
+ # Concatenate each row of images
+ y_offset = 0
+ for i, image_list in enumerate(image_lists):
+ x_offset = 0
+ for img in image_list:
+ new_image.paste(img, (x_offset, y_offset))
+ x_offset += img.width
+ y_offset += row_heights[i] # Move the offset down to the next row
+
+ return new_image
+
+
+def resize_max_res(
+ img: torch.Tensor,
+ max_edge_resolution: int,
+ resample_method: InterpolationMode = InterpolationMode.BILINEAR,
+) -> torch.Tensor:
+ """
+ Resize image to limit maximum edge length while keeping aspect ratio.
+
+ Args:
+ img (`torch.Tensor`):
+ Image tensor to be resized. Expected shape: [B, C, H, W]
+ max_edge_resolution (`int`):
+ Maximum edge length (pixel).
+ resample_method (`PIL.Image.Resampling`):
+ Resampling method used to resize images.
+
+ Returns:
+ `torch.Tensor`: Resized image.
+ """
+ assert 4 == img.dim(), f"Invalid input shape {img.shape}"
+
+ original_height, original_width = img.shape[-2:]
+ downscale_factor = min(
+ max_edge_resolution / original_width, max_edge_resolution / original_height
+ )
+
+ new_width = int(original_width * downscale_factor)
+ new_height = int(original_height * downscale_factor)
+
+ resized_img = resize(img, (new_height, new_width), resample_method, antialias=True)
+ return resized_img
diff --git a/Lotus-2/utils/seed_all.py b/Lotus-2/utils/seed_all.py
new file mode 100644
index 0000000000000000000000000000000000000000..95795654e36d3fbc14e876dff50f348a1f5a9c0a
--- /dev/null
+++ b/Lotus-2/utils/seed_all.py
@@ -0,0 +1,33 @@
+# Copyright 2023 Bingxin Ke, ETH Zurich. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# --------------------------------------------------------------------------
+# If you find this code useful, we kindly ask you to cite our paper in your work.
+# Please find bibtex at: https://github.com/prs-eth/Marigold#-citation
+# More information about the method can be found at https://marigoldmonodepth.github.io
+# --------------------------------------------------------------------------
+
+
+import numpy as np
+import random
+import torch
+
+
+def seed_all(seed: int = 0):
+ """
+ Set random seeds of all components.
+ """
+ random.seed(seed)
+ np.random.seed(seed)
+ torch.manual_seed(seed)
+ torch.cuda.manual_seed_all(seed)
diff --git a/Lotus-2/utils/visualize.py b/Lotus-2/utils/visualize.py
new file mode 100644
index 0000000000000000000000000000000000000000..dde24b104cd3823569a62d982be7c165e036601b
--- /dev/null
+++ b/Lotus-2/utils/visualize.py
@@ -0,0 +1,119 @@
+import cv2
+import numpy as np
+
+import torch
+
+from matplotlib import cm
+import matplotlib.pyplot as plt
+
+import logging
+logger = logging.getLogger('root')
+
+
+
+def tensor_to_numpy(tensor_in):
+ """ torch tensor to numpy array
+ """
+ if tensor_in is not None:
+ if tensor_in.ndim == 3:
+ # (C, H, W) -> (H, W, C)
+ tensor_in = tensor_in.detach().cpu().permute(1, 2, 0).numpy()
+ elif tensor_in.ndim == 4:
+ # (B, C, H, W) -> (B, H, W, C)
+ tensor_in = tensor_in.detach().cpu().permute(0, 2, 3, 1).numpy()
+ else:
+ raise Exception('invalid tensor size')
+ return tensor_in
+
+# def unnormalize(img_in, img_stats={'mean': [0.485, 0.456, 0.406],
+# 'std': [0.229, 0.224, 0.225]}):
+def unnormalize(img_in, img_stats={'mean': [0.5,0.5,0.5], 'std': [0.5,0.5,0.5]}):
+ """ unnormalize input image
+ """
+ if torch.is_tensor(img_in):
+ img_in = tensor_to_numpy(img_in)
+
+ img_out = np.zeros_like(img_in)
+ for ich in range(3):
+ img_out[..., ich] = img_in[..., ich] * img_stats['std'][ich]
+ img_out[..., ich] += img_stats['mean'][ich]
+ img_out = (img_out * 255.0).astype(np.uint8)
+ return img_out
+
+def normal_to_rgb(normal, normal_mask=None):
+ """ surface normal map to RGB
+ (used for visualization)
+
+ NOTE: x, y, z are mapped to R, G, B
+ NOTE: [-1, 1] are mapped to [0, 255]
+ """
+ if torch.is_tensor(normal):
+ normal = tensor_to_numpy(normal)
+ normal_mask = tensor_to_numpy(normal_mask)
+
+ normal_norm = np.linalg.norm(normal, axis=-1, keepdims=True)
+ normal_norm[normal_norm < 1e-12] = 1e-12
+ normal = normal / normal_norm
+
+ normal_rgb = (((normal + 1) * 0.5) * 255).astype(np.uint8)
+ if normal_mask is not None:
+ normal_rgb = normal_rgb * normal_mask # (B, H, W, 3)
+ return normal_rgb
+
+def kappa_to_alpha(pred_kappa, to_numpy=True):
+ """ Confidence kappa to uncertainty alpha
+ Assuming AngMF distribution (introduced in https://arxiv.org/abs/2109.09881)
+ """
+ if torch.is_tensor(pred_kappa) and to_numpy:
+ pred_kappa = tensor_to_numpy(pred_kappa)
+
+ if torch.is_tensor(pred_kappa):
+ alpha = ((2 * pred_kappa) / ((pred_kappa ** 2.0) + 1)) \
+ + ((torch.exp(- pred_kappa * np.pi) * np.pi) / (1 + torch.exp(- pred_kappa * np.pi)))
+ alpha = torch.rad2deg(alpha)
+ else:
+ alpha = ((2 * pred_kappa) / ((pred_kappa ** 2.0) + 1)) \
+ + ((np.exp(- pred_kappa * np.pi) * np.pi) / (1 + np.exp(- pred_kappa * np.pi)))
+ alpha = np.degrees(alpha)
+
+ return alpha
+
+
+def visualize_normal(target_dir, prefixs, img, pred_norm, pred_kappa,
+ gt_norm, gt_norm_mask, pred_error, num_vis=-1):
+ """ visualize normal
+ """
+ error_max = 60.0
+
+ img = tensor_to_numpy(img) # (B, H, W, 3)
+ pred_norm = tensor_to_numpy(pred_norm) # (B, H, W, 3)
+ pred_kappa = tensor_to_numpy(pred_kappa) # (B, H, W, 1)
+ gt_norm = tensor_to_numpy(gt_norm) # (B, H, W, 3)
+ gt_norm_mask = tensor_to_numpy(gt_norm_mask) # (B, H, W, 1)
+ pred_error = tensor_to_numpy(pred_error) # (B, H, W, 1)
+
+ num_vis = len(prefixs) if num_vis == -1 else num_vis
+ for i in range(num_vis):
+ # img
+ img_ = unnormalize(img[i, ...])
+ target_path = '%s/%s_img.png' % (target_dir, prefixs[i])
+ plt.imsave(target_path, img_)
+
+ # pred_norm
+ target_path = '%s/%s_norm.png' % (target_dir, prefixs[i])
+ plt.imsave(target_path, normal_to_rgb(pred_norm[i, ...]))
+
+ # pred_kappa
+ if pred_kappa is not None:
+ pred_alpha = kappa_to_alpha(pred_kappa[i, :, :, 0])
+ target_path = '%s/%s_pred_alpha.png' % (target_dir, prefixs[i])
+ plt.imsave(target_path, pred_alpha, vmin=0.0, vmax=error_max, cmap='jet')
+
+ # gt_norm, pred_error
+ if gt_norm is not None:
+ target_path = '%s/%s_gt.png' % (target_dir, prefixs[i])
+ plt.imsave(target_path, normal_to_rgb(gt_norm[i, ...], gt_norm_mask[i, ...]))
+
+ E = pred_error[i, :, :, 0] * gt_norm_mask[i, :, :, 0]
+ target_path = '%s/%s_pred_error.png' % (target_dir, prefixs[i])
+ plt.imsave(target_path, E, vmin=0, vmax=error_max, cmap='jet')
diff --git a/Lotus/.gitignore b/Lotus/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..9bd4963c3ac852a48b1e6521619898d9cff34a0f
--- /dev/null
+++ b/Lotus/.gitignore
@@ -0,0 +1,2 @@
+__pycache__/
+output/
\ No newline at end of file
diff --git a/Lotus/LICENSE b/Lotus/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64
--- /dev/null
+++ b/Lotus/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/Lotus/README.md b/Lotus/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1d7f6d1f6e9dca1558aca49c21f1b2c0c724f2dd
--- /dev/null
+++ b/Lotus/README.md
@@ -0,0 +1,160 @@
+#
Lotus: Diffusion-based Visual Foundation Model for High-quality Dense Prediction
+
+[](https://lotus3d.github.io/)
+[](https://arxiv.org/abs/2409.18124)
+[-yellow)](https://huggingface.co/spaces/haodongli/Lotus_Depth)
+[-yellow)](https://huggingface.co/spaces/haodongli/Lotus_Normal)
+[](https://github.com/kijai/ComfyUI-Lotus)
+[](https://replicate.com/chenxwh/lotus)
+
+[Jing He](https://scholar.google.com/citations?hl=en&user=RsLS11MAAAAJ)1✱,
+[Haodong Li](https://haodong-li.com/)1✱,
+[Wei Yin](https://yvanyin.net/)2,
+[Yixun Liang](https://yixunliang.github.io/)1,
+[Leheng Li](https://len-li.github.io/)1,
+[Kaiqiang Zhou]()3,
+[Hongbo Zhang]()3,
+[Bingbing Liu]()3,
+[Ying-Cong Chen](https://www.yingcong.me/)1,4✉
+
+
+
+
+
+
+
+🔥🔥🔥 **Please also check our latest Lotus-2! Useful links:** [**Project Page**](https://lotus-2.github.io/)**,** [**Github Repo**](https://github.com/EnVision-Research/Lotus-2)**.** 🔥🔥🔥
+
+
+
+
+We present **Lotus**, a diffusion-based visual foundation model for dense geometry prediction. With minimal training data, Lotus achieves SoTA performance in two key geometry perception tasks, i.e., zero-shot depth and normal estimation. "Avg. Rank" indicates the average ranking across all metrics, where lower values are better. Bar length represents the amount of training data used.
+
+## 📢 News
+- 2025-04-03: The training code of Lotus (Generative & Discriminative) is now available!
+- 2025-01-17: Please check out our latest models ([lotus-normal-g-v1-1](https://huggingface.co/jingheya/lotus-normal-g-v1-1), [lotus-normal-d-v1-1](https://huggingface.co/jingheya/lotus-normal-d-v1-1)), which were trained with aligned surface normals, leading to improved performance!
+- 2024-11-13: The demo now supports video depth estimation!
+- 2024-11-13: The Lotus disparity models ([Generative](https://huggingface.co/jingheya/lotus-depth-g-v2-0-disparity) & [Discriminative](https://huggingface.co/jingheya/lotus-depth-d-v2-0-disparity)) are now available, which achieve better performance!
+- 2024-10-06: The demos are now available ([Depth](https://huggingface.co/spaces/haodongli/Lotus_Depth) & [Normal](https://huggingface.co/spaces/haodongli/Lotus_Normal)). Please have a try!
+- 2024-10-05: The inference code is now available!
+- 2024-09-26: [Paper](https://arxiv.org/abs/2409.18124) released. Click [here](https://github.com/EnVision-Research/Lotus/issues/14#issuecomment-2409094495) if you are curious about the 3D point clouds of the teaser's depth maps!
+
+## 🛠️ Setup
+This installation was tested on: Ubuntu 20.04 LTS, Python 3.10, CUDA 12.3, NVIDIA A800-SXM4-80GB.
+
+1. Clone the repository (requires git):
+```
+git clone https://github.com/EnVision-Research/Lotus.git
+cd Lotus
+```
+
+2. Install dependencies (requires conda):
+```
+conda create -n lotus python=3.10 -y
+conda activate lotus
+pip install -r requirements.txt
+```
+
+## 🤗 Gradio Demo
+
+1. Online demo: [Depth](https://huggingface.co/spaces/haodongli/Lotus_Depth) & [Normal](https://huggingface.co/spaces/haodongli/Lotus_Normal)
+2. Local demo
+- For **depth** estimation, run:
+ ```
+ python app.py depth
+ ```
+- For **normal** estimation, run:
+ ```
+ python app.py normal
+ ```
+
+## 🔥 Training
+1. Initialize your Accelerate environment with:
+ ```
+ accelerate config --config_file=$PATH_TO_ACCELERATE_CONFIG_FILE
+ ```
+ Please make sure you have installed the accelerate package. We have tested our training scripts with the accelerate version 0.29.3.
+
+2. Prepare your training data:
+- [Hypersim](https://github.com/apple/ml-hypersim):
+ - Download this [script](https://github.com/apple/ml-hypersim/blob/main/contrib/99991/download.py) into your `$PATH_TO_RAW_HYPERSIM_DATA` directory for data downloading.
+ - Run the following command to download the data:
+ ```
+ cd $PATH_TO_RAW_HYPERSIM_DATA
+
+ # Download the tone-mapped images
+ python ./download.py --contains scene_cam_ --contains final_preview --contains tonemap.jpg --silent
+
+ # Download the depth maps
+ python ./download.py --contains scene_cam_ --contains geometry_hdf5 --contains depth_meters --silent
+
+ # Download the normal maps
+ python ./download.py --contains scene_cam_ --contains geometry_hdf5 --contains normal --silent
+ ```
+ - Download the split file from [here](https://github.com/apple/ml-hypersim/blob/main/evermotion_dataset/analysis/metadata_images_split_scene_v1.csv) and put it in the `$PATH_TO_RAW_HYPERSIM_DATA` directory.
+ - Process the data with the command: `bash utils/process_hypersim.sh`.
+- [Virtual KITTI](https://europe.naverlabs.com/proxy-virtual-worlds-vkitti-2/):
+ - Download the [rgb](https://download.europe.naverlabs.com//virtual_kitti_2.0.3/vkitti_2.0.3_rgb.tar), [depth](https://download.europe.naverlabs.com//virtual_kitti_2.0.3/vkitti_2.0.3_depth.tar), and [textgz](https://download.europe.naverlabs.com//virtual_kitti_2.0.3/vkitti_2.0.3_textgt.tar.gz) into the `$PATH_TO_VKITTI_DATA` directory and unzip them.
+ - Make sure the directory structure is as follows:
+ ```
+ SceneX/Y/frames/rgb/Camera_Z/rgb_%05d.jpg
+ SceneX/Y/frames/depth/Camera_Z/depth_%05d.png
+ SceneX/Y/colors.txt
+ SceneX/Y/extrinsic.txt
+ SceneX/Y/intrinsic.txt
+ SceneX/Y/info.txt
+ SceneX/Y/bbox.txt
+ SceneX/Y/pose.txt
+ ```
+ where $`X \in \{01, 02, 06, 18, 20\}`$ and represent one of 5 different locations.
+ $`Y \in \{\texttt{15-deg-left}, \texttt{15-deg-right}, \texttt{30-deg-left}, \texttt{30-deg-right}, \texttt{clone}, \texttt{fog}, \texttt{morning}, \texttt{overcast}, \texttt{rain}, \texttt{sunset}\}`$ and represent the different variations.
+ $`Z \in [0, 1]`$ and represent the left or right camera.
+ Note that the indexes always start from 0.
+ - Generate the normal maps with the command: `bash utils/depth2normal.sh`.
+3. Run the training command! 🚀
+ - `bash train_scripts/train_lotus_g_{$TASK}.sh` for training Lotus Generative models;
+ - `bash train_scripts/train_lotus_d_{$TASK}.sh` for training Lotus Discriminative models.
+
+## 🕹️ Inference
+### Testing on your images
+1. Place your images in a directory, for example, under `assets/in-the-wild_example` (where we have prepared several examples).
+2. Run the inference command: `bash infer.sh`.
+
+### Evaluation on benchmark datasets
+1. Prepare benchmark datasets:
+- For **depth** estimation, you can download the [evaluation datasets (depth)](https://share.phys.ethz.ch/~pf/bingkedata/marigold/evaluation_dataset/) by the following commands (referred to [Marigold](https://github.com/prs-eth/Marigold?tab=readme-ov-file#-evaluation-on-test-datasets-)):
+ ```
+ cd datasets/eval/depth/
+
+ wget -r -np -nH --cut-dirs=4 -R "index.html*" -P . https://share.phys.ethz.ch/~pf/bingkedata/marigold/evaluation_dataset/
+ ```
+- For **normal** estimation, you can download the [evaluation datasets (normal)](https://drive.google.com/drive/folders/1t3LMJIIrSnCGwOEf53Cyg0lkSXd3M4Hm?usp=drive_link) (`dsine_eval.zip`) into the path `datasets/eval/normal/` and unzip it (referred to [DSINE](https://github.com/baegwangbin/DSINE?tab=readme-ov-file#getting-started)).
+
+2. Run the evaluation command: `bash eval_scripts/eval-[task]-[mode].sh`, where `[task]` represents the task name (**depth** or **normal**) and `[mode]` refers to the mode name (**g** or **d**).
+
+3. (Optional) To reproduce the results presented in our paper, you can set the `--rng_state_path` option in the evaluation command. The RNG state files are available at `./rng_states/`.
+
+### Choose your model
+Below are the released models and their corresponding configurations:
+|CHECKPOINT_DIR |TASK_NAME |MODE |
+|:--:|:--:|:--:|
+| [`jingheya/lotus-depth-g-v1-0`](https://huggingface.co/jingheya/lotus-depth-g-v1-0) | depth| `generation`|
+| [`jingheya/lotus-depth-d-v1-0`](https://huggingface.co/jingheya/lotus-depth-d-v1-0) | depth|`regression` |
+| [`jingheya/lotus-depth-g-v2-1-disparity`](https://huggingface.co/jingheya/lotus-depth-g-v2-1-disparity) | depth (disparity)| `generation`|
+| [`jingheya/lotus-depth-d-v2-0-disparity`](https://huggingface.co/jingheya/lotus-depth-d-v2-0-disparity) | depth (disparity)|`regression` |
+| [`jingheya/lotus-normal-g-v1-1`](https://huggingface.co/jingheya/lotus-normal-g-v1-1) |normal | `generation` |
+| [`jingheya/lotus-normal-d-v1-1`](https://huggingface.co/jingheya/lotus-normal-d-v1-1) |normal |`regression` |
+
+## 🎓 Citation
+If you find our work useful in your research, please consider citing our paper:
+```bibtex
+@article{he2024lotus,
+ title={Lotus: Diffusion-based Visual Foundation Model for High-quality Dense Prediction},
+ author={He, Jing and Li, Haodong and Yin, Wei and Liang, Yixun and Li, Leheng and Zhou, Kaiqiang and Liu, Hongbo and Liu, Bingbing and Chen, Ying-Cong},
+ journal={arXiv preprint arXiv:2409.18124},
+ year={2024}
+}
+```
diff --git a/Lotus/accelerate_configs/01234567.yaml b/Lotus/accelerate_configs/01234567.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..2c1517224b3978703e91ec34e9213772593c424a
--- /dev/null
+++ b/Lotus/accelerate_configs/01234567.yaml
@@ -0,0 +1,16 @@
+compute_environment: LOCAL_MACHINE
+debug: false
+distributed_type: MULTI_GPU
+downcast_bf16: 'no'
+gpu_ids: '0,1,2,3,4,5,6,7'
+machine_rank: 0
+main_training_function: main
+mixed_precision: 'no'
+num_machines: 1
+num_processes: 8
+rdzv_backend: static
+same_network: true
+tpu_env: []
+tpu_use_cluster: false
+tpu_use_sudo: false
+use_cpu: false
diff --git a/Lotus/app.py b/Lotus/app.py
new file mode 100644
index 0000000000000000000000000000000000000000..adb4864e38505641e4999a0fdb54bfe36df2aa0b
--- /dev/null
+++ b/Lotus/app.py
@@ -0,0 +1,418 @@
+import functools
+import os
+import tempfile
+import diffusers
+import gradio as gr
+import imageio as imageio
+import numpy as np
+import spaces
+import torch
+from PIL import Image
+from tqdm import tqdm
+from pathlib import Path
+from pipeline import LotusGPipeline, LotusDPipeline
+from utils.image_utils import colorize_depth_map
+from contextlib import nullcontext
+import cv2
+
+import gradio
+from gradio.utils import get_cache_folder
+import transformers
+from gradio_imageslider import ImageSlider
+
+import sys
+
+transformers.utils.move_cache()
+device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
+
+def infer_pipe(pipe, test_image, task_name, seed, device):
+ if seed is None:
+ generator = None
+ else:
+ generator = torch.Generator(device=device).manual_seed(seed)
+
+ if torch.backends.mps.is_available():
+ autocast_ctx = nullcontext()
+ else:
+ autocast_ctx = torch.autocast(pipe.device.type)
+ with autocast_ctx:
+
+ test_image = np.array(test_image).astype(np.float16)
+ test_image = torch.tensor(test_image).permute(2,0,1).unsqueeze(0)
+ test_image = test_image / 127.5 - 1.0
+ test_image = test_image.to(device)
+
+ task_emb = torch.tensor([1, 0]).float().unsqueeze(0).repeat(1, 1).to(device)
+ task_emb = torch.cat([torch.sin(task_emb), torch.cos(task_emb)], dim=-1).repeat(1, 1)
+
+ # Run
+ pred = pipe(
+ rgb_in=test_image,
+ prompt='',
+ num_inference_steps=1,
+ generator=generator,
+ # guidance_scale=0,
+ output_type='np',
+ timesteps=[999],
+ task_emb=task_emb,
+ ).images[0]
+
+ # Post-process the prediction
+ if task_name == 'depth':
+ output_npy = pred.mean(axis=-1)
+ output_color = colorize_depth_map(output_npy, reverse_color=True)
+ else:
+ output_npy = pred
+ output_color = Image.fromarray((output_npy * 255).astype(np.uint8))
+
+ return output_color
+
+def infer_pipe_video(pipe, test_image, task_name, generator, device, latents=None):
+ if torch.backends.mps.is_available():
+ autocast_ctx = nullcontext()
+ else:
+ autocast_ctx = torch.autocast(pipe.device.type)
+ with autocast_ctx:
+ test_image = np.array(test_image).astype(np.float16)
+ test_image = torch.tensor(test_image).permute(2,0,1).unsqueeze(0)
+ test_image = test_image / 127.5 - 1.0
+ test_image = test_image.to(device)
+
+ task_emb = torch.tensor([1, 0]).float().unsqueeze(0).repeat(1, 1).to(device)
+ task_emb = torch.cat([torch.sin(task_emb), torch.cos(task_emb)], dim=-1).repeat(1, 1)
+
+ # Run
+ output = pipe(
+ rgb_in=test_image,
+ prompt='',
+ num_inference_steps=1,
+ generator=generator,
+ latents=latents,
+ # guidance_scale=0,
+ output_type='np',
+ timesteps=[999],
+ task_emb=task_emb,
+ return_dict=False
+ )
+ pred = output[0][0]
+ last_frame_latent = output[2]
+
+ # Post-process the prediction
+ if task_name == 'depth':
+ output_npy = pred.mean(axis=-1)
+ output_color = colorize_depth_map(output_npy, reverse_color=True)
+ else:
+ output_npy = pred
+ output_color = Image.fromarray((output_npy * 255).astype(np.uint8))
+
+ return output_color, last_frame_latent
+
+
+def load_pipe(task_name):
+ if task_name == 'depth':
+ model_g = 'jingheya/lotus-depth-g-v2-0-disparity'
+ model_d = 'jingheya/lotus-depth-d-v2-0-disparity'
+ else:
+ model_g = 'jingheya/lotus-normal-g-v1-0'
+ model_d = 'jingheya/lotus-normal-d-v1-0'
+
+ dtype = torch.float16
+ pipe_g = LotusGPipeline.from_pretrained(
+ model_g,
+ torch_dtype=dtype,
+ )
+ pipe_d = LotusDPipeline.from_pretrained(
+ model_d,
+ torch_dtype=dtype,
+ )
+ pipe_g.to(device)
+ pipe_d.to(device)
+ pipe_g.set_progress_bar_config(disable=True)
+ pipe_d.set_progress_bar_config(disable=True)
+
+ return pipe_g, pipe_d
+
+def lotus_video(input_video, task_name, seed, device):
+ pipe_g, pipe_d = load_pipe(task_name)
+
+ # load the video and split it into frames
+ cap = cv2.VideoCapture(input_video)
+ fps = cap.get(cv2.CAP_PROP_FPS)
+ width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
+ height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
+
+ frames = []
+ while True:
+ ret, frame = cap.read()
+ if not ret:
+ break
+ frames.append(frame)
+ cap.release()
+
+ # generate latents_common for lotus-g
+ if seed is None:
+ generator = None
+ else:
+ generator = torch.Generator(device=device).manual_seed(seed)
+ last_frame_latent = None
+ latent_common = torch.randn(
+ (1, 4, height // pipe_g.vae_scale_factor, width // pipe_g.vae_scale_factor), generator=generator, dtype=pipe_g.dtype, device=device
+ )
+
+ output_g = []
+ output_d = []
+ for frame in frames:
+ latents = latent_common
+ if last_frame_latent is not None:
+ latents = 0.9 * latents + 0.1 * last_frame_latent
+ output_frame_g, last_frame_latent = infer_pipe_video(pipe_g, frame, task_name, seed, device, latents)
+ output_frame_d = infer_pipe(pipe_d, frame, task_name, seed, device)
+ output_g.append(output_frame_g)
+ output_d.append(output_frame_d)
+
+ return output_g, output_d, fps
+
+def lotus(image_input, task_name, seed, device):
+ pipe_g, pipe_d = load_pipe(task_name)
+ output_g = infer_pipe(pipe_g, Image.open(image_input).convert('RGB'), task_name, seed, device)
+ output_d = infer_pipe(pipe_d, Image.open(image_input).convert('RGB'), task_name, seed, device)
+ return output_g, output_d
+
+def infer(path_input, seed):
+ name_base, name_ext = os.path.splitext(os.path.basename(path_input))
+ output_g, output_d = lotus(path_input, TASK, seed, device)
+ if not os.path.exists(f"assets/app/{TASK}/output"):
+ os.makedirs(f"assets/app/{TASK}/output")
+ g_save_path = os.path.join(f"assets/app/{TASK}/output", f"{name_base}_g{name_ext}")
+ d_save_path = os.path.join(f"assets/app/{TASK}/output", f"{name_base}_d{name_ext}")
+ output_g.save(g_save_path)
+ output_d.save(d_save_path)
+ return [path_input, g_save_path], [path_input, d_save_path]
+
+def infer_video(path_input, seed):
+ frames_g, frames_d, fps = lotus_video(path_input, TASK, seed, device)
+ if not os.path.exists(f"assets/app/{TASK}/output"):
+ os.makedirs(f"assets/app/{TASK}/output")
+ name_base, _ = os.path.splitext(os.path.basename(path_input))
+ g_save_path = os.path.join(f"assets/app/{TASK}/output", f"{name_base}_g.mp4")
+ d_save_path = os.path.join(f"assets/app/{TASK}/output", f"{name_base}_d.mp4")
+ imageio.mimsave(g_save_path, frames_g, fps=fps)
+ imageio.mimsave(d_save_path, frames_d, fps=fps)
+ return [g_save_path, d_save_path]
+
+def run_demo_server():
+ infer_gpu = spaces.GPU(functools.partial(infer))
+ infer_video_gpu = spaces.GPU(functools.partial(infer_video))
+ gradio_theme = gr.themes.Default()
+
+ with gr.Blocks(
+ theme=gradio_theme,
+ title=f"LOTUS - {TASK.capitalize()}",
+ css="""
+ #download {
+ height: 118px;
+ }
+ .slider .inner {
+ width: 5px;
+ background: #FFF;
+ }
+ .viewport {
+ aspect-ratio: 4/3;
+ }
+ .tabs button.selected {
+ font-size: 20px !important;
+ color: crimson !important;
+ }
+ h1 {
+ text-align: center;
+ display: block;
+ }
+ h2 {
+ text-align: center;
+ display: block;
+ }
+ h3 {
+ text-align: center;
+ display: block;
+ }
+ .md_feedback li {
+ margin-bottom: 0px !important;
+ }
+ """,
+ head="""
+
+
+ """,
+ ) as demo:
+ gr.Markdown(
+ """
+ # LOTUS: Diffusion-based Visual Foundation Model for High-quality Dense Prediction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Please consider starring ★ the GitHub Repo if you find this useful!
+ """
+ )
+ with gr.Tabs(elem_classes=["tabs"]):
+ with gr.Tab("IMAGE"):
+ with gr.Row():
+ with gr.Column():
+ image_input = gr.Image(
+ label="Input Image",
+ type="filepath",
+ )
+ seed = gr.Number(
+ label="Seed (only for Generative mode)",
+ minimum=0,
+ maximum=999999999,
+ )
+ with gr.Row():
+ image_submit_btn = gr.Button(
+ value=f"Predict {TASK.capitalize()}!", variant="primary"
+ )
+ image_reset_btn = gr.Button(value="Reset")
+ with gr.Column():
+ image_output_g = ImageSlider(
+ label="Output (Generative)",
+ type="filepath",
+ interactive=False,
+ elem_classes="slider",
+ position=0.25,
+ )
+ with gr.Row():
+ image_output_d = ImageSlider(
+ label="Output (Discriminative)",
+ type="filepath",
+ interactive=False,
+ elem_classes="slider",
+ position=0.25,
+ )
+
+ gr.Examples(
+ fn=infer_gpu,
+ examples=sorted([
+ [os.path.join(f"assets/app/{TASK}", "images", name), 0]
+ for name in os.listdir(os.path.join(f"assets/app/{TASK}", "images"))
+ ]),
+ inputs=[image_input, seed],
+ outputs=[image_output_g, image_output_d],
+ cache_examples=False,
+ )
+
+ if TASK == 'depth':
+ with gr.Tab("VIDEO"):
+ with gr.Row():
+ with gr.Column():
+ input_video = gr.Video(
+ label="Input Video",
+ autoplay=True,
+ loop=True,
+ )
+ seed = gr.Number(
+ label="Seed (only for Generative mode)",
+ minimum=0,
+ maximum=999999999,
+ )
+ with gr.Row():
+ video_submit_btn = gr.Button(
+ value=f"Predict {TASK.capitalize()}!", variant="primary"
+ )
+ video_reset_btn = gr.Button(value="Reset")
+ with gr.Column():
+ video_output_g = gr.Video(
+ label="Output (Generative)",
+ interactive=False,
+ autoplay=True,
+ loop=True,
+ show_share_button=True,
+ )
+ with gr.Row():
+ video_output_d = gr.Video(
+ label="Output (Discriminative)",
+ interactive=False,
+ autoplay=True,
+ loop=True,
+ show_share_button=True,
+ )
+
+ gr.Examples(
+ fn=infer_video_gpu,
+ examples=sorted([
+ [os.path.join(f"assets/app/{TASK}", "videos", name), 0]
+ for name in os.listdir(os.path.join(f"assets/app/{TASK}", "videos"))
+ ]),
+ inputs=[input_video, seed],
+ outputs=[video_output_g, video_output_d],
+ cache_examples=False,
+ )
+
+ ### Image
+ image_submit_btn.click(
+ fn=infer_gpu,
+ inputs=[image_input, seed],
+ outputs=[image_output_g, image_output_d],
+ concurrency_limit=1,
+ )
+ image_reset_btn.click(
+ fn=lambda: (
+ None,
+ None,
+ None,
+ ),
+ inputs=[],
+ outputs=[image_output_g, image_output_d],
+ queue=False,
+ )
+
+ ### Video
+ if TASK == 'depth':
+ video_submit_btn.click(
+ fn=infer_video_gpu,
+ inputs=[input_video, seed],
+ outputs=[video_output_g, video_output_d],
+ queue=True,
+ )
+ video_reset_btn.click(
+ fn=lambda: (None, None, None),
+ inputs=[],
+ outputs=[video_output_g, video_output_d],
+ )
+
+ ### Server launch
+ demo.queue(
+ api_open=False,
+ ).launch(
+ server_name="0.0.0.0",
+ server_port=7860,
+ )
+
+def main():
+ os.system("pip freeze")
+ if os.path.exists("files/output"):
+ os.system("rm -rf files/output")
+ run_demo_server()
+
+if __name__ == "__main__":
+ TASK = sys.argv[-1]
+ if not TASK in ['depth', 'normal']:
+ raise ValueError("Invalid task. Please choose from 'depth' and 'normal'.")
+ main()
diff --git a/Lotus/assets/badges/lotus_icon.png b/Lotus/assets/badges/lotus_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..e1d68384cc3e62a616f4c9026002a7c29025e019
Binary files /dev/null and b/Lotus/assets/badges/lotus_icon.png differ
diff --git a/Lotus/assets/in-the-wild_example/06.jpg b/Lotus/assets/in-the-wild_example/06.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8b11d5c244e2abf8d20e29c0db1a002dcca9b52d
Binary files /dev/null and b/Lotus/assets/in-the-wild_example/06.jpg differ
diff --git a/Lotus/datasets/eval/depth/configs/data_diode_all.yaml b/Lotus/datasets/eval/depth/configs/data_diode_all.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..df2a09c65c163b257c52b2881a28e551551c5184
--- /dev/null
+++ b/Lotus/datasets/eval/depth/configs/data_diode_all.yaml
@@ -0,0 +1,6 @@
+name: diode
+disp_name: diode_val_all
+# dir: diode
+dir: diode/diode_val.tar
+filenames: datasets/eval/depth/data_split/diode/diode_val_all_filename_list.txt
+processing_res: 640
\ No newline at end of file
diff --git a/Lotus/datasets/eval/depth/configs/data_eth3d.yaml b/Lotus/datasets/eval/depth/configs/data_eth3d.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..257d772bb9ca442ec30d3054ed586e4dc46d8e94
--- /dev/null
+++ b/Lotus/datasets/eval/depth/configs/data_eth3d.yaml
@@ -0,0 +1,7 @@
+name: eth3d
+disp_name: eth3d_full
+# dir: eth3d
+dir: eth3d/eth3d.tar
+filenames: datasets/eval/depth/data_split/eth3d/eth3d_filename_list.txt
+processing_res: 768
+alignment_max_res: 1024
diff --git a/Lotus/datasets/eval/depth/configs/data_kitti_eigen_test.yaml b/Lotus/datasets/eval/depth/configs/data_kitti_eigen_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..aaae9620e589e10452fb9bf05d83a1b40b08dffc
--- /dev/null
+++ b/Lotus/datasets/eval/depth/configs/data_kitti_eigen_test.yaml
@@ -0,0 +1,6 @@
+name: kitti
+disp_name: kitti_eigen_test_full
+dir: kitti/kitti_eigen_split_test.tar
+filenames: datasets/eval/depth/data_split/kitti/eigen_test_files_with_gt.txt
+kitti_bm_crop: true
+valid_mask_crop: eigen
\ No newline at end of file
diff --git a/Lotus/datasets/eval/depth/configs/data_nyu_test.yaml b/Lotus/datasets/eval/depth/configs/data_nyu_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..67409aa45547b2926d1f81b42dd266acee588f97
--- /dev/null
+++ b/Lotus/datasets/eval/depth/configs/data_nyu_test.yaml
@@ -0,0 +1,5 @@
+name: nyu_v2
+disp_name: nyu_test_full
+dir: nyuv2/nyu_labeled_extracted.tar
+filenames: datasets/eval/depth/data_split/nyu/labeled/filename_list_test.txt
+eigen_valid_mask: true
\ No newline at end of file
diff --git a/Lotus/datasets/eval/depth/configs/data_scannet_val.yaml b/Lotus/datasets/eval/depth/configs/data_scannet_val.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..2f7d92408add91119ff817fa6a32c241251a3718
--- /dev/null
+++ b/Lotus/datasets/eval/depth/configs/data_scannet_val.yaml
@@ -0,0 +1,5 @@
+name: scannet
+disp_name: scannet_val_800_1
+# dir: scannet
+dir: scannet/scannet_val_sampled_800_1.tar
+filenames: datasets/eval/depth/data_split/scannet/scannet_val_sampled_list_800_1.txt
\ No newline at end of file
diff --git a/Lotus/datasets/eval/depth/data_split/diode/diode_val_all_filename_list.txt b/Lotus/datasets/eval/depth/data_split/diode/diode_val_all_filename_list.txt
new file mode 100644
index 0000000000000000000000000000000000000000..99142cec3a4060a9cc2acfc5a5158fce83d81f99
--- /dev/null
+++ b/Lotus/datasets/eval/depth/data_split/diode/diode_val_all_filename_list.txt
@@ -0,0 +1,771 @@
+indoors/scene_00021/scan_00189/00021_00189_indoors_200_010.png indoors/scene_00021/scan_00189/00021_00189_indoors_200_010_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_200_010_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_240_030.png indoors/scene_00021/scan_00189/00021_00189_indoors_240_030_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_240_030_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_210_000.png indoors/scene_00021/scan_00189/00021_00189_indoors_210_000_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_210_000_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_350_030.png indoors/scene_00021/scan_00189/00021_00189_indoors_350_030_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_350_030_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_010_010.png indoors/scene_00021/scan_00189/00021_00189_indoors_010_010_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_010_010_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_230_020.png indoors/scene_00021/scan_00189/00021_00189_indoors_230_020_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_230_020_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_150_030.png indoors/scene_00021/scan_00189/00021_00189_indoors_150_030_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_150_030_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_000_040.png indoors/scene_00021/scan_00189/00021_00189_indoors_000_040_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_000_040_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_220_030.png indoors/scene_00021/scan_00189/00021_00189_indoors_220_030_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_220_030_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_340_020.png indoors/scene_00021/scan_00189/00021_00189_indoors_340_020_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_340_020_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_000_000.png indoors/scene_00021/scan_00189/00021_00189_indoors_000_000_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_000_000_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_350_010.png indoors/scene_00021/scan_00189/00021_00189_indoors_350_010_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_350_010_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_010_030.png indoors/scene_00021/scan_00189/00021_00189_indoors_010_030_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_010_030_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_130_000.png indoors/scene_00021/scan_00189/00021_00189_indoors_130_000_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_130_000_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_230_000.png indoors/scene_00021/scan_00189/00021_00189_indoors_230_000_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_230_000_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_220_010.png indoors/scene_00021/scan_00189/00021_00189_indoors_220_010_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_220_010_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_340_000.png indoors/scene_00021/scan_00189/00021_00189_indoors_340_000_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_340_000_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_000_020.png indoors/scene_00021/scan_00189/00021_00189_indoors_000_020_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_000_020_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_160_020.png indoors/scene_00021/scan_00189/00021_00189_indoors_160_020_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_160_020_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_190_020.png indoors/scene_00021/scan_00189/00021_00189_indoors_190_020_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_190_020_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_210_020.png indoors/scene_00021/scan_00189/00021_00189_indoors_210_020_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_210_020_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_330_010.png indoors/scene_00021/scan_00189/00021_00189_indoors_330_010_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_330_010_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_280_000.png indoors/scene_00021/scan_00190/00021_00190_indoors_280_000_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_280_000_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_150_030.png indoors/scene_00021/scan_00190/00021_00190_indoors_150_030_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_150_030_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_110_050.png indoors/scene_00021/scan_00190/00021_00190_indoors_110_050_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_110_050_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_050_030.png indoors/scene_00021/scan_00190/00021_00190_indoors_050_030_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_050_030_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_070_000.png indoors/scene_00021/scan_00190/00021_00190_indoors_070_000_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_070_000_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_140_020.png indoors/scene_00021/scan_00190/00021_00190_indoors_140_020_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_140_020_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_060_010.png indoors/scene_00021/scan_00190/00021_00190_indoors_060_010_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_060_010_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_300_000.png indoors/scene_00021/scan_00190/00021_00190_indoors_300_000_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_300_000_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_290_010.png indoors/scene_00021/scan_00190/00021_00190_indoors_290_010_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_290_010_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_190_000.png indoors/scene_00021/scan_00190/00021_00190_indoors_190_000_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_190_000_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_090_000.png indoors/scene_00021/scan_00190/00021_00190_indoors_090_000_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_090_000_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_060_040.png indoors/scene_00021/scan_00190/00021_00190_indoors_060_040_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_060_040_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_120_020.png indoors/scene_00021/scan_00190/00021_00190_indoors_120_020_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_120_020_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_100_010.png indoors/scene_00021/scan_00190/00021_00190_indoors_100_010_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_100_010_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_130_030.png indoors/scene_00021/scan_00190/00021_00190_indoors_130_030_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_130_030_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_270_010.png indoors/scene_00021/scan_00190/00021_00190_indoors_270_010_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_270_010_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_110_000.png indoors/scene_00021/scan_00190/00021_00190_indoors_110_000_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_110_000_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_080_010.png indoors/scene_00021/scan_00190/00021_00190_indoors_080_010_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_080_010_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_050_000.png indoors/scene_00021/scan_00190/00021_00190_indoors_050_000_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_050_000_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_070_030.png indoors/scene_00021/scan_00190/00021_00190_indoors_070_030_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_070_030_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_150_050.png indoors/scene_00021/scan_00190/00021_00190_indoors_150_050_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_150_050_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_280_020.png indoors/scene_00021/scan_00190/00021_00190_indoors_280_020_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_280_020_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_300_020.png indoors/scene_00021/scan_00190/00021_00190_indoors_300_020_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_300_020_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_090_030.png indoors/scene_00021/scan_00190/00021_00190_indoors_090_030_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_090_030_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_140_040.png indoors/scene_00021/scan_00190/00021_00190_indoors_140_040_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_140_040_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_230_010.png indoors/scene_00021/scan_00191/00021_00191_indoors_230_010_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_230_010_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_230_050.png indoors/scene_00021/scan_00191/00021_00191_indoors_230_050_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_230_050_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_280_030.png indoors/scene_00021/scan_00191/00021_00191_indoors_280_030_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_280_030_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_220_040.png indoors/scene_00021/scan_00191/00021_00191_indoors_220_040_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_220_040_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_020_040.png indoors/scene_00021/scan_00191/00021_00191_indoors_020_040_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_020_040_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_220_000.png indoors/scene_00021/scan_00191/00021_00191_indoors_220_000_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_220_000_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_340_000.png indoors/scene_00021/scan_00191/00021_00191_indoors_340_000_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_340_000_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_260_030.png indoors/scene_00021/scan_00191/00021_00191_indoors_260_030_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_260_030_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_340_040.png indoors/scene_00021/scan_00191/00021_00191_indoors_340_040_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_340_040_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_010_030.png indoors/scene_00021/scan_00191/00021_00191_indoors_010_030_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_010_030_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_340_020.png indoors/scene_00021/scan_00191/00021_00191_indoors_340_020_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_340_020_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_060_050.png indoors/scene_00021/scan_00191/00021_00191_indoors_060_050_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_060_050_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_000_040.png indoors/scene_00021/scan_00191/00021_00191_indoors_000_040_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_000_040_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_350_030.png indoors/scene_00021/scan_00191/00021_00191_indoors_350_030_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_350_030_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_230_030.png indoors/scene_00021/scan_00191/00021_00191_indoors_230_030_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_230_030_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_330_030.png indoors/scene_00021/scan_00191/00021_00191_indoors_330_030_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_330_030_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_080_050.png indoors/scene_00021/scan_00191/00021_00191_indoors_080_050_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_080_050_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_220_020.png indoors/scene_00021/scan_00191/00021_00191_indoors_220_020_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_220_020_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_110_000.png indoors/scene_00021/scan_00188/00021_00188_indoors_110_000_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_110_000_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_180_010.png indoors/scene_00021/scan_00188/00021_00188_indoors_180_010_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_180_010_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_110_040.png indoors/scene_00021/scan_00188/00021_00188_indoors_110_040_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_110_040_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_090_000.png indoors/scene_00021/scan_00188/00021_00188_indoors_090_000_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_090_000_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_100_010.png indoors/scene_00021/scan_00188/00021_00188_indoors_100_010_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_100_010_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_200_040.png indoors/scene_00021/scan_00188/00021_00188_indoors_200_040_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_200_040_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_120_030.png indoors/scene_00021/scan_00188/00021_00188_indoors_120_030_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_120_030_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_180_040.png indoors/scene_00021/scan_00188/00021_00188_indoors_180_040_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_180_040_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_210_050.png indoors/scene_00021/scan_00188/00021_00188_indoors_210_050_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_210_050_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_130_020.png indoors/scene_00021/scan_00188/00021_00188_indoors_130_020_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_130_020_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_170_000.png indoors/scene_00021/scan_00188/00021_00188_indoors_170_000_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_170_000_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_230_020.png indoors/scene_00021/scan_00188/00021_00188_indoors_230_020_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_230_020_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_200_020.png indoors/scene_00021/scan_00188/00021_00188_indoors_200_020_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_200_020_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_190_030.png indoors/scene_00021/scan_00188/00021_00188_indoors_190_030_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_190_030_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_240_040.png indoors/scene_00021/scan_00188/00021_00188_indoors_240_040_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_240_040_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_120_010.png indoors/scene_00021/scan_00188/00021_00188_indoors_120_010_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_120_010_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_130_000.png indoors/scene_00021/scan_00188/00021_00188_indoors_130_000_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_130_000_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_170_020.png indoors/scene_00021/scan_00188/00021_00188_indoors_170_020_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_170_020_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_210_030.png indoors/scene_00021/scan_00188/00021_00188_indoors_210_030_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_210_030_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_110_020.png indoors/scene_00021/scan_00188/00021_00188_indoors_110_020_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_110_020_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_250_000.png indoors/scene_00021/scan_00188/00021_00188_indoors_250_000_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_250_000_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_150_000.png indoors/scene_00021/scan_00188/00021_00188_indoors_150_000_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_150_000_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_090_020.png indoors/scene_00021/scan_00188/00021_00188_indoors_090_020_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_090_020_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_220_040.png indoors/scene_00021/scan_00188/00021_00188_indoors_220_040_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_220_040_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_100_030.png indoors/scene_00021/scan_00188/00021_00188_indoors_100_030_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_100_030_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_310_010.png indoors/scene_00021/scan_00192/00021_00192_indoors_310_010_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_310_010_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_010_010.png indoors/scene_00021/scan_00192/00021_00192_indoors_010_010_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_010_010_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_350_030.png indoors/scene_00021/scan_00192/00021_00192_indoors_350_030_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_350_030_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_000_000.png indoors/scene_00021/scan_00192/00021_00192_indoors_000_000_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_000_000_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_340_020.png indoors/scene_00021/scan_00192/00021_00192_indoors_340_020_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_340_020_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_240_020.png indoors/scene_00021/scan_00192/00021_00192_indoors_240_020_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_240_020_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_300_000.png indoors/scene_00021/scan_00192/00021_00192_indoors_300_000_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_300_000_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_020_020.png indoors/scene_00021/scan_00192/00021_00192_indoors_020_020_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_020_020_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_320_020.png indoors/scene_00021/scan_00192/00021_00192_indoors_320_020_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_320_020_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_330_030.png indoors/scene_00021/scan_00192/00021_00192_indoors_330_030_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_330_030_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_030_030.png indoors/scene_00021/scan_00192/00021_00192_indoors_030_030_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_030_030_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_020_000.png indoors/scene_00021/scan_00192/00021_00192_indoors_020_000_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_020_000_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_220_000.png indoors/scene_00021/scan_00192/00021_00192_indoors_220_000_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_220_000_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_320_000.png indoors/scene_00021/scan_00192/00021_00192_indoors_320_000_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_320_000_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_230_010.png indoors/scene_00021/scan_00192/00021_00192_indoors_230_010_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_230_010_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_330_010.png indoors/scene_00021/scan_00192/00021_00192_indoors_330_010_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_330_010_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_030_010.png indoors/scene_00021/scan_00192/00021_00192_indoors_030_010_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_030_010_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_310_030.png indoors/scene_00021/scan_00192/00021_00192_indoors_310_030_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_310_030_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_010_030.png indoors/scene_00021/scan_00192/00021_00192_indoors_010_030_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_010_030_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_350_010.png indoors/scene_00021/scan_00192/00021_00192_indoors_350_010_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_350_010_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_000_020.png indoors/scene_00021/scan_00192/00021_00192_indoors_000_020_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_000_020_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_340_000.png indoors/scene_00021/scan_00192/00021_00192_indoors_340_000_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_340_000_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_240_000.png indoors/scene_00021/scan_00192/00021_00192_indoors_240_000_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_240_000_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_300_020.png indoors/scene_00021/scan_00192/00021_00192_indoors_300_020_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_300_020_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_040_000.png indoors/scene_00021/scan_00192/00021_00192_indoors_040_000_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_040_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_300_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_300_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_300_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_290_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_290_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_290_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_260_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_260_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_260_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_190_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_190_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_190_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_200_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_200_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_200_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_000_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_000_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_000_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_040_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_040_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_040_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_290_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_290_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_290_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_060_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_060_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_060_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_300_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_300_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_300_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_140_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_140_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_140_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_220_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_220_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_220_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_280_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_280_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_280_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_310_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_310_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_310_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_150_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_150_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_150_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_230_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_230_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_230_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_180_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_180_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_180_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_310_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_310_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_310_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_110_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_110_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_110_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_270_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_270_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_270_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_350_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_350_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_350_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_180_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_180_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_180_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_010_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_010_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_010_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_270_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_270_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_270_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_110_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_110_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_110_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_330_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_330_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_330_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_080_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_080_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_080_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_170_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_170_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_170_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_130_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_130_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_130_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_250_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_250_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_250_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_170_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_170_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_170_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_120_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_120_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_120_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_240_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_240_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_240_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_160_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_160_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_160_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_020_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_020_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_020_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_320_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_320_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_320_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_260_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_260_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_260_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_000_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_000_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_000_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_160_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_160_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_160_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_330_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_330_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_330_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_050_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_050_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_050_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_130_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_130_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_130_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_210_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_210_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_210_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_170_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_170_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_170_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_030_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_030_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_030_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_350_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_350_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_350_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_250_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_250_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_250_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_130_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_130_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_130_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_280_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_280_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_280_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_240_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_240_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_240_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_120_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_120_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_120_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_320_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_320_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_320_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_040_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_040_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_040_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_240_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_240_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_240_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_020_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_020_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_020_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_340_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_340_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_340_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_200_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_200_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_200_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_160_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_160_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_160_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_260_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_260_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_260_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_340_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_340_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_340_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_220_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_220_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_220_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_140_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_140_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_140_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_300_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_300_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_300_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_140_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_140_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_140_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_310_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_310_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_310_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_230_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_230_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_230_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_150_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_150_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_150_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_180_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_180_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_180_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_330_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_330_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_330_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_350_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_350_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_350_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_030_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_030_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_030_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_230_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_230_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_230_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_010_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_010_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_010_020_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_130_030.png indoors/scene_00020/scan_00184/00020_00184_indoors_130_030_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_130_030_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_050_020.png indoors/scene_00020/scan_00184/00020_00184_indoors_050_020_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_050_020_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_080_010.png indoors/scene_00020/scan_00184/00020_00184_indoors_080_010_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_080_010_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_180_010.png indoors/scene_00020/scan_00184/00020_00184_indoors_180_010_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_180_010_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_290_040.png indoors/scene_00020/scan_00184/00020_00184_indoors_290_040_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_290_040_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_190_000.png indoors/scene_00020/scan_00184/00020_00184_indoors_190_000_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_190_000_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_200_010.png indoors/scene_00020/scan_00184/00020_00184_indoors_200_010_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_200_010_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_120_020.png indoors/scene_00020/scan_00184/00020_00184_indoors_120_020_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_120_020_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_060_010.png indoors/scene_00020/scan_00184/00020_00184_indoors_060_010_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_060_010_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_140_020.png indoors/scene_00020/scan_00184/00020_00184_indoors_140_020_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_140_020_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_160_010.png indoors/scene_00020/scan_00184/00020_00184_indoors_160_010_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_160_010_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_100_000.png indoors/scene_00020/scan_00184/00020_00184_indoors_100_000_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_100_000_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_110_010.png indoors/scene_00020/scan_00184/00020_00184_indoors_110_010_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_110_010_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_070_000.png indoors/scene_00020/scan_00184/00020_00184_indoors_070_000_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_070_000_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_170_000.png indoors/scene_00020/scan_00184/00020_00184_indoors_170_000_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_170_000_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_060_030.png indoors/scene_00020/scan_00184/00020_00184_indoors_060_030_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_060_030_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_140_000.png indoors/scene_00020/scan_00184/00020_00184_indoors_140_000_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_140_000_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_160_030.png indoors/scene_00020/scan_00184/00020_00184_indoors_160_030_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_160_030_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_110_030.png indoors/scene_00020/scan_00184/00020_00184_indoors_110_030_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_110_030_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_070_020.png indoors/scene_00020/scan_00184/00020_00184_indoors_070_020_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_070_020_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_170_020.png indoors/scene_00020/scan_00184/00020_00184_indoors_170_020_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_170_020_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_130_010.png indoors/scene_00020/scan_00184/00020_00184_indoors_130_010_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_130_010_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_050_000.png indoors/scene_00020/scan_00184/00020_00184_indoors_050_000_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_050_000_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_180_030.png indoors/scene_00020/scan_00184/00020_00184_indoors_180_030_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_180_030_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_190_020.png indoors/scene_00020/scan_00184/00020_00184_indoors_190_020_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_190_020_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_200_030.png indoors/scene_00020/scan_00184/00020_00184_indoors_200_030_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_200_030_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_120_000.png indoors/scene_00020/scan_00184/00020_00184_indoors_120_000_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_120_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_210_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_210_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_210_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_310_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_310_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_310_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_110_040.png indoors/scene_00020/scan_00187/00020_00187_indoors_110_040_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_110_040_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_280_010.png indoors/scene_00020/scan_00187/00020_00187_indoors_280_010_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_280_010_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_250_020.png indoors/scene_00020/scan_00187/00020_00187_indoors_250_020_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_250_020_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_290_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_290_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_290_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_240_030.png indoors/scene_00020/scan_00187/00020_00187_indoors_240_030_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_240_030_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_200_010.png indoors/scene_00020/scan_00187/00020_00187_indoors_200_010_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_200_010_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_190_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_190_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_190_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_300_010.png indoors/scene_00020/scan_00187/00020_00187_indoors_300_010_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_300_010_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_000_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_000_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_000_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_260_010.png indoors/scene_00020/scan_00187/00020_00187_indoors_260_010_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_260_010_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_100_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_100_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_100_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_220_030.png indoors/scene_00020/scan_00187/00020_00187_indoors_220_030_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_220_030_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_000_040.png indoors/scene_00020/scan_00187/00020_00187_indoors_000_040_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_000_040_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_170_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_170_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_170_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_230_020.png indoors/scene_00020/scan_00187/00020_00187_indoors_230_020_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_230_020_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_270_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_270_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_270_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_110_010.png indoors/scene_00020/scan_00187/00020_00187_indoors_110_010_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_110_010_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_000_020.png indoors/scene_00020/scan_00187/00020_00187_indoors_000_020_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_000_020_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_260_030.png indoors/scene_00020/scan_00187/00020_00187_indoors_260_030_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_260_030_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_140_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_140_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_140_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_220_010.png indoors/scene_00020/scan_00187/00020_00187_indoors_220_010_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_220_010_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_230_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_230_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_230_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_010_030.png indoors/scene_00020/scan_00187/00020_00187_indoors_010_030_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_010_030_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_270_020.png indoors/scene_00020/scan_00187/00020_00187_indoors_270_020_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_270_020_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_210_020.png indoors/scene_00020/scan_00187/00020_00187_indoors_210_020_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_210_020_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_280_030.png indoors/scene_00020/scan_00187/00020_00187_indoors_280_030_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_280_030_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_250_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_250_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_250_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_290_020.png indoors/scene_00020/scan_00187/00020_00187_indoors_290_020_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_290_020_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_100_030.png indoors/scene_00020/scan_00187/00020_00187_indoors_100_030_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_100_030_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_120_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_120_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_120_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_240_010.png indoors/scene_00020/scan_00187/00020_00187_indoors_240_010_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_240_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_000_020.png indoors/scene_00020/scan_00185/00020_00185_indoors_000_020_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_000_020_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_340_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_340_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_340_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_040_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_040_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_040_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_050_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_050_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_050_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_010_030.png indoors/scene_00020/scan_00185/00020_00185_indoors_010_030_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_010_030_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_350_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_350_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_350_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_330_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_330_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_330_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_180_030.png indoors/scene_00020/scan_00185/00020_00185_indoors_180_030_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_180_030_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_150_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_150_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_150_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_030_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_030_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_030_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_290_020.png indoors/scene_00020/scan_00185/00020_00185_indoors_290_020_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_290_020_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_020_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_020_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_020_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_300_030.png indoors/scene_00020/scan_00185/00020_00185_indoors_300_030_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_300_030_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_320_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_320_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_320_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_080_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_080_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_080_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_280_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_280_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_280_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_290_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_290_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_290_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_020_020.png indoors/scene_00020/scan_00185/00020_00185_indoors_020_020_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_020_020_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_090_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_090_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_090_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_300_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_300_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_300_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_190_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_190_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_190_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_000_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_000_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_000_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_340_020.png indoors/scene_00020/scan_00185/00020_00185_indoors_340_020_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_340_020_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_160_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_160_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_160_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_070_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_070_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_070_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_170_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_170_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_170_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_270_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_270_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_270_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_010_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_010_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_010_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_350_030.png indoors/scene_00020/scan_00185/00020_00185_indoors_350_030_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_350_030_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_020_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_020_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_020_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_220_040.png indoors/scene_00020/scan_00186/00020_00186_indoors_220_040_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_220_040_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_260_020.png indoors/scene_00020/scan_00186/00020_00186_indoors_260_020_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_260_020_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_160_020.png indoors/scene_00020/scan_00186/00020_00186_indoors_160_020_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_160_020_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_320_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_320_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_320_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_090_020.png indoors/scene_00020/scan_00186/00020_00186_indoors_090_020_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_090_020_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_330_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_330_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_330_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_080_030.png indoors/scene_00020/scan_00186/00020_00186_indoors_080_030_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_080_030_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_030_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_030_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_030_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_230_050.png indoors/scene_00020/scan_00186/00020_00186_indoors_230_050_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_230_050_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_130_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_130_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_130_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_250_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_250_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_250_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_150_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_150_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_150_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_230_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_230_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_230_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_050_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_050_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_050_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_250_050.png indoors/scene_00020/scan_00186/00020_00186_indoors_250_050_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_250_050_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_070_020.png indoors/scene_00020/scan_00186/00020_00186_indoors_070_020_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_070_020_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_110_030.png indoors/scene_00020/scan_00186/00020_00186_indoors_110_030_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_110_030_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_340_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_340_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_340_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_140_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_140_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_140_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_220_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_220_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_220_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_040_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_040_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_040_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_060_030.png indoors/scene_00020/scan_00186/00020_00186_indoors_060_030_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_060_030_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_240_040.png indoors/scene_00020/scan_00186/00020_00186_indoors_240_040_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_240_040_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_150_030.png indoors/scene_00020/scan_00186/00020_00186_indoors_150_030_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_150_030_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_170_040.png indoors/scene_00020/scan_00186/00020_00186_indoors_170_040_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_170_040_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_210_050.png indoors/scene_00020/scan_00186/00020_00186_indoors_210_050_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_210_050_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_070_040.png indoors/scene_00020/scan_00186/00020_00186_indoors_070_040_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_070_040_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_250_030.png indoors/scene_00020/scan_00186/00020_00186_indoors_250_030_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_250_030_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_270_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_270_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_270_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_200_040.png indoors/scene_00020/scan_00186/00020_00186_indoors_200_040_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_200_040_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_190_050.png indoors/scene_00020/scan_00186/00020_00186_indoors_190_050_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_190_050_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_000_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_000_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_000_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_240_020.png indoors/scene_00020/scan_00186/00020_00186_indoors_240_020_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_240_020_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_140_020.png indoors/scene_00020/scan_00186/00020_00186_indoors_140_020_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_140_020_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_040_020.png indoors/scene_00020/scan_00186/00020_00186_indoors_040_020_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_040_020_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_120_020.png indoors/scene_00020/scan_00186/00020_00186_indoors_120_020_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_120_020_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_100_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_100_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_100_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_160_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_160_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_160_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_260_040.png indoors/scene_00020/scan_00186/00020_00186_indoors_260_040_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_260_040_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_060_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_060_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_060_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_090_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_090_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_090_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_230_030.png indoors/scene_00020/scan_00186/00020_00186_indoors_230_030_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_230_030_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_210_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_210_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_210_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_170_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_170_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_170_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_080_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_080_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_080_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_130_030.png indoors/scene_00020/scan_00186/00020_00186_indoors_130_030_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_130_030_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_110_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_110_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_110_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_350_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_350_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_350_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_050.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_050_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_050_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_230_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_230_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_230_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_040.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_040_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_040_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_170_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_170_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_170_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_220_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_220_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_220_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_040_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_040_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_040_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_320_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_320_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_320_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_000_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_000_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_000_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_120_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_120_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_120_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_090_040.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_090_040_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_090_040_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_190_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_190_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_190_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_200_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_200_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_200_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_020_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_020_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_020_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_240_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_240_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_240_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_050.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_050_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_050_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_040.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_040_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_040_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_100_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_100_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_100_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_030_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_030_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_030_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_040.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_040_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_040_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_110_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_110_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_110_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_180_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_180_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_180_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_210_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_210_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_210_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_310_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_310_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_310_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_020_050.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_020_050_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_020_050_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_340_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_340_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_340_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_240_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_240_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_240_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_290_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_290_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_290_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_250_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_250_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_250_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_030_040.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_030_040_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_030_040_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_180_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_180_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_180_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_310_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_310_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_310_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_050_040.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_050_040_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_050_040_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_230_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_230_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_230_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_330_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_330_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_330_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_220_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_220_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_220_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_200_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_200_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_200_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_320_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_320_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_320_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_090_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_090_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_090_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_000_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_000_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_000_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_120_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_120_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_120_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_040_050.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_040_050_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_040_050_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_100_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_100_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_100_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_320_040.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_320_040_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_320_040_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_020.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_020_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_020_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_240_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_240_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_240_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_200_030.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_200_030_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_200_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_020.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_020_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_020_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_220_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_220_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_220_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_030.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_030_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_240_050.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_240_050_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_240_050_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_030.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_030_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_310_020.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_310_020_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_310_020_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_280_030.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_280_030_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_280_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_330_050.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_330_050_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_330_050_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_250_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_250_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_250_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_050.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_050_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_050_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_180_020.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_180_020_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_180_020_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_010_030.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_010_030_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_010_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_050.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_050_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_050_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_020.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_020_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_020_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_340_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_340_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_340_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_020_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_020_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_020_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_340_040.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_340_040_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_340_040_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_140_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_140_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_140_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_320_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_320_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_320_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_210_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_210_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_210_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_180_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_180_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_180_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_030.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_030_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_070_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_070_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_070_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_330_020.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_330_020_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_330_020_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_210_050.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_210_050_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_210_050_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_030.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_030_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_270_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_270_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_270_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_260_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_260_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_260_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_200_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_200_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_200_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_190_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_190_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_190_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_040.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_040_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_040_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_140_020.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_140_020_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_140_020_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_220_030.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_220_030_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_220_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_040.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_040_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_040_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_190_040.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_190_040_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_190_040_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_050.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_050_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_050_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_090_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_090_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_090_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_040.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_040_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_040_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_310_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_310_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_310_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_050.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_050_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_050_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_280_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_280_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_280_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_330_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_330_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_330_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_050_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_050_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_050_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_050.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_050_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_050_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_210_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_210_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_210_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_150_050.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_150_050_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_150_050_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_140_040.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_140_040_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_140_040_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_320_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_320_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_320_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_040_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_040_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_040_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_040.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_040_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_040_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_190_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_190_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_190_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_260_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_260_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_260_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_340_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_340_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_340_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_020_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_020_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_020_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_220_040.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_220_040_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_220_040_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_060_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_060_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_060_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_170_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_170_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_170_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_270_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_270_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_270_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_030_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_030_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_030_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_050.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_050_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_050_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_050.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_050_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_050_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_050.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_050_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_050_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_160_040.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_160_040_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_160_040_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_020_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_020_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_020_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_040.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_040_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_040_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_260_040.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_260_040_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_260_040_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_220_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_220_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_220_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_280_050.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_280_050_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_280_050_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_080_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_080_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_080_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_040.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_040_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_040_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_280_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_280_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_280_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_350_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_350_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_350_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_170_050.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_170_050_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_170_050_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_330_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_330_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_330_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_070_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_070_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_070_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_150_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_150_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_150_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_210_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_210_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_210_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_270_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_270_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_270_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_040.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_040_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_040_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_010_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_010_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_010_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_100_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_100_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_100_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_000_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_000_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_000_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_040_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_040_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_040_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_320_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_320_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_320_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_160_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_160_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_160_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_190_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_190_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_190_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_180_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_180_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_180_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_150_000.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_150_000_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_150_000_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_250_040.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_250_040_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_250_040_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_070_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_070_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_070_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_050_000.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_050_000_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_050_000_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_330_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_330_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_330_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_020.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_020_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_020_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_280_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_280_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_280_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_190_020.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_190_020_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_190_020_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_140_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_140_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_140_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_000_020.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_000_020_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_000_020_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_020_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_020_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_020_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_340_000.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_340_000_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_340_000_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_040_040.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_040_040_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_040_040_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_260_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_260_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_260_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_120_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_120_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_120_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_160_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_160_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_160_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_120_050.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_120_050_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_120_050_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_210_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_210_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_210_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_170_020.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_170_020_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_170_020_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_030_000.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_030_000_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_030_000_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_350_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_350_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_350_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_250_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_250_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_250_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_130_000.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_130_000_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_130_000_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_000_000.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_000_000_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_000_000_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_340_020.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_340_020_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_340_020_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_020_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_020_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_020_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_160_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_160_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_160_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_060_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_060_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_060_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_040_020.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_040_020_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_040_020_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_050_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_050_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_050_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_270_040.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_270_040_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_270_040_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_080_040.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_080_040_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_080_040_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_130_020.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_130_020_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_130_020_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_180_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_180_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_180_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_150_020.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_150_020_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_150_020_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_230_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_230_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_230_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_010_040.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_010_040_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_010_040_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_040.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_040_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_040_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_000.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_000_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_000_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_070_050.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_070_050_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_070_050_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_060_040.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_060_040_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_060_040_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_140_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_140_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_140_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_100_050.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_100_050_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_100_050_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_130_040.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_130_040_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_130_040_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_230_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_230_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_230_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_150_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_150_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_150_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_180_020.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_180_020_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_180_020_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_030_040.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_030_040_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_030_040_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_050.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_050_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_050_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_350_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_350_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_350_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_230_040.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_230_040_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_230_040_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_010_030.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_010_030_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_010_030_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_340_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_340_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_340_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_020.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_020_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_020_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_040_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_040_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_040_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_120_050.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_120_050_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_120_050_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_220_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_220_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_220_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_020_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_020_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_020_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_050.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_050_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_050_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_020.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_020_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_020_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_160_020.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_160_020_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_160_020_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_330_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_330_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_330_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_030.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_030_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_030_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_210_020.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_210_020_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_210_020_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_170_030.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_170_030_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_170_030_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_150_040.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_150_040_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_150_040_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_040.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_040_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_040_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_240_030.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_240_030_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_240_030_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_320_020.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_320_020_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_320_020_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_100_050.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_100_050_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_100_050_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_090_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_090_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_090_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_030.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_030_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_030_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_160_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_160_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_160_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_200_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_200_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_200_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_190_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_190_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_190_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_110_040.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_110_040_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_110_040_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_310_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_310_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_310_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_170_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_170_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_170_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_210_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_210_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_210_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_050.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_050_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_050_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_110_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_110_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_110_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_030.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_030_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_030_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_080_040.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_080_040_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_080_040_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_030_020.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_030_020_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_030_020_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_350_030.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_350_030_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_350_030_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_010_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_010_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_010_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_340_020.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_340_020_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_340_020_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_220_030.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_220_030_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_220_030_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_040.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_040_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_040_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_190_020.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_190_020_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_190_020_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_260_020.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_260_020_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_260_020_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_290_020.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_290_020_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_290_020_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_080_030.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_080_030_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_080_030_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_310_020.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_310_020_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_310_020_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_250_010.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_250_010_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_250_010_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_350_010.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_350_010_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_350_010_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_070_020.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_070_020_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_070_020_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_330_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_330_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_330_000_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_230_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_230_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_230_000_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_320_010.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_320_010_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_320_010_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_220_010.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_220_010_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_220_010_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_000_020.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_000_020_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_000_020_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_280_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_280_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_280_000_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_250_030.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_250_030_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_250_030_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_080_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_080_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_080_000_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_090_010.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_090_010_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_090_010_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_100_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_100_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_100_000_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_240_020.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_240_020_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_240_020_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_340_020.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_340_020_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_340_020_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_300_010.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_300_010_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_300_010_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_200_010.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_200_010_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_200_010_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_190_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_190_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_190_000_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_260_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_260_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_260_000_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_270_010.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_270_010_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_270_010_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_310_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_310_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_310_000_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_210_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_210_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_210_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_040_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_040_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_040_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_290_020.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_290_020_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_290_020_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_340_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_340_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_340_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_280_030.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_280_030_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_280_030_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_350_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_350_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_350_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_020.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_020_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_020_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_050_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_050_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_050_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_310_020.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_310_020_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_310_020_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_130_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_130_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_130_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_330_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_330_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_330_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_080_020.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_080_020_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_080_020_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_210_030.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_210_030_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_210_030_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_040.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_040_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_040_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_320_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_320_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_320_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_050.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_050_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_050_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_340_040.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_340_040_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_340_040_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_190_030.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_190_030_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_190_030_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_120_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_120_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_120_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_100_020.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_100_020_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_100_020_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_130_020.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_130_020_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_130_020_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_350_030.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_350_030_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_350_030_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_020.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_020_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_020_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_080_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_080_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_080_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_090_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_090_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_090_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_300_040.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_300_040_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_300_040_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_100_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_100_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_100_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_030.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_030_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_030_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_040_030.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_040_030_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_040_030_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_300_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_300_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_300_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_000_050.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_000_050_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_000_050_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_290_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_290_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_290_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_000_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_000_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_000_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_330_030.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_330_030_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_330_030_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_050_020.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_050_020_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_050_020_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_070_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_070_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_070_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_310_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_310_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_310_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_040.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_040_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_040_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_200_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_200_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_200_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_190_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_190_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_190_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_340_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_340_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_340_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_240_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_240_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_240_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_030_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_030_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_030_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_130_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_130_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_130_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_150_030.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_150_030_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_150_030_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_210_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_210_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_210_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_180_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_180_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_180_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_010_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_010_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_010_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_110_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_110_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_110_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_280_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_280_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_280_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_230_030.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_230_030_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_230_030_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_170_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_170_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_170_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_220_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_220_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_220_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_300_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_300_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_300_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_290_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_290_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_290_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_260_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_260_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_260_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_230_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_230_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_230_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_350_040.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_350_040_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_350_040_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_330_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_330_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_330_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_220_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_220_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_220_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_140_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_140_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_140_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_160_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_160_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_160_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_040_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_040_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_040_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_320_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_320_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_320_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_260_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_260_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_260_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_200_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_200_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_200_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_020_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_020_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_020_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_340_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_340_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_340_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_000_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_000_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_000_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_240_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_240_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_240_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_120_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_120_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_120_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_030_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_030_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_030_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_350_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_350_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_350_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_250_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_250_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_250_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_210_030.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_210_030_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_210_030_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_180_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_180_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_180_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_240_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_240_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_240_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_050.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_050_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_050_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_000_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_000_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_000_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_040.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_040_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_040_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_010.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_010_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_010_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_220_030.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_220_030_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_220_030_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_140_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_140_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_140_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_050_030.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_050_030_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_050_030_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_050.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_050_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_050_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_150_030.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_150_030_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_150_030_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_040.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_040_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_040_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_010.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_010_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_010_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_010_010.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_010_010_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_010_010_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_070_010.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_070_010_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_070_010_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_170_050.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_170_050_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_170_050_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_120_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_120_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_120_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_060_040.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_060_040_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_060_040_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_160_040.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_160_040_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_160_040_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_060_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_060_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_060_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_190_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_190_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_190_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_330_010.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_330_010_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_330_010_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_070_030.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_070_030_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_070_030_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_230_010.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_230_010_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_230_010_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_180_030.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_180_030_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_180_030_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_210_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_210_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_210_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_130_010.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_130_010_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_130_010_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_120_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_120_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_120_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_140_050.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_140_050_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_140_050_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_320_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_320_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_320_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_190_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_190_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_190_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_240_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_240_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_240_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_340_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_340_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_340_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_000_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_000_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_000_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_030.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_030_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_030_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_130_040.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_130_040_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_130_040_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_170_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_170_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_170_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_030.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_030_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_030_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_030_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_030_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_030_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_350_010.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_350_010_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_350_010_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_340_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_340_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_340_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_220_020.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_220_020_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_220_020_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_140_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_140_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_140_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_200_010.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_200_010_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_200_010_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_190_000.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_190_000_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_190_000_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_110_040.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_110_040_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_110_040_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_070_010.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_070_010_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_070_010_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_150_020.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_150_020_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_150_020_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_210_000.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_210_000_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_210_000_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_180_010.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_180_010_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_180_010_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_310_040.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_310_040_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_310_040_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_000.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_000_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_000_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_130_020.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_130_020_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_130_020_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_040.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_040_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_040_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_120_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_120_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_120_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_100_000.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_100_000_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_100_000_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_200_040.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_200_040_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_200_040_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_320_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_320_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_320_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_160_010.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_160_010_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_160_010_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_130_040.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_130_040_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_130_040_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_020.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_020_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_020_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_210_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_210_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_210_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_330_040.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_330_040_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_330_040_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_140_000.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_140_000_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_140_000_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_160_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_160_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_160_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_120_000.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_120_000_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_120_000_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_100_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_100_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_100_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_000_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_000_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_000_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_220_040.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_220_040_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_220_040_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_090_020.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_090_020_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_090_020_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_300_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_300_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_300_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_190_020.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_190_020_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_190_020_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_080_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_080_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_080_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_230_010.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_230_010_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_230_010_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_180_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_180_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_180_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_110_020.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_110_020_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_110_020_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_150_040.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_150_040_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_150_040_depth_mask.npy
\ No newline at end of file
diff --git a/Lotus/datasets/eval/depth/data_split/diode/diode_val_indoor_filename_list.txt b/Lotus/datasets/eval/depth/data_split/diode/diode_val_indoor_filename_list.txt
new file mode 100644
index 0000000000000000000000000000000000000000..78226d7ccd9696724df7fa67c6785a41289b17ee
--- /dev/null
+++ b/Lotus/datasets/eval/depth/data_split/diode/diode_val_indoor_filename_list.txt
@@ -0,0 +1,325 @@
+indoors/scene_00021/scan_00189/00021_00189_indoors_200_010.png indoors/scene_00021/scan_00189/00021_00189_indoors_200_010_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_200_010_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_240_030.png indoors/scene_00021/scan_00189/00021_00189_indoors_240_030_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_240_030_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_210_000.png indoors/scene_00021/scan_00189/00021_00189_indoors_210_000_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_210_000_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_350_030.png indoors/scene_00021/scan_00189/00021_00189_indoors_350_030_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_350_030_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_010_010.png indoors/scene_00021/scan_00189/00021_00189_indoors_010_010_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_010_010_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_230_020.png indoors/scene_00021/scan_00189/00021_00189_indoors_230_020_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_230_020_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_150_030.png indoors/scene_00021/scan_00189/00021_00189_indoors_150_030_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_150_030_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_000_040.png indoors/scene_00021/scan_00189/00021_00189_indoors_000_040_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_000_040_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_220_030.png indoors/scene_00021/scan_00189/00021_00189_indoors_220_030_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_220_030_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_340_020.png indoors/scene_00021/scan_00189/00021_00189_indoors_340_020_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_340_020_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_000_000.png indoors/scene_00021/scan_00189/00021_00189_indoors_000_000_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_000_000_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_350_010.png indoors/scene_00021/scan_00189/00021_00189_indoors_350_010_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_350_010_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_010_030.png indoors/scene_00021/scan_00189/00021_00189_indoors_010_030_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_010_030_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_130_000.png indoors/scene_00021/scan_00189/00021_00189_indoors_130_000_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_130_000_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_230_000.png indoors/scene_00021/scan_00189/00021_00189_indoors_230_000_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_230_000_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_220_010.png indoors/scene_00021/scan_00189/00021_00189_indoors_220_010_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_220_010_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_340_000.png indoors/scene_00021/scan_00189/00021_00189_indoors_340_000_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_340_000_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_000_020.png indoors/scene_00021/scan_00189/00021_00189_indoors_000_020_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_000_020_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_160_020.png indoors/scene_00021/scan_00189/00021_00189_indoors_160_020_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_160_020_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_190_020.png indoors/scene_00021/scan_00189/00021_00189_indoors_190_020_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_190_020_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_210_020.png indoors/scene_00021/scan_00189/00021_00189_indoors_210_020_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_210_020_depth_mask.npy
+indoors/scene_00021/scan_00189/00021_00189_indoors_330_010.png indoors/scene_00021/scan_00189/00021_00189_indoors_330_010_depth.npy indoors/scene_00021/scan_00189/00021_00189_indoors_330_010_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_280_000.png indoors/scene_00021/scan_00190/00021_00190_indoors_280_000_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_280_000_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_150_030.png indoors/scene_00021/scan_00190/00021_00190_indoors_150_030_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_150_030_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_110_050.png indoors/scene_00021/scan_00190/00021_00190_indoors_110_050_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_110_050_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_050_030.png indoors/scene_00021/scan_00190/00021_00190_indoors_050_030_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_050_030_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_070_000.png indoors/scene_00021/scan_00190/00021_00190_indoors_070_000_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_070_000_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_140_020.png indoors/scene_00021/scan_00190/00021_00190_indoors_140_020_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_140_020_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_060_010.png indoors/scene_00021/scan_00190/00021_00190_indoors_060_010_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_060_010_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_300_000.png indoors/scene_00021/scan_00190/00021_00190_indoors_300_000_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_300_000_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_290_010.png indoors/scene_00021/scan_00190/00021_00190_indoors_290_010_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_290_010_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_190_000.png indoors/scene_00021/scan_00190/00021_00190_indoors_190_000_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_190_000_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_090_000.png indoors/scene_00021/scan_00190/00021_00190_indoors_090_000_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_090_000_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_060_040.png indoors/scene_00021/scan_00190/00021_00190_indoors_060_040_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_060_040_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_120_020.png indoors/scene_00021/scan_00190/00021_00190_indoors_120_020_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_120_020_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_100_010.png indoors/scene_00021/scan_00190/00021_00190_indoors_100_010_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_100_010_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_130_030.png indoors/scene_00021/scan_00190/00021_00190_indoors_130_030_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_130_030_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_270_010.png indoors/scene_00021/scan_00190/00021_00190_indoors_270_010_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_270_010_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_110_000.png indoors/scene_00021/scan_00190/00021_00190_indoors_110_000_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_110_000_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_080_010.png indoors/scene_00021/scan_00190/00021_00190_indoors_080_010_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_080_010_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_050_000.png indoors/scene_00021/scan_00190/00021_00190_indoors_050_000_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_050_000_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_070_030.png indoors/scene_00021/scan_00190/00021_00190_indoors_070_030_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_070_030_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_150_050.png indoors/scene_00021/scan_00190/00021_00190_indoors_150_050_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_150_050_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_280_020.png indoors/scene_00021/scan_00190/00021_00190_indoors_280_020_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_280_020_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_300_020.png indoors/scene_00021/scan_00190/00021_00190_indoors_300_020_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_300_020_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_090_030.png indoors/scene_00021/scan_00190/00021_00190_indoors_090_030_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_090_030_depth_mask.npy
+indoors/scene_00021/scan_00190/00021_00190_indoors_140_040.png indoors/scene_00021/scan_00190/00021_00190_indoors_140_040_depth.npy indoors/scene_00021/scan_00190/00021_00190_indoors_140_040_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_230_010.png indoors/scene_00021/scan_00191/00021_00191_indoors_230_010_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_230_010_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_230_050.png indoors/scene_00021/scan_00191/00021_00191_indoors_230_050_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_230_050_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_280_030.png indoors/scene_00021/scan_00191/00021_00191_indoors_280_030_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_280_030_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_220_040.png indoors/scene_00021/scan_00191/00021_00191_indoors_220_040_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_220_040_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_020_040.png indoors/scene_00021/scan_00191/00021_00191_indoors_020_040_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_020_040_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_220_000.png indoors/scene_00021/scan_00191/00021_00191_indoors_220_000_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_220_000_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_340_000.png indoors/scene_00021/scan_00191/00021_00191_indoors_340_000_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_340_000_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_260_030.png indoors/scene_00021/scan_00191/00021_00191_indoors_260_030_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_260_030_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_340_040.png indoors/scene_00021/scan_00191/00021_00191_indoors_340_040_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_340_040_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_010_030.png indoors/scene_00021/scan_00191/00021_00191_indoors_010_030_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_010_030_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_340_020.png indoors/scene_00021/scan_00191/00021_00191_indoors_340_020_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_340_020_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_060_050.png indoors/scene_00021/scan_00191/00021_00191_indoors_060_050_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_060_050_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_000_040.png indoors/scene_00021/scan_00191/00021_00191_indoors_000_040_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_000_040_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_350_030.png indoors/scene_00021/scan_00191/00021_00191_indoors_350_030_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_350_030_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_230_030.png indoors/scene_00021/scan_00191/00021_00191_indoors_230_030_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_230_030_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_330_030.png indoors/scene_00021/scan_00191/00021_00191_indoors_330_030_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_330_030_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_080_050.png indoors/scene_00021/scan_00191/00021_00191_indoors_080_050_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_080_050_depth_mask.npy
+indoors/scene_00021/scan_00191/00021_00191_indoors_220_020.png indoors/scene_00021/scan_00191/00021_00191_indoors_220_020_depth.npy indoors/scene_00021/scan_00191/00021_00191_indoors_220_020_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_110_000.png indoors/scene_00021/scan_00188/00021_00188_indoors_110_000_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_110_000_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_180_010.png indoors/scene_00021/scan_00188/00021_00188_indoors_180_010_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_180_010_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_110_040.png indoors/scene_00021/scan_00188/00021_00188_indoors_110_040_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_110_040_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_090_000.png indoors/scene_00021/scan_00188/00021_00188_indoors_090_000_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_090_000_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_100_010.png indoors/scene_00021/scan_00188/00021_00188_indoors_100_010_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_100_010_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_200_040.png indoors/scene_00021/scan_00188/00021_00188_indoors_200_040_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_200_040_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_120_030.png indoors/scene_00021/scan_00188/00021_00188_indoors_120_030_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_120_030_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_180_040.png indoors/scene_00021/scan_00188/00021_00188_indoors_180_040_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_180_040_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_210_050.png indoors/scene_00021/scan_00188/00021_00188_indoors_210_050_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_210_050_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_130_020.png indoors/scene_00021/scan_00188/00021_00188_indoors_130_020_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_130_020_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_170_000.png indoors/scene_00021/scan_00188/00021_00188_indoors_170_000_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_170_000_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_230_020.png indoors/scene_00021/scan_00188/00021_00188_indoors_230_020_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_230_020_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_200_020.png indoors/scene_00021/scan_00188/00021_00188_indoors_200_020_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_200_020_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_190_030.png indoors/scene_00021/scan_00188/00021_00188_indoors_190_030_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_190_030_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_240_040.png indoors/scene_00021/scan_00188/00021_00188_indoors_240_040_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_240_040_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_120_010.png indoors/scene_00021/scan_00188/00021_00188_indoors_120_010_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_120_010_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_130_000.png indoors/scene_00021/scan_00188/00021_00188_indoors_130_000_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_130_000_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_170_020.png indoors/scene_00021/scan_00188/00021_00188_indoors_170_020_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_170_020_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_210_030.png indoors/scene_00021/scan_00188/00021_00188_indoors_210_030_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_210_030_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_110_020.png indoors/scene_00021/scan_00188/00021_00188_indoors_110_020_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_110_020_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_250_000.png indoors/scene_00021/scan_00188/00021_00188_indoors_250_000_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_250_000_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_150_000.png indoors/scene_00021/scan_00188/00021_00188_indoors_150_000_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_150_000_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_090_020.png indoors/scene_00021/scan_00188/00021_00188_indoors_090_020_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_090_020_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_220_040.png indoors/scene_00021/scan_00188/00021_00188_indoors_220_040_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_220_040_depth_mask.npy
+indoors/scene_00021/scan_00188/00021_00188_indoors_100_030.png indoors/scene_00021/scan_00188/00021_00188_indoors_100_030_depth.npy indoors/scene_00021/scan_00188/00021_00188_indoors_100_030_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_310_010.png indoors/scene_00021/scan_00192/00021_00192_indoors_310_010_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_310_010_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_010_010.png indoors/scene_00021/scan_00192/00021_00192_indoors_010_010_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_010_010_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_350_030.png indoors/scene_00021/scan_00192/00021_00192_indoors_350_030_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_350_030_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_000_000.png indoors/scene_00021/scan_00192/00021_00192_indoors_000_000_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_000_000_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_340_020.png indoors/scene_00021/scan_00192/00021_00192_indoors_340_020_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_340_020_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_240_020.png indoors/scene_00021/scan_00192/00021_00192_indoors_240_020_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_240_020_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_300_000.png indoors/scene_00021/scan_00192/00021_00192_indoors_300_000_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_300_000_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_020_020.png indoors/scene_00021/scan_00192/00021_00192_indoors_020_020_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_020_020_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_320_020.png indoors/scene_00021/scan_00192/00021_00192_indoors_320_020_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_320_020_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_330_030.png indoors/scene_00021/scan_00192/00021_00192_indoors_330_030_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_330_030_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_030_030.png indoors/scene_00021/scan_00192/00021_00192_indoors_030_030_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_030_030_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_020_000.png indoors/scene_00021/scan_00192/00021_00192_indoors_020_000_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_020_000_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_220_000.png indoors/scene_00021/scan_00192/00021_00192_indoors_220_000_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_220_000_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_320_000.png indoors/scene_00021/scan_00192/00021_00192_indoors_320_000_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_320_000_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_230_010.png indoors/scene_00021/scan_00192/00021_00192_indoors_230_010_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_230_010_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_330_010.png indoors/scene_00021/scan_00192/00021_00192_indoors_330_010_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_330_010_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_030_010.png indoors/scene_00021/scan_00192/00021_00192_indoors_030_010_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_030_010_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_310_030.png indoors/scene_00021/scan_00192/00021_00192_indoors_310_030_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_310_030_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_010_030.png indoors/scene_00021/scan_00192/00021_00192_indoors_010_030_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_010_030_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_350_010.png indoors/scene_00021/scan_00192/00021_00192_indoors_350_010_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_350_010_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_000_020.png indoors/scene_00021/scan_00192/00021_00192_indoors_000_020_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_000_020_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_340_000.png indoors/scene_00021/scan_00192/00021_00192_indoors_340_000_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_340_000_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_240_000.png indoors/scene_00021/scan_00192/00021_00192_indoors_240_000_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_240_000_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_300_020.png indoors/scene_00021/scan_00192/00021_00192_indoors_300_020_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_300_020_depth_mask.npy
+indoors/scene_00021/scan_00192/00021_00192_indoors_040_000.png indoors/scene_00021/scan_00192/00021_00192_indoors_040_000_depth.npy indoors/scene_00021/scan_00192/00021_00192_indoors_040_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_300_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_300_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_300_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_290_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_290_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_290_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_260_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_260_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_260_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_190_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_190_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_190_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_200_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_200_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_200_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_000_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_000_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_000_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_040_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_040_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_040_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_290_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_290_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_290_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_060_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_060_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_060_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_300_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_300_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_300_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_140_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_140_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_140_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_220_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_220_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_220_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_280_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_280_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_280_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_310_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_310_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_310_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_150_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_150_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_150_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_230_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_230_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_230_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_180_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_180_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_180_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_310_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_310_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_310_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_110_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_110_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_110_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_270_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_270_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_270_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_350_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_350_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_350_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_180_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_180_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_180_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_010_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_010_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_010_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_270_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_270_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_270_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_110_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_110_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_110_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_330_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_330_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_330_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_080_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_080_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_080_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_170_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_170_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_170_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_130_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_130_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_130_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_250_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_250_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_250_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_170_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_170_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_170_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_120_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_120_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_120_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_240_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_240_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_240_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_160_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_160_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_160_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_020_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_020_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_020_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_320_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_320_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_320_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_260_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_260_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_260_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_000_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_000_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_000_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_160_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_160_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_160_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_330_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_330_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_330_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_050_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_050_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_050_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_130_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_130_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_130_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_210_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_210_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_210_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_170_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_170_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_170_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_030_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_030_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_030_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_350_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_350_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_350_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_250_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_250_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_250_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_130_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_130_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_130_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_280_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_280_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_280_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_240_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_240_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_240_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_120_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_120_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_120_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_320_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_320_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_320_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_040_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_040_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_040_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_240_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_240_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_240_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_020_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_020_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_020_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_340_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_340_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_340_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_200_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_200_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_200_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_160_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_160_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_160_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_260_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_260_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_260_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_340_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_340_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_340_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_220_040.png indoors/scene_00019/scan_00183/00019_00183_indoors_220_040_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_220_040_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_140_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_140_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_140_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_300_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_300_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_300_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_140_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_140_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_140_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_310_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_310_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_310_020_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_230_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_230_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_230_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_150_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_150_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_150_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_180_030.png indoors/scene_00019/scan_00183/00019_00183_indoors_180_030_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_180_030_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_330_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_330_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_330_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_350_000.png indoors/scene_00019/scan_00183/00019_00183_indoors_350_000_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_350_000_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_030_010.png indoors/scene_00019/scan_00183/00019_00183_indoors_030_010_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_030_010_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_230_050.png indoors/scene_00019/scan_00183/00019_00183_indoors_230_050_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_230_050_depth_mask.npy
+indoors/scene_00019/scan_00183/00019_00183_indoors_010_020.png indoors/scene_00019/scan_00183/00019_00183_indoors_010_020_depth.npy indoors/scene_00019/scan_00183/00019_00183_indoors_010_020_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_130_030.png indoors/scene_00020/scan_00184/00020_00184_indoors_130_030_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_130_030_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_050_020.png indoors/scene_00020/scan_00184/00020_00184_indoors_050_020_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_050_020_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_080_010.png indoors/scene_00020/scan_00184/00020_00184_indoors_080_010_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_080_010_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_180_010.png indoors/scene_00020/scan_00184/00020_00184_indoors_180_010_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_180_010_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_290_040.png indoors/scene_00020/scan_00184/00020_00184_indoors_290_040_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_290_040_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_190_000.png indoors/scene_00020/scan_00184/00020_00184_indoors_190_000_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_190_000_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_200_010.png indoors/scene_00020/scan_00184/00020_00184_indoors_200_010_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_200_010_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_120_020.png indoors/scene_00020/scan_00184/00020_00184_indoors_120_020_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_120_020_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_060_010.png indoors/scene_00020/scan_00184/00020_00184_indoors_060_010_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_060_010_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_140_020.png indoors/scene_00020/scan_00184/00020_00184_indoors_140_020_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_140_020_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_160_010.png indoors/scene_00020/scan_00184/00020_00184_indoors_160_010_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_160_010_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_100_000.png indoors/scene_00020/scan_00184/00020_00184_indoors_100_000_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_100_000_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_110_010.png indoors/scene_00020/scan_00184/00020_00184_indoors_110_010_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_110_010_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_070_000.png indoors/scene_00020/scan_00184/00020_00184_indoors_070_000_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_070_000_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_170_000.png indoors/scene_00020/scan_00184/00020_00184_indoors_170_000_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_170_000_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_060_030.png indoors/scene_00020/scan_00184/00020_00184_indoors_060_030_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_060_030_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_140_000.png indoors/scene_00020/scan_00184/00020_00184_indoors_140_000_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_140_000_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_160_030.png indoors/scene_00020/scan_00184/00020_00184_indoors_160_030_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_160_030_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_110_030.png indoors/scene_00020/scan_00184/00020_00184_indoors_110_030_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_110_030_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_070_020.png indoors/scene_00020/scan_00184/00020_00184_indoors_070_020_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_070_020_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_170_020.png indoors/scene_00020/scan_00184/00020_00184_indoors_170_020_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_170_020_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_130_010.png indoors/scene_00020/scan_00184/00020_00184_indoors_130_010_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_130_010_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_050_000.png indoors/scene_00020/scan_00184/00020_00184_indoors_050_000_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_050_000_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_180_030.png indoors/scene_00020/scan_00184/00020_00184_indoors_180_030_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_180_030_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_190_020.png indoors/scene_00020/scan_00184/00020_00184_indoors_190_020_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_190_020_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_200_030.png indoors/scene_00020/scan_00184/00020_00184_indoors_200_030_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_200_030_depth_mask.npy
+indoors/scene_00020/scan_00184/00020_00184_indoors_120_000.png indoors/scene_00020/scan_00184/00020_00184_indoors_120_000_depth.npy indoors/scene_00020/scan_00184/00020_00184_indoors_120_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_210_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_210_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_210_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_310_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_310_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_310_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_110_040.png indoors/scene_00020/scan_00187/00020_00187_indoors_110_040_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_110_040_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_280_010.png indoors/scene_00020/scan_00187/00020_00187_indoors_280_010_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_280_010_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_250_020.png indoors/scene_00020/scan_00187/00020_00187_indoors_250_020_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_250_020_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_290_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_290_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_290_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_240_030.png indoors/scene_00020/scan_00187/00020_00187_indoors_240_030_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_240_030_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_200_010.png indoors/scene_00020/scan_00187/00020_00187_indoors_200_010_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_200_010_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_190_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_190_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_190_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_300_010.png indoors/scene_00020/scan_00187/00020_00187_indoors_300_010_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_300_010_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_000_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_000_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_000_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_260_010.png indoors/scene_00020/scan_00187/00020_00187_indoors_260_010_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_260_010_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_100_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_100_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_100_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_220_030.png indoors/scene_00020/scan_00187/00020_00187_indoors_220_030_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_220_030_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_000_040.png indoors/scene_00020/scan_00187/00020_00187_indoors_000_040_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_000_040_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_170_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_170_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_170_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_230_020.png indoors/scene_00020/scan_00187/00020_00187_indoors_230_020_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_230_020_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_270_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_270_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_270_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_110_010.png indoors/scene_00020/scan_00187/00020_00187_indoors_110_010_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_110_010_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_000_020.png indoors/scene_00020/scan_00187/00020_00187_indoors_000_020_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_000_020_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_260_030.png indoors/scene_00020/scan_00187/00020_00187_indoors_260_030_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_260_030_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_140_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_140_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_140_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_220_010.png indoors/scene_00020/scan_00187/00020_00187_indoors_220_010_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_220_010_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_230_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_230_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_230_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_010_030.png indoors/scene_00020/scan_00187/00020_00187_indoors_010_030_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_010_030_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_270_020.png indoors/scene_00020/scan_00187/00020_00187_indoors_270_020_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_270_020_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_210_020.png indoors/scene_00020/scan_00187/00020_00187_indoors_210_020_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_210_020_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_280_030.png indoors/scene_00020/scan_00187/00020_00187_indoors_280_030_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_280_030_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_250_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_250_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_250_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_290_020.png indoors/scene_00020/scan_00187/00020_00187_indoors_290_020_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_290_020_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_100_030.png indoors/scene_00020/scan_00187/00020_00187_indoors_100_030_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_100_030_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_120_000.png indoors/scene_00020/scan_00187/00020_00187_indoors_120_000_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_120_000_depth_mask.npy
+indoors/scene_00020/scan_00187/00020_00187_indoors_240_010.png indoors/scene_00020/scan_00187/00020_00187_indoors_240_010_depth.npy indoors/scene_00020/scan_00187/00020_00187_indoors_240_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_000_020.png indoors/scene_00020/scan_00185/00020_00185_indoors_000_020_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_000_020_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_340_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_340_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_340_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_040_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_040_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_040_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_050_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_050_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_050_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_010_030.png indoors/scene_00020/scan_00185/00020_00185_indoors_010_030_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_010_030_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_350_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_350_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_350_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_330_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_330_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_330_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_180_030.png indoors/scene_00020/scan_00185/00020_00185_indoors_180_030_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_180_030_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_150_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_150_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_150_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_030_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_030_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_030_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_290_020.png indoors/scene_00020/scan_00185/00020_00185_indoors_290_020_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_290_020_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_020_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_020_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_020_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_300_030.png indoors/scene_00020/scan_00185/00020_00185_indoors_300_030_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_300_030_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_320_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_320_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_320_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_080_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_080_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_080_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_280_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_280_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_280_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_290_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_290_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_290_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_020_020.png indoors/scene_00020/scan_00185/00020_00185_indoors_020_020_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_020_020_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_090_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_090_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_090_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_300_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_300_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_300_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_190_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_190_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_190_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_000_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_000_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_000_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_340_020.png indoors/scene_00020/scan_00185/00020_00185_indoors_340_020_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_340_020_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_160_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_160_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_160_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_070_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_070_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_070_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_170_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_170_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_170_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_270_000.png indoors/scene_00020/scan_00185/00020_00185_indoors_270_000_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_270_000_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_010_010.png indoors/scene_00020/scan_00185/00020_00185_indoors_010_010_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_010_010_depth_mask.npy
+indoors/scene_00020/scan_00185/00020_00185_indoors_350_030.png indoors/scene_00020/scan_00185/00020_00185_indoors_350_030_depth.npy indoors/scene_00020/scan_00185/00020_00185_indoors_350_030_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_020_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_020_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_020_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_220_040.png indoors/scene_00020/scan_00186/00020_00186_indoors_220_040_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_220_040_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_260_020.png indoors/scene_00020/scan_00186/00020_00186_indoors_260_020_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_260_020_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_160_020.png indoors/scene_00020/scan_00186/00020_00186_indoors_160_020_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_160_020_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_320_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_320_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_320_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_090_020.png indoors/scene_00020/scan_00186/00020_00186_indoors_090_020_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_090_020_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_330_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_330_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_330_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_080_030.png indoors/scene_00020/scan_00186/00020_00186_indoors_080_030_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_080_030_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_030_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_030_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_030_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_230_050.png indoors/scene_00020/scan_00186/00020_00186_indoors_230_050_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_230_050_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_130_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_130_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_130_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_250_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_250_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_250_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_150_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_150_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_150_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_230_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_230_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_230_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_050_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_050_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_050_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_250_050.png indoors/scene_00020/scan_00186/00020_00186_indoors_250_050_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_250_050_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_070_020.png indoors/scene_00020/scan_00186/00020_00186_indoors_070_020_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_070_020_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_110_030.png indoors/scene_00020/scan_00186/00020_00186_indoors_110_030_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_110_030_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_340_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_340_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_340_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_140_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_140_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_140_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_220_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_220_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_220_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_040_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_040_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_040_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_060_030.png indoors/scene_00020/scan_00186/00020_00186_indoors_060_030_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_060_030_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_240_040.png indoors/scene_00020/scan_00186/00020_00186_indoors_240_040_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_240_040_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_150_030.png indoors/scene_00020/scan_00186/00020_00186_indoors_150_030_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_150_030_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_170_040.png indoors/scene_00020/scan_00186/00020_00186_indoors_170_040_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_170_040_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_210_050.png indoors/scene_00020/scan_00186/00020_00186_indoors_210_050_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_210_050_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_070_040.png indoors/scene_00020/scan_00186/00020_00186_indoors_070_040_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_070_040_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_250_030.png indoors/scene_00020/scan_00186/00020_00186_indoors_250_030_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_250_030_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_270_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_270_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_270_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_200_040.png indoors/scene_00020/scan_00186/00020_00186_indoors_200_040_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_200_040_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_190_050.png indoors/scene_00020/scan_00186/00020_00186_indoors_190_050_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_190_050_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_000_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_000_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_000_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_240_020.png indoors/scene_00020/scan_00186/00020_00186_indoors_240_020_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_240_020_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_140_020.png indoors/scene_00020/scan_00186/00020_00186_indoors_140_020_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_140_020_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_040_020.png indoors/scene_00020/scan_00186/00020_00186_indoors_040_020_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_040_020_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_120_020.png indoors/scene_00020/scan_00186/00020_00186_indoors_120_020_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_120_020_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_100_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_100_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_100_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_160_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_160_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_160_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_260_040.png indoors/scene_00020/scan_00186/00020_00186_indoors_260_040_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_260_040_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_060_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_060_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_060_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_090_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_090_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_090_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_230_030.png indoors/scene_00020/scan_00186/00020_00186_indoors_230_030_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_230_030_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_210_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_210_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_210_000_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_170_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_170_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_170_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_080_010.png indoors/scene_00020/scan_00186/00020_00186_indoors_080_010_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_080_010_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_130_030.png indoors/scene_00020/scan_00186/00020_00186_indoors_130_030_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_130_030_depth_mask.npy
+indoors/scene_00020/scan_00186/00020_00186_indoors_110_000.png indoors/scene_00020/scan_00186/00020_00186_indoors_110_000_depth.npy indoors/scene_00020/scan_00186/00020_00186_indoors_110_000_depth_mask.npy
\ No newline at end of file
diff --git a/Lotus/datasets/eval/depth/data_split/diode/diode_val_outdoor_filename_list.txt b/Lotus/datasets/eval/depth/data_split/diode/diode_val_outdoor_filename_list.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a553915d9d836bbac272c536ae5110a61f531b6a
--- /dev/null
+++ b/Lotus/datasets/eval/depth/data_split/diode/diode_val_outdoor_filename_list.txt
@@ -0,0 +1,446 @@
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_350_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_350_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_350_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_050.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_050_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_050_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_230_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_230_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_230_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_040.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_040_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_040_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_170_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_170_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_170_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_220_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_220_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_220_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_040_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_040_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_040_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_320_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_320_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_320_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_000_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_000_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_000_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_120_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_120_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_120_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_090_040.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_090_040_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_090_040_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_190_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_190_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_190_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_200_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_200_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_200_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_020_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_020_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_020_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_240_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_240_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_240_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_050.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_050_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_050_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_040.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_040_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_040_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_100_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_100_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_100_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_030_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_030_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_030_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_040.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_040_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_040_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_110_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_110_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_110_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_180_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_180_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_180_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_210_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_210_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_210_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_310_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_310_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_310_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_020_050.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_020_050_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_020_050_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_300_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_060_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_340_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_340_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_340_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_240_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_240_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_240_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_290_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_290_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_290_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_250_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_250_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_250_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_030_040.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_030_040_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_030_040_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_180_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_180_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_180_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_310_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_310_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_310_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_070_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_010_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_050_040.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_050_040_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_050_040_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_230_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_230_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_230_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_330_010.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_330_010_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_330_010_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_080_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_220_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_220_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_220_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_200_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_200_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_200_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_320_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_320_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_320_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_090_020.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_090_020_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_090_020_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_000_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_000_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_000_030_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_120_000.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_120_000_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_120_000_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_040_050.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_040_050_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_040_050_depth_mask.npy
+outdoor/scene_00022/scan_00196/00022_00196_outdoor_100_030.png outdoor/scene_00022/scan_00196/00022_00196_outdoor_100_030_depth.npy outdoor/scene_00022/scan_00196/00022_00196_outdoor_100_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_320_040.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_320_040_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_320_040_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_020.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_020_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_020_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_240_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_240_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_240_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_200_030.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_200_030_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_200_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_020.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_020_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_020_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_220_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_220_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_220_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_030.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_030_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_240_050.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_240_050_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_240_050_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_030.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_030_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_310_020.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_310_020_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_310_020_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_280_030.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_280_030_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_280_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_330_050.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_330_050_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_330_050_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_250_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_250_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_250_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_050.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_050_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_050_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_180_020.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_180_020_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_180_020_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_010_030.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_010_030_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_010_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_050.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_050_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_050_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_020.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_020_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_020_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_340_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_340_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_340_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_020_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_020_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_020_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_340_040.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_340_040_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_340_040_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_140_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_140_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_140_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_320_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_320_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_320_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_210_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_210_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_210_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_180_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_180_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_180_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_030.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_030_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_150_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_070_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_070_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_070_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_330_020.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_330_020_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_330_020_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_210_050.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_210_050_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_210_050_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_030.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_030_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_350_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_270_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_270_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_270_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_260_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_260_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_260_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_200_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_200_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_200_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_190_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_190_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_190_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_040.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_040_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_000_040_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_140_020.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_140_020_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_140_020_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_220_030.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_220_030_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_220_030_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_040.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_040_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_040_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_190_040.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_190_040_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_190_040_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_050.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_050_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_050_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_160_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_300_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_090_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_090_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_090_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_040.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_040_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_290_040_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_010_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_310_000.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_310_000_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_310_000_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_050.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_050_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_170_050_depth_mask.npy
+outdoor/scene_00022/scan_00195/00022_00195_outdoor_280_010.png outdoor/scene_00022/scan_00195/00022_00195_outdoor_280_010_depth.npy outdoor/scene_00022/scan_00195/00022_00195_outdoor_280_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_330_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_330_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_330_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_050_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_050_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_050_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_050.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_050_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_050_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_210_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_210_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_210_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_150_050.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_150_050_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_150_050_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_140_040.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_140_040_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_140_040_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_320_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_320_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_320_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_040_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_040_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_040_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_040.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_040_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_040_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_190_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_190_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_190_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_260_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_260_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_260_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_340_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_340_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_340_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_020_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_020_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_020_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_220_040.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_220_040_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_220_040_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_060_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_060_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_060_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_170_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_170_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_170_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_270_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_270_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_270_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_030_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_030_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_030_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_050.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_050_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_050_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_050.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_050_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_050_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_050.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_050_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_050_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_160_040.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_160_040_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_160_040_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_020_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_020_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_020_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_040.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_040_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_290_040_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_260_040.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_260_040_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_260_040_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_300_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_220_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_220_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_220_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_280_050.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_280_050_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_280_050_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_080_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_080_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_080_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_230_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_040.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_040_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_310_040_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_280_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_280_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_280_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_350_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_350_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_350_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_170_050.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_170_050_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_170_050_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_330_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_330_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_330_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_070_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_070_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_070_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_150_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_150_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_150_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_210_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_210_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_210_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_250_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_270_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_270_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_270_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_040.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_040_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_180_040_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_010_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_010_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_010_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_240_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_100_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_100_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_100_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_000_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_000_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_000_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_040_020.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_040_020_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_040_020_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_320_030.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_320_030_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_320_030_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_160_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_160_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_160_010_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_000.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_000_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_200_000_depth_mask.npy
+outdoor/scene_00022/scan_00197/00022_00197_outdoor_190_010.png outdoor/scene_00022/scan_00197/00022_00197_outdoor_190_010_depth.npy outdoor/scene_00022/scan_00197/00022_00197_outdoor_190_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_180_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_180_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_180_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_150_000.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_150_000_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_150_000_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_250_040.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_250_040_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_250_040_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_070_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_070_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_070_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_050_000.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_050_000_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_050_000_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_330_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_330_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_330_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_020.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_020_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_020_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_280_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_280_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_280_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_190_020.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_190_020_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_190_020_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_140_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_140_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_140_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_000_020.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_000_020_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_000_020_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_020_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_020_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_020_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_340_000.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_340_000_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_340_000_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_040_040.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_040_040_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_040_040_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_260_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_260_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_260_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_120_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_120_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_120_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_160_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_160_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_160_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_120_050.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_120_050_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_120_050_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_210_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_210_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_210_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_170_020.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_170_020_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_170_020_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_030_000.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_030_000_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_030_000_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_350_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_350_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_350_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_250_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_250_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_250_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_130_000.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_130_000_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_130_000_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_000_000.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_000_000_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_000_000_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_340_020.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_340_020_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_340_020_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_020_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_020_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_020_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_160_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_160_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_160_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_060_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_060_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_060_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_040_020.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_040_020_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_040_020_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_050_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_050_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_050_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_270_040.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_270_040_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_270_040_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_080_040.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_080_040_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_080_040_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_130_020.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_130_020_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_130_020_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_180_010.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_180_010_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_180_010_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_150_020.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_150_020_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_150_020_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_230_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_230_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_230_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_010_040.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_010_040_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_010_040_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_040.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_040_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_040_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_000.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_000_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_110_000_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_070_050.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_070_050_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_070_050_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_060_040.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_060_040_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_060_040_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_140_030.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_140_030_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_140_030_depth_mask.npy
+outdoor/scene_00022/scan_00194/00022_00194_outdoor_100_050.png outdoor/scene_00022/scan_00194/00022_00194_outdoor_100_050_depth.npy outdoor/scene_00022/scan_00194/00022_00194_outdoor_100_050_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_130_040.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_130_040_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_130_040_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_230_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_230_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_230_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_150_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_150_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_150_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_180_020.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_180_020_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_180_020_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_030_040.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_030_040_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_030_040_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_050.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_050_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_050_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_350_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_350_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_350_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_230_040.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_230_040_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_230_040_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_010_030.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_010_030_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_010_030_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_340_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_340_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_340_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_020.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_020_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_020_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_040_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_040_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_040_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_120_050.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_120_050_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_120_050_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_220_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_220_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_220_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_020_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_020_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_020_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_050.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_050_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_050_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_020.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_020_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_020_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_160_020.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_160_020_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_160_020_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_330_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_330_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_330_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_030.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_030_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_030_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_210_020.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_210_020_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_210_020_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_170_030.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_170_030_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_170_030_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_150_040.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_150_040_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_150_040_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_040.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_040_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_040_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_240_030.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_240_030_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_240_030_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_320_020.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_320_020_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_320_020_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_100_050.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_100_050_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_100_050_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_090_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_090_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_090_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_060_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_030.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_030_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_140_030_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_160_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_160_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_160_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_200_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_200_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_200_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_190_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_190_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_190_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_110_040.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_110_040_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_110_040_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_310_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_310_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_310_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_170_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_170_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_170_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_210_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_210_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_210_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_050.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_050_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_070_050_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_110_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_110_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_110_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_030.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_030_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_050_030_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_080_040.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_080_040_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_080_040_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_030_020.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_030_020_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_030_020_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_350_030.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_350_030_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_350_030_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_010_010.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_010_010_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_010_010_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_340_020.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_340_020_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_340_020_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_000.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_000_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_000_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_220_030.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_220_030_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_220_030_depth_mask.npy
+outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_040.png outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_040_depth.npy outdoor/scene_00022/scan_00193/00022_00193_outdoor_000_040_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_190_020.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_190_020_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_190_020_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_260_020.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_260_020_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_260_020_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_290_020.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_290_020_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_290_020_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_080_030.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_080_030_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_080_030_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_310_020.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_310_020_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_310_020_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_250_010.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_250_010_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_250_010_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_350_010.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_350_010_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_350_010_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_070_020.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_070_020_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_070_020_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_330_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_330_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_330_000_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_230_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_230_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_230_000_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_320_010.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_320_010_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_320_010_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_220_010.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_220_010_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_220_010_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_000_020.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_000_020_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_000_020_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_280_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_280_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_280_000_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_250_030.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_250_030_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_250_030_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_080_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_080_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_080_000_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_090_010.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_090_010_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_090_010_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_100_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_100_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_100_000_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_240_020.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_240_020_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_240_020_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_340_020.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_340_020_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_340_020_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_300_010.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_300_010_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_300_010_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_200_010.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_200_010_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_200_010_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_190_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_190_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_190_000_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_260_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_260_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_260_000_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_270_010.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_270_010_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_270_010_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_310_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_310_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_310_000_depth_mask.npy
+outdoor/scene_00023/scan_00198/00023_00198_outdoor_210_000.png outdoor/scene_00023/scan_00198/00023_00198_outdoor_210_000_depth.npy outdoor/scene_00023/scan_00198/00023_00198_outdoor_210_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_040_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_040_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_040_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_290_020.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_290_020_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_290_020_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_340_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_340_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_340_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_280_030.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_280_030_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_280_030_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_350_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_350_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_350_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_020.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_020_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_020_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_050_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_050_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_050_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_310_020.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_310_020_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_310_020_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_130_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_130_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_130_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_330_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_330_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_330_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_080_020.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_080_020_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_080_020_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_210_030.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_210_030_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_210_030_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_040.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_040_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_040_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_320_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_320_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_320_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_050.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_050_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_050_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_340_040.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_340_040_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_340_040_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_190_030.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_190_030_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_190_030_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_120_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_120_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_120_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_100_020.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_100_020_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_100_020_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_130_020.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_130_020_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_130_020_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_350_030.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_350_030_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_350_030_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_020.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_020_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_030_020_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_080_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_080_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_080_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_090_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_090_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_090_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_300_040.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_300_040_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_300_040_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_100_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_100_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_100_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_030.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_030_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_020_030_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_040_030.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_040_030_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_040_030_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_300_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_300_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_300_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_000_050.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_000_050_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_000_050_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_290_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_290_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_290_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_000_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_000_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_000_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_330_030.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_330_030_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_330_030_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_050_020.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_050_020_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_050_020_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_070_010.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_070_010_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_070_010_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_310_000.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_310_000_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_310_000_depth_mask.npy
+outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_040.png outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_040_depth.npy outdoor/scene_00023/scan_00200/00023_00200_outdoor_010_040_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_200_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_200_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_200_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_190_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_190_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_190_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_340_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_340_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_340_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_240_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_240_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_240_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_030_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_030_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_030_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_130_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_130_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_130_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_150_030.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_150_030_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_150_030_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_210_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_210_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_210_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_180_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_180_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_180_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_010_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_010_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_010_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_110_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_110_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_110_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_280_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_280_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_280_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_230_030.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_230_030_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_230_030_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_170_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_170_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_170_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_220_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_220_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_220_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_300_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_300_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_300_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_290_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_290_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_290_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_260_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_260_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_260_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_230_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_230_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_230_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_350_040.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_350_040_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_350_040_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_330_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_330_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_330_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_220_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_220_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_220_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_140_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_140_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_140_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_160_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_160_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_160_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_040_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_040_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_040_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_320_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_320_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_320_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_260_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_260_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_260_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_200_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_200_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_200_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_020_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_020_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_020_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_340_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_340_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_340_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_000_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_000_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_000_020_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_240_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_240_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_240_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_120_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_120_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_120_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_030_000.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_030_000_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_030_000_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_350_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_350_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_350_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_250_010.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_250_010_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_250_010_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_210_030.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_210_030_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_210_030_depth_mask.npy
+outdoor/scene_00023/scan_00199/00023_00199_outdoor_180_020.png outdoor/scene_00023/scan_00199/00023_00199_outdoor_180_020_depth.npy outdoor/scene_00023/scan_00199/00023_00199_outdoor_180_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_240_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_240_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_240_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_050.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_050_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_050_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_000_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_000_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_000_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_040.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_040_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_040_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_010.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_010_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_010_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_220_030.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_220_030_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_220_030_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_140_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_140_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_140_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_050_030.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_050_030_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_050_030_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_050.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_050_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_050_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_150_030.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_150_030_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_150_030_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_040.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_040_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_040_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_010.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_010_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_010_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_010_010.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_010_010_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_010_010_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_070_010.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_070_010_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_070_010_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_170_050.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_170_050_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_170_050_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_120_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_120_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_120_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_060_040.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_060_040_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_060_040_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_160_040.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_160_040_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_160_040_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_060_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_060_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_060_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_190_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_190_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_190_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_330_010.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_330_010_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_330_010_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_070_030.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_070_030_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_070_030_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_230_010.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_230_010_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_230_010_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_180_030.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_180_030_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_180_030_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_210_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_210_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_210_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_130_010.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_130_010_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_130_010_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_120_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_120_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_120_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_140_050.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_140_050_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_140_050_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_320_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_320_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_320_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_190_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_190_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_190_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_240_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_240_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_240_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_100_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_340_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_340_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_340_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_000_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_000_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_000_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_030.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_030_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_090_030_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_130_040.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_130_040_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_130_040_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_080_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_170_020.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_170_020_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_170_020_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_030.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_030_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_110_030_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_030_000.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_030_000_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_030_000_depth_mask.npy
+outdoor/scene_00024/scan_00201/00024_00201_outdoor_350_010.png outdoor/scene_00024/scan_00201/00024_00201_outdoor_350_010_depth.npy outdoor/scene_00024/scan_00201/00024_00201_outdoor_350_010_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_340_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_340_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_340_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_220_020.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_220_020_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_220_020_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_140_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_140_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_140_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_200_010.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_200_010_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_200_010_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_190_000.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_190_000_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_190_000_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_110_040.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_110_040_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_110_040_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_070_010.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_070_010_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_070_010_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_150_020.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_150_020_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_150_020_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_210_000.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_210_000_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_210_000_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_180_010.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_180_010_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_180_010_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_310_040.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_310_040_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_310_040_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_000.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_000_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_000_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_130_020.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_130_020_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_130_020_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_040.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_040_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_040_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_120_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_120_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_120_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_100_000.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_100_000_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_100_000_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_200_040.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_200_040_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_200_040_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_320_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_320_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_320_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_160_010.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_160_010_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_160_010_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_130_040.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_130_040_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_130_040_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_020.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_020_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_170_020_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_210_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_210_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_210_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_330_040.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_330_040_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_330_040_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_140_000.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_140_000_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_140_000_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_160_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_160_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_160_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_120_000.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_120_000_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_120_000_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_100_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_100_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_100_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_000_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_000_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_000_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_220_040.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_220_040_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_220_040_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_090_020.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_090_020_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_090_020_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_300_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_300_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_300_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_190_020.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_190_020_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_190_020_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_080_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_080_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_080_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_230_010.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_230_010_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_230_010_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_180_030.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_180_030_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_180_030_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_110_020.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_110_020_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_110_020_depth_mask.npy
+outdoor/scene_00024/scan_00202/00024_00202_outdoor_150_040.png outdoor/scene_00024/scan_00202/00024_00202_outdoor_150_040_depth.npy outdoor/scene_00024/scan_00202/00024_00202_outdoor_150_040_depth_mask.npy
\ No newline at end of file
diff --git a/Lotus/datasets/eval/depth/data_split/eth3d/eth3d_filename_list.txt b/Lotus/datasets/eval/depth/data_split/eth3d/eth3d_filename_list.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d9fca405a88543dc50b0828ebe6f2597911872ca
--- /dev/null
+++ b/Lotus/datasets/eval/depth/data_split/eth3d/eth3d_filename_list.txt
@@ -0,0 +1,454 @@
+rgb/office/images/dslr_images/DSC_0219.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0219.JPG
+rgb/office/images/dslr_images/DSC_0220.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0220.JPG
+rgb/office/images/dslr_images/DSC_0221.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0221.JPG
+rgb/office/images/dslr_images/DSC_0222.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0222.JPG
+rgb/office/images/dslr_images/DSC_0223.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0223.JPG
+rgb/office/images/dslr_images/DSC_0228.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0228.JPG
+rgb/office/images/dslr_images/DSC_0229.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0229.JPG
+rgb/office/images/dslr_images/DSC_0230.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0230.JPG
+rgb/office/images/dslr_images/DSC_0231.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0231.JPG
+rgb/office/images/dslr_images/DSC_0235.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0235.JPG
+rgb/office/images/dslr_images/DSC_0236.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0236.JPG
+rgb/office/images/dslr_images/DSC_0237.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0237.JPG
+rgb/office/images/dslr_images/DSC_0238.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0238.JPG
+rgb/office/images/dslr_images/DSC_0239.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0239.JPG
+rgb/office/images/dslr_images/DSC_0240.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0240.JPG
+rgb/office/images/dslr_images/DSC_0241.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0241.JPG
+rgb/office/images/dslr_images/DSC_0242.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0242.JPG
+rgb/office/images/dslr_images/DSC_0243.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0243.JPG
+rgb/office/images/dslr_images/DSC_0248.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0248.JPG
+rgb/office/images/dslr_images/DSC_0249.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0249.JPG
+rgb/office/images/dslr_images/DSC_0250.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0250.JPG
+rgb/office/images/dslr_images/DSC_0251.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0251.JPG
+rgb/office/images/dslr_images/DSC_0252.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0252.JPG
+rgb/office/images/dslr_images/DSC_0253.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0253.JPG
+rgb/office/images/dslr_images/DSC_0254.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0254.JPG
+rgb/office/images/dslr_images/DSC_0255.JPG depth/office_dslr_depth/office/ground_truth_depth/dslr_images/DSC_0255.JPG
+rgb/terrace/images/dslr_images/DSC_0259.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0259.JPG
+rgb/terrace/images/dslr_images/DSC_0260.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0260.JPG
+rgb/terrace/images/dslr_images/DSC_0261.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0261.JPG
+rgb/terrace/images/dslr_images/DSC_0262.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0262.JPG
+rgb/terrace/images/dslr_images/DSC_0263.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0263.JPG
+rgb/terrace/images/dslr_images/DSC_0264.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0264.JPG
+rgb/terrace/images/dslr_images/DSC_0266.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0266.JPG
+rgb/terrace/images/dslr_images/DSC_0267.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0267.JPG
+rgb/terrace/images/dslr_images/DSC_0268.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0268.JPG
+rgb/terrace/images/dslr_images/DSC_0269.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0269.JPG
+rgb/terrace/images/dslr_images/DSC_0270.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0270.JPG
+rgb/terrace/images/dslr_images/DSC_0271.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0271.JPG
+rgb/terrace/images/dslr_images/DSC_0272.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0272.JPG
+rgb/terrace/images/dslr_images/DSC_0273.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0273.JPG
+rgb/terrace/images/dslr_images/DSC_0274.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0274.JPG
+rgb/terrace/images/dslr_images/DSC_0275.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0275.JPG
+rgb/terrace/images/dslr_images/DSC_0276.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0276.JPG
+rgb/terrace/images/dslr_images/DSC_0277.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0277.JPG
+rgb/terrace/images/dslr_images/DSC_0278.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0278.JPG
+rgb/terrace/images/dslr_images/DSC_0279.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0279.JPG
+rgb/terrace/images/dslr_images/DSC_0283.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0283.JPG
+rgb/terrace/images/dslr_images/DSC_0284.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0284.JPG
+rgb/terrace/images/dslr_images/DSC_0285.JPG depth/terrace_dslr_depth/terrace/ground_truth_depth/dslr_images/DSC_0285.JPG
+rgb/courtyard/images/dslr_images/DSC_0286.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0286.JPG
+rgb/courtyard/images/dslr_images/DSC_0287.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0287.JPG
+rgb/courtyard/images/dslr_images/DSC_0288.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0288.JPG
+rgb/courtyard/images/dslr_images/DSC_0289.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0289.JPG
+rgb/courtyard/images/dslr_images/DSC_0290.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0290.JPG
+rgb/courtyard/images/dslr_images/DSC_0291.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0291.JPG
+rgb/courtyard/images/dslr_images/DSC_0292.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0292.JPG
+rgb/courtyard/images/dslr_images/DSC_0293.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0293.JPG
+rgb/courtyard/images/dslr_images/DSC_0294.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0294.JPG
+rgb/courtyard/images/dslr_images/DSC_0295.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0295.JPG
+rgb/courtyard/images/dslr_images/DSC_0296.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0296.JPG
+rgb/courtyard/images/dslr_images/DSC_0297.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0297.JPG
+rgb/courtyard/images/dslr_images/DSC_0298.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0298.JPG
+rgb/courtyard/images/dslr_images/DSC_0299.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0299.JPG
+rgb/courtyard/images/dslr_images/DSC_0300.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0300.JPG
+rgb/courtyard/images/dslr_images/DSC_0301.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0301.JPG
+rgb/courtyard/images/dslr_images/DSC_0302.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0302.JPG
+rgb/courtyard/images/dslr_images/DSC_0303.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0303.JPG
+rgb/courtyard/images/dslr_images/DSC_0304.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0304.JPG
+rgb/courtyard/images/dslr_images/DSC_0305.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0305.JPG
+rgb/courtyard/images/dslr_images/DSC_0306.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0306.JPG
+rgb/courtyard/images/dslr_images/DSC_0307.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0307.JPG
+rgb/courtyard/images/dslr_images/DSC_0308.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0308.JPG
+rgb/courtyard/images/dslr_images/DSC_0309.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0309.JPG
+rgb/courtyard/images/dslr_images/DSC_0310.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0310.JPG
+rgb/courtyard/images/dslr_images/DSC_0311.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0311.JPG
+rgb/courtyard/images/dslr_images/DSC_0312.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0312.JPG
+rgb/courtyard/images/dslr_images/DSC_0313.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0313.JPG
+rgb/courtyard/images/dslr_images/DSC_0314.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0314.JPG
+rgb/courtyard/images/dslr_images/DSC_0315.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0315.JPG
+rgb/courtyard/images/dslr_images/DSC_0316.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0316.JPG
+rgb/courtyard/images/dslr_images/DSC_0317.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0317.JPG
+rgb/courtyard/images/dslr_images/DSC_0318.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0318.JPG
+rgb/courtyard/images/dslr_images/DSC_0319.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0319.JPG
+rgb/courtyard/images/dslr_images/DSC_0320.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0320.JPG
+rgb/courtyard/images/dslr_images/DSC_0321.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0321.JPG
+rgb/courtyard/images/dslr_images/DSC_0322.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0322.JPG
+rgb/courtyard/images/dslr_images/DSC_0323.JPG depth/courtyard_dslr_depth/courtyard/ground_truth_depth/dslr_images/DSC_0323.JPG
+rgb/facade/images/dslr_images/DSC_0324.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0324.JPG
+rgb/facade/images/dslr_images/DSC_0325.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0325.JPG
+rgb/facade/images/dslr_images/DSC_0326.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0326.JPG
+rgb/facade/images/dslr_images/DSC_0327.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0327.JPG
+rgb/facade/images/dslr_images/DSC_0328.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0328.JPG
+rgb/facade/images/dslr_images/DSC_0329.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0329.JPG
+rgb/facade/images/dslr_images/DSC_0330.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0330.JPG
+rgb/facade/images/dslr_images/DSC_0331.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0331.JPG
+rgb/facade/images/dslr_images/DSC_0332.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0332.JPG
+rgb/facade/images/dslr_images/DSC_0333.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0333.JPG
+rgb/facade/images/dslr_images/DSC_0334.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0334.JPG
+rgb/facade/images/dslr_images/DSC_0335.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0335.JPG
+rgb/facade/images/dslr_images/DSC_0336.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0336.JPG
+rgb/facade/images/dslr_images/DSC_0337.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0337.JPG
+rgb/facade/images/dslr_images/DSC_0338.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0338.JPG
+rgb/facade/images/dslr_images/DSC_0339.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0339.JPG
+rgb/facade/images/dslr_images/DSC_0340.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0340.JPG
+rgb/facade/images/dslr_images/DSC_0341.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0341.JPG
+rgb/facade/images/dslr_images/DSC_0342.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0342.JPG
+rgb/facade/images/dslr_images/DSC_0343.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0343.JPG
+rgb/facade/images/dslr_images/DSC_0344.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0344.JPG
+rgb/facade/images/dslr_images/DSC_0345.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0345.JPG
+rgb/facade/images/dslr_images/DSC_0346.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0346.JPG
+rgb/facade/images/dslr_images/DSC_0347.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0347.JPG
+rgb/facade/images/dslr_images/DSC_0348.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0348.JPG
+rgb/facade/images/dslr_images/DSC_0349.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0349.JPG
+rgb/facade/images/dslr_images/DSC_0350.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0350.JPG
+rgb/facade/images/dslr_images/DSC_0351.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0351.JPG
+rgb/facade/images/dslr_images/DSC_0352.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0352.JPG
+rgb/facade/images/dslr_images/DSC_0353.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0353.JPG
+rgb/facade/images/dslr_images/DSC_0354.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0354.JPG
+rgb/facade/images/dslr_images/DSC_0355.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0355.JPG
+rgb/facade/images/dslr_images/DSC_0356.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0356.JPG
+rgb/facade/images/dslr_images/DSC_0357.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0357.JPG
+rgb/facade/images/dslr_images/DSC_0358.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0358.JPG
+rgb/facade/images/dslr_images/DSC_0359.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0359.JPG
+rgb/facade/images/dslr_images/DSC_0360.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0360.JPG
+rgb/facade/images/dslr_images/DSC_0361.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0361.JPG
+rgb/facade/images/dslr_images/DSC_0362.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0362.JPG
+rgb/facade/images/dslr_images/DSC_0363.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0363.JPG
+rgb/facade/images/dslr_images/DSC_0364.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0364.JPG
+rgb/facade/images/dslr_images/DSC_0365.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0365.JPG
+rgb/facade/images/dslr_images/DSC_0366.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0366.JPG
+rgb/facade/images/dslr_images/DSC_0386.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0386.JPG
+rgb/facade/images/dslr_images/DSC_0387.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0387.JPG
+rgb/facade/images/dslr_images/DSC_0388.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0388.JPG
+rgb/facade/images/dslr_images/DSC_0389.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0389.JPG
+rgb/facade/images/dslr_images/DSC_0390.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0390.JPG
+rgb/facade/images/dslr_images/DSC_0391.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0391.JPG
+rgb/facade/images/dslr_images/DSC_0392.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0392.JPG
+rgb/facade/images/dslr_images/DSC_0393.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0393.JPG
+rgb/facade/images/dslr_images/DSC_0394.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0394.JPG
+rgb/facade/images/dslr_images/DSC_0395.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0395.JPG
+rgb/facade/images/dslr_images/DSC_0396.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0396.JPG
+rgb/facade/images/dslr_images/DSC_0397.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0397.JPG
+rgb/facade/images/dslr_images/DSC_0398.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0398.JPG
+rgb/facade/images/dslr_images/DSC_0399.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0399.JPG
+rgb/facade/images/dslr_images/DSC_0400.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0400.JPG
+rgb/facade/images/dslr_images/DSC_0401.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0401.JPG
+rgb/facade/images/dslr_images/DSC_0402.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0402.JPG
+rgb/facade/images/dslr_images/DSC_0404.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0404.JPG
+rgb/facade/images/dslr_images/DSC_0405.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0405.JPG
+rgb/facade/images/dslr_images/DSC_0406.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0406.JPG
+rgb/facade/images/dslr_images/DSC_0407.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0407.JPG
+rgb/facade/images/dslr_images/DSC_0408.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0408.JPG
+rgb/facade/images/dslr_images/DSC_0409.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0409.JPG
+rgb/facade/images/dslr_images/DSC_0410.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0410.JPG
+rgb/facade/images/dslr_images/DSC_0411.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0411.JPG
+rgb/facade/images/dslr_images/DSC_0412.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0412.JPG
+rgb/facade/images/dslr_images/DSC_0413.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0413.JPG
+rgb/facade/images/dslr_images/DSC_0414.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0414.JPG
+rgb/facade/images/dslr_images/DSC_0415.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0415.JPG
+rgb/facade/images/dslr_images/DSC_0419.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0419.JPG
+rgb/facade/images/dslr_images/DSC_0420.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0420.JPG
+rgb/facade/images/dslr_images/DSC_0421.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0421.JPG
+rgb/facade/images/dslr_images/DSC_0422.JPG depth/facade_dslr_depth/facade/ground_truth_depth/dslr_images/DSC_0422.JPG
+rgb/relief/images/dslr_images/DSC_0427.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0427.JPG
+rgb/relief/images/dslr_images/DSC_0428.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0428.JPG
+rgb/relief/images/dslr_images/DSC_0429.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0429.JPG
+rgb/relief/images/dslr_images/DSC_0430.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0430.JPG
+rgb/relief/images/dslr_images/DSC_0431.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0431.JPG
+rgb/relief/images/dslr_images/DSC_0432.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0432.JPG
+rgb/relief/images/dslr_images/DSC_0433.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0433.JPG
+rgb/relief/images/dslr_images/DSC_0434.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0434.JPG
+rgb/relief/images/dslr_images/DSC_0435.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0435.JPG
+rgb/relief/images/dslr_images/DSC_0436.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0436.JPG
+rgb/relief/images/dslr_images/DSC_0437.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0437.JPG
+rgb/relief/images/dslr_images/DSC_0438.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0438.JPG
+rgb/relief/images/dslr_images/DSC_0439.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0439.JPG
+rgb/relief/images/dslr_images/DSC_0440.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0440.JPG
+rgb/relief/images/dslr_images/DSC_0441.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0441.JPG
+rgb/relief/images/dslr_images/DSC_0442.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0442.JPG
+rgb/relief/images/dslr_images/DSC_0443.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0443.JPG
+rgb/relief/images/dslr_images/DSC_0444.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0444.JPG
+rgb/relief/images/dslr_images/DSC_0445.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0445.JPG
+rgb/relief/images/dslr_images/DSC_0446.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0446.JPG
+rgb/relief/images/dslr_images/DSC_0447.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0447.JPG
+rgb/relief/images/dslr_images/DSC_0448.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0448.JPG
+rgb/relief/images/dslr_images/DSC_0449.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0449.JPG
+rgb/relief/images/dslr_images/DSC_0450.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0450.JPG
+rgb/relief/images/dslr_images/DSC_0451.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0451.JPG
+rgb/relief/images/dslr_images/DSC_0452.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0452.JPG
+rgb/relief/images/dslr_images/DSC_0453.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0453.JPG
+rgb/relief/images/dslr_images/DSC_0454.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0454.JPG
+rgb/relief/images/dslr_images/DSC_0455.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0455.JPG
+rgb/relief/images/dslr_images/DSC_0456.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0456.JPG
+rgb/relief/images/dslr_images/DSC_0457.JPG depth/relief_dslr_depth/relief/ground_truth_depth/dslr_images/DSC_0457.JPG
+rgb/relief_2/images/dslr_images/DSC_0458.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0458.JPG
+rgb/relief_2/images/dslr_images/DSC_0459.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0459.JPG
+rgb/relief_2/images/dslr_images/DSC_0460.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0460.JPG
+rgb/relief_2/images/dslr_images/DSC_0461.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0461.JPG
+rgb/relief_2/images/dslr_images/DSC_0462.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0462.JPG
+rgb/relief_2/images/dslr_images/DSC_0463.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0463.JPG
+rgb/relief_2/images/dslr_images/DSC_0464.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0464.JPG
+rgb/relief_2/images/dslr_images/DSC_0465.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0465.JPG
+rgb/relief_2/images/dslr_images/DSC_0466.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0466.JPG
+rgb/relief_2/images/dslr_images/DSC_0467.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0467.JPG
+rgb/relief_2/images/dslr_images/DSC_0468.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0468.JPG
+rgb/relief_2/images/dslr_images/DSC_0469.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0469.JPG
+rgb/relief_2/images/dslr_images/DSC_0470.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0470.JPG
+rgb/relief_2/images/dslr_images/DSC_0471.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0471.JPG
+rgb/relief_2/images/dslr_images/DSC_0472.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0472.JPG
+rgb/relief_2/images/dslr_images/DSC_0473.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0473.JPG
+rgb/relief_2/images/dslr_images/DSC_0474.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0474.JPG
+rgb/relief_2/images/dslr_images/DSC_0475.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0475.JPG
+rgb/relief_2/images/dslr_images/DSC_0476.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0476.JPG
+rgb/relief_2/images/dslr_images/DSC_0477.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0477.JPG
+rgb/relief_2/images/dslr_images/DSC_0478.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0478.JPG
+rgb/relief_2/images/dslr_images/DSC_0480.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0480.JPG
+rgb/relief_2/images/dslr_images/DSC_0481.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0481.JPG
+rgb/relief_2/images/dslr_images/DSC_0482.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0482.JPG
+rgb/relief_2/images/dslr_images/DSC_0483.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0483.JPG
+rgb/relief_2/images/dslr_images/DSC_0484.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0484.JPG
+rgb/relief_2/images/dslr_images/DSC_0485.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0485.JPG
+rgb/relief_2/images/dslr_images/DSC_0486.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0486.JPG
+rgb/relief_2/images/dslr_images/DSC_0487.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0487.JPG
+rgb/relief_2/images/dslr_images/DSC_0488.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0488.JPG
+rgb/relief_2/images/dslr_images/DSC_0489.JPG depth/relief_2_dslr_depth/relief_2/ground_truth_depth/dslr_images/DSC_0489.JPG
+rgb/playground/images/dslr_images/DSC_0567.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0567.JPG
+rgb/playground/images/dslr_images/DSC_0568.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0568.JPG
+rgb/playground/images/dslr_images/DSC_0569.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0569.JPG
+rgb/playground/images/dslr_images/DSC_0570.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0570.JPG
+rgb/playground/images/dslr_images/DSC_0571.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0571.JPG
+rgb/playground/images/dslr_images/DSC_0572.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0572.JPG
+rgb/playground/images/dslr_images/DSC_0573.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0573.JPG
+rgb/playground/images/dslr_images/DSC_0574.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0574.JPG
+rgb/playground/images/dslr_images/DSC_0575.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0575.JPG
+rgb/playground/images/dslr_images/DSC_0576.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0576.JPG
+rgb/playground/images/dslr_images/DSC_0577.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0577.JPG
+rgb/playground/images/dslr_images/DSC_0578.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0578.JPG
+rgb/playground/images/dslr_images/DSC_0579.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0579.JPG
+rgb/playground/images/dslr_images/DSC_0580.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0580.JPG
+rgb/playground/images/dslr_images/DSC_0581.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0581.JPG
+rgb/playground/images/dslr_images/DSC_0582.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0582.JPG
+rgb/playground/images/dslr_images/DSC_0583.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0583.JPG
+rgb/playground/images/dslr_images/DSC_0584.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0584.JPG
+rgb/playground/images/dslr_images/DSC_0585.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0585.JPG
+rgb/playground/images/dslr_images/DSC_0586.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0586.JPG
+rgb/playground/images/dslr_images/DSC_0587.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0587.JPG
+rgb/playground/images/dslr_images/DSC_0588.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0588.JPG
+rgb/playground/images/dslr_images/DSC_0589.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0589.JPG
+rgb/playground/images/dslr_images/DSC_0590.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0590.JPG
+rgb/playground/images/dslr_images/DSC_0591.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0591.JPG
+rgb/playground/images/dslr_images/DSC_0592.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0592.JPG
+rgb/playground/images/dslr_images/DSC_0593.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0593.JPG
+rgb/playground/images/dslr_images/DSC_0594.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0594.JPG
+rgb/playground/images/dslr_images/DSC_0595.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0595.JPG
+rgb/playground/images/dslr_images/DSC_0596.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0596.JPG
+rgb/playground/images/dslr_images/DSC_0597.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0597.JPG
+rgb/playground/images/dslr_images/DSC_0598.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0598.JPG
+rgb/playground/images/dslr_images/DSC_0599.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0599.JPG
+rgb/playground/images/dslr_images/DSC_0602.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0602.JPG
+rgb/playground/images/dslr_images/DSC_0603.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0603.JPG
+rgb/playground/images/dslr_images/DSC_0604.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0604.JPG
+rgb/playground/images/dslr_images/DSC_0605.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0605.JPG
+rgb/playground/images/dslr_images/DSC_0606.JPG depth/playground_dslr_depth/playground/ground_truth_depth/dslr_images/DSC_0606.JPG
+rgb/terrains/images/dslr_images/DSC_0614.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0614.JPG
+rgb/terrains/images/dslr_images/DSC_0615.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0615.JPG
+rgb/terrains/images/dslr_images/DSC_0616.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0616.JPG
+rgb/terrains/images/dslr_images/DSC_0617.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0617.JPG
+rgb/terrains/images/dslr_images/DSC_0618.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0618.JPG
+rgb/terrains/images/dslr_images/DSC_0619.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0619.JPG
+rgb/terrains/images/dslr_images/DSC_0620.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0620.JPG
+rgb/terrains/images/dslr_images/DSC_0622.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0622.JPG
+rgb/terrains/images/dslr_images/DSC_0623.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0623.JPG
+rgb/terrains/images/dslr_images/DSC_0624.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0624.JPG
+rgb/terrains/images/dslr_images/DSC_0625.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0625.JPG
+rgb/terrains/images/dslr_images/DSC_0626.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0626.JPG
+rgb/terrains/images/dslr_images/DSC_0627.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0627.JPG
+rgb/terrains/images/dslr_images/DSC_0628.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0628.JPG
+rgb/terrains/images/dslr_images/DSC_0629.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0629.JPG
+rgb/terrains/images/dslr_images/DSC_0630.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0630.JPG
+rgb/terrains/images/dslr_images/DSC_0631.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0631.JPG
+rgb/terrains/images/dslr_images/DSC_0632.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0632.JPG
+rgb/pipes/images/dslr_images/DSC_0634.JPG depth/pipes_dslr_depth/pipes/ground_truth_depth/dslr_images/DSC_0634.JPG
+rgb/pipes/images/dslr_images/DSC_0635.JPG depth/pipes_dslr_depth/pipes/ground_truth_depth/dslr_images/DSC_0635.JPG
+rgb/pipes/images/dslr_images/DSC_0636.JPG depth/pipes_dslr_depth/pipes/ground_truth_depth/dslr_images/DSC_0636.JPG
+rgb/pipes/images/dslr_images/DSC_0637.JPG depth/pipes_dslr_depth/pipes/ground_truth_depth/dslr_images/DSC_0637.JPG
+rgb/pipes/images/dslr_images/DSC_0638.JPG depth/pipes_dslr_depth/pipes/ground_truth_depth/dslr_images/DSC_0638.JPG
+rgb/pipes/images/dslr_images/DSC_0639.JPG depth/pipes_dslr_depth/pipes/ground_truth_depth/dslr_images/DSC_0639.JPG
+rgb/pipes/images/dslr_images/DSC_0640.JPG depth/pipes_dslr_depth/pipes/ground_truth_depth/dslr_images/DSC_0640.JPG
+rgb/pipes/images/dslr_images/DSC_0641.JPG depth/pipes_dslr_depth/pipes/ground_truth_depth/dslr_images/DSC_0641.JPG
+rgb/pipes/images/dslr_images/DSC_0642.JPG depth/pipes_dslr_depth/pipes/ground_truth_depth/dslr_images/DSC_0642.JPG
+rgb/pipes/images/dslr_images/DSC_0643.JPG depth/pipes_dslr_depth/pipes/ground_truth_depth/dslr_images/DSC_0643.JPG
+rgb/pipes/images/dslr_images/DSC_0644.JPG depth/pipes_dslr_depth/pipes/ground_truth_depth/dslr_images/DSC_0644.JPG
+rgb/pipes/images/dslr_images/DSC_0645.JPG depth/pipes_dslr_depth/pipes/ground_truth_depth/dslr_images/DSC_0645.JPG
+rgb/pipes/images/dslr_images/DSC_0646.JPG depth/pipes_dslr_depth/pipes/ground_truth_depth/dslr_images/DSC_0646.JPG
+rgb/pipes/images/dslr_images/DSC_0647.JPG depth/pipes_dslr_depth/pipes/ground_truth_depth/dslr_images/DSC_0647.JPG
+rgb/terrains/images/dslr_images/DSC_0648.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0648.JPG
+rgb/terrains/images/dslr_images/DSC_0649.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0649.JPG
+rgb/terrains/images/dslr_images/DSC_0650.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0650.JPG
+rgb/terrains/images/dslr_images/DSC_0651.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0651.JPG
+rgb/terrains/images/dslr_images/DSC_0652.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0652.JPG
+rgb/terrains/images/dslr_images/DSC_0653.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0653.JPG
+rgb/terrains/images/dslr_images/DSC_0654.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0654.JPG
+rgb/terrains/images/dslr_images/DSC_0655.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0655.JPG
+rgb/terrains/images/dslr_images/DSC_0656.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0656.JPG
+rgb/terrains/images/dslr_images/DSC_0657.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0657.JPG
+rgb/terrains/images/dslr_images/DSC_0658.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0658.JPG
+rgb/terrains/images/dslr_images/DSC_0659.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0659.JPG
+rgb/terrains/images/dslr_images/DSC_0660.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0660.JPG
+rgb/terrains/images/dslr_images/DSC_0661.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0661.JPG
+rgb/terrains/images/dslr_images/DSC_0662.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0662.JPG
+rgb/terrains/images/dslr_images/DSC_0663.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0663.JPG
+rgb/terrains/images/dslr_images/DSC_0664.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0664.JPG
+rgb/terrains/images/dslr_images/DSC_0665.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0665.JPG
+rgb/terrains/images/dslr_images/DSC_0666.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0666.JPG
+rgb/terrains/images/dslr_images/DSC_0667.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0667.JPG
+rgb/terrains/images/dslr_images/DSC_0668.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0668.JPG
+rgb/terrains/images/dslr_images/DSC_0669.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0669.JPG
+rgb/terrains/images/dslr_images/DSC_0670.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0670.JPG
+rgb/terrains/images/dslr_images/DSC_0671.JPG depth/terrains_dslr_depth/terrains/ground_truth_depth/dslr_images/DSC_0671.JPG
+rgb/delivery_area/images/dslr_images/DSC_0675.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0675.JPG
+rgb/delivery_area/images/dslr_images/DSC_0676.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0676.JPG
+rgb/delivery_area/images/dslr_images/DSC_0677.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0677.JPG
+rgb/delivery_area/images/dslr_images/DSC_0678.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0678.JPG
+rgb/delivery_area/images/dslr_images/DSC_0679.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0679.JPG
+rgb/delivery_area/images/dslr_images/DSC_0680.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0680.JPG
+rgb/delivery_area/images/dslr_images/DSC_0681.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0681.JPG
+rgb/delivery_area/images/dslr_images/DSC_0682.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0682.JPG
+rgb/delivery_area/images/dslr_images/DSC_0683.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0683.JPG
+rgb/delivery_area/images/dslr_images/DSC_0684.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0684.JPG
+rgb/delivery_area/images/dslr_images/DSC_0685.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0685.JPG
+rgb/delivery_area/images/dslr_images/DSC_0686.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0686.JPG
+rgb/delivery_area/images/dslr_images/DSC_0687.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0687.JPG
+rgb/delivery_area/images/dslr_images/DSC_0688.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0688.JPG
+rgb/delivery_area/images/dslr_images/DSC_0689.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0689.JPG
+rgb/delivery_area/images/dslr_images/DSC_0690.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0690.JPG
+rgb/delivery_area/images/dslr_images/DSC_0691.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0691.JPG
+rgb/delivery_area/images/dslr_images/DSC_0692.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0692.JPG
+rgb/delivery_area/images/dslr_images/DSC_0693.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0693.JPG
+rgb/delivery_area/images/dslr_images/DSC_0694.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0694.JPG
+rgb/delivery_area/images/dslr_images/DSC_0695.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0695.JPG
+rgb/delivery_area/images/dslr_images/DSC_0696.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0696.JPG
+rgb/delivery_area/images/dslr_images/DSC_0697.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0697.JPG
+rgb/delivery_area/images/dslr_images/DSC_0698.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0698.JPG
+rgb/delivery_area/images/dslr_images/DSC_0699.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0699.JPG
+rgb/delivery_area/images/dslr_images/DSC_0700.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0700.JPG
+rgb/delivery_area/images/dslr_images/DSC_0701.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0701.JPG
+rgb/delivery_area/images/dslr_images/DSC_0702.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0702.JPG
+rgb/delivery_area/images/dslr_images/DSC_0703.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0703.JPG
+rgb/delivery_area/images/dslr_images/DSC_0704.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0704.JPG
+rgb/delivery_area/images/dslr_images/DSC_0705.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0705.JPG
+rgb/delivery_area/images/dslr_images/DSC_0706.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0706.JPG
+rgb/delivery_area/images/dslr_images/DSC_0707.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0707.JPG
+rgb/delivery_area/images/dslr_images/DSC_0708.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0708.JPG
+rgb/delivery_area/images/dslr_images/DSC_0709.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0709.JPG
+rgb/delivery_area/images/dslr_images/DSC_0710.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0710.JPG
+rgb/delivery_area/images/dslr_images/DSC_0711.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0711.JPG
+rgb/delivery_area/images/dslr_images/DSC_0712.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0712.JPG
+rgb/delivery_area/images/dslr_images/DSC_0713.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0713.JPG
+rgb/delivery_area/images/dslr_images/DSC_0714.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0714.JPG
+rgb/delivery_area/images/dslr_images/DSC_0715.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0715.JPG
+rgb/delivery_area/images/dslr_images/DSC_0716.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0716.JPG
+rgb/delivery_area/images/dslr_images/DSC_0717.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0717.JPG
+rgb/delivery_area/images/dslr_images/DSC_0718.JPG depth/delivery_area_dslr_depth/delivery_area/ground_truth_depth/dslr_images/DSC_0718.JPG
+rgb/kicker/images/dslr_images/DSC_6487.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6487.JPG
+rgb/kicker/images/dslr_images/DSC_6489.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6489.JPG
+rgb/kicker/images/dslr_images/DSC_6490.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6490.JPG
+rgb/kicker/images/dslr_images/DSC_6491.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6491.JPG
+rgb/kicker/images/dslr_images/DSC_6492.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6492.JPG
+rgb/kicker/images/dslr_images/DSC_6493.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6493.JPG
+rgb/kicker/images/dslr_images/DSC_6494.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6494.JPG
+rgb/kicker/images/dslr_images/DSC_6495.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6495.JPG
+rgb/kicker/images/dslr_images/DSC_6496.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6496.JPG
+rgb/kicker/images/dslr_images/DSC_6497.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6497.JPG
+rgb/kicker/images/dslr_images/DSC_6499.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6499.JPG
+rgb/kicker/images/dslr_images/DSC_6500.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6500.JPG
+rgb/kicker/images/dslr_images/DSC_6502.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6502.JPG
+rgb/kicker/images/dslr_images/DSC_6503.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6503.JPG
+rgb/kicker/images/dslr_images/DSC_6504.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6504.JPG
+rgb/kicker/images/dslr_images/DSC_6505.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6505.JPG
+rgb/kicker/images/dslr_images/DSC_6506.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6506.JPG
+rgb/kicker/images/dslr_images/DSC_6507.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6507.JPG
+rgb/kicker/images/dslr_images/DSC_6508.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6508.JPG
+rgb/kicker/images/dslr_images/DSC_6509.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6509.JPG
+rgb/kicker/images/dslr_images/DSC_6510.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6510.JPG
+rgb/kicker/images/dslr_images/DSC_6511.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6511.JPG
+rgb/kicker/images/dslr_images/DSC_6512.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6512.JPG
+rgb/kicker/images/dslr_images/DSC_6513.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6513.JPG
+rgb/kicker/images/dslr_images/DSC_6514.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6514.JPG
+rgb/kicker/images/dslr_images/DSC_6515.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6515.JPG
+rgb/kicker/images/dslr_images/DSC_6516.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6516.JPG
+rgb/kicker/images/dslr_images/DSC_6517.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6517.JPG
+rgb/kicker/images/dslr_images/DSC_6518.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6518.JPG
+rgb/kicker/images/dslr_images/DSC_6519.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6519.JPG
+rgb/kicker/images/dslr_images/DSC_6520.JPG depth/kicker_dslr_depth/kicker/ground_truth_depth/dslr_images/DSC_6520.JPG
+rgb/meadow/images/dslr_images/DSC_6535.JPG depth/meadow_dslr_depth/meadow/ground_truth_depth/dslr_images/DSC_6535.JPG
+rgb/meadow/images/dslr_images/DSC_6536.JPG depth/meadow_dslr_depth/meadow/ground_truth_depth/dslr_images/DSC_6536.JPG
+rgb/meadow/images/dslr_images/DSC_6537.JPG depth/meadow_dslr_depth/meadow/ground_truth_depth/dslr_images/DSC_6537.JPG
+rgb/meadow/images/dslr_images/DSC_6538.JPG depth/meadow_dslr_depth/meadow/ground_truth_depth/dslr_images/DSC_6538.JPG
+rgb/meadow/images/dslr_images/DSC_6539.JPG depth/meadow_dslr_depth/meadow/ground_truth_depth/dslr_images/DSC_6539.JPG
+rgb/meadow/images/dslr_images/DSC_6540.JPG depth/meadow_dslr_depth/meadow/ground_truth_depth/dslr_images/DSC_6540.JPG
+rgb/meadow/images/dslr_images/DSC_6541.JPG depth/meadow_dslr_depth/meadow/ground_truth_depth/dslr_images/DSC_6541.JPG
+rgb/meadow/images/dslr_images/DSC_6547.JPG depth/meadow_dslr_depth/meadow/ground_truth_depth/dslr_images/DSC_6547.JPG
+rgb/meadow/images/dslr_images/DSC_6548.JPG depth/meadow_dslr_depth/meadow/ground_truth_depth/dslr_images/DSC_6548.JPG
+rgb/meadow/images/dslr_images/DSC_6553.JPG depth/meadow_dslr_depth/meadow/ground_truth_depth/dslr_images/DSC_6553.JPG
+rgb/meadow/images/dslr_images/DSC_6556.JPG depth/meadow_dslr_depth/meadow/ground_truth_depth/dslr_images/DSC_6556.JPG
+rgb/meadow/images/dslr_images/DSC_6557.JPG depth/meadow_dslr_depth/meadow/ground_truth_depth/dslr_images/DSC_6557.JPG
+rgb/meadow/images/dslr_images/DSC_6558.JPG depth/meadow_dslr_depth/meadow/ground_truth_depth/dslr_images/DSC_6558.JPG
+rgb/meadow/images/dslr_images/DSC_6559.JPG depth/meadow_dslr_depth/meadow/ground_truth_depth/dslr_images/DSC_6559.JPG
+rgb/meadow/images/dslr_images/DSC_6560.JPG depth/meadow_dslr_depth/meadow/ground_truth_depth/dslr_images/DSC_6560.JPG
+rgb/electro/images/dslr_images/DSC_9257.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9257.JPG
+rgb/electro/images/dslr_images/DSC_9258.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9258.JPG
+rgb/electro/images/dslr_images/DSC_9259.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9259.JPG
+rgb/electro/images/dslr_images/DSC_9260.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9260.JPG
+rgb/electro/images/dslr_images/DSC_9261.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9261.JPG
+rgb/electro/images/dslr_images/DSC_9262.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9262.JPG
+rgb/electro/images/dslr_images/DSC_9263.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9263.JPG
+rgb/electro/images/dslr_images/DSC_9264.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9264.JPG
+rgb/electro/images/dslr_images/DSC_9265.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9265.JPG
+rgb/electro/images/dslr_images/DSC_9266.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9266.JPG
+rgb/electro/images/dslr_images/DSC_9267.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9267.JPG
+rgb/electro/images/dslr_images/DSC_9268.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9268.JPG
+rgb/electro/images/dslr_images/DSC_9269.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9269.JPG
+rgb/electro/images/dslr_images/DSC_9270.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9270.JPG
+rgb/electro/images/dslr_images/DSC_9271.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9271.JPG
+rgb/electro/images/dslr_images/DSC_9272.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9272.JPG
+rgb/electro/images/dslr_images/DSC_9273.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9273.JPG
+rgb/electro/images/dslr_images/DSC_9274.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9274.JPG
+rgb/electro/images/dslr_images/DSC_9275.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9275.JPG
+rgb/electro/images/dslr_images/DSC_9276.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9276.JPG
+rgb/electro/images/dslr_images/DSC_9277.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9277.JPG
+rgb/electro/images/dslr_images/DSC_9278.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9278.JPG
+rgb/electro/images/dslr_images/DSC_9279.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9279.JPG
+rgb/electro/images/dslr_images/DSC_9280.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9280.JPG
+rgb/electro/images/dslr_images/DSC_9281.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9281.JPG
+rgb/electro/images/dslr_images/DSC_9282.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9282.JPG
+rgb/electro/images/dslr_images/DSC_9283.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9283.JPG
+rgb/electro/images/dslr_images/DSC_9284.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9284.JPG
+rgb/electro/images/dslr_images/DSC_9285.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9285.JPG
+rgb/electro/images/dslr_images/DSC_9287.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9287.JPG
+rgb/electro/images/dslr_images/DSC_9289.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9289.JPG
+rgb/electro/images/dslr_images/DSC_9290.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9290.JPG
+rgb/electro/images/dslr_images/DSC_9291.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9291.JPG
+rgb/electro/images/dslr_images/DSC_9292.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9292.JPG
+rgb/electro/images/dslr_images/DSC_9293.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9293.JPG
+rgb/electro/images/dslr_images/DSC_9294.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9294.JPG
+rgb/electro/images/dslr_images/DSC_9295.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9295.JPG
+rgb/electro/images/dslr_images/DSC_9296.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9296.JPG
+rgb/electro/images/dslr_images/DSC_9297.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9297.JPG
+rgb/electro/images/dslr_images/DSC_9298.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9298.JPG
+rgb/electro/images/dslr_images/DSC_9299.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9299.JPG
+rgb/electro/images/dslr_images/DSC_9300.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9300.JPG
+rgb/electro/images/dslr_images/DSC_9301.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9301.JPG
+rgb/electro/images/dslr_images/DSC_9302.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9302.JPG
+rgb/electro/images/dslr_images/DSC_9303.JPG depth/electro_dslr_depth/electro/ground_truth_depth/dslr_images/DSC_9303.JPG
\ No newline at end of file
diff --git a/Lotus/datasets/eval/depth/data_split/kitti/eigen_test_files_with_gt.txt b/Lotus/datasets/eval/depth/data_split/kitti/eigen_test_files_with_gt.txt
new file mode 100644
index 0000000000000000000000000000000000000000..575b66115c160f6c9df37a206ac8ba17e6771ccc
--- /dev/null
+++ b/Lotus/datasets/eval/depth/data_split/kitti/eigen_test_files_with_gt.txt
@@ -0,0 +1,697 @@
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000069.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000069.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000054.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000054.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000042.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000042.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000057.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000057.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000030.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000030.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000027.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000027.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000012.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000012.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000075.png None 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000036.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000036.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000033.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000033.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000015.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000015.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000072.png None 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000003.png None 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000039.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000039.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000009.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000009.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000051.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000051.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000060.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000060.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000021.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000021.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000000.png None 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000024.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000024.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000045.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000045.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000018.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000018.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000048.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000048.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000006.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000006.png 721.5377
+2011_09_26/2011_09_26_drive_0002_sync/image_02/data/0000000063.png 2011_09_26_drive_0002_sync/proj_depth/groundtruth/image_02/0000000063.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000000.png None 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000016.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000016.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000032.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000032.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000048.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000048.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000064.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000064.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000080.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000080.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000096.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000096.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000112.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000112.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000128.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000128.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000144.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000144.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000160.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000160.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000176.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000176.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000196.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000196.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000212.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000212.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000228.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000228.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000244.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000244.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000260.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000260.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000276.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000276.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000292.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000292.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000308.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000308.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000324.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000324.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000340.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000340.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000356.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000356.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000372.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000372.png 721.5377
+2011_09_26/2011_09_26_drive_0009_sync/image_02/data/0000000388.png 2011_09_26_drive_0009_sync/proj_depth/groundtruth/image_02/0000000388.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000090.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000090.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000050.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000050.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000110.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000110.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000115.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000115.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000060.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000060.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000105.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000105.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000125.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000125.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000020.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000020.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000140.png None 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000085.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000085.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000070.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000070.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000080.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000080.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000065.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000065.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000095.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000095.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000130.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000130.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000100.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000100.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000010.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000010.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000030.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000030.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000000.png None 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000135.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000135.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000040.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000040.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000005.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000005.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000120.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000120.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000045.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000045.png 721.5377
+2011_09_26/2011_09_26_drive_0013_sync/image_02/data/0000000035.png 2011_09_26_drive_0013_sync/proj_depth/groundtruth/image_02/0000000035.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000003.png None 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000069.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000069.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000057.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000057.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000012.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000012.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000072.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000072.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000018.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000018.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000063.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000063.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000000.png None 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000084.png None 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000015.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000015.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000066.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000066.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000006.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000006.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000048.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000048.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000060.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000060.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000009.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000009.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000033.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000033.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000021.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000021.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000075.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000075.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000027.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000027.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000045.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000045.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000078.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000078.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000036.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000036.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000051.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000051.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000054.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000054.png 721.5377
+2011_09_26/2011_09_26_drive_0020_sync/image_02/data/0000000042.png 2011_09_26_drive_0020_sync/proj_depth/groundtruth/image_02/0000000042.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000018.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000018.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000090.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000090.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000126.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000126.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000378.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000378.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000036.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000036.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000288.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000288.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000198.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000198.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000450.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000450.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000144.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000144.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000072.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000072.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000252.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000252.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000180.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000180.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000432.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000432.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000396.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000396.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000054.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000054.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000468.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000468.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000306.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000306.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000108.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000108.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000162.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000162.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000342.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000342.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000270.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000270.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000414.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000414.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000216.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000216.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000360.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000360.png 721.5377
+2011_09_26/2011_09_26_drive_0023_sync/image_02/data/0000000324.png 2011_09_26_drive_0023_sync/proj_depth/groundtruth/image_02/0000000324.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000077.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000077.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000035.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000035.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000091.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000091.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000112.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000112.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000007.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000007.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000175.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000175.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000042.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000042.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000098.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000098.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000133.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000133.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000161.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000161.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000014.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000014.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000126.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000126.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000168.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000168.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000070.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000070.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000084.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000084.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000140.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000140.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000049.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000049.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000000.png None 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000182.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000182.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000147.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000147.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000056.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000056.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000063.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000063.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000021.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000021.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000119.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000119.png 721.5377
+2011_09_26/2011_09_26_drive_0027_sync/image_02/data/0000000028.png 2011_09_26_drive_0027_sync/proj_depth/groundtruth/image_02/0000000028.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000380.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000380.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000394.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000394.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000324.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000324.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000000.png None 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000268.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000268.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000366.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000366.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000296.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000296.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000014.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000014.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000028.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000028.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000182.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000182.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000168.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000168.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000196.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000196.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000140.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000140.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000084.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000084.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000056.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000056.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000112.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000112.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000352.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000352.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000126.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000126.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000070.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000070.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000310.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000310.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000154.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000154.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000098.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000098.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000408.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000408.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000042.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000042.png 721.5377
+2011_09_26/2011_09_26_drive_0029_sync/image_02/data/0000000338.png 2011_09_26_drive_0029_sync/proj_depth/groundtruth/image_02/0000000338.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000000.png None 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000128.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000128.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000192.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000192.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000032.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000032.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000352.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000352.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000608.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000608.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000224.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000224.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000576.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000576.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000672.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000672.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000064.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000064.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000448.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000448.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000704.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000704.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000640.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000640.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000512.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000512.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000768.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000768.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000160.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000160.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000416.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000416.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000480.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000480.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000800.png None 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000288.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000288.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000544.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000544.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000096.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000096.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000384.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000384.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000256.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000256.png 721.5377
+2011_09_26/2011_09_26_drive_0036_sync/image_02/data/0000000320.png 2011_09_26_drive_0036_sync/proj_depth/groundtruth/image_02/0000000320.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000000.png None 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000005.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000005.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000010.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000010.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000015.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000015.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000020.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000020.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000025.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000025.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000030.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000030.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000035.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000035.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000040.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000040.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000045.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000045.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000050.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000050.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000055.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000055.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000060.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000060.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000065.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000065.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000070.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000070.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000075.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000075.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000080.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000080.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000085.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000085.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000090.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000090.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000095.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000095.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000100.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000100.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000105.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000105.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000110.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000110.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000115.png 2011_09_26_drive_0046_sync/proj_depth/groundtruth/image_02/0000000115.png 721.5377
+2011_09_26/2011_09_26_drive_0046_sync/image_02/data/0000000120.png None 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000000.png None 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000001.png None 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000002.png None 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000003.png None 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000004.png None 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000005.png 2011_09_26_drive_0048_sync/proj_depth/groundtruth/image_02/0000000005.png 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000006.png 2011_09_26_drive_0048_sync/proj_depth/groundtruth/image_02/0000000006.png 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000007.png 2011_09_26_drive_0048_sync/proj_depth/groundtruth/image_02/0000000007.png 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000008.png 2011_09_26_drive_0048_sync/proj_depth/groundtruth/image_02/0000000008.png 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000009.png 2011_09_26_drive_0048_sync/proj_depth/groundtruth/image_02/0000000009.png 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000010.png 2011_09_26_drive_0048_sync/proj_depth/groundtruth/image_02/0000000010.png 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000011.png 2011_09_26_drive_0048_sync/proj_depth/groundtruth/image_02/0000000011.png 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000012.png 2011_09_26_drive_0048_sync/proj_depth/groundtruth/image_02/0000000012.png 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000013.png 2011_09_26_drive_0048_sync/proj_depth/groundtruth/image_02/0000000013.png 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000014.png 2011_09_26_drive_0048_sync/proj_depth/groundtruth/image_02/0000000014.png 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000015.png 2011_09_26_drive_0048_sync/proj_depth/groundtruth/image_02/0000000015.png 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000016.png 2011_09_26_drive_0048_sync/proj_depth/groundtruth/image_02/0000000016.png 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000017.png None 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000018.png None 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000019.png None 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000020.png None 721.5377
+2011_09_26/2011_09_26_drive_0048_sync/image_02/data/0000000021.png None 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000046.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000046.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000014.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000014.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000036.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000036.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000028.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000028.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000026.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000026.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000050.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000050.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000040.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000040.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000008.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000008.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000016.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000016.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000044.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000044.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000018.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000018.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000032.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000032.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000042.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000042.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000010.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000010.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000020.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000020.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000048.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000048.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000052.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000052.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000006.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000006.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000030.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000030.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000012.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000012.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000038.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000038.png 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000000.png None 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000002.png None 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000004.png None 721.5377
+2011_09_26/2011_09_26_drive_0052_sync/image_02/data/0000000022.png 2011_09_26_drive_0052_sync/proj_depth/groundtruth/image_02/0000000022.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000011.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000011.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000033.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000033.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000242.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000242.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000253.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000253.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000286.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000286.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000154.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000154.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000099.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000099.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000220.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000220.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000022.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000022.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000077.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000077.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000187.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000187.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000143.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000143.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000066.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000066.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000176.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000176.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000110.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000110.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000275.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000275.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000264.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000264.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000198.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000198.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000055.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000055.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000088.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000088.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000121.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000121.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000209.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000209.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000165.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000165.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000231.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000231.png 721.5377
+2011_09_26/2011_09_26_drive_0056_sync/image_02/data/0000000044.png 2011_09_26_drive_0056_sync/proj_depth/groundtruth/image_02/0000000044.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000056.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000056.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000000.png None 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000344.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000344.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000358.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000358.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000316.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000316.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000238.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000238.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000098.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000098.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000112.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000112.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000028.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000028.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000014.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000014.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000330.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000330.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000154.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000154.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000042.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000042.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000302.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000302.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000182.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000182.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000288.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000288.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000140.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000140.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000274.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000274.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000224.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000224.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000372.png None 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000196.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000196.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000126.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000126.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000084.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000084.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000210.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000210.png 721.5377
+2011_09_26/2011_09_26_drive_0059_sync/image_02/data/0000000070.png 2011_09_26_drive_0059_sync/proj_depth/groundtruth/image_02/0000000070.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000528.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000528.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000308.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000308.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000044.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000044.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000352.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000352.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000066.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000066.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000000.png None 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000506.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000506.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000176.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000176.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000022.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000022.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000242.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000242.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000462.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000462.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000418.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000418.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000110.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000110.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000440.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000440.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000396.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000396.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000154.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000154.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000374.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000374.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000088.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000088.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000286.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000286.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000550.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000550.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000264.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000264.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000220.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000220.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000330.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000330.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000484.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000484.png 721.5377
+2011_09_26/2011_09_26_drive_0064_sync/image_02/data/0000000198.png 2011_09_26_drive_0064_sync/proj_depth/groundtruth/image_02/0000000198.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000283.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000283.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000361.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000361.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000270.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000270.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000127.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000127.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000205.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000205.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000218.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000218.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000153.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000153.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000335.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000335.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000192.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000192.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000348.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000348.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000101.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000101.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000049.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000049.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000179.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000179.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000140.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000140.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000374.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000374.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000322.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000322.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000309.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000309.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000244.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000244.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000062.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000062.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000257.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000257.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000088.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000088.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000114.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000114.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000075.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000075.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000296.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000296.png 721.5377
+2011_09_26/2011_09_26_drive_0084_sync/image_02/data/0000000231.png 2011_09_26_drive_0084_sync/proj_depth/groundtruth/image_02/0000000231.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000007.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000007.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000196.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000196.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000439.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000439.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000169.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000169.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000115.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000115.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000034.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000034.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000304.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000304.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000331.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000331.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000277.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000277.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000520.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000520.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000682.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000682.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000628.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000628.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000088.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000088.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000601.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000601.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000574.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000574.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000223.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000223.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000655.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000655.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000358.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000358.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000412.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000412.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000142.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000142.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000385.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000385.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000061.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000061.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000493.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000493.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000466.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000466.png 721.5377
+2011_09_26/2011_09_26_drive_0086_sync/image_02/data/0000000250.png 2011_09_26_drive_0086_sync/proj_depth/groundtruth/image_02/0000000250.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000000.png None 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000016.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000016.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000032.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000032.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000048.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000048.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000064.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000064.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000080.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000080.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000096.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000096.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000112.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000112.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000128.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000128.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000144.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000144.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000160.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000160.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000176.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000176.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000192.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000192.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000208.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000208.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000224.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000224.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000240.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000240.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000256.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000256.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000305.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000305.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000321.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000321.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000337.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000337.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000353.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000353.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000369.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000369.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000385.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000385.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000401.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000401.png 721.5377
+2011_09_26/2011_09_26_drive_0093_sync/image_02/data/0000000417.png 2011_09_26_drive_0093_sync/proj_depth/groundtruth/image_02/0000000417.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000000.png None 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000019.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000019.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000038.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000038.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000057.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000057.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000076.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000076.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000095.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000095.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000114.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000114.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000133.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000133.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000152.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000152.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000171.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000171.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000190.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000190.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000209.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000209.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000228.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000228.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000247.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000247.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000266.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000266.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000285.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000285.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000304.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000304.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000323.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000323.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000342.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000342.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000361.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000361.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000380.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000380.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000399.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000399.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000418.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000418.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000437.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000437.png 721.5377
+2011_09_26/2011_09_26_drive_0096_sync/image_02/data/0000000456.png 2011_09_26_drive_0096_sync/proj_depth/groundtruth/image_02/0000000456.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000692.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000692.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000930.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000930.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000760.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000760.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000896.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000896.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000284.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000284.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000148.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000148.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000522.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000522.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000794.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000794.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000624.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000624.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000726.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000726.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000216.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000216.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000318.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000318.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000488.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000488.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000590.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000590.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000454.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000454.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000862.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000862.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000386.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000386.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000352.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000352.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000420.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000420.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000658.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000658.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000828.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000828.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000556.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000556.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000114.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000114.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000182.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000182.png 721.5377
+2011_09_26/2011_09_26_drive_0101_sync/image_02/data/0000000080.png 2011_09_26_drive_0101_sync/proj_depth/groundtruth/image_02/0000000080.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000015.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000015.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000035.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000035.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000043.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000043.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000051.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000051.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000059.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000059.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000067.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000067.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000075.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000075.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000083.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000083.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000091.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000091.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000099.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000099.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000107.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000107.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000115.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000115.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000123.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000123.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000131.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000131.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000139.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000139.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000147.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000147.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000155.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000155.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000163.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000163.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000171.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000171.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000179.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000179.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000187.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000187.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000195.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000195.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000203.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000203.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000211.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000211.png 721.5377
+2011_09_26/2011_09_26_drive_0106_sync/image_02/data/0000000219.png 2011_09_26_drive_0106_sync/proj_depth/groundtruth/image_02/0000000219.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000312.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000312.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000494.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000494.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000104.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000104.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000130.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000130.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000156.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000156.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000182.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000182.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000598.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000598.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000416.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000416.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000364.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000364.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000026.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000026.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000078.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000078.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000572.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000572.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000468.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000468.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000260.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000260.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000624.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000624.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000234.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000234.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000442.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000442.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000390.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000390.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000546.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000546.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000286.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000286.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000000.png None 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000338.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000338.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000208.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000208.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000650.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000650.png 721.5377
+2011_09_26/2011_09_26_drive_0117_sync/image_02/data/0000000052.png 2011_09_26_drive_0117_sync/proj_depth/groundtruth/image_02/0000000052.png 721.5377
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000024.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000024.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000021.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000021.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000036.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000036.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000000.png None 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000051.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000051.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000018.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000018.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000033.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000033.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000090.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000090.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000045.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000045.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000054.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000054.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000012.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000012.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000039.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000039.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000009.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000009.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000003.png None 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000030.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000030.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000078.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000078.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000060.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000060.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000048.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000048.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000084.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000084.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000081.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000081.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000006.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000006.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000057.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000057.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000072.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000072.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000087.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000087.png 707.0493
+2011_09_28/2011_09_28_drive_0002_sync/image_02/data/0000000063.png 2011_09_28_drive_0002_sync/proj_depth/groundtruth/image_02/0000000063.png 707.0493
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000252.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000252.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000540.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000540.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000001054.png None 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000036.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000036.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000360.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000360.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000807.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000807.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000879.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000879.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000288.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000288.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000771.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000771.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000000.png None 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000216.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000216.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000951.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000951.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000324.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000324.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000432.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000432.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000504.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000504.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000576.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000576.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000108.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000108.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000180.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000180.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000072.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000072.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000612.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000612.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000915.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000915.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000735.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000735.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000144.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000144.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000396.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000396.png 718.3351
+2011_09_29/2011_09_29_drive_0071_sync/image_02/data/0000000468.png 2011_09_29_drive_0071_sync/proj_depth/groundtruth/image_02/0000000468.png 718.3351
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000132.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000132.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000011.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000011.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000154.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000154.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000022.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000022.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000242.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000242.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000198.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000198.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000176.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000176.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000231.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000231.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000275.png None 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000220.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000220.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000088.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000088.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000143.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000143.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000055.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000055.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000033.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000033.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000187.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000187.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000110.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000110.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000044.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000044.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000077.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000077.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000066.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000066.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000000.png None 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000165.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000165.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000264.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000264.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000253.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000253.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000209.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000209.png 707.0912
+2011_09_30/2011_09_30_drive_0016_sync/image_02/data/0000000121.png 2011_09_30_drive_0016_sync/proj_depth/groundtruth/image_02/0000000121.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000000107.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000000107.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000002247.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000002247.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000001391.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000001391.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000000535.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000000535.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000001819.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000001819.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000001177.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000001177.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000000428.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000000428.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000001926.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000001926.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000000749.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000000749.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000001284.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000001284.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000002140.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000002140.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000001605.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000001605.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000001498.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000001498.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000000642.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000000642.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000002740.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000002740.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000002419.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000002419.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000000856.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000000856.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000002526.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000002526.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000001712.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000001712.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000001070.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000001070.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000000000.png None 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000002033.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000002033.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000000214.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000000214.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000000963.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000000963.png 707.0912
+2011_09_30/2011_09_30_drive_0018_sync/image_02/data/0000002633.png 2011_09_30_drive_0018_sync/proj_depth/groundtruth/image_02/0000002633.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000533.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000533.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000001040.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000001040.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000082.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000082.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000205.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000205.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000835.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000835.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000451.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000451.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000164.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000164.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000794.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000794.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000328.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000328.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000615.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000615.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000917.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000917.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000369.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000369.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000287.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000287.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000123.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000123.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000876.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000876.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000410.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000410.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000492.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000492.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000958.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000958.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000656.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000656.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000000.png None 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000753.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000753.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000574.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000574.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000001081.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000001081.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000041.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000041.png 707.0912
+2011_09_30/2011_09_30_drive_0027_sync/image_02/data/0000000246.png 2011_09_30_drive_0027_sync/proj_depth/groundtruth/image_02/0000000246.png 707.0912
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000002906.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000002906.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000002544.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000002544.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000000362.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000000362.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000004535.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000004535.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000000734.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000000734.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000001096.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000001096.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000004173.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000004173.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000000543.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000000543.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000001277.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000001277.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000004354.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000004354.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000001458.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000001458.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000001820.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000001820.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000003449.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000003449.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000003268.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000003268.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000000915.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000000915.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000002363.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000002363.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000002725.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000002725.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000000181.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000000181.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000001639.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000001639.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000003992.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000003992.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000003087.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000003087.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000002001.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000002001.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000003811.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000003811.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000003630.png 2011_10_03_drive_0027_sync/proj_depth/groundtruth/image_02/0000003630.png 718.856
+2011_10_03/2011_10_03_drive_0027_sync/image_02/data/0000000000.png None 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000096.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000096.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000800.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000800.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000320.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000320.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000576.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000576.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000000.png None 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000480.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000480.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000640.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000640.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000032.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000032.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000384.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000384.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000160.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000160.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000704.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000704.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000736.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000736.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000672.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000672.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000064.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000064.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000288.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000288.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000352.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000352.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000512.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000512.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000544.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000544.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000608.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000608.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000128.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000128.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000224.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000224.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000416.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000416.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000192.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000192.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000448.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000448.png 718.856
+2011_10_03/2011_10_03_drive_0047_sync/image_02/data/0000000768.png 2011_10_03_drive_0047_sync/proj_depth/groundtruth/image_02/0000000768.png 718.856
\ No newline at end of file
diff --git a/Lotus/datasets/eval/depth/data_split/kitti/eigen_val_from_train_800.txt b/Lotus/datasets/eval/depth/data_split/kitti/eigen_val_from_train_800.txt
new file mode 100644
index 0000000000000000000000000000000000000000..25aae20ab6031895bc1cd122338527db921e2825
--- /dev/null
+++ b/Lotus/datasets/eval/depth/data_split/kitti/eigen_val_from_train_800.txt
@@ -0,0 +1,800 @@
+2011_09_26/2011_09_26_drive_0001_sync/image_02/data/0000000021.png 2011_09_26_drive_0001_sync/proj_depth/groundtruth/image_02/0000000021.png 721.5377
+2011_09_26/2011_09_26_drive_0001_sync/image_02/data/0000000031.png 2011_09_26_drive_0001_sync/proj_depth/groundtruth/image_02/0000000031.png 721.5377
+2011_09_26/2011_09_26_drive_0001_sync/image_02/data/0000000046.png 2011_09_26_drive_0001_sync/proj_depth/groundtruth/image_02/0000000046.png 721.5377
+2011_09_26/2011_09_26_drive_0005_sync/image_02/data/0000000054.png 2011_09_26_drive_0005_sync/proj_depth/groundtruth/image_02/0000000054.png 721.5377
+2011_09_26/2011_09_26_drive_0005_sync/image_02/data/0000000115.png 2011_09_26_drive_0005_sync/proj_depth/groundtruth/image_02/0000000115.png 721.5377
+2011_09_26/2011_09_26_drive_0005_sync/image_02/data/0000000119.png 2011_09_26_drive_0005_sync/proj_depth/groundtruth/image_02/0000000119.png 721.5377
+2011_09_26/2011_09_26_drive_0005_sync/image_02/data/0000000135.png 2011_09_26_drive_0005_sync/proj_depth/groundtruth/image_02/0000000135.png 721.5377
+2011_09_26/2011_09_26_drive_0005_sync/image_02/data/0000000148.png 2011_09_26_drive_0005_sync/proj_depth/groundtruth/image_02/0000000148.png 721.5377
+2011_09_26/2011_09_26_drive_0011_sync/image_02/data/0000000038.png 2011_09_26_drive_0011_sync/proj_depth/groundtruth/image_02/0000000038.png 721.5377
+2011_09_26/2011_09_26_drive_0011_sync/image_02/data/0000000043.png 2011_09_26_drive_0011_sync/proj_depth/groundtruth/image_02/0000000043.png 721.5377
+2011_09_26/2011_09_26_drive_0011_sync/image_02/data/0000000089.png 2011_09_26_drive_0011_sync/proj_depth/groundtruth/image_02/0000000089.png 721.5377
+2011_09_26/2011_09_26_drive_0011_sync/image_02/data/0000000184.png 2011_09_26_drive_0011_sync/proj_depth/groundtruth/image_02/0000000184.png 721.5377
+2011_09_26/2011_09_26_drive_0011_sync/image_02/data/0000000217.png 2011_09_26_drive_0011_sync/proj_depth/groundtruth/image_02/0000000217.png 721.5377
+2011_09_26/2011_09_26_drive_0014_sync/image_02/data/0000000037.png 2011_09_26_drive_0014_sync/proj_depth/groundtruth/image_02/0000000037.png 721.5377
+2011_09_26/2011_09_26_drive_0014_sync/image_02/data/0000000050.png 2011_09_26_drive_0014_sync/proj_depth/groundtruth/image_02/0000000050.png 721.5377
+2011_09_26/2011_09_26_drive_0014_sync/image_02/data/0000000055.png 2011_09_26_drive_0014_sync/proj_depth/groundtruth/image_02/0000000055.png 721.5377
+2011_09_26/2011_09_26_drive_0014_sync/image_02/data/0000000076.png 2011_09_26_drive_0014_sync/proj_depth/groundtruth/image_02/0000000076.png 721.5377
+2011_09_26/2011_09_26_drive_0014_sync/image_02/data/0000000077.png 2011_09_26_drive_0014_sync/proj_depth/groundtruth/image_02/0000000077.png 721.5377
+2011_09_26/2011_09_26_drive_0014_sync/image_02/data/0000000098.png 2011_09_26_drive_0014_sync/proj_depth/groundtruth/image_02/0000000098.png 721.5377
+2011_09_26/2011_09_26_drive_0014_sync/image_02/data/0000000123.png 2011_09_26_drive_0014_sync/proj_depth/groundtruth/image_02/0000000123.png 721.5377
+2011_09_26/2011_09_26_drive_0014_sync/image_02/data/0000000137.png 2011_09_26_drive_0014_sync/proj_depth/groundtruth/image_02/0000000137.png 721.5377
+2011_09_26/2011_09_26_drive_0014_sync/image_02/data/0000000153.png 2011_09_26_drive_0014_sync/proj_depth/groundtruth/image_02/0000000153.png 721.5377
+2011_09_26/2011_09_26_drive_0014_sync/image_02/data/0000000175.png 2011_09_26_drive_0014_sync/proj_depth/groundtruth/image_02/0000000175.png 721.5377
+2011_09_26/2011_09_26_drive_0014_sync/image_02/data/0000000197.png 2011_09_26_drive_0014_sync/proj_depth/groundtruth/image_02/0000000197.png 721.5377
+2011_09_26/2011_09_26_drive_0014_sync/image_02/data/0000000202.png 2011_09_26_drive_0014_sync/proj_depth/groundtruth/image_02/0000000202.png 721.5377
+2011_09_26/2011_09_26_drive_0014_sync/image_02/data/0000000207.png 2011_09_26_drive_0014_sync/proj_depth/groundtruth/image_02/0000000207.png 721.5377
+2011_09_26/2011_09_26_drive_0014_sync/image_02/data/0000000239.png 2011_09_26_drive_0014_sync/proj_depth/groundtruth/image_02/0000000239.png 721.5377
+2011_09_26/2011_09_26_drive_0014_sync/image_02/data/0000000257.png 2011_09_26_drive_0014_sync/proj_depth/groundtruth/image_02/0000000257.png 721.5377
+2011_09_26/2011_09_26_drive_0015_sync/image_02/data/0000000019.png 2011_09_26_drive_0015_sync/proj_depth/groundtruth/image_02/0000000019.png 721.5377
+2011_09_26/2011_09_26_drive_0015_sync/image_02/data/0000000094.png 2011_09_26_drive_0015_sync/proj_depth/groundtruth/image_02/0000000094.png 721.5377
+2011_09_26/2011_09_26_drive_0015_sync/image_02/data/0000000095.png 2011_09_26_drive_0015_sync/proj_depth/groundtruth/image_02/0000000095.png 721.5377
+2011_09_26/2011_09_26_drive_0015_sync/image_02/data/0000000109.png 2011_09_26_drive_0015_sync/proj_depth/groundtruth/image_02/0000000109.png 721.5377
+2011_09_26/2011_09_26_drive_0015_sync/image_02/data/0000000129.png 2011_09_26_drive_0015_sync/proj_depth/groundtruth/image_02/0000000129.png 721.5377
+2011_09_26/2011_09_26_drive_0015_sync/image_02/data/0000000134.png 2011_09_26_drive_0015_sync/proj_depth/groundtruth/image_02/0000000134.png 721.5377
+2011_09_26/2011_09_26_drive_0015_sync/image_02/data/0000000142.png 2011_09_26_drive_0015_sync/proj_depth/groundtruth/image_02/0000000142.png 721.5377
+2011_09_26/2011_09_26_drive_0015_sync/image_02/data/0000000167.png 2011_09_26_drive_0015_sync/proj_depth/groundtruth/image_02/0000000167.png 721.5377
+2011_09_26/2011_09_26_drive_0015_sync/image_02/data/0000000191.png 2011_09_26_drive_0015_sync/proj_depth/groundtruth/image_02/0000000191.png 721.5377
+2011_09_26/2011_09_26_drive_0015_sync/image_02/data/0000000194.png 2011_09_26_drive_0015_sync/proj_depth/groundtruth/image_02/0000000194.png 721.5377
+2011_09_26/2011_09_26_drive_0015_sync/image_02/data/0000000246.png 2011_09_26_drive_0015_sync/proj_depth/groundtruth/image_02/0000000246.png 721.5377
+2011_09_26/2011_09_26_drive_0015_sync/image_02/data/0000000248.png 2011_09_26_drive_0015_sync/proj_depth/groundtruth/image_02/0000000248.png 721.5377
+2011_09_26/2011_09_26_drive_0015_sync/image_02/data/0000000274.png 2011_09_26_drive_0015_sync/proj_depth/groundtruth/image_02/0000000274.png 721.5377
+2011_09_26/2011_09_26_drive_0017_sync/image_02/data/0000000031.png 2011_09_26_drive_0017_sync/proj_depth/groundtruth/image_02/0000000031.png 721.5377
+2011_09_26/2011_09_26_drive_0017_sync/image_02/data/0000000077.png 2011_09_26_drive_0017_sync/proj_depth/groundtruth/image_02/0000000077.png 721.5377
+2011_09_26/2011_09_26_drive_0018_sync/image_02/data/0000000010.png 2011_09_26_drive_0018_sync/proj_depth/groundtruth/image_02/0000000010.png 721.5377
+2011_09_26/2011_09_26_drive_0018_sync/image_02/data/0000000030.png 2011_09_26_drive_0018_sync/proj_depth/groundtruth/image_02/0000000030.png 721.5377
+2011_09_26/2011_09_26_drive_0018_sync/image_02/data/0000000043.png 2011_09_26_drive_0018_sync/proj_depth/groundtruth/image_02/0000000043.png 721.5377
+2011_09_26/2011_09_26_drive_0018_sync/image_02/data/0000000095.png 2011_09_26_drive_0018_sync/proj_depth/groundtruth/image_02/0000000095.png 721.5377
+2011_09_26/2011_09_26_drive_0018_sync/image_02/data/0000000105.png 2011_09_26_drive_0018_sync/proj_depth/groundtruth/image_02/0000000105.png 721.5377
+2011_09_26/2011_09_26_drive_0018_sync/image_02/data/0000000106.png 2011_09_26_drive_0018_sync/proj_depth/groundtruth/image_02/0000000106.png 721.5377
+2011_09_26/2011_09_26_drive_0018_sync/image_02/data/0000000164.png 2011_09_26_drive_0018_sync/proj_depth/groundtruth/image_02/0000000164.png 721.5377
+2011_09_26/2011_09_26_drive_0018_sync/image_02/data/0000000212.png 2011_09_26_drive_0018_sync/proj_depth/groundtruth/image_02/0000000212.png 721.5377
+2011_09_26/2011_09_26_drive_0018_sync/image_02/data/0000000218.png 2011_09_26_drive_0018_sync/proj_depth/groundtruth/image_02/0000000218.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000032.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000032.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000040.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000040.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000043.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000043.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000059.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000059.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000127.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000127.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000207.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000207.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000242.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000242.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000263.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000263.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000274.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000274.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000292.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000292.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000319.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000319.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000335.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000335.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000371.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000371.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000389.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000389.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000417.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000417.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000428.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000428.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000447.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000447.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000461.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000461.png 721.5377
+2011_09_26/2011_09_26_drive_0019_sync/image_02/data/0000000465.png 2011_09_26_drive_0019_sync/proj_depth/groundtruth/image_02/0000000465.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000015.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000015.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000081.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000081.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000120.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000120.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000123.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000123.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000149.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000149.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000176.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000176.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000188.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000188.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000193.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000193.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000208.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000208.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000261.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000261.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000290.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000290.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000308.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000308.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000334.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000334.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000343.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000343.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000382.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000382.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000404.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000404.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000409.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000409.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000420.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000420.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000489.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000489.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000495.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000495.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000547.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000547.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000553.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000553.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000691.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000691.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000694.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000694.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000771.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000771.png 721.5377
+2011_09_26/2011_09_26_drive_0022_sync/image_02/data/0000000786.png 2011_09_26_drive_0022_sync/proj_depth/groundtruth/image_02/0000000786.png 721.5377
+2011_09_26/2011_09_26_drive_0028_sync/image_02/data/0000000011.png 2011_09_26_drive_0028_sync/proj_depth/groundtruth/image_02/0000000011.png 721.5377
+2011_09_26/2011_09_26_drive_0028_sync/image_02/data/0000000020.png 2011_09_26_drive_0028_sync/proj_depth/groundtruth/image_02/0000000020.png 721.5377
+2011_09_26/2011_09_26_drive_0028_sync/image_02/data/0000000030.png 2011_09_26_drive_0028_sync/proj_depth/groundtruth/image_02/0000000030.png 721.5377
+2011_09_26/2011_09_26_drive_0028_sync/image_02/data/0000000033.png 2011_09_26_drive_0028_sync/proj_depth/groundtruth/image_02/0000000033.png 721.5377
+2011_09_26/2011_09_26_drive_0028_sync/image_02/data/0000000037.png 2011_09_26_drive_0028_sync/proj_depth/groundtruth/image_02/0000000037.png 721.5377
+2011_09_26/2011_09_26_drive_0028_sync/image_02/data/0000000144.png 2011_09_26_drive_0028_sync/proj_depth/groundtruth/image_02/0000000144.png 721.5377
+2011_09_26/2011_09_26_drive_0028_sync/image_02/data/0000000180.png 2011_09_26_drive_0028_sync/proj_depth/groundtruth/image_02/0000000180.png 721.5377
+2011_09_26/2011_09_26_drive_0028_sync/image_02/data/0000000229.png 2011_09_26_drive_0028_sync/proj_depth/groundtruth/image_02/0000000229.png 721.5377
+2011_09_26/2011_09_26_drive_0028_sync/image_02/data/0000000252.png 2011_09_26_drive_0028_sync/proj_depth/groundtruth/image_02/0000000252.png 721.5377
+2011_09_26/2011_09_26_drive_0028_sync/image_02/data/0000000270.png 2011_09_26_drive_0028_sync/proj_depth/groundtruth/image_02/0000000270.png 721.5377
+2011_09_26/2011_09_26_drive_0028_sync/image_02/data/0000000275.png 2011_09_26_drive_0028_sync/proj_depth/groundtruth/image_02/0000000275.png 721.5377
+2011_09_26/2011_09_26_drive_0028_sync/image_02/data/0000000338.png 2011_09_26_drive_0028_sync/proj_depth/groundtruth/image_02/0000000338.png 721.5377
+2011_09_26/2011_09_26_drive_0028_sync/image_02/data/0000000340.png 2011_09_26_drive_0028_sync/proj_depth/groundtruth/image_02/0000000340.png 721.5377
+2011_09_26/2011_09_26_drive_0028_sync/image_02/data/0000000355.png 2011_09_26_drive_0028_sync/proj_depth/groundtruth/image_02/0000000355.png 721.5377
+2011_09_26/2011_09_26_drive_0028_sync/image_02/data/0000000384.png 2011_09_26_drive_0028_sync/proj_depth/groundtruth/image_02/0000000384.png 721.5377
+2011_09_26/2011_09_26_drive_0028_sync/image_02/data/0000000413.png 2011_09_26_drive_0028_sync/proj_depth/groundtruth/image_02/0000000413.png 721.5377
+2011_09_26/2011_09_26_drive_0032_sync/image_02/data/0000000038.png 2011_09_26_drive_0032_sync/proj_depth/groundtruth/image_02/0000000038.png 721.5377
+2011_09_26/2011_09_26_drive_0032_sync/image_02/data/0000000055.png 2011_09_26_drive_0032_sync/proj_depth/groundtruth/image_02/0000000055.png 721.5377
+2011_09_26/2011_09_26_drive_0032_sync/image_02/data/0000000076.png 2011_09_26_drive_0032_sync/proj_depth/groundtruth/image_02/0000000076.png 721.5377
+2011_09_26/2011_09_26_drive_0032_sync/image_02/data/0000000100.png 2011_09_26_drive_0032_sync/proj_depth/groundtruth/image_02/0000000100.png 721.5377
+2011_09_26/2011_09_26_drive_0032_sync/image_02/data/0000000165.png 2011_09_26_drive_0032_sync/proj_depth/groundtruth/image_02/0000000165.png 721.5377
+2011_09_26/2011_09_26_drive_0032_sync/image_02/data/0000000168.png 2011_09_26_drive_0032_sync/proj_depth/groundtruth/image_02/0000000168.png 721.5377
+2011_09_26/2011_09_26_drive_0032_sync/image_02/data/0000000194.png 2011_09_26_drive_0032_sync/proj_depth/groundtruth/image_02/0000000194.png 721.5377
+2011_09_26/2011_09_26_drive_0032_sync/image_02/data/0000000210.png 2011_09_26_drive_0032_sync/proj_depth/groundtruth/image_02/0000000210.png 721.5377
+2011_09_26/2011_09_26_drive_0032_sync/image_02/data/0000000218.png 2011_09_26_drive_0032_sync/proj_depth/groundtruth/image_02/0000000218.png 721.5377
+2011_09_26/2011_09_26_drive_0032_sync/image_02/data/0000000226.png 2011_09_26_drive_0032_sync/proj_depth/groundtruth/image_02/0000000226.png 721.5377
+2011_09_26/2011_09_26_drive_0032_sync/image_02/data/0000000238.png 2011_09_26_drive_0032_sync/proj_depth/groundtruth/image_02/0000000238.png 721.5377
+2011_09_26/2011_09_26_drive_0032_sync/image_02/data/0000000247.png 2011_09_26_drive_0032_sync/proj_depth/groundtruth/image_02/0000000247.png 721.5377
+2011_09_26/2011_09_26_drive_0032_sync/image_02/data/0000000259.png 2011_09_26_drive_0032_sync/proj_depth/groundtruth/image_02/0000000259.png 721.5377
+2011_09_26/2011_09_26_drive_0032_sync/image_02/data/0000000317.png 2011_09_26_drive_0032_sync/proj_depth/groundtruth/image_02/0000000317.png 721.5377
+2011_09_26/2011_09_26_drive_0032_sync/image_02/data/0000000334.png 2011_09_26_drive_0032_sync/proj_depth/groundtruth/image_02/0000000334.png 721.5377
+2011_09_26/2011_09_26_drive_0032_sync/image_02/data/0000000343.png 2011_09_26_drive_0032_sync/proj_depth/groundtruth/image_02/0000000343.png 721.5377
+2011_09_26/2011_09_26_drive_0035_sync/image_02/data/0000000009.png 2011_09_26_drive_0035_sync/proj_depth/groundtruth/image_02/0000000009.png 721.5377
+2011_09_26/2011_09_26_drive_0035_sync/image_02/data/0000000039.png 2011_09_26_drive_0035_sync/proj_depth/groundtruth/image_02/0000000039.png 721.5377
+2011_09_26/2011_09_26_drive_0035_sync/image_02/data/0000000054.png 2011_09_26_drive_0035_sync/proj_depth/groundtruth/image_02/0000000054.png 721.5377
+2011_09_26/2011_09_26_drive_0035_sync/image_02/data/0000000085.png 2011_09_26_drive_0035_sync/proj_depth/groundtruth/image_02/0000000085.png 721.5377
+2011_09_26/2011_09_26_drive_0035_sync/image_02/data/0000000124.png 2011_09_26_drive_0035_sync/proj_depth/groundtruth/image_02/0000000124.png 721.5377
+2011_09_26/2011_09_26_drive_0039_sync/image_02/data/0000000056.png 2011_09_26_drive_0039_sync/proj_depth/groundtruth/image_02/0000000056.png 721.5377
+2011_09_26/2011_09_26_drive_0039_sync/image_02/data/0000000069.png 2011_09_26_drive_0039_sync/proj_depth/groundtruth/image_02/0000000069.png 721.5377
+2011_09_26/2011_09_26_drive_0039_sync/image_02/data/0000000074.png 2011_09_26_drive_0039_sync/proj_depth/groundtruth/image_02/0000000074.png 721.5377
+2011_09_26/2011_09_26_drive_0039_sync/image_02/data/0000000104.png 2011_09_26_drive_0039_sync/proj_depth/groundtruth/image_02/0000000104.png 721.5377
+2011_09_26/2011_09_26_drive_0039_sync/image_02/data/0000000122.png 2011_09_26_drive_0039_sync/proj_depth/groundtruth/image_02/0000000122.png 721.5377
+2011_09_26/2011_09_26_drive_0039_sync/image_02/data/0000000192.png 2011_09_26_drive_0039_sync/proj_depth/groundtruth/image_02/0000000192.png 721.5377
+2011_09_26/2011_09_26_drive_0039_sync/image_02/data/0000000235.png 2011_09_26_drive_0039_sync/proj_depth/groundtruth/image_02/0000000235.png 721.5377
+2011_09_26/2011_09_26_drive_0039_sync/image_02/data/0000000284.png 2011_09_26_drive_0039_sync/proj_depth/groundtruth/image_02/0000000284.png 721.5377
+2011_09_26/2011_09_26_drive_0039_sync/image_02/data/0000000326.png 2011_09_26_drive_0039_sync/proj_depth/groundtruth/image_02/0000000326.png 721.5377
+2011_09_26/2011_09_26_drive_0039_sync/image_02/data/0000000334.png 2011_09_26_drive_0039_sync/proj_depth/groundtruth/image_02/0000000334.png 721.5377
+2011_09_26/2011_09_26_drive_0051_sync/image_02/data/0000000026.png 2011_09_26_drive_0051_sync/proj_depth/groundtruth/image_02/0000000026.png 721.5377
+2011_09_26/2011_09_26_drive_0051_sync/image_02/data/0000000229.png 2011_09_26_drive_0051_sync/proj_depth/groundtruth/image_02/0000000229.png 721.5377
+2011_09_26/2011_09_26_drive_0051_sync/image_02/data/0000000253.png 2011_09_26_drive_0051_sync/proj_depth/groundtruth/image_02/0000000253.png 721.5377
+2011_09_26/2011_09_26_drive_0051_sync/image_02/data/0000000314.png 2011_09_26_drive_0051_sync/proj_depth/groundtruth/image_02/0000000314.png 721.5377
+2011_09_26/2011_09_26_drive_0051_sync/image_02/data/0000000319.png 2011_09_26_drive_0051_sync/proj_depth/groundtruth/image_02/0000000319.png 721.5377
+2011_09_26/2011_09_26_drive_0051_sync/image_02/data/0000000334.png 2011_09_26_drive_0051_sync/proj_depth/groundtruth/image_02/0000000334.png 721.5377
+2011_09_26/2011_09_26_drive_0051_sync/image_02/data/0000000420.png 2011_09_26_drive_0051_sync/proj_depth/groundtruth/image_02/0000000420.png 721.5377
+2011_09_26/2011_09_26_drive_0051_sync/image_02/data/0000000423.png 2011_09_26_drive_0051_sync/proj_depth/groundtruth/image_02/0000000423.png 721.5377
+2011_09_26/2011_09_26_drive_0051_sync/image_02/data/0000000429.png 2011_09_26_drive_0051_sync/proj_depth/groundtruth/image_02/0000000429.png 721.5377
+2011_09_26/2011_09_26_drive_0051_sync/image_02/data/0000000431.png 2011_09_26_drive_0051_sync/proj_depth/groundtruth/image_02/0000000431.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000010.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000010.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000050.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000050.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000085.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000085.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000103.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000103.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000117.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000117.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000152.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000152.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000154.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000154.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000165.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000165.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000167.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000167.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000207.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000207.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000210.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000210.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000241.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000241.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000252.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000252.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000267.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000267.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000270.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000270.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000326.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000326.png 721.5377
+2011_09_26/2011_09_26_drive_0057_sync/image_02/data/0000000343.png 2011_09_26_drive_0057_sync/proj_depth/groundtruth/image_02/0000000343.png 721.5377
+2011_09_26/2011_09_26_drive_0060_sync/image_02/data/0000000020.png 2011_09_26_drive_0060_sync/proj_depth/groundtruth/image_02/0000000020.png 721.5377
+2011_09_26/2011_09_26_drive_0060_sync/image_02/data/0000000033.png 2011_09_26_drive_0060_sync/proj_depth/groundtruth/image_02/0000000033.png 721.5377
+2011_09_26/2011_09_26_drive_0060_sync/image_02/data/0000000065.png 2011_09_26_drive_0060_sync/proj_depth/groundtruth/image_02/0000000065.png 721.5377
+2011_09_26/2011_09_26_drive_0060_sync/image_02/data/0000000072.png 2011_09_26_drive_0060_sync/proj_depth/groundtruth/image_02/0000000072.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000069.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000069.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000090.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000090.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000116.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000116.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000141.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000141.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000146.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000146.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000153.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000153.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000158.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000158.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000186.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000186.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000190.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000190.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000223.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000223.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000230.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000230.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000262.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000262.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000271.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000271.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000284.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000284.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000291.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000291.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000321.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000321.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000379.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000379.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000396.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000396.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000439.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000439.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000480.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000480.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000523.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000523.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000524.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000524.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000557.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000557.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000622.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000622.png 721.5377
+2011_09_26/2011_09_26_drive_0061_sync/image_02/data/0000000665.png 2011_09_26_drive_0061_sync/proj_depth/groundtruth/image_02/0000000665.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000020.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000020.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000028.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000028.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000038.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000038.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000063.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000063.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000069.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000069.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000076.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000076.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000082.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000082.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000171.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000171.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000174.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000174.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000178.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000178.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000191.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000191.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000198.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000198.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000215.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000215.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000258.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000258.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000271.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000271.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000277.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000277.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000315.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000315.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000320.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000320.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000353.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000353.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000374.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000374.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000379.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000379.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000406.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000406.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000408.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000408.png 721.5377
+2011_09_26/2011_09_26_drive_0070_sync/image_02/data/0000000409.png 2011_09_26_drive_0070_sync/proj_depth/groundtruth/image_02/0000000409.png 721.5377
+2011_09_26/2011_09_26_drive_0079_sync/image_02/data/0000000020.png 2011_09_26_drive_0079_sync/proj_depth/groundtruth/image_02/0000000020.png 721.5377
+2011_09_26/2011_09_26_drive_0079_sync/image_02/data/0000000062.png 2011_09_26_drive_0079_sync/proj_depth/groundtruth/image_02/0000000062.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000011.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000011.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000057.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000057.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000083.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000083.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000210.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000210.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000255.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000255.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000264.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000264.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000282.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000282.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000297.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000297.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000313.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000313.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000316.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000316.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000317.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000317.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000322.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000322.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000339.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000339.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000355.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000355.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000363.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000363.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000367.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000367.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000438.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000438.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000462.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000462.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000479.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000479.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000541.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000541.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000617.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000617.png 721.5377
+2011_09_26/2011_09_26_drive_0087_sync/image_02/data/0000000706.png 2011_09_26_drive_0087_sync/proj_depth/groundtruth/image_02/0000000706.png 721.5377
+2011_09_26/2011_09_26_drive_0091_sync/image_02/data/0000000012.png 2011_09_26_drive_0091_sync/proj_depth/groundtruth/image_02/0000000012.png 721.5377
+2011_09_26/2011_09_26_drive_0091_sync/image_02/data/0000000018.png 2011_09_26_drive_0091_sync/proj_depth/groundtruth/image_02/0000000018.png 721.5377
+2011_09_26/2011_09_26_drive_0091_sync/image_02/data/0000000046.png 2011_09_26_drive_0091_sync/proj_depth/groundtruth/image_02/0000000046.png 721.5377
+2011_09_26/2011_09_26_drive_0091_sync/image_02/data/0000000050.png 2011_09_26_drive_0091_sync/proj_depth/groundtruth/image_02/0000000050.png 721.5377
+2011_09_26/2011_09_26_drive_0091_sync/image_02/data/0000000054.png 2011_09_26_drive_0091_sync/proj_depth/groundtruth/image_02/0000000054.png 721.5377
+2011_09_26/2011_09_26_drive_0091_sync/image_02/data/0000000065.png 2011_09_26_drive_0091_sync/proj_depth/groundtruth/image_02/0000000065.png 721.5377
+2011_09_26/2011_09_26_drive_0091_sync/image_02/data/0000000103.png 2011_09_26_drive_0091_sync/proj_depth/groundtruth/image_02/0000000103.png 721.5377
+2011_09_26/2011_09_26_drive_0091_sync/image_02/data/0000000137.png 2011_09_26_drive_0091_sync/proj_depth/groundtruth/image_02/0000000137.png 721.5377
+2011_09_26/2011_09_26_drive_0091_sync/image_02/data/0000000143.png 2011_09_26_drive_0091_sync/proj_depth/groundtruth/image_02/0000000143.png 721.5377
+2011_09_26/2011_09_26_drive_0091_sync/image_02/data/0000000170.png 2011_09_26_drive_0091_sync/proj_depth/groundtruth/image_02/0000000170.png 721.5377
+2011_09_26/2011_09_26_drive_0091_sync/image_02/data/0000000223.png 2011_09_26_drive_0091_sync/proj_depth/groundtruth/image_02/0000000223.png 721.5377
+2011_09_26/2011_09_26_drive_0091_sync/image_02/data/0000000272.png 2011_09_26_drive_0091_sync/proj_depth/groundtruth/image_02/0000000272.png 721.5377
+2011_09_26/2011_09_26_drive_0091_sync/image_02/data/0000000278.png 2011_09_26_drive_0091_sync/proj_depth/groundtruth/image_02/0000000278.png 721.5377
+2011_09_26/2011_09_26_drive_0091_sync/image_02/data/0000000294.png 2011_09_26_drive_0091_sync/proj_depth/groundtruth/image_02/0000000294.png 721.5377
+2011_09_26/2011_09_26_drive_0091_sync/image_02/data/0000000312.png 2011_09_26_drive_0091_sync/proj_depth/groundtruth/image_02/0000000312.png 721.5377
+2011_09_26/2011_09_26_drive_0091_sync/image_02/data/0000000320.png 2011_09_26_drive_0091_sync/proj_depth/groundtruth/image_02/0000000320.png 721.5377
+2011_09_26/2011_09_26_drive_0095_sync/image_02/data/0000000089.png 2011_09_26_drive_0095_sync/proj_depth/groundtruth/image_02/0000000089.png 721.5377
+2011_09_26/2011_09_26_drive_0095_sync/image_02/data/0000000160.png 2011_09_26_drive_0095_sync/proj_depth/groundtruth/image_02/0000000160.png 721.5377
+2011_09_26/2011_09_26_drive_0095_sync/image_02/data/0000000184.png 2011_09_26_drive_0095_sync/proj_depth/groundtruth/image_02/0000000184.png 721.5377
+2011_09_26/2011_09_26_drive_0095_sync/image_02/data/0000000190.png 2011_09_26_drive_0095_sync/proj_depth/groundtruth/image_02/0000000190.png 721.5377
+2011_09_26/2011_09_26_drive_0095_sync/image_02/data/0000000199.png 2011_09_26_drive_0095_sync/proj_depth/groundtruth/image_02/0000000199.png 721.5377
+2011_09_26/2011_09_26_drive_0104_sync/image_02/data/0000000011.png 2011_09_26_drive_0104_sync/proj_depth/groundtruth/image_02/0000000011.png 721.5377
+2011_09_26/2011_09_26_drive_0104_sync/image_02/data/0000000046.png 2011_09_26_drive_0104_sync/proj_depth/groundtruth/image_02/0000000046.png 721.5377
+2011_09_26/2011_09_26_drive_0104_sync/image_02/data/0000000083.png 2011_09_26_drive_0104_sync/proj_depth/groundtruth/image_02/0000000083.png 721.5377
+2011_09_26/2011_09_26_drive_0104_sync/image_02/data/0000000087.png 2011_09_26_drive_0104_sync/proj_depth/groundtruth/image_02/0000000087.png 721.5377
+2011_09_26/2011_09_26_drive_0104_sync/image_02/data/0000000138.png 2011_09_26_drive_0104_sync/proj_depth/groundtruth/image_02/0000000138.png 721.5377
+2011_09_26/2011_09_26_drive_0104_sync/image_02/data/0000000152.png 2011_09_26_drive_0104_sync/proj_depth/groundtruth/image_02/0000000152.png 721.5377
+2011_09_26/2011_09_26_drive_0104_sync/image_02/data/0000000202.png 2011_09_26_drive_0104_sync/proj_depth/groundtruth/image_02/0000000202.png 721.5377
+2011_09_26/2011_09_26_drive_0104_sync/image_02/data/0000000204.png 2011_09_26_drive_0104_sync/proj_depth/groundtruth/image_02/0000000204.png 721.5377
+2011_09_26/2011_09_26_drive_0104_sync/image_02/data/0000000286.png 2011_09_26_drive_0104_sync/proj_depth/groundtruth/image_02/0000000286.png 721.5377
+2011_09_26/2011_09_26_drive_0113_sync/image_02/data/0000000021.png 2011_09_26_drive_0113_sync/proj_depth/groundtruth/image_02/0000000021.png 721.5377
+2011_09_26/2011_09_26_drive_0113_sync/image_02/data/0000000052.png 2011_09_26_drive_0113_sync/proj_depth/groundtruth/image_02/0000000052.png 721.5377
+2011_09_26/2011_09_26_drive_0113_sync/image_02/data/0000000055.png 2011_09_26_drive_0113_sync/proj_depth/groundtruth/image_02/0000000055.png 721.5377
+2011_09_28/2011_09_28_drive_0001_sync/image_02/data/0000000072.png 2011_09_28_drive_0001_sync/proj_depth/groundtruth/image_02/0000000072.png 707.0493
+2011_09_28/2011_09_28_drive_0001_sync/image_02/data/0000000085.png 2011_09_28_drive_0001_sync/proj_depth/groundtruth/image_02/0000000085.png 707.0493
+2011_09_29/2011_09_29_drive_0004_sync/image_02/data/0000000029.png 2011_09_29_drive_0004_sync/proj_depth/groundtruth/image_02/0000000029.png 718.3351
+2011_09_29/2011_09_29_drive_0004_sync/image_02/data/0000000048.png 2011_09_29_drive_0004_sync/proj_depth/groundtruth/image_02/0000000048.png 718.3351
+2011_09_29/2011_09_29_drive_0004_sync/image_02/data/0000000065.png 2011_09_29_drive_0004_sync/proj_depth/groundtruth/image_02/0000000065.png 718.3351
+2011_09_29/2011_09_29_drive_0004_sync/image_02/data/0000000130.png 2011_09_29_drive_0004_sync/proj_depth/groundtruth/image_02/0000000130.png 718.3351
+2011_09_29/2011_09_29_drive_0004_sync/image_02/data/0000000134.png 2011_09_29_drive_0004_sync/proj_depth/groundtruth/image_02/0000000134.png 718.3351
+2011_09_29/2011_09_29_drive_0004_sync/image_02/data/0000000212.png 2011_09_29_drive_0004_sync/proj_depth/groundtruth/image_02/0000000212.png 718.3351
+2011_09_29/2011_09_29_drive_0026_sync/image_02/data/0000000023.png 2011_09_29_drive_0026_sync/proj_depth/groundtruth/image_02/0000000023.png 718.3351
+2011_09_29/2011_09_29_drive_0026_sync/image_02/data/0000000049.png 2011_09_29_drive_0026_sync/proj_depth/groundtruth/image_02/0000000049.png 718.3351
+2011_09_29/2011_09_29_drive_0026_sync/image_02/data/0000000067.png 2011_09_29_drive_0026_sync/proj_depth/groundtruth/image_02/0000000067.png 718.3351
+2011_09_29/2011_09_29_drive_0026_sync/image_02/data/0000000083.png 2011_09_29_drive_0026_sync/proj_depth/groundtruth/image_02/0000000083.png 718.3351
+2011_09_29/2011_09_29_drive_0026_sync/image_02/data/0000000087.png 2011_09_29_drive_0026_sync/proj_depth/groundtruth/image_02/0000000087.png 718.3351
+2011_09_29/2011_09_29_drive_0026_sync/image_02/data/0000000103.png 2011_09_29_drive_0026_sync/proj_depth/groundtruth/image_02/0000000103.png 718.3351
+2011_09_29/2011_09_29_drive_0026_sync/image_02/data/0000000135.png 2011_09_29_drive_0026_sync/proj_depth/groundtruth/image_02/0000000135.png 718.3351
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000031.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000031.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000088.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000088.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000113.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000113.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000160.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000160.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000169.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000169.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000206.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000206.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000240.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000240.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000250.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000250.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000282.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000282.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000316.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000316.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000319.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000319.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000325.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000325.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000345.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000345.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000372.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000372.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000377.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000377.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000383.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000383.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000465.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000465.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000500.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000500.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000524.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000524.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000536.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000536.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000553.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000553.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000597.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000597.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000650.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000650.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000651.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000651.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000660.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000660.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000674.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000674.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000721.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000721.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000785.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000785.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000826.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000826.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000830.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000830.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000834.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000834.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000840.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000840.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000842.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000842.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000845.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000845.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000848.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000848.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000896.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000896.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000953.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000953.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000959.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000959.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000000976.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000000976.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000001004.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000001004.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000001025.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000001025.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000001036.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000001036.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000001045.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000001045.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000001054.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000001054.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000001062.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000001062.png 707.0912
+2011_09_30/2011_09_30_drive_0020_sync/image_02/data/0000001093.png 2011_09_30_drive_0020_sync/proj_depth/groundtruth/image_02/0000001093.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000010.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000010.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000058.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000058.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000115.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000115.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000138.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000138.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000202.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000202.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000228.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000228.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000299.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000299.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000304.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000304.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000350.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000350.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000407.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000407.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000438.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000438.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000460.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000460.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000524.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000524.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000545.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000545.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000647.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000647.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000670.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000670.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000696.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000696.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000706.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000706.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000710.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000710.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000751.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000751.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000756.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000756.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000785.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000785.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000885.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000885.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000888.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000888.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000900.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000900.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000920.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000920.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000000930.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000000930.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001047.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001047.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001096.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001096.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001271.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001271.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001278.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001278.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001283.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001283.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001330.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001330.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001334.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001334.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001336.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001336.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001346.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001346.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001361.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001361.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001379.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001379.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001421.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001421.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001593.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001593.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001624.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001624.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001668.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001668.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001683.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001683.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001687.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001687.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001692.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001692.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001707.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001707.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001752.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001752.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001764.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001764.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001806.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001806.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001853.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001853.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001868.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001868.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001901.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001901.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001905.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001905.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001909.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001909.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001955.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001955.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000001977.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000001977.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002007.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002007.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002086.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002086.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002135.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002135.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002141.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002141.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002244.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002244.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002247.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002247.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002288.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002288.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002314.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002314.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002315.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002315.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002355.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002355.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002369.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002369.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002395.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002395.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002440.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002440.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002462.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002462.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002521.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002521.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002581.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002581.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002645.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002645.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002697.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002697.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002714.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002714.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002717.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002717.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002719.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002719.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002726.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002726.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002750.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002750.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002753.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002753.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002757.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002757.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002781.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002781.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002791.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002791.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002801.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002801.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002812.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002812.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002838.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002838.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002855.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002855.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002916.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002916.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002920.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002920.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002944.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002944.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002968.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002968.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000002989.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000002989.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003014.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003014.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003025.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003025.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003026.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003026.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003028.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003028.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003037.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003037.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003038.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003038.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003082.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003082.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003104.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003104.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003105.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003105.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003220.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003220.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003277.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003277.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003355.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003355.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003379.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003379.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003384.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003384.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003402.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003402.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003414.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003414.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003483.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003483.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003497.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003497.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003544.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003544.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003587.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003587.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003685.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003685.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003700.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003700.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003889.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003889.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003930.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003930.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000003955.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000003955.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004016.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004016.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004037.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004037.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004038.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004038.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004173.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004173.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004202.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004202.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004276.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004276.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004298.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004298.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004304.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004304.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004309.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004309.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004322.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004322.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004395.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004395.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004506.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004506.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004564.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004564.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004572.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004572.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004598.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004598.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004608.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004608.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004623.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004623.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004653.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004653.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004664.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004664.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004733.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004733.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004751.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004751.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004768.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004768.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004772.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004772.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004782.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004782.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004850.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004850.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004864.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004864.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004875.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004875.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004892.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004892.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004919.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004919.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004947.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004947.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004968.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004968.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000004971.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000004971.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000005056.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000005056.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000005093.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000005093.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000005095.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000005095.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000005110.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000005110.png 707.0912
+2011_09_30/2011_09_30_drive_0028_sync/image_02/data/0000005114.png 2011_09_30_drive_0028_sync/proj_depth/groundtruth/image_02/0000005114.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000012.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000012.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000032.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000032.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000045.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000045.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000048.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000048.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000061.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000061.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000104.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000104.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000140.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000140.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000143.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000143.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000158.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000158.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000183.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000183.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000212.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000212.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000227.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000227.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000273.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000273.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000285.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000285.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000306.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000306.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000319.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000319.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000333.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000333.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000335.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000335.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000355.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000355.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000356.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000356.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000365.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000365.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000370.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000370.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000411.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000411.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000431.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000431.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000461.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000461.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000479.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000479.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000494.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000494.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000500.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000500.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000530.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000530.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000557.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000557.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000604.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000604.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000613.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000613.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000635.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000635.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000682.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000682.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000710.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000710.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000895.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000895.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000896.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000896.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000000904.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000000904.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001004.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001004.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001083.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001083.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001113.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001113.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001132.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001132.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001197.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001197.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001201.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001201.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001309.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001309.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001408.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001408.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001437.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001437.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001439.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001439.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001484.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001484.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001508.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001508.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001512.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001512.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001533.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001533.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001551.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001551.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001552.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001552.png 707.0912
+2011_09_30/2011_09_30_drive_0033_sync/image_02/data/0000001572.png 2011_09_30_drive_0033_sync/proj_depth/groundtruth/image_02/0000001572.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000029.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000029.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000040.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000040.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000041.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000041.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000087.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000087.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000171.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000171.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000193.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000193.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000194.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000194.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000217.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000217.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000312.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000312.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000321.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000321.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000364.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000364.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000369.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000369.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000389.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000389.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000434.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000434.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000449.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000449.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000462.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000462.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000472.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000472.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000489.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000489.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000490.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000490.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000524.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000524.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000536.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000536.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000558.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000558.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000589.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000589.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000602.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000602.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000617.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000617.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000648.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000648.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000691.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000691.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000702.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000702.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000747.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000747.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000749.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000749.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000783.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000783.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000785.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000785.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000803.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000803.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000839.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000839.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000854.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000854.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000955.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000955.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000958.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000958.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000000998.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000000998.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000001031.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000001031.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000001141.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000001141.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000001167.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000001167.png 707.0912
+2011_09_30/2011_09_30_drive_0034_sync/image_02/data/0000001172.png 2011_09_30_drive_0034_sync/proj_depth/groundtruth/image_02/0000001172.png 707.0912
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000030.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000030.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000035.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000035.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000047.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000047.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000059.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000059.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000071.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000071.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000128.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000128.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000138.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000138.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000157.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000157.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000165.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000165.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000187.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000187.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000208.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000208.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000220.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000220.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000223.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000223.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000308.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000308.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000330.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000330.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000359.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000359.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000403.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000403.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000433.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000433.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000475.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000475.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000542.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000542.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000593.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000593.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000607.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000607.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000630.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000630.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000690.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000690.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000742.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000742.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000756.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000756.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000883.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000883.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000000976.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000000976.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001004.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001004.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001020.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001020.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001033.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001033.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001046.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001046.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001144.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001144.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001151.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001151.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001164.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001164.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001169.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001169.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001183.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001183.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001239.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001239.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001255.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001255.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001256.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001256.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001283.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001283.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001297.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001297.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001379.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001379.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001443.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001443.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001449.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001449.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001451.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001451.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001517.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001517.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001566.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001566.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001570.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001570.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001715.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001715.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001731.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001731.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001737.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001737.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001772.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001772.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001821.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001821.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001859.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001859.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001865.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001865.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001876.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001876.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001907.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001907.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001928.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001928.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001950.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001950.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001951.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001951.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001969.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001969.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001986.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001986.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000001999.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000001999.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002012.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002012.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002058.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002058.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002063.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002063.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002089.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002089.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002103.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002103.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002115.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002115.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002120.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002120.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002125.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002125.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002147.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002147.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002192.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002192.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002209.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002209.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002298.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002298.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002324.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002324.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002329.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002329.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002365.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002365.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002436.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002436.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002451.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002451.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002513.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002513.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002557.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002557.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002560.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002560.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002583.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002583.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002676.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002676.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002705.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002705.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002728.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002728.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002739.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002739.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002827.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002827.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002902.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002902.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002957.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002957.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000002971.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000002971.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003002.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003002.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003019.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003019.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003069.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003069.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003179.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003179.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003199.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003199.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003210.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003210.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003239.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003239.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003252.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003252.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003266.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003266.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003273.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003273.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003290.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003290.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003299.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003299.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003312.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003312.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003322.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003322.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003366.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003366.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003382.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003382.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003387.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003387.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003395.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003395.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003408.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003408.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003423.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003423.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003427.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003427.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003436.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003436.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003440.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003440.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003476.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003476.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003483.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003483.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003579.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003579.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003596.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003596.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003732.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003732.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003744.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003744.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003819.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003819.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003851.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003851.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003878.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003878.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003888.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003888.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003917.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003917.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003944.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003944.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003973.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003973.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003978.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003978.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000003993.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000003993.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004032.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004032.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004037.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004037.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004060.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004060.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004064.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004064.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004065.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004065.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004088.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004088.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004091.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004091.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004113.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004113.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004132.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004132.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004175.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004175.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004196.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004196.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004231.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004231.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004294.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004294.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004331.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004331.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004339.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004339.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004341.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004341.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004364.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004364.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004374.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004374.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004375.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004375.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004389.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004389.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004407.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004407.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004419.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004419.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004462.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004462.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004464.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004464.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004537.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004537.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004569.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004569.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004621.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004621.png 718.856
+2011_10_03/2011_10_03_drive_0034_sync/image_02/data/0000004627.png 2011_10_03_drive_0034_sync/proj_depth/groundtruth/image_02/0000004627.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000025.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000025.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000092.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000092.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000094.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000094.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000155.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000155.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000164.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000164.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000170.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000170.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000176.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000176.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000217.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000217.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000246.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000246.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000278.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000278.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000290.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000290.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000305.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000305.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000346.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000346.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000348.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000348.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000358.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000358.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000388.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000388.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000407.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000407.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000439.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000439.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000479.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000479.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000497.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000497.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000500.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000500.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000525.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000525.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000538.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000538.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000540.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000540.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000567.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000567.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000634.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000634.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000648.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000648.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000668.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000668.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000722.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000722.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000776.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000776.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000779.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000779.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000812.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000812.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000840.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000840.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000902.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000902.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000941.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000941.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000972.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000972.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000000996.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000000996.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000001009.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000001009.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000001035.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000001035.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000001048.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000001048.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000001055.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000001055.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000001056.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000001056.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000001063.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000001063.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000001087.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000001087.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000001107.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000001107.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000001109.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000001109.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000001118.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000001118.png 718.856
+2011_10_03/2011_10_03_drive_0042_sync/image_02/data/0000001129.png 2011_10_03_drive_0042_sync/proj_depth/groundtruth/image_02/0000001129.png 718.856
\ No newline at end of file
diff --git a/Lotus/datasets/eval/depth/data_split/nyu/labeled/filename_list_test.txt b/Lotus/datasets/eval/depth/data_split/nyu/labeled/filename_list_test.txt
new file mode 100644
index 0000000000000000000000000000000000000000..697d553ae7f83fad65dd5b8bdd981dbd2e34003a
--- /dev/null
+++ b/Lotus/datasets/eval/depth/data_split/nyu/labeled/filename_list_test.txt
@@ -0,0 +1,654 @@
+test/kitchen_0004/rgb_0001.png test/kitchen_0004/depth_0001.png test/kitchen_0004/filled_0001.png
+test/kitchen_0004/rgb_0002.png test/kitchen_0004/depth_0002.png test/kitchen_0004/filled_0002.png
+test/office_0005/rgb_0009.png test/office_0005/depth_0009.png test/office_0005/filled_0009.png
+test/office_0007/rgb_0014.png test/office_0007/depth_0014.png test/office_0007/filled_0014.png
+test/office_0008/rgb_0015.png test/office_0008/depth_0015.png test/office_0008/filled_0015.png
+test/office_0008/rgb_0016.png test/office_0008/depth_0016.png test/office_0008/filled_0016.png
+test/office_0008/rgb_0017.png test/office_0008/depth_0017.png test/office_0008/filled_0017.png
+test/office_0008/rgb_0018.png test/office_0008/depth_0018.png test/office_0008/filled_0018.png
+test/office_0010/rgb_0021.png test/office_0010/depth_0021.png test/office_0010/filled_0021.png
+test/office_0013/rgb_0028.png test/office_0013/depth_0028.png test/office_0013/filled_0028.png
+test/office_0013/rgb_0029.png test/office_0013/depth_0029.png test/office_0013/filled_0029.png
+test/office_0013/rgb_0030.png test/office_0013/depth_0030.png test/office_0013/filled_0030.png
+test/office_0013/rgb_0031.png test/office_0013/depth_0031.png test/office_0013/filled_0031.png
+test/office_0013/rgb_0032.png test/office_0013/depth_0032.png test/office_0013/filled_0032.png
+test/office_0013/rgb_0033.png test/office_0013/depth_0033.png test/office_0013/filled_0033.png
+test/office_0013/rgb_0034.png test/office_0013/depth_0034.png test/office_0013/filled_0034.png
+test/office_0014/rgb_0035.png test/office_0014/depth_0035.png test/office_0014/filled_0035.png
+test/office_0014/rgb_0036.png test/office_0014/depth_0036.png test/office_0014/filled_0036.png
+test/office_0014/rgb_0037.png test/office_0014/depth_0037.png test/office_0014/filled_0037.png
+test/office_0014/rgb_0038.png test/office_0014/depth_0038.png test/office_0014/filled_0038.png
+test/office_0015/rgb_0039.png test/office_0015/depth_0039.png test/office_0015/filled_0039.png
+test/office_0015/rgb_0040.png test/office_0015/depth_0040.png test/office_0015/filled_0040.png
+test/office_0015/rgb_0041.png test/office_0015/depth_0041.png test/office_0015/filled_0041.png
+test/office_0015/rgb_0042.png test/office_0015/depth_0042.png test/office_0015/filled_0042.png
+test/office_0015/rgb_0043.png test/office_0015/depth_0043.png test/office_0015/filled_0043.png
+test/bathroom_0003/rgb_0046.png test/bathroom_0003/depth_0046.png test/bathroom_0003/filled_0046.png
+test/bathroom_0004/rgb_0047.png test/bathroom_0004/depth_0047.png test/bathroom_0004/filled_0047.png
+test/bedroom_0011/rgb_0056.png test/bedroom_0011/depth_0056.png test/bedroom_0011/filled_0056.png
+test/bedroom_0011/rgb_0057.png test/bedroom_0011/depth_0057.png test/bedroom_0011/filled_0057.png
+test/bedroom_0013/rgb_0059.png test/bedroom_0013/depth_0059.png test/bedroom_0013/filled_0059.png
+test/bedroom_0013/rgb_0060.png test/bedroom_0013/depth_0060.png test/bedroom_0013/filled_0060.png
+test/bedroom_0013/rgb_0061.png test/bedroom_0013/depth_0061.png test/bedroom_0013/filled_0061.png
+test/bedroom_0013/rgb_0062.png test/bedroom_0013/depth_0062.png test/bedroom_0013/filled_0062.png
+test/bedroom_0013/rgb_0063.png test/bedroom_0013/depth_0063.png test/bedroom_0013/filled_0063.png
+test/bedroom_0018/rgb_0076.png test/bedroom_0018/depth_0076.png test/bedroom_0018/filled_0076.png
+test/bedroom_0018/rgb_0077.png test/bedroom_0018/depth_0077.png test/bedroom_0018/filled_0077.png
+test/bedroom_0018/rgb_0078.png test/bedroom_0018/depth_0078.png test/bedroom_0018/filled_0078.png
+test/bedroom_0018/rgb_0079.png test/bedroom_0018/depth_0079.png test/bedroom_0018/filled_0079.png
+test/bookstore_0001/rgb_0084.png test/bookstore_0001/depth_0084.png test/bookstore_0001/filled_0084.png
+test/bookstore_0001/rgb_0085.png test/bookstore_0001/depth_0085.png test/bookstore_0001/filled_0085.png
+test/bookstore_0001/rgb_0086.png test/bookstore_0001/depth_0086.png test/bookstore_0001/filled_0086.png
+test/bookstore_0001/rgb_0087.png test/bookstore_0001/depth_0087.png test/bookstore_0001/filled_0087.png
+test/bookstore_0001/rgb_0088.png test/bookstore_0001/depth_0088.png test/bookstore_0001/filled_0088.png
+test/bookstore_0001/rgb_0089.png test/bookstore_0001/depth_0089.png test/bookstore_0001/filled_0089.png
+test/bookstore_0001/rgb_0090.png test/bookstore_0001/depth_0090.png test/bookstore_0001/filled_0090.png
+test/bookstore_0001/rgb_0091.png test/bookstore_0001/depth_0091.png test/bookstore_0001/filled_0091.png
+test/bookstore_0001/rgb_0117.png test/bookstore_0001/depth_0117.png test/bookstore_0001/filled_0117.png
+test/bookstore_0001/rgb_0118.png test/bookstore_0001/depth_0118.png test/bookstore_0001/filled_0118.png
+test/bookstore_0001/rgb_0119.png test/bookstore_0001/depth_0119.png test/bookstore_0001/filled_0119.png
+test/kitchen_0005/rgb_0125.png test/kitchen_0005/depth_0125.png test/kitchen_0005/filled_0125.png
+test/kitchen_0005/rgb_0126.png test/kitchen_0005/depth_0126.png test/kitchen_0005/filled_0126.png
+test/kitchen_0005/rgb_0127.png test/kitchen_0005/depth_0127.png test/kitchen_0005/filled_0127.png
+test/kitchen_0005/rgb_0128.png test/kitchen_0005/depth_0128.png test/kitchen_0005/filled_0128.png
+test/kitchen_0005/rgb_0129.png test/kitchen_0005/depth_0129.png test/kitchen_0005/filled_0129.png
+test/kitchen_0007/rgb_0131.png test/kitchen_0007/depth_0131.png test/kitchen_0007/filled_0131.png
+test/kitchen_0007/rgb_0132.png test/kitchen_0007/depth_0132.png test/kitchen_0007/filled_0132.png
+test/kitchen_0007/rgb_0133.png test/kitchen_0007/depth_0133.png test/kitchen_0007/filled_0133.png
+test/kitchen_0007/rgb_0134.png test/kitchen_0007/depth_0134.png test/kitchen_0007/filled_0134.png
+test/kitchen_0009/rgb_0137.png test/kitchen_0009/depth_0137.png test/kitchen_0009/filled_0137.png
+test/living_room_0008/rgb_0153.png test/living_room_0008/depth_0153.png test/living_room_0008/filled_0153.png
+test/living_room_0008/rgb_0154.png test/living_room_0008/depth_0154.png test/living_room_0008/filled_0154.png
+test/living_room_0009/rgb_0155.png test/living_room_0009/depth_0155.png test/living_room_0009/filled_0155.png
+test/living_room_0013/rgb_0167.png test/living_room_0013/depth_0167.png test/living_room_0013/filled_0167.png
+test/living_room_0013/rgb_0168.png test/living_room_0013/depth_0168.png test/living_room_0013/filled_0168.png
+test/living_room_0014/rgb_0169.png test/living_room_0014/depth_0169.png test/living_room_0014/filled_0169.png
+test/bedroom_0003/rgb_0171.png test/bedroom_0003/depth_0171.png test/bedroom_0003/filled_0171.png
+test/bedroom_0003/rgb_0172.png test/bedroom_0003/depth_0172.png test/bedroom_0003/filled_0172.png
+test/bedroom_0003/rgb_0173.png test/bedroom_0003/depth_0173.png test/bedroom_0003/filled_0173.png
+test/bedroom_0003/rgb_0174.png test/bedroom_0003/depth_0174.png test/bedroom_0003/filled_0174.png
+test/bedroom_0003/rgb_0175.png test/bedroom_0003/depth_0175.png test/bedroom_0003/filled_0175.png
+test/bedroom_0003/rgb_0176.png test/bedroom_0003/depth_0176.png test/bedroom_0003/filled_0176.png
+test/bedroom_0005/rgb_0180.png test/bedroom_0005/depth_0180.png test/bedroom_0005/filled_0180.png
+test/bedroom_0005/rgb_0181.png test/bedroom_0005/depth_0181.png test/bedroom_0005/filled_0181.png
+test/bedroom_0005/rgb_0182.png test/bedroom_0005/depth_0182.png test/bedroom_0005/filled_0182.png
+test/bedroom_0006/rgb_0183.png test/bedroom_0006/depth_0183.png test/bedroom_0006/filled_0183.png
+test/bedroom_0006/rgb_0184.png test/bedroom_0006/depth_0184.png test/bedroom_0006/filled_0184.png
+test/bedroom_0006/rgb_0185.png test/bedroom_0006/depth_0185.png test/bedroom_0006/filled_0185.png
+test/bedroom_0006/rgb_0186.png test/bedroom_0006/depth_0186.png test/bedroom_0006/filled_0186.png
+test/bedroom_0006/rgb_0187.png test/bedroom_0006/depth_0187.png test/bedroom_0006/filled_0187.png
+test/bedroom_0006/rgb_0188.png test/bedroom_0006/depth_0188.png test/bedroom_0006/filled_0188.png
+test/bedroom_0007/rgb_0189.png test/bedroom_0007/depth_0189.png test/bedroom_0007/filled_0189.png
+test/bedroom_0007/rgb_0190.png test/bedroom_0007/depth_0190.png test/bedroom_0007/filled_0190.png
+test/bedroom_0007/rgb_0191.png test/bedroom_0007/depth_0191.png test/bedroom_0007/filled_0191.png
+test/bedroom_0007/rgb_0192.png test/bedroom_0007/depth_0192.png test/bedroom_0007/filled_0192.png
+test/bedroom_0007/rgb_0193.png test/bedroom_0007/depth_0193.png test/bedroom_0007/filled_0193.png
+test/kitchen_0002/rgb_0194.png test/kitchen_0002/depth_0194.png test/kitchen_0002/filled_0194.png
+test/kitchen_0002/rgb_0195.png test/kitchen_0002/depth_0195.png test/kitchen_0002/filled_0195.png
+test/kitchen_0002/rgb_0196.png test/kitchen_0002/depth_0196.png test/kitchen_0002/filled_0196.png
+test/kitchen_0002/rgb_0197.png test/kitchen_0002/depth_0197.png test/kitchen_0002/filled_0197.png
+test/kitchen_0002/rgb_0198.png test/kitchen_0002/depth_0198.png test/kitchen_0002/filled_0198.png
+test/kitchen_0002/rgb_0199.png test/kitchen_0002/depth_0199.png test/kitchen_0002/filled_0199.png
+test/kitchen_0002/rgb_0200.png test/kitchen_0002/depth_0200.png test/kitchen_0002/filled_0200.png
+test/kitchen_0002/rgb_0201.png test/kitchen_0002/depth_0201.png test/kitchen_0002/filled_0201.png
+test/kitchen_0002/rgb_0202.png test/kitchen_0002/depth_0202.png test/kitchen_0002/filled_0202.png
+test/living_room_0002/rgb_0207.png test/living_room_0002/depth_0207.png test/living_room_0002/filled_0207.png
+test/living_room_0003/rgb_0208.png test/living_room_0003/depth_0208.png test/living_room_0003/filled_0208.png
+test/living_room_0003/rgb_0209.png test/living_room_0003/depth_0209.png test/living_room_0003/filled_0209.png
+test/living_room_0003/rgb_0210.png test/living_room_0003/depth_0210.png test/living_room_0003/filled_0210.png
+test/living_room_0003/rgb_0211.png test/living_room_0003/depth_0211.png test/living_room_0003/filled_0211.png
+test/living_room_0003/rgb_0212.png test/living_room_0003/depth_0212.png test/living_room_0003/filled_0212.png
+test/bedroom_0022/rgb_0220.png test/bedroom_0022/depth_0220.png test/bedroom_0022/filled_0220.png
+test/bedroom_0024/rgb_0221.png test/bedroom_0024/depth_0221.png test/bedroom_0024/filled_0221.png
+test/bedroom_0024/rgb_0222.png test/bedroom_0024/depth_0222.png test/bedroom_0024/filled_0222.png
+test/kitchen_0015/rgb_0250.png test/kitchen_0015/depth_0250.png test/kitchen_0015/filled_0250.png
+test/living_room_0021/rgb_0264.png test/living_room_0021/depth_0264.png test/living_room_0021/filled_0264.png
+test/office_0016/rgb_0271.png test/office_0016/depth_0271.png test/office_0016/filled_0271.png
+test/office_0017/rgb_0272.png test/office_0017/depth_0272.png test/office_0017/filled_0272.png
+test/study_room_0001/rgb_0273.png test/study_room_0001/depth_0273.png test/study_room_0001/filled_0273.png
+test/study_room_0006/rgb_0279.png test/study_room_0006/depth_0279.png test/study_room_0006/filled_0279.png
+test/bedroom_0131/rgb_0280.png test/bedroom_0131/depth_0280.png test/bedroom_0131/filled_0280.png
+test/bedroom_0131/rgb_0281.png test/bedroom_0131/depth_0281.png test/bedroom_0131/filled_0281.png
+test/bedroom_0131/rgb_0282.png test/bedroom_0131/depth_0282.png test/bedroom_0131/filled_0282.png
+test/bedroom_0131/rgb_0283.png test/bedroom_0131/depth_0283.png test/bedroom_0131/filled_0283.png
+test/classroom_0001/rgb_0284.png test/classroom_0001/depth_0284.png test/classroom_0001/filled_0284.png
+test/classroom_0001/rgb_0285.png test/classroom_0001/depth_0285.png test/classroom_0001/filled_0285.png
+test/classroom_0007/rgb_0296.png test/classroom_0007/depth_0296.png test/classroom_0007/filled_0296.png
+test/classroom_0007/rgb_0297.png test/classroom_0007/depth_0297.png test/classroom_0007/filled_0297.png
+test/classroom_0007/rgb_0298.png test/classroom_0007/depth_0298.png test/classroom_0007/filled_0298.png
+test/classroom_0008/rgb_0299.png test/classroom_0008/depth_0299.png test/classroom_0008/filled_0299.png
+test/classroom_0008/rgb_0300.png test/classroom_0008/depth_0300.png test/classroom_0008/filled_0300.png
+test/classroom_0009/rgb_0301.png test/classroom_0009/depth_0301.png test/classroom_0009/filled_0301.png
+test/classroom_0009/rgb_0302.png test/classroom_0009/depth_0302.png test/classroom_0009/filled_0302.png
+test/classroom_0014/rgb_0310.png test/classroom_0014/depth_0310.png test/classroom_0014/filled_0310.png
+test/classroom_0014/rgb_0311.png test/classroom_0014/depth_0311.png test/classroom_0014/filled_0311.png
+test/classroom_0015/rgb_0312.png test/classroom_0015/depth_0312.png test/classroom_0015/filled_0312.png
+test/classroom_0017/rgb_0315.png test/classroom_0017/depth_0315.png test/classroom_0017/filled_0315.png
+test/classroom_0017/rgb_0316.png test/classroom_0017/depth_0316.png test/classroom_0017/filled_0316.png
+test/classroom_0017/rgb_0317.png test/classroom_0017/depth_0317.png test/classroom_0017/filled_0317.png
+test/classroom_0023/rgb_0325.png test/classroom_0023/depth_0325.png test/classroom_0023/filled_0325.png
+test/classroom_0023/rgb_0326.png test/classroom_0023/depth_0326.png test/classroom_0023/filled_0326.png
+test/classroom_0023/rgb_0327.png test/classroom_0023/depth_0327.png test/classroom_0023/filled_0327.png
+test/classroom_0023/rgb_0328.png test/classroom_0023/depth_0328.png test/classroom_0023/filled_0328.png
+test/classroom_0024/rgb_0329.png test/classroom_0024/depth_0329.png test/classroom_0024/filled_0329.png
+test/classroom_0024/rgb_0330.png test/classroom_0024/depth_0330.png test/classroom_0024/filled_0330.png
+test/classroom_0026/rgb_0331.png test/classroom_0026/depth_0331.png test/classroom_0026/filled_0331.png
+test/classroom_0026/rgb_0332.png test/classroom_0026/depth_0332.png test/classroom_0026/filled_0332.png
+test/computer_lab_0001/rgb_0333.png test/computer_lab_0001/depth_0333.png test/computer_lab_0001/filled_0333.png
+test/computer_lab_0001/rgb_0334.png test/computer_lab_0001/depth_0334.png test/computer_lab_0001/filled_0334.png
+test/computer_lab_0001/rgb_0335.png test/computer_lab_0001/depth_0335.png test/computer_lab_0001/filled_0335.png
+test/foyer_0001/rgb_0351.png test/foyer_0001/depth_0351.png test/foyer_0001/filled_0351.png
+test/foyer_0001/rgb_0352.png test/foyer_0001/depth_0352.png test/foyer_0001/filled_0352.png
+test/home_office_0001/rgb_0355.png test/home_office_0001/depth_0355.png test/home_office_0001/filled_0355.png
+test/home_office_0001/rgb_0356.png test/home_office_0001/depth_0356.png test/home_office_0001/filled_0356.png
+test/home_office_0001/rgb_0357.png test/home_office_0001/depth_0357.png test/home_office_0001/filled_0357.png
+test/home_office_0001/rgb_0358.png test/home_office_0001/depth_0358.png test/home_office_0001/filled_0358.png
+test/home_office_0002/rgb_0359.png test/home_office_0002/depth_0359.png test/home_office_0002/filled_0359.png
+test/home_office_0002/rgb_0360.png test/home_office_0002/depth_0360.png test/home_office_0002/filled_0360.png
+test/home_office_0002/rgb_0361.png test/home_office_0002/depth_0361.png test/home_office_0002/filled_0361.png
+test/home_office_0002/rgb_0362.png test/home_office_0002/depth_0362.png test/home_office_0002/filled_0362.png
+test/home_office_0003/rgb_0363.png test/home_office_0003/depth_0363.png test/home_office_0003/filled_0363.png
+test/home_office_0003/rgb_0364.png test/home_office_0003/depth_0364.png test/home_office_0003/filled_0364.png
+test/home_office_0009/rgb_0384.png test/home_office_0009/depth_0384.png test/home_office_0009/filled_0384.png
+test/home_office_0009/rgb_0385.png test/home_office_0009/depth_0385.png test/home_office_0009/filled_0385.png
+test/home_office_0009/rgb_0386.png test/home_office_0009/depth_0386.png test/home_office_0009/filled_0386.png
+test/home_office_0010/rgb_0387.png test/home_office_0010/depth_0387.png test/home_office_0010/filled_0387.png
+test/home_office_0010/rgb_0388.png test/home_office_0010/depth_0388.png test/home_office_0010/filled_0388.png
+test/home_office_0010/rgb_0389.png test/home_office_0010/depth_0389.png test/home_office_0010/filled_0389.png
+test/home_office_0010/rgb_0390.png test/home_office_0010/depth_0390.png test/home_office_0010/filled_0390.png
+test/home_office_0012/rgb_0395.png test/home_office_0012/depth_0395.png test/home_office_0012/filled_0395.png
+test/home_office_0012/rgb_0396.png test/home_office_0012/depth_0396.png test/home_office_0012/filled_0396.png
+test/home_office_0012/rgb_0397.png test/home_office_0012/depth_0397.png test/home_office_0012/filled_0397.png
+test/office_kitchen_0002/rgb_0411.png test/office_kitchen_0002/depth_0411.png test/office_kitchen_0002/filled_0411.png
+test/office_kitchen_0002/rgb_0412.png test/office_kitchen_0002/depth_0412.png test/office_kitchen_0002/filled_0412.png
+test/office_kitchen_0002/rgb_0413.png test/office_kitchen_0002/depth_0413.png test/office_kitchen_0002/filled_0413.png
+test/office_kitchen_0002/rgb_0414.png test/office_kitchen_0002/depth_0414.png test/office_kitchen_0002/filled_0414.png
+test/playroom_0005/rgb_0430.png test/playroom_0005/depth_0430.png test/playroom_0005/filled_0430.png
+test/playroom_0005/rgb_0431.png test/playroom_0005/depth_0431.png test/playroom_0005/filled_0431.png
+test/playroom_0005/rgb_0432.png test/playroom_0005/depth_0432.png test/playroom_0005/filled_0432.png
+test/playroom_0005/rgb_0433.png test/playroom_0005/depth_0433.png test/playroom_0005/filled_0433.png
+test/playroom_0005/rgb_0434.png test/playroom_0005/depth_0434.png test/playroom_0005/filled_0434.png
+test/playroom_0005/rgb_0435.png test/playroom_0005/depth_0435.png test/playroom_0005/filled_0435.png
+test/playroom_0007/rgb_0441.png test/playroom_0007/depth_0441.png test/playroom_0007/filled_0441.png
+test/playroom_0007/rgb_0442.png test/playroom_0007/depth_0442.png test/playroom_0007/filled_0442.png
+test/playroom_0007/rgb_0443.png test/playroom_0007/depth_0443.png test/playroom_0007/filled_0443.png
+test/playroom_0008/rgb_0444.png test/playroom_0008/depth_0444.png test/playroom_0008/filled_0444.png
+test/playroom_0008/rgb_0445.png test/playroom_0008/depth_0445.png test/playroom_0008/filled_0445.png
+test/playroom_0008/rgb_0446.png test/playroom_0008/depth_0446.png test/playroom_0008/filled_0446.png
+test/playroom_0008/rgb_0447.png test/playroom_0008/depth_0447.png test/playroom_0008/filled_0447.png
+test/playroom_0008/rgb_0448.png test/playroom_0008/depth_0448.png test/playroom_0008/filled_0448.png
+test/reception_room_0003/rgb_0462.png test/reception_room_0003/depth_0462.png test/reception_room_0003/filled_0462.png
+test/reception_room_0003/rgb_0463.png test/reception_room_0003/depth_0463.png test/reception_room_0003/filled_0463.png
+test/reception_room_0003/rgb_0464.png test/reception_room_0003/depth_0464.png test/reception_room_0003/filled_0464.png
+test/reception_room_0003/rgb_0465.png test/reception_room_0003/depth_0465.png test/reception_room_0003/filled_0465.png
+test/reception_room_0003/rgb_0466.png test/reception_room_0003/depth_0466.png test/reception_room_0003/filled_0466.png
+test/study_0001/rgb_0469.png test/study_0001/depth_0469.png test/study_0001/filled_0469.png
+test/study_0001/rgb_0470.png test/study_0001/depth_0470.png test/study_0001/filled_0470.png
+test/study_0001/rgb_0471.png test/study_0001/depth_0471.png test/study_0001/filled_0471.png
+test/study_0001/rgb_0472.png test/study_0001/depth_0472.png test/study_0001/filled_0472.png
+test/study_0001/rgb_0473.png test/study_0001/depth_0473.png test/study_0001/filled_0473.png
+test/study_0002/rgb_0474.png test/study_0002/depth_0474.png test/study_0002/filled_0474.png
+test/study_0002/rgb_0475.png test/study_0002/depth_0475.png test/study_0002/filled_0475.png
+test/study_0002/rgb_0476.png test/study_0002/depth_0476.png test/study_0002/filled_0476.png
+test/study_0002/rgb_0477.png test/study_0002/depth_0477.png test/study_0002/filled_0477.png
+test/bathroom_0058/rgb_0508.png test/bathroom_0058/depth_0508.png test/bathroom_0058/filled_0508.png
+test/bathroom_0058/rgb_0509.png test/bathroom_0058/depth_0509.png test/bathroom_0058/filled_0509.png
+test/bathroom_0058/rgb_0510.png test/bathroom_0058/depth_0510.png test/bathroom_0058/filled_0510.png
+test/bathroom_0060/rgb_0511.png test/bathroom_0060/depth_0511.png test/bathroom_0060/filled_0511.png
+test/bathroom_0060/rgb_0512.png test/bathroom_0060/depth_0512.png test/bathroom_0060/filled_0512.png
+test/bathroom_0060/rgb_0513.png test/bathroom_0060/depth_0513.png test/bathroom_0060/filled_0513.png
+test/bedroom_0133/rgb_0515.png test/bedroom_0133/depth_0515.png test/bedroom_0133/filled_0515.png
+test/bedroom_0133/rgb_0516.png test/bedroom_0133/depth_0516.png test/bedroom_0133/filled_0516.png
+test/bedroom_0133/rgb_0517.png test/bedroom_0133/depth_0517.png test/bedroom_0133/filled_0517.png
+test/bedroom_0133/rgb_0518.png test/bedroom_0133/depth_0518.png test/bedroom_0133/filled_0518.png
+test/bedroom_0133/rgb_0519.png test/bedroom_0133/depth_0519.png test/bedroom_0133/filled_0519.png
+test/bedroom_0134/rgb_0520.png test/bedroom_0134/depth_0520.png test/bedroom_0134/filled_0520.png
+test/bedroom_0134/rgb_0521.png test/bedroom_0134/depth_0521.png test/bedroom_0134/filled_0521.png
+test/bedroom_0134/rgb_0522.png test/bedroom_0134/depth_0522.png test/bedroom_0134/filled_0522.png
+test/bedroom_0135/rgb_0523.png test/bedroom_0135/depth_0523.png test/bedroom_0135/filled_0523.png
+test/bedroom_0135/rgb_0524.png test/bedroom_0135/depth_0524.png test/bedroom_0135/filled_0524.png
+test/bedroom_0135/rgb_0525.png test/bedroom_0135/depth_0525.png test/bedroom_0135/filled_0525.png
+test/bedroom_0135/rgb_0526.png test/bedroom_0135/depth_0526.png test/bedroom_0135/filled_0526.png
+test/bedroom_0137/rgb_0531.png test/bedroom_0137/depth_0531.png test/bedroom_0137/filled_0531.png
+test/bedroom_0137/rgb_0532.png test/bedroom_0137/depth_0532.png test/bedroom_0137/filled_0532.png
+test/bedroom_0137/rgb_0533.png test/bedroom_0137/depth_0533.png test/bedroom_0137/filled_0533.png
+test/bedroom_0139/rgb_0537.png test/bedroom_0139/depth_0537.png test/bedroom_0139/filled_0537.png
+test/bedroom_0139/rgb_0538.png test/bedroom_0139/depth_0538.png test/bedroom_0139/filled_0538.png
+test/bedroom_0139/rgb_0539.png test/bedroom_0139/depth_0539.png test/bedroom_0139/filled_0539.png
+test/dining_room_0038/rgb_0549.png test/dining_room_0038/depth_0549.png test/dining_room_0038/filled_0549.png
+test/dining_room_0038/rgb_0550.png test/dining_room_0038/depth_0550.png test/dining_room_0038/filled_0550.png
+test/dining_room_0038/rgb_0551.png test/dining_room_0038/depth_0551.png test/dining_room_0038/filled_0551.png
+test/home_office_0014/rgb_0555.png test/home_office_0014/depth_0555.png test/home_office_0014/filled_0555.png
+test/home_office_0014/rgb_0556.png test/home_office_0014/depth_0556.png test/home_office_0014/filled_0556.png
+test/home_office_0014/rgb_0557.png test/home_office_0014/depth_0557.png test/home_office_0014/filled_0557.png
+test/home_office_0014/rgb_0558.png test/home_office_0014/depth_0558.png test/home_office_0014/filled_0558.png
+test/kitchen_0055/rgb_0559.png test/kitchen_0055/depth_0559.png test/kitchen_0055/filled_0559.png
+test/kitchen_0055/rgb_0560.png test/kitchen_0055/depth_0560.png test/kitchen_0055/filled_0560.png
+test/kitchen_0056/rgb_0561.png test/kitchen_0056/depth_0561.png test/kitchen_0056/filled_0561.png
+test/kitchen_0056/rgb_0562.png test/kitchen_0056/depth_0562.png test/kitchen_0056/filled_0562.png
+test/kitchen_0056/rgb_0563.png test/kitchen_0056/depth_0563.png test/kitchen_0056/filled_0563.png
+test/kitchen_0056/rgb_0564.png test/kitchen_0056/depth_0564.png test/kitchen_0056/filled_0564.png
+test/kitchen_0057/rgb_0565.png test/kitchen_0057/depth_0565.png test/kitchen_0057/filled_0565.png
+test/kitchen_0057/rgb_0566.png test/kitchen_0057/depth_0566.png test/kitchen_0057/filled_0566.png
+test/kitchen_0057/rgb_0567.png test/kitchen_0057/depth_0567.png test/kitchen_0057/filled_0567.png
+test/kitchen_0057/rgb_0568.png test/kitchen_0057/depth_0568.png test/kitchen_0057/filled_0568.png
+test/kitchen_0058/rgb_0569.png test/kitchen_0058/depth_0569.png test/kitchen_0058/filled_0569.png
+test/kitchen_0058/rgb_0570.png test/kitchen_0058/depth_0570.png test/kitchen_0058/filled_0570.png
+test/kitchen_0058/rgb_0571.png test/kitchen_0058/depth_0571.png test/kitchen_0058/filled_0571.png
+test/living_room_0081/rgb_0579.png test/living_room_0081/depth_0579.png test/living_room_0081/filled_0579.png
+test/living_room_0081/rgb_0580.png test/living_room_0081/depth_0580.png test/living_room_0081/filled_0580.png
+test/living_room_0081/rgb_0581.png test/living_room_0081/depth_0581.png test/living_room_0081/filled_0581.png
+test/living_room_0081/rgb_0582.png test/living_room_0081/depth_0582.png test/living_room_0081/filled_0582.png
+test/living_room_0081/rgb_0583.png test/living_room_0081/depth_0583.png test/living_room_0081/filled_0583.png
+test/living_room_0084/rgb_0591.png test/living_room_0084/depth_0591.png test/living_room_0084/filled_0591.png
+test/living_room_0084/rgb_0592.png test/living_room_0084/depth_0592.png test/living_room_0084/filled_0592.png
+test/living_room_0084/rgb_0593.png test/living_room_0084/depth_0593.png test/living_room_0084/filled_0593.png
+test/living_room_0084/rgb_0594.png test/living_room_0084/depth_0594.png test/living_room_0084/filled_0594.png
+test/living_room_0087/rgb_0603.png test/living_room_0087/depth_0603.png test/living_room_0087/filled_0603.png
+test/living_room_0087/rgb_0604.png test/living_room_0087/depth_0604.png test/living_room_0087/filled_0604.png
+test/living_room_0087/rgb_0605.png test/living_room_0087/depth_0605.png test/living_room_0087/filled_0605.png
+test/living_room_0087/rgb_0606.png test/living_room_0087/depth_0606.png test/living_room_0087/filled_0606.png
+test/living_room_0087/rgb_0607.png test/living_room_0087/depth_0607.png test/living_room_0087/filled_0607.png
+test/office_0020/rgb_0612.png test/office_0020/depth_0612.png test/office_0020/filled_0612.png
+test/office_0020/rgb_0613.png test/office_0020/depth_0613.png test/office_0020/filled_0613.png
+test/office_0022/rgb_0617.png test/office_0022/depth_0617.png test/office_0022/filled_0617.png
+test/office_0022/rgb_0618.png test/office_0022/depth_0618.png test/office_0022/filled_0618.png
+test/office_0022/rgb_0619.png test/office_0022/depth_0619.png test/office_0022/filled_0619.png
+test/office_0022/rgb_0620.png test/office_0022/depth_0620.png test/office_0022/filled_0620.png
+test/office_0022/rgb_0621.png test/office_0022/depth_0621.png test/office_0022/filled_0621.png
+test/office_0027/rgb_0633.png test/office_0027/depth_0633.png test/office_0027/filled_0633.png
+test/office_0027/rgb_0634.png test/office_0027/depth_0634.png test/office_0027/filled_0634.png
+test/office_0027/rgb_0635.png test/office_0027/depth_0635.png test/office_0027/filled_0635.png
+test/office_0027/rgb_0636.png test/office_0027/depth_0636.png test/office_0027/filled_0636.png
+test/office_0027/rgb_0637.png test/office_0027/depth_0637.png test/office_0027/filled_0637.png
+test/office_0027/rgb_0638.png test/office_0027/depth_0638.png test/office_0027/filled_0638.png
+test/study_0007/rgb_0644.png test/study_0007/depth_0644.png test/study_0007/filled_0644.png
+test/study_0007/rgb_0645.png test/study_0007/depth_0645.png test/study_0007/filled_0645.png
+test/bathroom_0008/rgb_0650.png test/bathroom_0008/depth_0650.png test/bathroom_0008/filled_0650.png
+test/bathroom_0009/rgb_0651.png test/bathroom_0009/depth_0651.png test/bathroom_0009/filled_0651.png
+test/bathroom_0012/rgb_0656.png test/bathroom_0012/depth_0656.png test/bathroom_0012/filled_0656.png
+test/bathroom_0012/rgb_0657.png test/bathroom_0012/depth_0657.png test/bathroom_0012/filled_0657.png
+test/bathroom_0012/rgb_0658.png test/bathroom_0012/depth_0658.png test/bathroom_0012/filled_0658.png
+test/bathroom_0015/rgb_0663.png test/bathroom_0015/depth_0663.png test/bathroom_0015/filled_0663.png
+test/bathroom_0015/rgb_0664.png test/bathroom_0015/depth_0664.png test/bathroom_0015/filled_0664.png
+test/bathroom_0017/rgb_0668.png test/bathroom_0017/depth_0668.png test/bathroom_0017/filled_0668.png
+test/bathroom_0017/rgb_0669.png test/bathroom_0017/depth_0669.png test/bathroom_0017/filled_0669.png
+test/bathroom_0017/rgb_0670.png test/bathroom_0017/depth_0670.png test/bathroom_0017/filled_0670.png
+test/bathroom_0018/rgb_0671.png test/bathroom_0018/depth_0671.png test/bathroom_0018/filled_0671.png
+test/bathroom_0018/rgb_0672.png test/bathroom_0018/depth_0672.png test/bathroom_0018/filled_0672.png
+test/bathroom_0018/rgb_0673.png test/bathroom_0018/depth_0673.png test/bathroom_0018/filled_0673.png
+test/bathroom_0020/rgb_0676.png test/bathroom_0020/depth_0676.png test/bathroom_0020/filled_0676.png
+test/bathroom_0020/rgb_0677.png test/bathroom_0020/depth_0677.png test/bathroom_0020/filled_0677.png
+test/bathroom_0021/rgb_0678.png test/bathroom_0021/depth_0678.png test/bathroom_0021/filled_0678.png
+test/bathroom_0021/rgb_0679.png test/bathroom_0021/depth_0679.png test/bathroom_0021/filled_0679.png
+test/bathroom_0022/rgb_0680.png test/bathroom_0022/depth_0680.png test/bathroom_0022/filled_0680.png
+test/bathroom_0022/rgb_0681.png test/bathroom_0022/depth_0681.png test/bathroom_0022/filled_0681.png
+test/bathroom_0025/rgb_0686.png test/bathroom_0025/depth_0686.png test/bathroom_0025/filled_0686.png
+test/bathroom_0025/rgb_0687.png test/bathroom_0025/depth_0687.png test/bathroom_0025/filled_0687.png
+test/bathroom_0026/rgb_0688.png test/bathroom_0026/depth_0688.png test/bathroom_0026/filled_0688.png
+test/bathroom_0026/rgb_0689.png test/bathroom_0026/depth_0689.png test/bathroom_0026/filled_0689.png
+test/bathroom_0026/rgb_0690.png test/bathroom_0026/depth_0690.png test/bathroom_0026/filled_0690.png
+test/bathroom_0029/rgb_0693.png test/bathroom_0029/depth_0693.png test/bathroom_0029/filled_0693.png
+test/bathroom_0029/rgb_0694.png test/bathroom_0029/depth_0694.png test/bathroom_0029/filled_0694.png
+test/bathroom_0031/rgb_0697.png test/bathroom_0031/depth_0697.png test/bathroom_0031/filled_0697.png
+test/bathroom_0031/rgb_0698.png test/bathroom_0031/depth_0698.png test/bathroom_0031/filled_0698.png
+test/bathroom_0031/rgb_0699.png test/bathroom_0031/depth_0699.png test/bathroom_0031/filled_0699.png
+test/bathroom_0036/rgb_0706.png test/bathroom_0036/depth_0706.png test/bathroom_0036/filled_0706.png
+test/bathroom_0036/rgb_0707.png test/bathroom_0036/depth_0707.png test/bathroom_0036/filled_0707.png
+test/bathroom_0036/rgb_0708.png test/bathroom_0036/depth_0708.png test/bathroom_0036/filled_0708.png
+test/bathroom_0037/rgb_0709.png test/bathroom_0037/depth_0709.png test/bathroom_0037/filled_0709.png
+test/bathroom_0037/rgb_0710.png test/bathroom_0037/depth_0710.png test/bathroom_0037/filled_0710.png
+test/bathroom_0038/rgb_0711.png test/bathroom_0038/depth_0711.png test/bathroom_0038/filled_0711.png
+test/bathroom_0038/rgb_0712.png test/bathroom_0038/depth_0712.png test/bathroom_0038/filled_0712.png
+test/bathroom_0038/rgb_0713.png test/bathroom_0038/depth_0713.png test/bathroom_0038/filled_0713.png
+test/bathroom_0040/rgb_0717.png test/bathroom_0040/depth_0717.png test/bathroom_0040/filled_0717.png
+test/bathroom_0040/rgb_0718.png test/bathroom_0040/depth_0718.png test/bathroom_0040/filled_0718.png
+test/bathroom_0043/rgb_0724.png test/bathroom_0043/depth_0724.png test/bathroom_0043/filled_0724.png
+test/bathroom_0043/rgb_0725.png test/bathroom_0043/depth_0725.png test/bathroom_0043/filled_0725.png
+test/bathroom_0043/rgb_0726.png test/bathroom_0043/depth_0726.png test/bathroom_0043/filled_0726.png
+test/bathroom_0044/rgb_0727.png test/bathroom_0044/depth_0727.png test/bathroom_0044/filled_0727.png
+test/bathroom_0044/rgb_0728.png test/bathroom_0044/depth_0728.png test/bathroom_0044/filled_0728.png
+test/bathroom_0046/rgb_0731.png test/bathroom_0046/depth_0731.png test/bathroom_0046/filled_0731.png
+test/bathroom_0046/rgb_0732.png test/bathroom_0046/depth_0732.png test/bathroom_0046/filled_0732.png
+test/bathroom_0047/rgb_0733.png test/bathroom_0047/depth_0733.png test/bathroom_0047/filled_0733.png
+test/bathroom_0047/rgb_0734.png test/bathroom_0047/depth_0734.png test/bathroom_0047/filled_0734.png
+test/bathroom_0052/rgb_0743.png test/bathroom_0052/depth_0743.png test/bathroom_0052/filled_0743.png
+test/bathroom_0052/rgb_0744.png test/bathroom_0052/depth_0744.png test/bathroom_0052/filled_0744.png
+test/kitchen_0021/rgb_0759.png test/kitchen_0021/depth_0759.png test/kitchen_0021/filled_0759.png
+test/kitchen_0021/rgb_0760.png test/kitchen_0021/depth_0760.png test/kitchen_0021/filled_0760.png
+test/kitchen_0021/rgb_0761.png test/kitchen_0021/depth_0761.png test/kitchen_0021/filled_0761.png
+test/kitchen_0022/rgb_0762.png test/kitchen_0022/depth_0762.png test/kitchen_0022/filled_0762.png
+test/kitchen_0022/rgb_0763.png test/kitchen_0022/depth_0763.png test/kitchen_0022/filled_0763.png
+test/kitchen_0022/rgb_0764.png test/kitchen_0022/depth_0764.png test/kitchen_0022/filled_0764.png
+test/kitchen_0022/rgb_0765.png test/kitchen_0022/depth_0765.png test/kitchen_0022/filled_0765.png
+test/kitchen_0022/rgb_0766.png test/kitchen_0022/depth_0766.png test/kitchen_0022/filled_0766.png
+test/kitchen_0023/rgb_0767.png test/kitchen_0023/depth_0767.png test/kitchen_0023/filled_0767.png
+test/kitchen_0023/rgb_0768.png test/kitchen_0023/depth_0768.png test/kitchen_0023/filled_0768.png
+test/kitchen_0023/rgb_0769.png test/kitchen_0023/depth_0769.png test/kitchen_0023/filled_0769.png
+test/kitchen_0023/rgb_0770.png test/kitchen_0023/depth_0770.png test/kitchen_0023/filled_0770.png
+test/kitchen_0023/rgb_0771.png test/kitchen_0023/depth_0771.png test/kitchen_0023/filled_0771.png
+test/kitchen_0024/rgb_0772.png test/kitchen_0024/depth_0772.png test/kitchen_0024/filled_0772.png
+test/kitchen_0024/rgb_0773.png test/kitchen_0024/depth_0773.png test/kitchen_0024/filled_0773.png
+test/kitchen_0024/rgb_0774.png test/kitchen_0024/depth_0774.png test/kitchen_0024/filled_0774.png
+test/kitchen_0024/rgb_0775.png test/kitchen_0024/depth_0775.png test/kitchen_0024/filled_0775.png
+test/kitchen_0024/rgb_0776.png test/kitchen_0024/depth_0776.png test/kitchen_0024/filled_0776.png
+test/kitchen_0025/rgb_0777.png test/kitchen_0025/depth_0777.png test/kitchen_0025/filled_0777.png
+test/kitchen_0025/rgb_0778.png test/kitchen_0025/depth_0778.png test/kitchen_0025/filled_0778.png
+test/kitchen_0025/rgb_0779.png test/kitchen_0025/depth_0779.png test/kitchen_0025/filled_0779.png
+test/kitchen_0026/rgb_0780.png test/kitchen_0026/depth_0780.png test/kitchen_0026/filled_0780.png
+test/kitchen_0026/rgb_0781.png test/kitchen_0026/depth_0781.png test/kitchen_0026/filled_0781.png
+test/kitchen_0026/rgb_0782.png test/kitchen_0026/depth_0782.png test/kitchen_0026/filled_0782.png
+test/kitchen_0027/rgb_0783.png test/kitchen_0027/depth_0783.png test/kitchen_0027/filled_0783.png
+test/kitchen_0027/rgb_0784.png test/kitchen_0027/depth_0784.png test/kitchen_0027/filled_0784.png
+test/kitchen_0027/rgb_0785.png test/kitchen_0027/depth_0785.png test/kitchen_0027/filled_0785.png
+test/kitchen_0027/rgb_0786.png test/kitchen_0027/depth_0786.png test/kitchen_0027/filled_0786.png
+test/kitchen_0027/rgb_0787.png test/kitchen_0027/depth_0787.png test/kitchen_0027/filled_0787.png
+test/kitchen_0030/rgb_0800.png test/kitchen_0030/depth_0800.png test/kitchen_0030/filled_0800.png
+test/kitchen_0030/rgb_0801.png test/kitchen_0030/depth_0801.png test/kitchen_0030/filled_0801.png
+test/kitchen_0030/rgb_0802.png test/kitchen_0030/depth_0802.png test/kitchen_0030/filled_0802.png
+test/kitchen_0030/rgb_0803.png test/kitchen_0030/depth_0803.png test/kitchen_0030/filled_0803.png
+test/kitchen_0030/rgb_0804.png test/kitchen_0030/depth_0804.png test/kitchen_0030/filled_0804.png
+test/kitchen_0032/rgb_0810.png test/kitchen_0032/depth_0810.png test/kitchen_0032/filled_0810.png
+test/kitchen_0032/rgb_0811.png test/kitchen_0032/depth_0811.png test/kitchen_0032/filled_0811.png
+test/kitchen_0032/rgb_0812.png test/kitchen_0032/depth_0812.png test/kitchen_0032/filled_0812.png
+test/kitchen_0032/rgb_0813.png test/kitchen_0032/depth_0813.png test/kitchen_0032/filled_0813.png
+test/kitchen_0032/rgb_0814.png test/kitchen_0032/depth_0814.png test/kitchen_0032/filled_0814.png
+test/kitchen_0034/rgb_0821.png test/kitchen_0034/depth_0821.png test/kitchen_0034/filled_0821.png
+test/kitchen_0034/rgb_0822.png test/kitchen_0034/depth_0822.png test/kitchen_0034/filled_0822.png
+test/kitchen_0034/rgb_0823.png test/kitchen_0034/depth_0823.png test/kitchen_0034/filled_0823.png
+test/kitchen_0038/rgb_0833.png test/kitchen_0038/depth_0833.png test/kitchen_0038/filled_0833.png
+test/kitchen_0038/rgb_0834.png test/kitchen_0038/depth_0834.png test/kitchen_0038/filled_0834.png
+test/kitchen_0038/rgb_0835.png test/kitchen_0038/depth_0835.png test/kitchen_0038/filled_0835.png
+test/kitchen_0038/rgb_0836.png test/kitchen_0038/depth_0836.png test/kitchen_0038/filled_0836.png
+test/kitchen_0039/rgb_0837.png test/kitchen_0039/depth_0837.png test/kitchen_0039/filled_0837.png
+test/kitchen_0039/rgb_0838.png test/kitchen_0039/depth_0838.png test/kitchen_0039/filled_0838.png
+test/kitchen_0039/rgb_0839.png test/kitchen_0039/depth_0839.png test/kitchen_0039/filled_0839.png
+test/kitchen_0039/rgb_0840.png test/kitchen_0039/depth_0840.png test/kitchen_0039/filled_0840.png
+test/kitchen_0039/rgb_0841.png test/kitchen_0039/depth_0841.png test/kitchen_0039/filled_0841.png
+test/kitchen_0039/rgb_0842.png test/kitchen_0039/depth_0842.png test/kitchen_0039/filled_0842.png
+test/kitchen_0040/rgb_0843.png test/kitchen_0040/depth_0843.png test/kitchen_0040/filled_0843.png
+test/kitchen_0040/rgb_0844.png test/kitchen_0040/depth_0844.png test/kitchen_0040/filled_0844.png
+test/kitchen_0040/rgb_0845.png test/kitchen_0040/depth_0845.png test/kitchen_0040/filled_0845.png
+test/kitchen_0040/rgb_0846.png test/kitchen_0040/depth_0846.png test/kitchen_0040/filled_0846.png
+test/kitchen_0042/rgb_0850.png test/kitchen_0042/depth_0850.png test/kitchen_0042/filled_0850.png
+test/kitchen_0042/rgb_0851.png test/kitchen_0042/depth_0851.png test/kitchen_0042/filled_0851.png
+test/kitchen_0042/rgb_0852.png test/kitchen_0042/depth_0852.png test/kitchen_0042/filled_0852.png
+test/kitchen_0044/rgb_0857.png test/kitchen_0044/depth_0857.png test/kitchen_0044/filled_0857.png
+test/kitchen_0044/rgb_0858.png test/kitchen_0044/depth_0858.png test/kitchen_0044/filled_0858.png
+test/kitchen_0044/rgb_0859.png test/kitchen_0044/depth_0859.png test/kitchen_0044/filled_0859.png
+test/kitchen_0044/rgb_0860.png test/kitchen_0044/depth_0860.png test/kitchen_0044/filled_0860.png
+test/kitchen_0044/rgb_0861.png test/kitchen_0044/depth_0861.png test/kitchen_0044/filled_0861.png
+test/kitchen_0044/rgb_0862.png test/kitchen_0044/depth_0862.png test/kitchen_0044/filled_0862.png
+test/kitchen_0046/rgb_0869.png test/kitchen_0046/depth_0869.png test/kitchen_0046/filled_0869.png
+test/kitchen_0046/rgb_0870.png test/kitchen_0046/depth_0870.png test/kitchen_0046/filled_0870.png
+test/kitchen_0046/rgb_0871.png test/kitchen_0046/depth_0871.png test/kitchen_0046/filled_0871.png
+test/kitchen_0054/rgb_0906.png test/kitchen_0054/depth_0906.png test/kitchen_0054/filled_0906.png
+test/kitchen_0054/rgb_0907.png test/kitchen_0054/depth_0907.png test/kitchen_0054/filled_0907.png
+test/kitchen_0054/rgb_0908.png test/kitchen_0054/depth_0908.png test/kitchen_0054/filled_0908.png
+test/bedroom_0027/rgb_0917.png test/bedroom_0027/depth_0917.png test/bedroom_0027/filled_0917.png
+test/bedroom_0027/rgb_0918.png test/bedroom_0027/depth_0918.png test/bedroom_0027/filled_0918.png
+test/bedroom_0027/rgb_0919.png test/bedroom_0027/depth_0919.png test/bedroom_0027/filled_0919.png
+test/bedroom_0030/rgb_0926.png test/bedroom_0030/depth_0926.png test/bedroom_0030/filled_0926.png
+test/bedroom_0030/rgb_0927.png test/bedroom_0030/depth_0927.png test/bedroom_0030/filled_0927.png
+test/bedroom_0030/rgb_0928.png test/bedroom_0030/depth_0928.png test/bedroom_0030/filled_0928.png
+test/bedroom_0032/rgb_0932.png test/bedroom_0032/depth_0932.png test/bedroom_0032/filled_0932.png
+test/bedroom_0032/rgb_0933.png test/bedroom_0032/depth_0933.png test/bedroom_0032/filled_0933.png
+test/bedroom_0032/rgb_0934.png test/bedroom_0032/depth_0934.png test/bedroom_0032/filled_0934.png
+test/bedroom_0032/rgb_0935.png test/bedroom_0032/depth_0935.png test/bedroom_0032/filled_0935.png
+test/bedroom_0037/rgb_0945.png test/bedroom_0037/depth_0945.png test/bedroom_0037/filled_0945.png
+test/bedroom_0037/rgb_0946.png test/bedroom_0037/depth_0946.png test/bedroom_0037/filled_0946.png
+test/bedroom_0037/rgb_0947.png test/bedroom_0037/depth_0947.png test/bedroom_0037/filled_0947.png
+test/bedroom_0043/rgb_0959.png test/bedroom_0043/depth_0959.png test/bedroom_0043/filled_0959.png
+test/bedroom_0043/rgb_0960.png test/bedroom_0043/depth_0960.png test/bedroom_0043/filled_0960.png
+test/bedroom_0044/rgb_0961.png test/bedroom_0044/depth_0961.png test/bedroom_0044/filled_0961.png
+test/bedroom_0044/rgb_0962.png test/bedroom_0044/depth_0962.png test/bedroom_0044/filled_0962.png
+test/bedroom_0046/rgb_0965.png test/bedroom_0046/depth_0965.png test/bedroom_0046/filled_0965.png
+test/bedroom_0046/rgb_0966.png test/bedroom_0046/depth_0966.png test/bedroom_0046/filled_0966.png
+test/bedroom_0046/rgb_0967.png test/bedroom_0046/depth_0967.png test/bedroom_0046/filled_0967.png
+test/bedroom_0048/rgb_0970.png test/bedroom_0048/depth_0970.png test/bedroom_0048/filled_0970.png
+test/bedroom_0048/rgb_0971.png test/bedroom_0048/depth_0971.png test/bedroom_0048/filled_0971.png
+test/bedroom_0048/rgb_0972.png test/bedroom_0048/depth_0972.png test/bedroom_0048/filled_0972.png
+test/bedroom_0048/rgb_0973.png test/bedroom_0048/depth_0973.png test/bedroom_0048/filled_0973.png
+test/bedroom_0048/rgb_0974.png test/bedroom_0048/depth_0974.png test/bedroom_0048/filled_0974.png
+test/bedroom_0049/rgb_0975.png test/bedroom_0049/depth_0975.png test/bedroom_0049/filled_0975.png
+test/bedroom_0049/rgb_0976.png test/bedroom_0049/depth_0976.png test/bedroom_0049/filled_0976.png
+test/bedroom_0049/rgb_0977.png test/bedroom_0049/depth_0977.png test/bedroom_0049/filled_0977.png
+test/bedroom_0054/rgb_0991.png test/bedroom_0054/depth_0991.png test/bedroom_0054/filled_0991.png
+test/bedroom_0054/rgb_0992.png test/bedroom_0054/depth_0992.png test/bedroom_0054/filled_0992.png
+test/bedroom_0054/rgb_0993.png test/bedroom_0054/depth_0993.png test/bedroom_0054/filled_0993.png
+test/bedroom_0055/rgb_0994.png test/bedroom_0055/depth_0994.png test/bedroom_0055/filled_0994.png
+test/bedroom_0055/rgb_0995.png test/bedroom_0055/depth_0995.png test/bedroom_0055/filled_0995.png
+test/bedroom_0058/rgb_1001.png test/bedroom_0058/depth_1001.png test/bedroom_0058/filled_1001.png
+test/bedroom_0058/rgb_1002.png test/bedroom_0058/depth_1002.png test/bedroom_0058/filled_1002.png
+test/bedroom_0058/rgb_1003.png test/bedroom_0058/depth_1003.png test/bedroom_0058/filled_1003.png
+test/bedroom_0058/rgb_1004.png test/bedroom_0058/depth_1004.png test/bedroom_0058/filled_1004.png
+test/bedroom_0061/rgb_1010.png test/bedroom_0061/depth_1010.png test/bedroom_0061/filled_1010.png
+test/bedroom_0061/rgb_1011.png test/bedroom_0061/depth_1011.png test/bedroom_0061/filled_1011.png
+test/bedroom_0061/rgb_1012.png test/bedroom_0061/depth_1012.png test/bedroom_0061/filled_1012.png
+test/bedroom_0064/rgb_1021.png test/bedroom_0064/depth_1021.png test/bedroom_0064/filled_1021.png
+test/bedroom_0064/rgb_1022.png test/bedroom_0064/depth_1022.png test/bedroom_0064/filled_1022.png
+test/bedroom_0064/rgb_1023.png test/bedroom_0064/depth_1023.png test/bedroom_0064/filled_1023.png
+test/bedroom_0068/rgb_1032.png test/bedroom_0068/depth_1032.png test/bedroom_0068/filled_1032.png
+test/bedroom_0068/rgb_1033.png test/bedroom_0068/depth_1033.png test/bedroom_0068/filled_1033.png
+test/bedroom_0068/rgb_1034.png test/bedroom_0068/depth_1034.png test/bedroom_0068/filled_1034.png
+test/bedroom_0070/rgb_1038.png test/bedroom_0070/depth_1038.png test/bedroom_0070/filled_1038.png
+test/bedroom_0070/rgb_1039.png test/bedroom_0070/depth_1039.png test/bedroom_0070/filled_1039.png
+test/bedroom_0073/rgb_1048.png test/bedroom_0073/depth_1048.png test/bedroom_0073/filled_1048.png
+test/bedroom_0073/rgb_1049.png test/bedroom_0073/depth_1049.png test/bedroom_0073/filled_1049.png
+test/bedroom_0075/rgb_1052.png test/bedroom_0075/depth_1052.png test/bedroom_0075/filled_1052.png
+test/bedroom_0075/rgb_1053.png test/bedroom_0075/depth_1053.png test/bedroom_0075/filled_1053.png
+test/bedroom_0077/rgb_1057.png test/bedroom_0077/depth_1057.png test/bedroom_0077/filled_1057.png
+test/bedroom_0077/rgb_1058.png test/bedroom_0077/depth_1058.png test/bedroom_0077/filled_1058.png
+test/bedroom_0083/rgb_1075.png test/bedroom_0083/depth_1075.png test/bedroom_0083/filled_1075.png
+test/bedroom_0083/rgb_1076.png test/bedroom_0083/depth_1076.png test/bedroom_0083/filled_1076.png
+test/bedroom_0084/rgb_1077.png test/bedroom_0084/depth_1077.png test/bedroom_0084/filled_1077.png
+test/bedroom_0084/rgb_1078.png test/bedroom_0084/depth_1078.png test/bedroom_0084/filled_1078.png
+test/bedroom_0084/rgb_1079.png test/bedroom_0084/depth_1079.png test/bedroom_0084/filled_1079.png
+test/bedroom_0084/rgb_1080.png test/bedroom_0084/depth_1080.png test/bedroom_0084/filled_1080.png
+test/bedroom_0085/rgb_1081.png test/bedroom_0085/depth_1081.png test/bedroom_0085/filled_1081.png
+test/bedroom_0085/rgb_1082.png test/bedroom_0085/depth_1082.png test/bedroom_0085/filled_1082.png
+test/bedroom_0085/rgb_1083.png test/bedroom_0085/depth_1083.png test/bedroom_0085/filled_1083.png
+test/bedroom_0085/rgb_1084.png test/bedroom_0085/depth_1084.png test/bedroom_0085/filled_1084.png
+test/bedroom_0087/rgb_1088.png test/bedroom_0087/depth_1088.png test/bedroom_0087/filled_1088.png
+test/bedroom_0087/rgb_1089.png test/bedroom_0087/depth_1089.png test/bedroom_0087/filled_1089.png
+test/bedroom_0087/rgb_1090.png test/bedroom_0087/depth_1090.png test/bedroom_0087/filled_1090.png
+test/bedroom_0088/rgb_1091.png test/bedroom_0088/depth_1091.png test/bedroom_0088/filled_1091.png
+test/bedroom_0088/rgb_1092.png test/bedroom_0088/depth_1092.png test/bedroom_0088/filled_1092.png
+test/bedroom_0088/rgb_1093.png test/bedroom_0088/depth_1093.png test/bedroom_0088/filled_1093.png
+test/bedroom_0089/rgb_1094.png test/bedroom_0089/depth_1094.png test/bedroom_0089/filled_1094.png
+test/bedroom_0089/rgb_1095.png test/bedroom_0089/depth_1095.png test/bedroom_0089/filled_1095.png
+test/bedroom_0089/rgb_1096.png test/bedroom_0089/depth_1096.png test/bedroom_0089/filled_1096.png
+test/bedroom_0091/rgb_1098.png test/bedroom_0091/depth_1098.png test/bedroom_0091/filled_1098.png
+test/bedroom_0091/rgb_1099.png test/bedroom_0091/depth_1099.png test/bedroom_0091/filled_1099.png
+test/bedroom_0092/rgb_1100.png test/bedroom_0092/depth_1100.png test/bedroom_0092/filled_1100.png
+test/bedroom_0092/rgb_1101.png test/bedroom_0092/depth_1101.png test/bedroom_0092/filled_1101.png
+test/bedroom_0092/rgb_1102.png test/bedroom_0092/depth_1102.png test/bedroom_0092/filled_1102.png
+test/bedroom_0093/rgb_1103.png test/bedroom_0093/depth_1103.png test/bedroom_0093/filled_1103.png
+test/bedroom_0093/rgb_1104.png test/bedroom_0093/depth_1104.png test/bedroom_0093/filled_1104.png
+test/bedroom_0095/rgb_1106.png test/bedroom_0095/depth_1106.png test/bedroom_0095/filled_1106.png
+test/bedroom_0095/rgb_1107.png test/bedroom_0095/depth_1107.png test/bedroom_0095/filled_1107.png
+test/bedroom_0095/rgb_1108.png test/bedroom_0095/depth_1108.png test/bedroom_0095/filled_1108.png
+test/bedroom_0095/rgb_1109.png test/bedroom_0095/depth_1109.png test/bedroom_0095/filled_1109.png
+test/bedroom_0099/rgb_1117.png test/bedroom_0099/depth_1117.png test/bedroom_0099/filled_1117.png
+test/bedroom_0099/rgb_1118.png test/bedroom_0099/depth_1118.png test/bedroom_0099/filled_1118.png
+test/bedroom_0099/rgb_1119.png test/bedroom_0099/depth_1119.png test/bedroom_0099/filled_1119.png
+test/bedroom_0101/rgb_1123.png test/bedroom_0101/depth_1123.png test/bedroom_0101/filled_1123.png
+test/bedroom_0101/rgb_1124.png test/bedroom_0101/depth_1124.png test/bedroom_0101/filled_1124.png
+test/bedroom_0101/rgb_1125.png test/bedroom_0101/depth_1125.png test/bedroom_0101/filled_1125.png
+test/bedroom_0101/rgb_1126.png test/bedroom_0101/depth_1126.png test/bedroom_0101/filled_1126.png
+test/bedroom_0102/rgb_1127.png test/bedroom_0102/depth_1127.png test/bedroom_0102/filled_1127.png
+test/bedroom_0102/rgb_1128.png test/bedroom_0102/depth_1128.png test/bedroom_0102/filled_1128.png
+test/bedroom_0103/rgb_1129.png test/bedroom_0103/depth_1129.png test/bedroom_0103/filled_1129.png
+test/bedroom_0103/rgb_1130.png test/bedroom_0103/depth_1130.png test/bedroom_0103/filled_1130.png
+test/bedroom_0103/rgb_1131.png test/bedroom_0103/depth_1131.png test/bedroom_0103/filled_1131.png
+test/bedroom_0105/rgb_1135.png test/bedroom_0105/depth_1135.png test/bedroom_0105/filled_1135.png
+test/bedroom_0105/rgb_1136.png test/bedroom_0105/depth_1136.png test/bedroom_0105/filled_1136.png
+test/bedroom_0108/rgb_1144.png test/bedroom_0108/depth_1144.png test/bedroom_0108/filled_1144.png
+test/bedroom_0108/rgb_1145.png test/bedroom_0108/depth_1145.png test/bedroom_0108/filled_1145.png
+test/bedroom_0108/rgb_1146.png test/bedroom_0108/depth_1146.png test/bedroom_0108/filled_1146.png
+test/bedroom_0109/rgb_1147.png test/bedroom_0109/depth_1147.png test/bedroom_0109/filled_1147.png
+test/bedroom_0109/rgb_1148.png test/bedroom_0109/depth_1148.png test/bedroom_0109/filled_1148.png
+test/bedroom_0109/rgb_1149.png test/bedroom_0109/depth_1149.png test/bedroom_0109/filled_1149.png
+test/bedroom_0110/rgb_1150.png test/bedroom_0110/depth_1150.png test/bedroom_0110/filled_1150.png
+test/bedroom_0110/rgb_1151.png test/bedroom_0110/depth_1151.png test/bedroom_0110/filled_1151.png
+test/bedroom_0110/rgb_1152.png test/bedroom_0110/depth_1152.png test/bedroom_0110/filled_1152.png
+test/bedroom_0111/rgb_1153.png test/bedroom_0111/depth_1153.png test/bedroom_0111/filled_1153.png
+test/bedroom_0111/rgb_1154.png test/bedroom_0111/depth_1154.png test/bedroom_0111/filled_1154.png
+test/bedroom_0111/rgb_1155.png test/bedroom_0111/depth_1155.png test/bedroom_0111/filled_1155.png
+test/bedroom_0112/rgb_1156.png test/bedroom_0112/depth_1156.png test/bedroom_0112/filled_1156.png
+test/bedroom_0112/rgb_1157.png test/bedroom_0112/depth_1157.png test/bedroom_0112/filled_1157.png
+test/bedroom_0112/rgb_1158.png test/bedroom_0112/depth_1158.png test/bedroom_0112/filled_1158.png
+test/bedroom_0114/rgb_1162.png test/bedroom_0114/depth_1162.png test/bedroom_0114/filled_1162.png
+test/bedroom_0114/rgb_1163.png test/bedroom_0114/depth_1163.png test/bedroom_0114/filled_1163.png
+test/bedroom_0114/rgb_1164.png test/bedroom_0114/depth_1164.png test/bedroom_0114/filled_1164.png
+test/bedroom_0115/rgb_1165.png test/bedroom_0115/depth_1165.png test/bedroom_0115/filled_1165.png
+test/bedroom_0115/rgb_1166.png test/bedroom_0115/depth_1166.png test/bedroom_0115/filled_1166.png
+test/bedroom_0115/rgb_1167.png test/bedroom_0115/depth_1167.png test/bedroom_0115/filled_1167.png
+test/bedroom_0117/rgb_1170.png test/bedroom_0117/depth_1170.png test/bedroom_0117/filled_1170.png
+test/bedroom_0117/rgb_1171.png test/bedroom_0117/depth_1171.png test/bedroom_0117/filled_1171.png
+test/bedroom_0119/rgb_1174.png test/bedroom_0119/depth_1174.png test/bedroom_0119/filled_1174.png
+test/bedroom_0119/rgb_1175.png test/bedroom_0119/depth_1175.png test/bedroom_0119/filled_1175.png
+test/bedroom_0119/rgb_1176.png test/bedroom_0119/depth_1176.png test/bedroom_0119/filled_1176.png
+test/bedroom_0121/rgb_1179.png test/bedroom_0121/depth_1179.png test/bedroom_0121/filled_1179.png
+test/bedroom_0121/rgb_1180.png test/bedroom_0121/depth_1180.png test/bedroom_0121/filled_1180.png
+test/bedroom_0122/rgb_1181.png test/bedroom_0122/depth_1181.png test/bedroom_0122/filled_1181.png
+test/bedroom_0122/rgb_1182.png test/bedroom_0122/depth_1182.png test/bedroom_0122/filled_1182.png
+test/bedroom_0123/rgb_1183.png test/bedroom_0123/depth_1183.png test/bedroom_0123/filled_1183.png
+test/bedroom_0123/rgb_1184.png test/bedroom_0123/depth_1184.png test/bedroom_0123/filled_1184.png
+test/bedroom_0127/rgb_1192.png test/bedroom_0127/depth_1192.png test/bedroom_0127/filled_1192.png
+test/bedroom_0127/rgb_1193.png test/bedroom_0127/depth_1193.png test/bedroom_0127/filled_1193.png
+test/bedroom_0127/rgb_1194.png test/bedroom_0127/depth_1194.png test/bedroom_0127/filled_1194.png
+test/bedroom_0128/rgb_1195.png test/bedroom_0128/depth_1195.png test/bedroom_0128/filled_1195.png
+test/bedroom_0128/rgb_1196.png test/bedroom_0128/depth_1196.png test/bedroom_0128/filled_1196.png
+test/living_room_0025/rgb_1201.png test/living_room_0025/depth_1201.png test/living_room_0025/filled_1201.png
+test/living_room_0025/rgb_1202.png test/living_room_0025/depth_1202.png test/living_room_0025/filled_1202.png
+test/living_room_0025/rgb_1203.png test/living_room_0025/depth_1203.png test/living_room_0025/filled_1203.png
+test/living_room_0026/rgb_1204.png test/living_room_0026/depth_1204.png test/living_room_0026/filled_1204.png
+test/living_room_0026/rgb_1205.png test/living_room_0026/depth_1205.png test/living_room_0026/filled_1205.png
+test/living_room_0027/rgb_1206.png test/living_room_0027/depth_1206.png test/living_room_0027/filled_1206.png
+test/living_room_0027/rgb_1207.png test/living_room_0027/depth_1207.png test/living_room_0027/filled_1207.png
+test/living_room_0027/rgb_1208.png test/living_room_0027/depth_1208.png test/living_room_0027/filled_1208.png
+test/living_room_0028/rgb_1209.png test/living_room_0028/depth_1209.png test/living_room_0028/filled_1209.png
+test/living_room_0028/rgb_1210.png test/living_room_0028/depth_1210.png test/living_room_0028/filled_1210.png
+test/living_room_0028/rgb_1211.png test/living_room_0028/depth_1211.png test/living_room_0028/filled_1211.png
+test/living_room_0028/rgb_1212.png test/living_room_0028/depth_1212.png test/living_room_0028/filled_1212.png
+test/living_room_0030/rgb_1216.png test/living_room_0030/depth_1216.png test/living_room_0030/filled_1216.png
+test/living_room_0030/rgb_1217.png test/living_room_0030/depth_1217.png test/living_room_0030/filled_1217.png
+test/living_room_0031/rgb_1218.png test/living_room_0031/depth_1218.png test/living_room_0031/filled_1218.png
+test/living_room_0031/rgb_1219.png test/living_room_0031/depth_1219.png test/living_room_0031/filled_1219.png
+test/living_room_0031/rgb_1220.png test/living_room_0031/depth_1220.png test/living_room_0031/filled_1220.png
+test/living_room_0034/rgb_1226.png test/living_room_0034/depth_1226.png test/living_room_0034/filled_1226.png
+test/living_room_0034/rgb_1227.png test/living_room_0034/depth_1227.png test/living_room_0034/filled_1227.png
+test/living_room_0034/rgb_1228.png test/living_room_0034/depth_1228.png test/living_room_0034/filled_1228.png
+test/living_room_0034/rgb_1229.png test/living_room_0034/depth_1229.png test/living_room_0034/filled_1229.png
+test/living_room_0034/rgb_1230.png test/living_room_0034/depth_1230.png test/living_room_0034/filled_1230.png
+test/living_room_0036/rgb_1233.png test/living_room_0036/depth_1233.png test/living_room_0036/filled_1233.png
+test/living_room_0036/rgb_1234.png test/living_room_0036/depth_1234.png test/living_room_0036/filled_1234.png
+test/living_room_0036/rgb_1235.png test/living_room_0036/depth_1235.png test/living_room_0036/filled_1235.png
+test/living_room_0041/rgb_1247.png test/living_room_0041/depth_1247.png test/living_room_0041/filled_1247.png
+test/living_room_0041/rgb_1248.png test/living_room_0041/depth_1248.png test/living_room_0041/filled_1248.png
+test/living_room_0041/rgb_1249.png test/living_room_0041/depth_1249.png test/living_room_0041/filled_1249.png
+test/living_room_0041/rgb_1250.png test/living_room_0041/depth_1250.png test/living_room_0041/filled_1250.png
+test/living_room_0043/rgb_1254.png test/living_room_0043/depth_1254.png test/living_room_0043/filled_1254.png
+test/living_room_0043/rgb_1255.png test/living_room_0043/depth_1255.png test/living_room_0043/filled_1255.png
+test/living_room_0043/rgb_1256.png test/living_room_0043/depth_1256.png test/living_room_0043/filled_1256.png
+test/living_room_0043/rgb_1257.png test/living_room_0043/depth_1257.png test/living_room_0043/filled_1257.png
+test/living_room_0044/rgb_1258.png test/living_room_0044/depth_1258.png test/living_room_0044/filled_1258.png
+test/living_room_0044/rgb_1259.png test/living_room_0044/depth_1259.png test/living_room_0044/filled_1259.png
+test/living_room_0044/rgb_1260.png test/living_room_0044/depth_1260.png test/living_room_0044/filled_1260.png
+test/living_room_0044/rgb_1261.png test/living_room_0044/depth_1261.png test/living_room_0044/filled_1261.png
+test/living_room_0045/rgb_1262.png test/living_room_0045/depth_1262.png test/living_room_0045/filled_1262.png
+test/living_room_0045/rgb_1263.png test/living_room_0045/depth_1263.png test/living_room_0045/filled_1263.png
+test/living_room_0045/rgb_1264.png test/living_room_0045/depth_1264.png test/living_room_0045/filled_1264.png
+test/living_room_0045/rgb_1265.png test/living_room_0045/depth_1265.png test/living_room_0045/filled_1265.png
+test/living_room_0048/rgb_1275.png test/living_room_0048/depth_1275.png test/living_room_0048/filled_1275.png
+test/living_room_0048/rgb_1276.png test/living_room_0048/depth_1276.png test/living_room_0048/filled_1276.png
+test/living_room_0049/rgb_1277.png test/living_room_0049/depth_1277.png test/living_room_0049/filled_1277.png
+test/living_room_0049/rgb_1278.png test/living_room_0049/depth_1278.png test/living_room_0049/filled_1278.png
+test/living_room_0049/rgb_1279.png test/living_room_0049/depth_1279.png test/living_room_0049/filled_1279.png
+test/living_room_0049/rgb_1280.png test/living_room_0049/depth_1280.png test/living_room_0049/filled_1280.png
+test/living_room_0051/rgb_1285.png test/living_room_0051/depth_1285.png test/living_room_0051/filled_1285.png
+test/living_room_0051/rgb_1286.png test/living_room_0051/depth_1286.png test/living_room_0051/filled_1286.png
+test/living_room_0051/rgb_1287.png test/living_room_0051/depth_1287.png test/living_room_0051/filled_1287.png
+test/living_room_0051/rgb_1288.png test/living_room_0051/depth_1288.png test/living_room_0051/filled_1288.png
+test/living_room_0052/rgb_1289.png test/living_room_0052/depth_1289.png test/living_room_0052/filled_1289.png
+test/living_room_0052/rgb_1290.png test/living_room_0052/depth_1290.png test/living_room_0052/filled_1290.png
+test/living_room_0053/rgb_1291.png test/living_room_0053/depth_1291.png test/living_room_0053/filled_1291.png
+test/living_room_0053/rgb_1292.png test/living_room_0053/depth_1292.png test/living_room_0053/filled_1292.png
+test/living_room_0053/rgb_1293.png test/living_room_0053/depth_1293.png test/living_room_0053/filled_1293.png
+test/living_room_0054/rgb_1294.png test/living_room_0054/depth_1294.png test/living_room_0054/filled_1294.png
+test/living_room_0054/rgb_1295.png test/living_room_0054/depth_1295.png test/living_room_0054/filled_1295.png
+test/living_room_0056/rgb_1297.png test/living_room_0056/depth_1297.png test/living_room_0056/filled_1297.png
+test/living_room_0057/rgb_1298.png test/living_room_0057/depth_1298.png test/living_room_0057/filled_1298.png
+test/living_room_0057/rgb_1299.png test/living_room_0057/depth_1299.png test/living_room_0057/filled_1299.png
+test/living_room_0059/rgb_1302.png test/living_room_0059/depth_1302.png test/living_room_0059/filled_1302.png
+test/living_room_0059/rgb_1303.png test/living_room_0059/depth_1303.png test/living_room_0059/filled_1303.png
+test/living_room_0059/rgb_1304.png test/living_room_0059/depth_1304.png test/living_room_0059/filled_1304.png
+test/living_room_0059/rgb_1305.png test/living_room_0059/depth_1305.png test/living_room_0059/filled_1305.png
+test/living_room_0060/rgb_1306.png test/living_room_0060/depth_1306.png test/living_room_0060/filled_1306.png
+test/living_room_0060/rgb_1307.png test/living_room_0060/depth_1307.png test/living_room_0060/filled_1307.png
+test/living_room_0061/rgb_1308.png test/living_room_0061/depth_1308.png test/living_room_0061/filled_1308.png
+test/living_room_0064/rgb_1314.png test/living_room_0064/depth_1314.png test/living_room_0064/filled_1314.png
+test/living_room_0066/rgb_1315.png test/living_room_0066/depth_1315.png test/living_room_0066/filled_1315.png
+test/living_room_0072/rgb_1329.png test/living_room_0072/depth_1329.png test/living_room_0072/filled_1329.png
+test/living_room_0075/rgb_1330.png test/living_room_0075/depth_1330.png test/living_room_0075/filled_1330.png
+test/living_room_0075/rgb_1331.png test/living_room_0075/depth_1331.png test/living_room_0075/filled_1331.png
+test/living_room_0076/rgb_1332.png test/living_room_0076/depth_1332.png test/living_room_0076/filled_1332.png
+test/living_room_0079/rgb_1335.png test/living_room_0079/depth_1335.png test/living_room_0079/filled_1335.png
+test/living_room_0079/rgb_1336.png test/living_room_0079/depth_1336.png test/living_room_0079/filled_1336.png
+test/living_room_0079/rgb_1337.png test/living_room_0079/depth_1337.png test/living_room_0079/filled_1337.png
+test/living_room_0080/rgb_1338.png test/living_room_0080/depth_1338.png test/living_room_0080/filled_1338.png
+test/living_room_0080/rgb_1339.png test/living_room_0080/depth_1339.png test/living_room_0080/filled_1339.png
+test/living_room_0080/rgb_1340.png test/living_room_0080/depth_1340.png test/living_room_0080/filled_1340.png
+test/dining_room_0003/rgb_1347.png test/dining_room_0003/depth_1347.png test/dining_room_0003/filled_1347.png
+test/dining_room_0003/rgb_1348.png test/dining_room_0003/depth_1348.png test/dining_room_0003/filled_1348.png
+test/dining_room_0003/rgb_1349.png test/dining_room_0003/depth_1349.png test/dining_room_0003/filled_1349.png
+test/dining_room_0005/rgb_1353.png test/dining_room_0005/depth_1353.png test/dining_room_0005/filled_1353.png
+test/dining_room_0005/rgb_1354.png test/dining_room_0005/depth_1354.png test/dining_room_0005/filled_1354.png
+test/dining_room_0006/rgb_1355.png test/dining_room_0006/depth_1355.png test/dining_room_0006/filled_1355.png
+test/dining_room_0006/rgb_1356.png test/dining_room_0006/depth_1356.png test/dining_room_0006/filled_1356.png
+test/dining_room_0009/rgb_1364.png test/dining_room_0009/depth_1364.png test/dining_room_0009/filled_1364.png
+test/dining_room_0009/rgb_1365.png test/dining_room_0009/depth_1365.png test/dining_room_0009/filled_1365.png
+test/dining_room_0011/rgb_1368.png test/dining_room_0011/depth_1368.png test/dining_room_0011/filled_1368.png
+test/dining_room_0011/rgb_1369.png test/dining_room_0011/depth_1369.png test/dining_room_0011/filled_1369.png
+test/dining_room_0017/rgb_1384.png test/dining_room_0017/depth_1384.png test/dining_room_0017/filled_1384.png
+test/dining_room_0017/rgb_1385.png test/dining_room_0017/depth_1385.png test/dining_room_0017/filled_1385.png
+test/dining_room_0017/rgb_1386.png test/dining_room_0017/depth_1386.png test/dining_room_0017/filled_1386.png
+test/dining_room_0018/rgb_1387.png test/dining_room_0018/depth_1387.png test/dining_room_0018/filled_1387.png
+test/dining_room_0018/rgb_1388.png test/dining_room_0018/depth_1388.png test/dining_room_0018/filled_1388.png
+test/dining_room_0018/rgb_1389.png test/dining_room_0018/depth_1389.png test/dining_room_0018/filled_1389.png
+test/dining_room_0018/rgb_1390.png test/dining_room_0018/depth_1390.png test/dining_room_0018/filled_1390.png
+test/dining_room_0018/rgb_1391.png test/dining_room_0018/depth_1391.png test/dining_room_0018/filled_1391.png
+test/dining_room_0020/rgb_1394.png test/dining_room_0020/depth_1394.png test/dining_room_0020/filled_1394.png
+test/dining_room_0020/rgb_1395.png test/dining_room_0020/depth_1395.png test/dining_room_0020/filled_1395.png
+test/dining_room_0020/rgb_1396.png test/dining_room_0020/depth_1396.png test/dining_room_0020/filled_1396.png
+test/dining_room_0021/rgb_1397.png test/dining_room_0021/depth_1397.png test/dining_room_0021/filled_1397.png
+test/dining_room_0021/rgb_1398.png test/dining_room_0021/depth_1398.png test/dining_room_0021/filled_1398.png
+test/dining_room_0021/rgb_1399.png test/dining_room_0021/depth_1399.png test/dining_room_0021/filled_1399.png
+test/dining_room_0022/rgb_1400.png test/dining_room_0022/depth_1400.png test/dining_room_0022/filled_1400.png
+test/dining_room_0022/rgb_1401.png test/dining_room_0022/depth_1401.png test/dining_room_0022/filled_1401.png
+test/dining_room_0025/rgb_1407.png test/dining_room_0025/depth_1407.png test/dining_room_0025/filled_1407.png
+test/dining_room_0025/rgb_1408.png test/dining_room_0025/depth_1408.png test/dining_room_0025/filled_1408.png
+test/dining_room_0025/rgb_1409.png test/dining_room_0025/depth_1409.png test/dining_room_0025/filled_1409.png
+test/dining_room_0025/rgb_1410.png test/dining_room_0025/depth_1410.png test/dining_room_0025/filled_1410.png
+test/dining_room_0025/rgb_1411.png test/dining_room_0025/depth_1411.png test/dining_room_0025/filled_1411.png
+test/dining_room_0026/rgb_1412.png test/dining_room_0026/depth_1412.png test/dining_room_0026/filled_1412.png
+test/dining_room_0026/rgb_1413.png test/dining_room_0026/depth_1413.png test/dining_room_0026/filled_1413.png
+test/dining_room_0026/rgb_1414.png test/dining_room_0026/depth_1414.png test/dining_room_0026/filled_1414.png
+test/dining_room_0030/rgb_1421.png test/dining_room_0030/depth_1421.png test/dining_room_0030/filled_1421.png
+test/dining_room_0030/rgb_1422.png test/dining_room_0030/depth_1422.png test/dining_room_0030/filled_1422.png
+test/dining_room_0030/rgb_1423.png test/dining_room_0030/depth_1423.png test/dining_room_0030/filled_1423.png
+test/dining_room_0030/rgb_1424.png test/dining_room_0030/depth_1424.png test/dining_room_0030/filled_1424.png
+test/dining_room_0032/rgb_1430.png test/dining_room_0032/depth_1430.png test/dining_room_0032/filled_1430.png
+test/dining_room_0032/rgb_1431.png test/dining_room_0032/depth_1431.png test/dining_room_0032/filled_1431.png
+test/dining_room_0032/rgb_1432.png test/dining_room_0032/depth_1432.png test/dining_room_0032/filled_1432.png
+test/dining_room_0032/rgb_1433.png test/dining_room_0032/depth_1433.png test/dining_room_0032/filled_1433.png
+test/dining_room_0035/rgb_1441.png test/dining_room_0035/depth_1441.png test/dining_room_0035/filled_1441.png
+test/dining_room_0035/rgb_1442.png test/dining_room_0035/depth_1442.png test/dining_room_0035/filled_1442.png
+test/dining_room_0035/rgb_1443.png test/dining_room_0035/depth_1443.png test/dining_room_0035/filled_1443.png
+test/dining_room_0036/rgb_1444.png test/dining_room_0036/depth_1444.png test/dining_room_0036/filled_1444.png
+test/dining_room_0036/rgb_1445.png test/dining_room_0036/depth_1445.png test/dining_room_0036/filled_1445.png
+test/dining_room_0036/rgb_1446.png test/dining_room_0036/depth_1446.png test/dining_room_0036/filled_1446.png
+test/dining_room_0036/rgb_1447.png test/dining_room_0036/depth_1447.png test/dining_room_0036/filled_1447.png
+test/dining_room_0036/rgb_1448.png test/dining_room_0036/depth_1448.png test/dining_room_0036/filled_1448.png
+test/dining_room_0036/rgb_1449.png test/dining_room_0036/depth_1449.png test/dining_room_0036/filled_1449.png
\ No newline at end of file
diff --git a/Lotus/datasets/eval/depth/data_split/nyu/labeled/filename_list_train.txt b/Lotus/datasets/eval/depth/data_split/nyu/labeled/filename_list_train.txt
new file mode 100644
index 0000000000000000000000000000000000000000..fcc58846091b6b3f98822921aa58b50816272d4a
--- /dev/null
+++ b/Lotus/datasets/eval/depth/data_split/nyu/labeled/filename_list_train.txt
@@ -0,0 +1,795 @@
+train/office_0003/rgb_0003.png train/office_0003/depth_0003.png train/office_0003/filled_0003.png
+train/office_0003/rgb_0004.png train/office_0003/depth_0004.png train/office_0003/filled_0004.png
+train/office_0004/rgb_0005.png train/office_0004/depth_0005.png train/office_0004/filled_0005.png
+train/office_0004/rgb_0006.png train/office_0004/depth_0006.png train/office_0004/filled_0006.png
+train/office_0004/rgb_0007.png train/office_0004/depth_0007.png train/office_0004/filled_0007.png
+train/office_0004/rgb_0008.png train/office_0004/depth_0008.png train/office_0004/filled_0008.png
+train/office_0006/rgb_0010.png train/office_0006/depth_0010.png train/office_0006/filled_0010.png
+train/office_0006/rgb_0011.png train/office_0006/depth_0011.png train/office_0006/filled_0011.png
+train/office_0006/rgb_0012.png train/office_0006/depth_0012.png train/office_0006/filled_0012.png
+train/office_0006/rgb_0013.png train/office_0006/depth_0013.png train/office_0006/filled_0013.png
+train/office_0009/rgb_0019.png train/office_0009/depth_0019.png train/office_0009/filled_0019.png
+train/office_0009/rgb_0020.png train/office_0009/depth_0020.png train/office_0009/filled_0020.png
+train/office_0011/rgb_0022.png train/office_0011/depth_0022.png train/office_0011/filled_0022.png
+train/office_0011/rgb_0023.png train/office_0011/depth_0023.png train/office_0011/filled_0023.png
+train/office_0011/rgb_0024.png train/office_0011/depth_0024.png train/office_0011/filled_0024.png
+train/office_0011/rgb_0025.png train/office_0011/depth_0025.png train/office_0011/filled_0025.png
+train/office_0012/rgb_0026.png train/office_0012/depth_0026.png train/office_0012/filled_0026.png
+train/office_0012/rgb_0027.png train/office_0012/depth_0027.png train/office_0012/filled_0027.png
+train/bathroom_0002/rgb_0044.png train/bathroom_0002/depth_0044.png train/bathroom_0002/filled_0044.png
+train/bathroom_0002/rgb_0045.png train/bathroom_0002/depth_0045.png train/bathroom_0002/filled_0045.png
+train/bathroom_0005/rgb_0048.png train/bathroom_0005/depth_0048.png train/bathroom_0005/filled_0048.png
+train/bathroom_0006/rgb_0049.png train/bathroom_0006/depth_0049.png train/bathroom_0006/filled_0049.png
+train/living_room_0000/rgb_0050.png train/living_room_0000/depth_0050.png train/living_room_0000/filled_0050.png
+train/living_room_0000/rgb_0051.png train/living_room_0000/depth_0051.png train/living_room_0000/filled_0051.png
+train/living_room_0000/rgb_0052.png train/living_room_0000/depth_0052.png train/living_room_0000/filled_0052.png
+train/living_room_0000/rgb_0053.png train/living_room_0000/depth_0053.png train/living_room_0000/filled_0053.png
+train/living_room_0000/rgb_0054.png train/living_room_0000/depth_0054.png train/living_room_0000/filled_0054.png
+train/living_room_0000/rgb_0055.png train/living_room_0000/depth_0055.png train/living_room_0000/filled_0055.png
+train/bedroom_0012/rgb_0058.png train/bedroom_0012/depth_0058.png train/bedroom_0012/filled_0058.png
+train/bedroom_0014/rgb_0064.png train/bedroom_0014/depth_0064.png train/bedroom_0014/filled_0064.png
+train/bedroom_0014/rgb_0065.png train/bedroom_0014/depth_0065.png train/bedroom_0014/filled_0065.png
+train/bedroom_0014/rgb_0066.png train/bedroom_0014/depth_0066.png train/bedroom_0014/filled_0066.png
+train/bedroom_0015/rgb_0067.png train/bedroom_0015/depth_0067.png train/bedroom_0015/filled_0067.png
+train/bedroom_0016/rgb_0068.png train/bedroom_0016/depth_0068.png train/bedroom_0016/filled_0068.png
+train/bedroom_0016/rgb_0069.png train/bedroom_0016/depth_0069.png train/bedroom_0016/filled_0069.png
+train/bedroom_0016/rgb_0070.png train/bedroom_0016/depth_0070.png train/bedroom_0016/filled_0070.png
+train/bedroom_0016/rgb_0071.png train/bedroom_0016/depth_0071.png train/bedroom_0016/filled_0071.png
+train/bedroom_0016/rgb_0072.png train/bedroom_0016/depth_0072.png train/bedroom_0016/filled_0072.png
+train/bedroom_0017/rgb_0073.png train/bedroom_0017/depth_0073.png train/bedroom_0017/filled_0073.png
+train/bedroom_0017/rgb_0074.png train/bedroom_0017/depth_0074.png train/bedroom_0017/filled_0074.png
+train/bedroom_0017/rgb_0075.png train/bedroom_0017/depth_0075.png train/bedroom_0017/filled_0075.png
+train/bedroom_0019/rgb_0080.png train/bedroom_0019/depth_0080.png train/bedroom_0019/filled_0080.png
+train/bedroom_0019/rgb_0081.png train/bedroom_0019/depth_0081.png train/bedroom_0019/filled_0081.png
+train/bedroom_0019/rgb_0082.png train/bedroom_0019/depth_0082.png train/bedroom_0019/filled_0082.png
+train/bedroom_0019/rgb_0083.png train/bedroom_0019/depth_0083.png train/bedroom_0019/filled_0083.png
+train/bookstore_0002/rgb_0092.png train/bookstore_0002/depth_0092.png train/bookstore_0002/filled_0092.png
+train/bookstore_0002/rgb_0093.png train/bookstore_0002/depth_0093.png train/bookstore_0002/filled_0093.png
+train/bookstore_0002/rgb_0094.png train/bookstore_0002/depth_0094.png train/bookstore_0002/filled_0094.png
+train/bookstore_0002/rgb_0095.png train/bookstore_0002/depth_0095.png train/bookstore_0002/filled_0095.png
+train/bookstore_0002/rgb_0096.png train/bookstore_0002/depth_0096.png train/bookstore_0002/filled_0096.png
+train/bookstore_0002/rgb_0097.png train/bookstore_0002/depth_0097.png train/bookstore_0002/filled_0097.png
+train/bookstore_0002/rgb_0098.png train/bookstore_0002/depth_0098.png train/bookstore_0002/filled_0098.png
+train/bookstore_0002/rgb_0099.png train/bookstore_0002/depth_0099.png train/bookstore_0002/filled_0099.png
+train/bookstore_0002/rgb_0100.png train/bookstore_0002/depth_0100.png train/bookstore_0002/filled_0100.png
+train/bookstore_0002/rgb_0101.png train/bookstore_0002/depth_0101.png train/bookstore_0002/filled_0101.png
+train/bookstore_0002/rgb_0102.png train/bookstore_0002/depth_0102.png train/bookstore_0002/filled_0102.png
+train/bookstore_0002/rgb_0103.png train/bookstore_0002/depth_0103.png train/bookstore_0002/filled_0103.png
+train/bookstore_0000/rgb_0104.png train/bookstore_0000/depth_0104.png train/bookstore_0000/filled_0104.png
+train/bookstore_0000/rgb_0105.png train/bookstore_0000/depth_0105.png train/bookstore_0000/filled_0105.png
+train/bookstore_0000/rgb_0106.png train/bookstore_0000/depth_0106.png train/bookstore_0000/filled_0106.png
+train/bookstore_0000/rgb_0107.png train/bookstore_0000/depth_0107.png train/bookstore_0000/filled_0107.png
+train/bookstore_0000/rgb_0108.png train/bookstore_0000/depth_0108.png train/bookstore_0000/filled_0108.png
+train/bookstore_0000/rgb_0109.png train/bookstore_0000/depth_0109.png train/bookstore_0000/filled_0109.png
+train/bookstore_0000/rgb_0110.png train/bookstore_0000/depth_0110.png train/bookstore_0000/filled_0110.png
+train/bookstore_0000/rgb_0111.png train/bookstore_0000/depth_0111.png train/bookstore_0000/filled_0111.png
+train/bookstore_0000/rgb_0112.png train/bookstore_0000/depth_0112.png train/bookstore_0000/filled_0112.png
+train/bookstore_0000/rgb_0113.png train/bookstore_0000/depth_0113.png train/bookstore_0000/filled_0113.png
+train/bookstore_0002/rgb_0114.png train/bookstore_0002/depth_0114.png train/bookstore_0002/filled_0114.png
+train/bookstore_0002/rgb_0115.png train/bookstore_0002/depth_0115.png train/bookstore_0002/filled_0115.png
+train/bookstore_0002/rgb_0116.png train/bookstore_0002/depth_0116.png train/bookstore_0002/filled_0116.png
+train/cafe_0001/rgb_0120.png train/cafe_0001/depth_0120.png train/cafe_0001/filled_0120.png
+train/cafe_0001/rgb_0121.png train/cafe_0001/depth_0121.png train/cafe_0001/filled_0121.png
+train/cafe_0001/rgb_0122.png train/cafe_0001/depth_0122.png train/cafe_0001/filled_0122.png
+train/cafe_0001/rgb_0123.png train/cafe_0001/depth_0123.png train/cafe_0001/filled_0123.png
+train/cafe_0001/rgb_0124.png train/cafe_0001/depth_0124.png train/cafe_0001/filled_0124.png
+train/kitchen_0006/rgb_0130.png train/kitchen_0006/depth_0130.png train/kitchen_0006/filled_0130.png
+train/kitchen_0008/rgb_0135.png train/kitchen_0008/depth_0135.png train/kitchen_0008/filled_0135.png
+train/kitchen_0008/rgb_0136.png train/kitchen_0008/depth_0136.png train/kitchen_0008/filled_0136.png
+train/kitchen_0010/rgb_0138.png train/kitchen_0010/depth_0138.png train/kitchen_0010/filled_0138.png
+train/kitchen_0010/rgb_0139.png train/kitchen_0010/depth_0139.png train/kitchen_0010/filled_0139.png
+train/kitchen_0010/rgb_0140.png train/kitchen_0010/depth_0140.png train/kitchen_0010/filled_0140.png
+train/kitchen_0010/rgb_0141.png train/kitchen_0010/depth_0141.png train/kitchen_0010/filled_0141.png
+train/kitchen_0011/rgb_0142.png train/kitchen_0011/depth_0142.png train/kitchen_0011/filled_0142.png
+train/kitchen_0011/rgb_0143.png train/kitchen_0011/depth_0143.png train/kitchen_0011/filled_0143.png
+train/kitchen_0011/rgb_0144.png train/kitchen_0011/depth_0144.png train/kitchen_0011/filled_0144.png
+train/kitchen_0011/rgb_0145.png train/kitchen_0011/depth_0145.png train/kitchen_0011/filled_0145.png
+train/living_room_0004/rgb_0146.png train/living_room_0004/depth_0146.png train/living_room_0004/filled_0146.png
+train/living_room_0004/rgb_0147.png train/living_room_0004/depth_0147.png train/living_room_0004/filled_0147.png
+train/living_room_0004/rgb_0148.png train/living_room_0004/depth_0148.png train/living_room_0004/filled_0148.png
+train/living_room_0004/rgb_0149.png train/living_room_0004/depth_0149.png train/living_room_0004/filled_0149.png
+train/living_room_0004/rgb_0150.png train/living_room_0004/depth_0150.png train/living_room_0004/filled_0150.png
+train/living_room_0005/rgb_0151.png train/living_room_0005/depth_0151.png train/living_room_0005/filled_0151.png
+train/living_room_0006/rgb_0152.png train/living_room_0006/depth_0152.png train/living_room_0006/filled_0152.png
+train/living_room_0010/rgb_0156.png train/living_room_0010/depth_0156.png train/living_room_0010/filled_0156.png
+train/living_room_0010/rgb_0157.png train/living_room_0010/depth_0157.png train/living_room_0010/filled_0157.png
+train/living_room_0010/rgb_0158.png train/living_room_0010/depth_0158.png train/living_room_0010/filled_0158.png
+train/living_room_0010/rgb_0159.png train/living_room_0010/depth_0159.png train/living_room_0010/filled_0159.png
+train/living_room_0011/rgb_0160.png train/living_room_0011/depth_0160.png train/living_room_0011/filled_0160.png
+train/living_room_0011/rgb_0161.png train/living_room_0011/depth_0161.png train/living_room_0011/filled_0161.png
+train/living_room_0011/rgb_0162.png train/living_room_0011/depth_0162.png train/living_room_0011/filled_0162.png
+train/living_room_0011/rgb_0163.png train/living_room_0011/depth_0163.png train/living_room_0011/filled_0163.png
+train/living_room_0012/rgb_0164.png train/living_room_0012/depth_0164.png train/living_room_0012/filled_0164.png
+train/living_room_0012/rgb_0165.png train/living_room_0012/depth_0165.png train/living_room_0012/filled_0165.png
+train/living_room_0012/rgb_0166.png train/living_room_0012/depth_0166.png train/living_room_0012/filled_0166.png
+train/bathroom_0001/rgb_0170.png train/bathroom_0001/depth_0170.png train/bathroom_0001/filled_0170.png
+train/bedroom_0004/rgb_0177.png train/bedroom_0004/depth_0177.png train/bedroom_0004/filled_0177.png
+train/bedroom_0004/rgb_0178.png train/bedroom_0004/depth_0178.png train/bedroom_0004/filled_0178.png
+train/bedroom_0004/rgb_0179.png train/bedroom_0004/depth_0179.png train/bedroom_0004/filled_0179.png
+train/kitchen_0003/rgb_0203.png train/kitchen_0003/depth_0203.png train/kitchen_0003/filled_0203.png
+train/kitchen_0003/rgb_0204.png train/kitchen_0003/depth_0204.png train/kitchen_0003/filled_0204.png
+train/kitchen_0003/rgb_0205.png train/kitchen_0003/depth_0205.png train/kitchen_0003/filled_0205.png
+train/kitchen_0003/rgb_0206.png train/kitchen_0003/depth_0206.png train/kitchen_0003/filled_0206.png
+train/office_0000/rgb_0213.png train/office_0000/depth_0213.png train/office_0000/filled_0213.png
+train/office_0000/rgb_0214.png train/office_0000/depth_0214.png train/office_0000/filled_0214.png
+train/office_0000/rgb_0215.png train/office_0000/depth_0215.png train/office_0000/filled_0215.png
+train/office_0000/rgb_0216.png train/office_0000/depth_0216.png train/office_0000/filled_0216.png
+train/bedroom_0020/rgb_0217.png train/bedroom_0020/depth_0217.png train/bedroom_0020/filled_0217.png
+train/bedroom_0020/rgb_0218.png train/bedroom_0020/depth_0218.png train/bedroom_0020/filled_0218.png
+train/bedroom_0021/rgb_0219.png train/bedroom_0021/depth_0219.png train/bedroom_0021/filled_0219.png
+train/furniture_store_0001/rgb_0223.png train/furniture_store_0001/depth_0223.png train/furniture_store_0001/filled_0223.png
+train/furniture_store_0001/rgb_0224.png train/furniture_store_0001/depth_0224.png train/furniture_store_0001/filled_0224.png
+train/furniture_store_0001/rgb_0225.png train/furniture_store_0001/depth_0225.png train/furniture_store_0001/filled_0225.png
+train/furniture_store_0001/rgb_0226.png train/furniture_store_0001/depth_0226.png train/furniture_store_0001/filled_0226.png
+train/furniture_store_0001/rgb_0227.png train/furniture_store_0001/depth_0227.png train/furniture_store_0001/filled_0227.png
+train/furniture_store_0001/rgb_0228.png train/furniture_store_0001/depth_0228.png train/furniture_store_0001/filled_0228.png
+train/furniture_store_0001/rgb_0229.png train/furniture_store_0001/depth_0229.png train/furniture_store_0001/filled_0229.png
+train/furniture_store_0001/rgb_0230.png train/furniture_store_0001/depth_0230.png train/furniture_store_0001/filled_0230.png
+train/furniture_store_0001/rgb_0231.png train/furniture_store_0001/depth_0231.png train/furniture_store_0001/filled_0231.png
+train/furniture_store_0001/rgb_0232.png train/furniture_store_0001/depth_0232.png train/furniture_store_0001/filled_0232.png
+train/furniture_store_0001/rgb_0233.png train/furniture_store_0001/depth_0233.png train/furniture_store_0001/filled_0233.png
+train/furniture_store_0001/rgb_0234.png train/furniture_store_0001/depth_0234.png train/furniture_store_0001/filled_0234.png
+train/furniture_store_0001/rgb_0235.png train/furniture_store_0001/depth_0235.png train/furniture_store_0001/filled_0235.png
+train/furniture_store_0001/rgb_0236.png train/furniture_store_0001/depth_0236.png train/furniture_store_0001/filled_0236.png
+train/furniture_store_0001/rgb_0237.png train/furniture_store_0001/depth_0237.png train/furniture_store_0001/filled_0237.png
+train/furniture_store_0001/rgb_0238.png train/furniture_store_0001/depth_0238.png train/furniture_store_0001/filled_0238.png
+train/furniture_store_0002/rgb_0239.png train/furniture_store_0002/depth_0239.png train/furniture_store_0002/filled_0239.png
+train/furniture_store_0002/rgb_0240.png train/furniture_store_0002/depth_0240.png train/furniture_store_0002/filled_0240.png
+train/furniture_store_0002/rgb_0241.png train/furniture_store_0002/depth_0241.png train/furniture_store_0002/filled_0241.png
+train/furniture_store_0002/rgb_0242.png train/furniture_store_0002/depth_0242.png train/furniture_store_0002/filled_0242.png
+train/furniture_store_0002/rgb_0243.png train/furniture_store_0002/depth_0243.png train/furniture_store_0002/filled_0243.png
+train/furniture_store_0002/rgb_0244.png train/furniture_store_0002/depth_0244.png train/furniture_store_0002/filled_0244.png
+train/furniture_store_0002/rgb_0245.png train/furniture_store_0002/depth_0245.png train/furniture_store_0002/filled_0245.png
+train/furniture_store_0002/rgb_0246.png train/furniture_store_0002/depth_0246.png train/furniture_store_0002/filled_0246.png
+train/furniture_store_0002/rgb_0247.png train/furniture_store_0002/depth_0247.png train/furniture_store_0002/filled_0247.png
+train/furniture_store_0002/rgb_0248.png train/furniture_store_0002/depth_0248.png train/furniture_store_0002/filled_0248.png
+train/furniture_store_0002/rgb_0249.png train/furniture_store_0002/depth_0249.png train/furniture_store_0002/filled_0249.png
+train/kitchen_0016/rgb_0251.png train/kitchen_0016/depth_0251.png train/kitchen_0016/filled_0251.png
+train/kitchen_0016/rgb_0252.png train/kitchen_0016/depth_0252.png train/kitchen_0016/filled_0252.png
+train/kitchen_0017/rgb_0253.png train/kitchen_0017/depth_0253.png train/kitchen_0017/filled_0253.png
+train/kitchen_0017/rgb_0254.png train/kitchen_0017/depth_0254.png train/kitchen_0017/filled_0254.png
+train/living_room_0018/rgb_0255.png train/living_room_0018/depth_0255.png train/living_room_0018/filled_0255.png
+train/living_room_0018/rgb_0256.png train/living_room_0018/depth_0256.png train/living_room_0018/filled_0256.png
+train/living_room_0018/rgb_0257.png train/living_room_0018/depth_0257.png train/living_room_0018/filled_0257.png
+train/living_room_0019/rgb_0258.png train/living_room_0019/depth_0258.png train/living_room_0019/filled_0258.png
+train/living_room_0019/rgb_0259.png train/living_room_0019/depth_0259.png train/living_room_0019/filled_0259.png
+train/living_room_0020/rgb_0260.png train/living_room_0020/depth_0260.png train/living_room_0020/filled_0260.png
+train/living_room_0020/rgb_0261.png train/living_room_0020/depth_0261.png train/living_room_0020/filled_0261.png
+train/living_room_0020/rgb_0262.png train/living_room_0020/depth_0262.png train/living_room_0020/filled_0262.png
+train/living_room_0020/rgb_0263.png train/living_room_0020/depth_0263.png train/living_room_0020/filled_0263.png
+train/living_room_0022/rgb_0265.png train/living_room_0022/depth_0265.png train/living_room_0022/filled_0265.png
+train/living_room_0022/rgb_0266.png train/living_room_0022/depth_0266.png train/living_room_0022/filled_0266.png
+train/living_room_0022/rgb_0267.png train/living_room_0022/depth_0267.png train/living_room_0022/filled_0267.png
+train/living_room_0022/rgb_0268.png train/living_room_0022/depth_0268.png train/living_room_0022/filled_0268.png
+train/living_room_0022/rgb_0269.png train/living_room_0022/depth_0269.png train/living_room_0022/filled_0269.png
+train/living_room_0022/rgb_0270.png train/living_room_0022/depth_0270.png train/living_room_0022/filled_0270.png
+train/study_room_0004/rgb_0274.png train/study_room_0004/depth_0274.png train/study_room_0004/filled_0274.png
+train/study_room_0004/rgb_0275.png train/study_room_0004/depth_0275.png train/study_room_0004/filled_0275.png
+train/study_room_0005/rgb_0276.png train/study_room_0005/depth_0276.png train/study_room_0005/filled_0276.png
+train/study_room_0005/rgb_0277.png train/study_room_0005/depth_0277.png train/study_room_0005/filled_0277.png
+train/study_room_0005/rgb_0278.png train/study_room_0005/depth_0278.png train/study_room_0005/filled_0278.png
+train/classroom_0003/rgb_0286.png train/classroom_0003/depth_0286.png train/classroom_0003/filled_0286.png
+train/classroom_0003/rgb_0287.png train/classroom_0003/depth_0287.png train/classroom_0003/filled_0287.png
+train/classroom_0004/rgb_0288.png train/classroom_0004/depth_0288.png train/classroom_0004/filled_0288.png
+train/classroom_0004/rgb_0289.png train/classroom_0004/depth_0289.png train/classroom_0004/filled_0289.png
+train/classroom_0005/rgb_0290.png train/classroom_0005/depth_0290.png train/classroom_0005/filled_0290.png
+train/classroom_0005/rgb_0291.png train/classroom_0005/depth_0291.png train/classroom_0005/filled_0291.png
+train/classroom_0006/rgb_0292.png train/classroom_0006/depth_0292.png train/classroom_0006/filled_0292.png
+train/classroom_0006/rgb_0293.png train/classroom_0006/depth_0293.png train/classroom_0006/filled_0293.png
+train/classroom_0006/rgb_0294.png train/classroom_0006/depth_0294.png train/classroom_0006/filled_0294.png
+train/classroom_0006/rgb_0295.png train/classroom_0006/depth_0295.png train/classroom_0006/filled_0295.png
+train/classroom_0010/rgb_0303.png train/classroom_0010/depth_0303.png train/classroom_0010/filled_0303.png
+train/classroom_0010/rgb_0304.png train/classroom_0010/depth_0304.png train/classroom_0010/filled_0304.png
+train/classroom_0010/rgb_0305.png train/classroom_0010/depth_0305.png train/classroom_0010/filled_0305.png
+train/classroom_0011/rgb_0306.png train/classroom_0011/depth_0306.png train/classroom_0011/filled_0306.png
+train/classroom_0011/rgb_0307.png train/classroom_0011/depth_0307.png train/classroom_0011/filled_0307.png
+train/classroom_0012/rgb_0308.png train/classroom_0012/depth_0308.png train/classroom_0012/filled_0308.png
+train/classroom_0012/rgb_0309.png train/classroom_0012/depth_0309.png train/classroom_0012/filled_0309.png
+train/classroom_0016/rgb_0313.png train/classroom_0016/depth_0313.png train/classroom_0016/filled_0313.png
+train/classroom_0016/rgb_0314.png train/classroom_0016/depth_0314.png train/classroom_0016/filled_0314.png
+train/classroom_0018/rgb_0318.png train/classroom_0018/depth_0318.png train/classroom_0018/filled_0318.png
+train/classroom_0018/rgb_0319.png train/classroom_0018/depth_0319.png train/classroom_0018/filled_0319.png
+train/classroom_0018/rgb_0320.png train/classroom_0018/depth_0320.png train/classroom_0018/filled_0320.png
+train/classroom_0022/rgb_0321.png train/classroom_0022/depth_0321.png train/classroom_0022/filled_0321.png
+train/classroom_0022/rgb_0322.png train/classroom_0022/depth_0322.png train/classroom_0022/filled_0322.png
+train/classroom_0022/rgb_0323.png train/classroom_0022/depth_0323.png train/classroom_0022/filled_0323.png
+train/classroom_0022/rgb_0324.png train/classroom_0022/depth_0324.png train/classroom_0022/filled_0324.png
+train/computer_lab_0002/rgb_0336.png train/computer_lab_0002/depth_0336.png train/computer_lab_0002/filled_0336.png
+train/computer_lab_0002/rgb_0337.png train/computer_lab_0002/depth_0337.png train/computer_lab_0002/filled_0337.png
+train/computer_lab_0002/rgb_0338.png train/computer_lab_0002/depth_0338.png train/computer_lab_0002/filled_0338.png
+train/conference_room_0001/rgb_0339.png train/conference_room_0001/depth_0339.png train/conference_room_0001/filled_0339.png
+train/conference_room_0001/rgb_0340.png train/conference_room_0001/depth_0340.png train/conference_room_0001/filled_0340.png
+train/conference_room_0001/rgb_0341.png train/conference_room_0001/depth_0341.png train/conference_room_0001/filled_0341.png
+train/conference_room_0002/rgb_0342.png train/conference_room_0002/depth_0342.png train/conference_room_0002/filled_0342.png
+train/conference_room_0002/rgb_0343.png train/conference_room_0002/depth_0343.png train/conference_room_0002/filled_0343.png
+train/dinette_0001/rgb_0344.png train/dinette_0001/depth_0344.png train/dinette_0001/filled_0344.png
+train/dinette_0001/rgb_0345.png train/dinette_0001/depth_0345.png train/dinette_0001/filled_0345.png
+train/dinette_0001/rgb_0346.png train/dinette_0001/depth_0346.png train/dinette_0001/filled_0346.png
+train/dinette_0001/rgb_0347.png train/dinette_0001/depth_0347.png train/dinette_0001/filled_0347.png
+train/excercise_room_0001/rgb_0348.png train/excercise_room_0001/depth_0348.png train/excercise_room_0001/filled_0348.png
+train/excercise_room_0001/rgb_0349.png train/excercise_room_0001/depth_0349.png train/excercise_room_0001/filled_0349.png
+train/excercise_room_0001/rgb_0350.png train/excercise_room_0001/depth_0350.png train/excercise_room_0001/filled_0350.png
+train/foyer_0002/rgb_0353.png train/foyer_0002/depth_0353.png train/foyer_0002/filled_0353.png
+train/foyer_0002/rgb_0354.png train/foyer_0002/depth_0354.png train/foyer_0002/filled_0354.png
+train/home_office_0004/rgb_0365.png train/home_office_0004/depth_0365.png train/home_office_0004/filled_0365.png
+train/home_office_0004/rgb_0366.png train/home_office_0004/depth_0366.png train/home_office_0004/filled_0366.png
+train/home_office_0004/rgb_0367.png train/home_office_0004/depth_0367.png train/home_office_0004/filled_0367.png
+train/home_office_0005/rgb_0368.png train/home_office_0005/depth_0368.png train/home_office_0005/filled_0368.png
+train/home_office_0005/rgb_0369.png train/home_office_0005/depth_0369.png train/home_office_0005/filled_0369.png
+train/home_office_0005/rgb_0370.png train/home_office_0005/depth_0370.png train/home_office_0005/filled_0370.png
+train/home_office_0005/rgb_0371.png train/home_office_0005/depth_0371.png train/home_office_0005/filled_0371.png
+train/home_office_0006/rgb_0372.png train/home_office_0006/depth_0372.png train/home_office_0006/filled_0372.png
+train/home_office_0006/rgb_0373.png train/home_office_0006/depth_0373.png train/home_office_0006/filled_0373.png
+train/home_office_0006/rgb_0374.png train/home_office_0006/depth_0374.png train/home_office_0006/filled_0374.png
+train/home_office_0006/rgb_0375.png train/home_office_0006/depth_0375.png train/home_office_0006/filled_0375.png
+train/home_office_0006/rgb_0376.png train/home_office_0006/depth_0376.png train/home_office_0006/filled_0376.png
+train/home_office_0007/rgb_0377.png train/home_office_0007/depth_0377.png train/home_office_0007/filled_0377.png
+train/home_office_0007/rgb_0378.png train/home_office_0007/depth_0378.png train/home_office_0007/filled_0378.png
+train/home_office_0007/rgb_0379.png train/home_office_0007/depth_0379.png train/home_office_0007/filled_0379.png
+train/home_office_0008/rgb_0380.png train/home_office_0008/depth_0380.png train/home_office_0008/filled_0380.png
+train/home_office_0008/rgb_0381.png train/home_office_0008/depth_0381.png train/home_office_0008/filled_0381.png
+train/home_office_0008/rgb_0382.png train/home_office_0008/depth_0382.png train/home_office_0008/filled_0382.png
+train/home_office_0008/rgb_0383.png train/home_office_0008/depth_0383.png train/home_office_0008/filled_0383.png
+train/home_office_0011/rgb_0391.png train/home_office_0011/depth_0391.png train/home_office_0011/filled_0391.png
+train/home_office_0011/rgb_0392.png train/home_office_0011/depth_0392.png train/home_office_0011/filled_0392.png
+train/home_office_0011/rgb_0393.png train/home_office_0011/depth_0393.png train/home_office_0011/filled_0393.png
+train/home_office_0011/rgb_0394.png train/home_office_0011/depth_0394.png train/home_office_0011/filled_0394.png
+train/home_storage_0001/rgb_0398.png train/home_storage_0001/depth_0398.png train/home_storage_0001/filled_0398.png
+train/home_storage_0001/rgb_0399.png train/home_storage_0001/depth_0399.png train/home_storage_0001/filled_0399.png
+train/home_storage_0001/rgb_0400.png train/home_storage_0001/depth_0400.png train/home_storage_0001/filled_0400.png
+train/home_storage_0001/rgb_0401.png train/home_storage_0001/depth_0401.png train/home_storage_0001/filled_0401.png
+train/home_storage_0001/rgb_0402.png train/home_storage_0001/depth_0402.png train/home_storage_0001/filled_0402.png
+train/indoor_balcony_0001/rgb_0403.png train/indoor_balcony_0001/depth_0403.png train/indoor_balcony_0001/filled_0403.png
+train/indoor_balcony_0001/rgb_0404.png train/indoor_balcony_0001/depth_0404.png train/indoor_balcony_0001/filled_0404.png
+train/laundry_room_0001/rgb_0405.png train/laundry_room_0001/depth_0405.png train/laundry_room_0001/filled_0405.png
+train/laundry_room_0001/rgb_0406.png train/laundry_room_0001/depth_0406.png train/laundry_room_0001/filled_0406.png
+train/laundry_room_0001/rgb_0407.png train/laundry_room_0001/depth_0407.png train/laundry_room_0001/filled_0407.png
+train/office_kitchen_0001/rgb_0408.png train/office_kitchen_0001/depth_0408.png train/office_kitchen_0001/filled_0408.png
+train/office_kitchen_0001/rgb_0409.png train/office_kitchen_0001/depth_0409.png train/office_kitchen_0001/filled_0409.png
+train/office_kitchen_0001/rgb_0410.png train/office_kitchen_0001/depth_0410.png train/office_kitchen_0001/filled_0410.png
+train/office_kitchen_0003/rgb_0415.png train/office_kitchen_0003/depth_0415.png train/office_kitchen_0003/filled_0415.png
+train/office_kitchen_0003/rgb_0416.png train/office_kitchen_0003/depth_0416.png train/office_kitchen_0003/filled_0416.png
+train/office_kitchen_0003/rgb_0417.png train/office_kitchen_0003/depth_0417.png train/office_kitchen_0003/filled_0417.png
+train/playroom_0002/rgb_0418.png train/playroom_0002/depth_0418.png train/playroom_0002/filled_0418.png
+train/playroom_0002/rgb_0419.png train/playroom_0002/depth_0419.png train/playroom_0002/filled_0419.png
+train/playroom_0002/rgb_0420.png train/playroom_0002/depth_0420.png train/playroom_0002/filled_0420.png
+train/playroom_0003/rgb_0421.png train/playroom_0003/depth_0421.png train/playroom_0003/filled_0421.png
+train/playroom_0003/rgb_0422.png train/playroom_0003/depth_0422.png train/playroom_0003/filled_0422.png
+train/playroom_0003/rgb_0423.png train/playroom_0003/depth_0423.png train/playroom_0003/filled_0423.png
+train/playroom_0003/rgb_0424.png train/playroom_0003/depth_0424.png train/playroom_0003/filled_0424.png
+train/playroom_0003/rgb_0425.png train/playroom_0003/depth_0425.png train/playroom_0003/filled_0425.png
+train/playroom_0004/rgb_0426.png train/playroom_0004/depth_0426.png train/playroom_0004/filled_0426.png
+train/playroom_0004/rgb_0427.png train/playroom_0004/depth_0427.png train/playroom_0004/filled_0427.png
+train/playroom_0004/rgb_0428.png train/playroom_0004/depth_0428.png train/playroom_0004/filled_0428.png
+train/playroom_0004/rgb_0429.png train/playroom_0004/depth_0429.png train/playroom_0004/filled_0429.png
+train/playroom_0006/rgb_0436.png train/playroom_0006/depth_0436.png train/playroom_0006/filled_0436.png
+train/playroom_0006/rgb_0437.png train/playroom_0006/depth_0437.png train/playroom_0006/filled_0437.png
+train/playroom_0006/rgb_0438.png train/playroom_0006/depth_0438.png train/playroom_0006/filled_0438.png
+train/playroom_0006/rgb_0439.png train/playroom_0006/depth_0439.png train/playroom_0006/filled_0439.png
+train/playroom_0006/rgb_0440.png train/playroom_0006/depth_0440.png train/playroom_0006/filled_0440.png
+train/printer_room_0001/rgb_0449.png train/printer_room_0001/depth_0449.png train/printer_room_0001/filled_0449.png
+train/printer_room_0001/rgb_0450.png train/printer_room_0001/depth_0450.png train/printer_room_0001/filled_0450.png
+train/printer_room_0001/rgb_0451.png train/printer_room_0001/depth_0451.png train/printer_room_0001/filled_0451.png
+train/reception_room_0001/rgb_0452.png train/reception_room_0001/depth_0452.png train/reception_room_0001/filled_0452.png
+train/reception_room_0001/rgb_0453.png train/reception_room_0001/depth_0453.png train/reception_room_0001/filled_0453.png
+train/reception_room_0001/rgb_0454.png train/reception_room_0001/depth_0454.png train/reception_room_0001/filled_0454.png
+train/reception_room_0001/rgb_0455.png train/reception_room_0001/depth_0455.png train/reception_room_0001/filled_0455.png
+train/reception_room_0001/rgb_0456.png train/reception_room_0001/depth_0456.png train/reception_room_0001/filled_0456.png
+train/reception_room_0001/rgb_0457.png train/reception_room_0001/depth_0457.png train/reception_room_0001/filled_0457.png
+train/reception_room_0002/rgb_0458.png train/reception_room_0002/depth_0458.png train/reception_room_0002/filled_0458.png
+train/reception_room_0002/rgb_0459.png train/reception_room_0002/depth_0459.png train/reception_room_0002/filled_0459.png
+train/reception_room_0002/rgb_0460.png train/reception_room_0002/depth_0460.png train/reception_room_0002/filled_0460.png
+train/reception_room_0002/rgb_0461.png train/reception_room_0002/depth_0461.png train/reception_room_0002/filled_0461.png
+train/reception_room_0004/rgb_0467.png train/reception_room_0004/depth_0467.png train/reception_room_0004/filled_0467.png
+train/reception_room_0004/rgb_0468.png train/reception_room_0004/depth_0468.png train/reception_room_0004/filled_0468.png
+train/study_0003/rgb_0478.png train/study_0003/depth_0478.png train/study_0003/filled_0478.png
+train/study_0003/rgb_0479.png train/study_0003/depth_0479.png train/study_0003/filled_0479.png
+train/study_0003/rgb_0480.png train/study_0003/depth_0480.png train/study_0003/filled_0480.png
+train/study_0003/rgb_0481.png train/study_0003/depth_0481.png train/study_0003/filled_0481.png
+train/study_0004/rgb_0482.png train/study_0004/depth_0482.png train/study_0004/filled_0482.png
+train/study_0004/rgb_0483.png train/study_0004/depth_0483.png train/study_0004/filled_0483.png
+train/study_0004/rgb_0484.png train/study_0004/depth_0484.png train/study_0004/filled_0484.png
+train/study_0005/rgb_0485.png train/study_0005/depth_0485.png train/study_0005/filled_0485.png
+train/study_0005/rgb_0486.png train/study_0005/depth_0486.png train/study_0005/filled_0486.png
+train/study_0006/rgb_0487.png train/study_0006/depth_0487.png train/study_0006/filled_0487.png
+train/study_0006/rgb_0488.png train/study_0006/depth_0488.png train/study_0006/filled_0488.png
+train/study_0006/rgb_0489.png train/study_0006/depth_0489.png train/study_0006/filled_0489.png
+train/basement_0001/rgb_0490.png train/basement_0001/depth_0490.png train/basement_0001/filled_0490.png
+train/basement_0001/rgb_0491.png train/basement_0001/depth_0491.png train/basement_0001/filled_0491.png
+train/basement_0001/rgb_0492.png train/basement_0001/depth_0492.png train/basement_0001/filled_0492.png
+train/basement_0001/rgb_0493.png train/basement_0001/depth_0493.png train/basement_0001/filled_0493.png
+train/basement_0001/rgb_0494.png train/basement_0001/depth_0494.png train/basement_0001/filled_0494.png
+train/basement_0001/rgb_0495.png train/basement_0001/depth_0495.png train/basement_0001/filled_0495.png
+train/basement_0001/rgb_0496.png train/basement_0001/depth_0496.png train/basement_0001/filled_0496.png
+train/bathroom_0053/rgb_0497.png train/bathroom_0053/depth_0497.png train/bathroom_0053/filled_0497.png
+train/bathroom_0053/rgb_0498.png train/bathroom_0053/depth_0498.png train/bathroom_0053/filled_0498.png
+train/bathroom_0054/rgb_0499.png train/bathroom_0054/depth_0499.png train/bathroom_0054/filled_0499.png
+train/bathroom_0055/rgb_0500.png train/bathroom_0055/depth_0500.png train/bathroom_0055/filled_0500.png
+train/bathroom_0055/rgb_0501.png train/bathroom_0055/depth_0501.png train/bathroom_0055/filled_0501.png
+train/bathroom_0055/rgb_0502.png train/bathroom_0055/depth_0502.png train/bathroom_0055/filled_0502.png
+train/bathroom_0056/rgb_0503.png train/bathroom_0056/depth_0503.png train/bathroom_0056/filled_0503.png
+train/bathroom_0056/rgb_0504.png train/bathroom_0056/depth_0504.png train/bathroom_0056/filled_0504.png
+train/bathroom_0056/rgb_0505.png train/bathroom_0056/depth_0505.png train/bathroom_0056/filled_0505.png
+train/bathroom_0057/rgb_0506.png train/bathroom_0057/depth_0506.png train/bathroom_0057/filled_0506.png
+train/bathroom_0057/rgb_0507.png train/bathroom_0057/depth_0507.png train/bathroom_0057/filled_0507.png
+train/bedroom_0132/rgb_0514.png train/bedroom_0132/depth_0514.png train/bedroom_0132/filled_0514.png
+train/bedroom_0136/rgb_0527.png train/bedroom_0136/depth_0527.png train/bedroom_0136/filled_0527.png
+train/bedroom_0136/rgb_0528.png train/bedroom_0136/depth_0528.png train/bedroom_0136/filled_0528.png
+train/bedroom_0136/rgb_0529.png train/bedroom_0136/depth_0529.png train/bedroom_0136/filled_0529.png
+train/bedroom_0136/rgb_0530.png train/bedroom_0136/depth_0530.png train/bedroom_0136/filled_0530.png
+train/bedroom_0138/rgb_0534.png train/bedroom_0138/depth_0534.png train/bedroom_0138/filled_0534.png
+train/bedroom_0138/rgb_0535.png train/bedroom_0138/depth_0535.png train/bedroom_0138/filled_0535.png
+train/bedroom_0138/rgb_0536.png train/bedroom_0138/depth_0536.png train/bedroom_0138/filled_0536.png
+train/bedroom_0140/rgb_0540.png train/bedroom_0140/depth_0540.png train/bedroom_0140/filled_0540.png
+train/bedroom_0140/rgb_0541.png train/bedroom_0140/depth_0541.png train/bedroom_0140/filled_0541.png
+train/bedroom_0140/rgb_0542.png train/bedroom_0140/depth_0542.png train/bedroom_0140/filled_0542.png
+train/bedroom_0140/rgb_0543.png train/bedroom_0140/depth_0543.png train/bedroom_0140/filled_0543.png
+train/dining_room_0037/rgb_0544.png train/dining_room_0037/depth_0544.png train/dining_room_0037/filled_0544.png
+train/dining_room_0037/rgb_0545.png train/dining_room_0037/depth_0545.png train/dining_room_0037/filled_0545.png
+train/dining_room_0037/rgb_0546.png train/dining_room_0037/depth_0546.png train/dining_room_0037/filled_0546.png
+train/dining_room_0037/rgb_0547.png train/dining_room_0037/depth_0547.png train/dining_room_0037/filled_0547.png
+train/dining_room_0037/rgb_0548.png train/dining_room_0037/depth_0548.png train/dining_room_0037/filled_0548.png
+train/home_office_0013/rgb_0552.png train/home_office_0013/depth_0552.png train/home_office_0013/filled_0552.png
+train/home_office_0013/rgb_0553.png train/home_office_0013/depth_0553.png train/home_office_0013/filled_0553.png
+train/home_office_0013/rgb_0554.png train/home_office_0013/depth_0554.png train/home_office_0013/filled_0554.png
+train/kitchen_0059/rgb_0572.png train/kitchen_0059/depth_0572.png train/kitchen_0059/filled_0572.png
+train/kitchen_0059/rgb_0573.png train/kitchen_0059/depth_0573.png train/kitchen_0059/filled_0573.png
+train/kitchen_0059/rgb_0574.png train/kitchen_0059/depth_0574.png train/kitchen_0059/filled_0574.png
+train/kitchen_0060/rgb_0575.png train/kitchen_0060/depth_0575.png train/kitchen_0060/filled_0575.png
+train/kitchen_0060/rgb_0576.png train/kitchen_0060/depth_0576.png train/kitchen_0060/filled_0576.png
+train/kitchen_0060/rgb_0577.png train/kitchen_0060/depth_0577.png train/kitchen_0060/filled_0577.png
+train/kitchen_0060/rgb_0578.png train/kitchen_0060/depth_0578.png train/kitchen_0060/filled_0578.png
+train/living_room_0082/rgb_0584.png train/living_room_0082/depth_0584.png train/living_room_0082/filled_0584.png
+train/living_room_0082/rgb_0585.png train/living_room_0082/depth_0585.png train/living_room_0082/filled_0585.png
+train/living_room_0082/rgb_0586.png train/living_room_0082/depth_0586.png train/living_room_0082/filled_0586.png
+train/living_room_0082/rgb_0587.png train/living_room_0082/depth_0587.png train/living_room_0082/filled_0587.png
+train/living_room_0083/rgb_0588.png train/living_room_0083/depth_0588.png train/living_room_0083/filled_0588.png
+train/living_room_0083/rgb_0589.png train/living_room_0083/depth_0589.png train/living_room_0083/filled_0589.png
+train/living_room_0083/rgb_0590.png train/living_room_0083/depth_0590.png train/living_room_0083/filled_0590.png
+train/living_room_0085/rgb_0595.png train/living_room_0085/depth_0595.png train/living_room_0085/filled_0595.png
+train/living_room_0085/rgb_0596.png train/living_room_0085/depth_0596.png train/living_room_0085/filled_0596.png
+train/living_room_0086/rgb_0597.png train/living_room_0086/depth_0597.png train/living_room_0086/filled_0597.png
+train/living_room_0086/rgb_0598.png train/living_room_0086/depth_0598.png train/living_room_0086/filled_0598.png
+train/living_room_0086/rgb_0599.png train/living_room_0086/depth_0599.png train/living_room_0086/filled_0599.png
+train/living_room_0086/rgb_0600.png train/living_room_0086/depth_0600.png train/living_room_0086/filled_0600.png
+train/living_room_0086/rgb_0601.png train/living_room_0086/depth_0601.png train/living_room_0086/filled_0601.png
+train/living_room_0086/rgb_0602.png train/living_room_0086/depth_0602.png train/living_room_0086/filled_0602.png
+train/office_0018/rgb_0608.png train/office_0018/depth_0608.png train/office_0018/filled_0608.png
+train/office_0019/rgb_0609.png train/office_0019/depth_0609.png train/office_0019/filled_0609.png
+train/office_0019/rgb_0610.png train/office_0019/depth_0610.png train/office_0019/filled_0610.png
+train/office_0019/rgb_0611.png train/office_0019/depth_0611.png train/office_0019/filled_0611.png
+train/office_0021/rgb_0614.png train/office_0021/depth_0614.png train/office_0021/filled_0614.png
+train/office_0021/rgb_0615.png train/office_0021/depth_0615.png train/office_0021/filled_0615.png
+train/office_0021/rgb_0616.png train/office_0021/depth_0616.png train/office_0021/filled_0616.png
+train/office_0023/rgb_0622.png train/office_0023/depth_0622.png train/office_0023/filled_0622.png
+train/office_0023/rgb_0623.png train/office_0023/depth_0623.png train/office_0023/filled_0623.png
+train/office_0024/rgb_0624.png train/office_0024/depth_0624.png train/office_0024/filled_0624.png
+train/office_0024/rgb_0625.png train/office_0024/depth_0625.png train/office_0024/filled_0625.png
+train/office_0024/rgb_0626.png train/office_0024/depth_0626.png train/office_0024/filled_0626.png
+train/office_0024/rgb_0627.png train/office_0024/depth_0627.png train/office_0024/filled_0627.png
+train/office_0025/rgb_0628.png train/office_0025/depth_0628.png train/office_0025/filled_0628.png
+train/office_0025/rgb_0629.png train/office_0025/depth_0629.png train/office_0025/filled_0629.png
+train/office_0026/rgb_0630.png train/office_0026/depth_0630.png train/office_0026/filled_0630.png
+train/office_0026/rgb_0631.png train/office_0026/depth_0631.png train/office_0026/filled_0631.png
+train/office_0026/rgb_0632.png train/office_0026/depth_0632.png train/office_0026/filled_0632.png
+train/student_lounge_0001/rgb_0639.png train/student_lounge_0001/depth_0639.png train/student_lounge_0001/filled_0639.png
+train/student_lounge_0001/rgb_0640.png train/student_lounge_0001/depth_0640.png train/student_lounge_0001/filled_0640.png
+train/student_lounge_0001/rgb_0641.png train/student_lounge_0001/depth_0641.png train/student_lounge_0001/filled_0641.png
+train/student_lounge_0001/rgb_0642.png train/student_lounge_0001/depth_0642.png train/student_lounge_0001/filled_0642.png
+train/student_lounge_0001/rgb_0643.png train/student_lounge_0001/depth_0643.png train/student_lounge_0001/filled_0643.png
+train/study_0008/rgb_0646.png train/study_0008/depth_0646.png train/study_0008/filled_0646.png
+train/study_0008/rgb_0647.png train/study_0008/depth_0647.png train/study_0008/filled_0647.png
+train/bathroom_0007/rgb_0648.png train/bathroom_0007/depth_0648.png train/bathroom_0007/filled_0648.png
+train/bathroom_0007/rgb_0649.png train/bathroom_0007/depth_0649.png train/bathroom_0007/filled_0649.png
+train/bathroom_0010/rgb_0652.png train/bathroom_0010/depth_0652.png train/bathroom_0010/filled_0652.png
+train/bathroom_0010/rgb_0653.png train/bathroom_0010/depth_0653.png train/bathroom_0010/filled_0653.png
+train/bathroom_0011/rgb_0654.png train/bathroom_0011/depth_0654.png train/bathroom_0011/filled_0654.png
+train/bathroom_0011/rgb_0655.png train/bathroom_0011/depth_0655.png train/bathroom_0011/filled_0655.png
+train/bathroom_0013/rgb_0659.png train/bathroom_0013/depth_0659.png train/bathroom_0013/filled_0659.png
+train/bathroom_0013/rgb_0660.png train/bathroom_0013/depth_0660.png train/bathroom_0013/filled_0660.png
+train/bathroom_0014/rgb_0661.png train/bathroom_0014/depth_0661.png train/bathroom_0014/filled_0661.png
+train/bathroom_0014/rgb_0662.png train/bathroom_0014/depth_0662.png train/bathroom_0014/filled_0662.png
+train/bathroom_0016/rgb_0665.png train/bathroom_0016/depth_0665.png train/bathroom_0016/filled_0665.png
+train/bathroom_0016/rgb_0666.png train/bathroom_0016/depth_0666.png train/bathroom_0016/filled_0666.png
+train/bathroom_0016/rgb_0667.png train/bathroom_0016/depth_0667.png train/bathroom_0016/filled_0667.png
+train/bathroom_0019/rgb_0674.png train/bathroom_0019/depth_0674.png train/bathroom_0019/filled_0674.png
+train/bathroom_0019/rgb_0675.png train/bathroom_0019/depth_0675.png train/bathroom_0019/filled_0675.png
+train/bathroom_0023/rgb_0682.png train/bathroom_0023/depth_0682.png train/bathroom_0023/filled_0682.png
+train/bathroom_0023/rgb_0683.png train/bathroom_0023/depth_0683.png train/bathroom_0023/filled_0683.png
+train/bathroom_0024/rgb_0684.png train/bathroom_0024/depth_0684.png train/bathroom_0024/filled_0684.png
+train/bathroom_0024/rgb_0685.png train/bathroom_0024/depth_0685.png train/bathroom_0024/filled_0685.png
+train/bathroom_0028/rgb_0691.png train/bathroom_0028/depth_0691.png train/bathroom_0028/filled_0691.png
+train/bathroom_0028/rgb_0692.png train/bathroom_0028/depth_0692.png train/bathroom_0028/filled_0692.png
+train/bathroom_0030/rgb_0695.png train/bathroom_0030/depth_0695.png train/bathroom_0030/filled_0695.png
+train/bathroom_0030/rgb_0696.png train/bathroom_0030/depth_0696.png train/bathroom_0030/filled_0696.png
+train/bathroom_0033/rgb_0700.png train/bathroom_0033/depth_0700.png train/bathroom_0033/filled_0700.png
+train/bathroom_0033/rgb_0701.png train/bathroom_0033/depth_0701.png train/bathroom_0033/filled_0701.png
+train/bathroom_0034/rgb_0702.png train/bathroom_0034/depth_0702.png train/bathroom_0034/filled_0702.png
+train/bathroom_0034/rgb_0703.png train/bathroom_0034/depth_0703.png train/bathroom_0034/filled_0703.png
+train/bathroom_0034/rgb_0704.png train/bathroom_0034/depth_0704.png train/bathroom_0034/filled_0704.png
+train/bathroom_0035/rgb_0705.png train/bathroom_0035/depth_0705.png train/bathroom_0035/filled_0705.png
+train/bathroom_0039/rgb_0714.png train/bathroom_0039/depth_0714.png train/bathroom_0039/filled_0714.png
+train/bathroom_0039/rgb_0715.png train/bathroom_0039/depth_0715.png train/bathroom_0039/filled_0715.png
+train/bathroom_0039/rgb_0716.png train/bathroom_0039/depth_0716.png train/bathroom_0039/filled_0716.png
+train/bathroom_0041/rgb_0719.png train/bathroom_0041/depth_0719.png train/bathroom_0041/filled_0719.png
+train/bathroom_0041/rgb_0720.png train/bathroom_0041/depth_0720.png train/bathroom_0041/filled_0720.png
+train/bathroom_0041/rgb_0721.png train/bathroom_0041/depth_0721.png train/bathroom_0041/filled_0721.png
+train/bathroom_0042/rgb_0722.png train/bathroom_0042/depth_0722.png train/bathroom_0042/filled_0722.png
+train/bathroom_0042/rgb_0723.png train/bathroom_0042/depth_0723.png train/bathroom_0042/filled_0723.png
+train/bathroom_0045/rgb_0729.png train/bathroom_0045/depth_0729.png train/bathroom_0045/filled_0729.png
+train/bathroom_0045/rgb_0730.png train/bathroom_0045/depth_0730.png train/bathroom_0045/filled_0730.png
+train/bathroom_0048/rgb_0735.png train/bathroom_0048/depth_0735.png train/bathroom_0048/filled_0735.png
+train/bathroom_0048/rgb_0736.png train/bathroom_0048/depth_0736.png train/bathroom_0048/filled_0736.png
+train/bathroom_0049/rgb_0737.png train/bathroom_0049/depth_0737.png train/bathroom_0049/filled_0737.png
+train/bathroom_0049/rgb_0738.png train/bathroom_0049/depth_0738.png train/bathroom_0049/filled_0738.png
+train/bathroom_0050/rgb_0739.png train/bathroom_0050/depth_0739.png train/bathroom_0050/filled_0739.png
+train/bathroom_0051/rgb_0740.png train/bathroom_0051/depth_0740.png train/bathroom_0051/filled_0740.png
+train/bathroom_0051/rgb_0741.png train/bathroom_0051/depth_0741.png train/bathroom_0051/filled_0741.png
+train/bathroom_0051/rgb_0742.png train/bathroom_0051/depth_0742.png train/bathroom_0051/filled_0742.png
+train/kitchen_0019/rgb_0745.png train/kitchen_0019/depth_0745.png train/kitchen_0019/filled_0745.png
+train/kitchen_0019/rgb_0746.png train/kitchen_0019/depth_0746.png train/kitchen_0019/filled_0746.png
+train/kitchen_0019/rgb_0747.png train/kitchen_0019/depth_0747.png train/kitchen_0019/filled_0747.png
+train/kitchen_0019/rgb_0748.png train/kitchen_0019/depth_0748.png train/kitchen_0019/filled_0748.png
+train/kitchen_0019/rgb_0749.png train/kitchen_0019/depth_0749.png train/kitchen_0019/filled_0749.png
+train/kitchen_0019/rgb_0750.png train/kitchen_0019/depth_0750.png train/kitchen_0019/filled_0750.png
+train/kitchen_0019/rgb_0751.png train/kitchen_0019/depth_0751.png train/kitchen_0019/filled_0751.png
+train/kitchen_0019/rgb_0752.png train/kitchen_0019/depth_0752.png train/kitchen_0019/filled_0752.png
+train/kitchen_0019/rgb_0753.png train/kitchen_0019/depth_0753.png train/kitchen_0019/filled_0753.png
+train/kitchen_0019/rgb_0754.png train/kitchen_0019/depth_0754.png train/kitchen_0019/filled_0754.png
+train/kitchen_0019/rgb_0755.png train/kitchen_0019/depth_0755.png train/kitchen_0019/filled_0755.png
+train/kitchen_0019/rgb_0756.png train/kitchen_0019/depth_0756.png train/kitchen_0019/filled_0756.png
+train/kitchen_0019/rgb_0757.png train/kitchen_0019/depth_0757.png train/kitchen_0019/filled_0757.png
+train/kitchen_0019/rgb_0758.png train/kitchen_0019/depth_0758.png train/kitchen_0019/filled_0758.png
+train/kitchen_0028/rgb_0788.png train/kitchen_0028/depth_0788.png train/kitchen_0028/filled_0788.png
+train/kitchen_0028/rgb_0789.png train/kitchen_0028/depth_0789.png train/kitchen_0028/filled_0789.png
+train/kitchen_0028/rgb_0790.png train/kitchen_0028/depth_0790.png train/kitchen_0028/filled_0790.png
+train/kitchen_0028/rgb_0791.png train/kitchen_0028/depth_0791.png train/kitchen_0028/filled_0791.png
+train/kitchen_0028/rgb_0792.png train/kitchen_0028/depth_0792.png train/kitchen_0028/filled_0792.png
+train/kitchen_0028/rgb_0793.png train/kitchen_0028/depth_0793.png train/kitchen_0028/filled_0793.png
+train/kitchen_0028/rgb_0794.png train/kitchen_0028/depth_0794.png train/kitchen_0028/filled_0794.png
+train/kitchen_0029/rgb_0795.png train/kitchen_0029/depth_0795.png train/kitchen_0029/filled_0795.png
+train/kitchen_0029/rgb_0796.png train/kitchen_0029/depth_0796.png train/kitchen_0029/filled_0796.png
+train/kitchen_0029/rgb_0797.png train/kitchen_0029/depth_0797.png train/kitchen_0029/filled_0797.png
+train/kitchen_0029/rgb_0798.png train/kitchen_0029/depth_0798.png train/kitchen_0029/filled_0798.png
+train/kitchen_0029/rgb_0799.png train/kitchen_0029/depth_0799.png train/kitchen_0029/filled_0799.png
+train/kitchen_0031/rgb_0805.png train/kitchen_0031/depth_0805.png train/kitchen_0031/filled_0805.png
+train/kitchen_0031/rgb_0806.png train/kitchen_0031/depth_0806.png train/kitchen_0031/filled_0806.png
+train/kitchen_0031/rgb_0807.png train/kitchen_0031/depth_0807.png train/kitchen_0031/filled_0807.png
+train/kitchen_0031/rgb_0808.png train/kitchen_0031/depth_0808.png train/kitchen_0031/filled_0808.png
+train/kitchen_0031/rgb_0809.png train/kitchen_0031/depth_0809.png train/kitchen_0031/filled_0809.png
+train/kitchen_0033/rgb_0815.png train/kitchen_0033/depth_0815.png train/kitchen_0033/filled_0815.png
+train/kitchen_0033/rgb_0816.png train/kitchen_0033/depth_0816.png train/kitchen_0033/filled_0816.png
+train/kitchen_0033/rgb_0817.png train/kitchen_0033/depth_0817.png train/kitchen_0033/filled_0817.png
+train/kitchen_0033/rgb_0818.png train/kitchen_0033/depth_0818.png train/kitchen_0033/filled_0818.png
+train/kitchen_0033/rgb_0819.png train/kitchen_0033/depth_0819.png train/kitchen_0033/filled_0819.png
+train/kitchen_0033/rgb_0820.png train/kitchen_0033/depth_0820.png train/kitchen_0033/filled_0820.png
+train/kitchen_0035/rgb_0824.png train/kitchen_0035/depth_0824.png train/kitchen_0035/filled_0824.png
+train/kitchen_0035/rgb_0825.png train/kitchen_0035/depth_0825.png train/kitchen_0035/filled_0825.png
+train/kitchen_0035/rgb_0826.png train/kitchen_0035/depth_0826.png train/kitchen_0035/filled_0826.png
+train/kitchen_0035/rgb_0827.png train/kitchen_0035/depth_0827.png train/kitchen_0035/filled_0827.png
+train/kitchen_0035/rgb_0828.png train/kitchen_0035/depth_0828.png train/kitchen_0035/filled_0828.png
+train/kitchen_0035/rgb_0829.png train/kitchen_0035/depth_0829.png train/kitchen_0035/filled_0829.png
+train/kitchen_0037/rgb_0830.png train/kitchen_0037/depth_0830.png train/kitchen_0037/filled_0830.png
+train/kitchen_0037/rgb_0831.png train/kitchen_0037/depth_0831.png train/kitchen_0037/filled_0831.png
+train/kitchen_0037/rgb_0832.png train/kitchen_0037/depth_0832.png train/kitchen_0037/filled_0832.png
+train/kitchen_0041/rgb_0847.png train/kitchen_0041/depth_0847.png train/kitchen_0041/filled_0847.png
+train/kitchen_0041/rgb_0848.png train/kitchen_0041/depth_0848.png train/kitchen_0041/filled_0848.png
+train/kitchen_0041/rgb_0849.png train/kitchen_0041/depth_0849.png train/kitchen_0041/filled_0849.png
+train/kitchen_0043/rgb_0853.png train/kitchen_0043/depth_0853.png train/kitchen_0043/filled_0853.png
+train/kitchen_0043/rgb_0854.png train/kitchen_0043/depth_0854.png train/kitchen_0043/filled_0854.png
+train/kitchen_0043/rgb_0855.png train/kitchen_0043/depth_0855.png train/kitchen_0043/filled_0855.png
+train/kitchen_0043/rgb_0856.png train/kitchen_0043/depth_0856.png train/kitchen_0043/filled_0856.png
+train/kitchen_0045/rgb_0863.png train/kitchen_0045/depth_0863.png train/kitchen_0045/filled_0863.png
+train/kitchen_0045/rgb_0864.png train/kitchen_0045/depth_0864.png train/kitchen_0045/filled_0864.png
+train/kitchen_0045/rgb_0865.png train/kitchen_0045/depth_0865.png train/kitchen_0045/filled_0865.png
+train/kitchen_0045/rgb_0866.png train/kitchen_0045/depth_0866.png train/kitchen_0045/filled_0866.png
+train/kitchen_0045/rgb_0867.png train/kitchen_0045/depth_0867.png train/kitchen_0045/filled_0867.png
+train/kitchen_0045/rgb_0868.png train/kitchen_0045/depth_0868.png train/kitchen_0045/filled_0868.png
+train/kitchen_0047/rgb_0872.png train/kitchen_0047/depth_0872.png train/kitchen_0047/filled_0872.png
+train/kitchen_0047/rgb_0873.png train/kitchen_0047/depth_0873.png train/kitchen_0047/filled_0873.png
+train/kitchen_0047/rgb_0874.png train/kitchen_0047/depth_0874.png train/kitchen_0047/filled_0874.png
+train/kitchen_0047/rgb_0875.png train/kitchen_0047/depth_0875.png train/kitchen_0047/filled_0875.png
+train/kitchen_0048/rgb_0876.png train/kitchen_0048/depth_0876.png train/kitchen_0048/filled_0876.png
+train/kitchen_0048/rgb_0877.png train/kitchen_0048/depth_0877.png train/kitchen_0048/filled_0877.png
+train/kitchen_0048/rgb_0878.png train/kitchen_0048/depth_0878.png train/kitchen_0048/filled_0878.png
+train/kitchen_0048/rgb_0879.png train/kitchen_0048/depth_0879.png train/kitchen_0048/filled_0879.png
+train/kitchen_0049/rgb_0880.png train/kitchen_0049/depth_0880.png train/kitchen_0049/filled_0880.png
+train/kitchen_0049/rgb_0881.png train/kitchen_0049/depth_0881.png train/kitchen_0049/filled_0881.png
+train/kitchen_0049/rgb_0882.png train/kitchen_0049/depth_0882.png train/kitchen_0049/filled_0882.png
+train/kitchen_0049/rgb_0883.png train/kitchen_0049/depth_0883.png train/kitchen_0049/filled_0883.png
+train/kitchen_0050/rgb_0884.png train/kitchen_0050/depth_0884.png train/kitchen_0050/filled_0884.png
+train/kitchen_0050/rgb_0885.png train/kitchen_0050/depth_0885.png train/kitchen_0050/filled_0885.png
+train/kitchen_0050/rgb_0886.png train/kitchen_0050/depth_0886.png train/kitchen_0050/filled_0886.png
+train/kitchen_0050/rgb_0887.png train/kitchen_0050/depth_0887.png train/kitchen_0050/filled_0887.png
+train/kitchen_0051/rgb_0888.png train/kitchen_0051/depth_0888.png train/kitchen_0051/filled_0888.png
+train/kitchen_0051/rgb_0889.png train/kitchen_0051/depth_0889.png train/kitchen_0051/filled_0889.png
+train/kitchen_0051/rgb_0890.png train/kitchen_0051/depth_0890.png train/kitchen_0051/filled_0890.png
+train/kitchen_0051/rgb_0891.png train/kitchen_0051/depth_0891.png train/kitchen_0051/filled_0891.png
+train/kitchen_0051/rgb_0892.png train/kitchen_0051/depth_0892.png train/kitchen_0051/filled_0892.png
+train/kitchen_0051/rgb_0893.png train/kitchen_0051/depth_0893.png train/kitchen_0051/filled_0893.png
+train/kitchen_0051/rgb_0894.png train/kitchen_0051/depth_0894.png train/kitchen_0051/filled_0894.png
+train/kitchen_0052/rgb_0895.png train/kitchen_0052/depth_0895.png train/kitchen_0052/filled_0895.png
+train/kitchen_0052/rgb_0896.png train/kitchen_0052/depth_0896.png train/kitchen_0052/filled_0896.png
+train/kitchen_0052/rgb_0897.png train/kitchen_0052/depth_0897.png train/kitchen_0052/filled_0897.png
+train/kitchen_0052/rgb_0898.png train/kitchen_0052/depth_0898.png train/kitchen_0052/filled_0898.png
+train/kitchen_0052/rgb_0899.png train/kitchen_0052/depth_0899.png train/kitchen_0052/filled_0899.png
+train/kitchen_0053/rgb_0900.png train/kitchen_0053/depth_0900.png train/kitchen_0053/filled_0900.png
+train/kitchen_0053/rgb_0901.png train/kitchen_0053/depth_0901.png train/kitchen_0053/filled_0901.png
+train/kitchen_0053/rgb_0902.png train/kitchen_0053/depth_0902.png train/kitchen_0053/filled_0902.png
+train/kitchen_0053/rgb_0903.png train/kitchen_0053/depth_0903.png train/kitchen_0053/filled_0903.png
+train/kitchen_0053/rgb_0904.png train/kitchen_0053/depth_0904.png train/kitchen_0053/filled_0904.png
+train/kitchen_0053/rgb_0905.png train/kitchen_0053/depth_0905.png train/kitchen_0053/filled_0905.png
+train/bedroom_0025/rgb_0909.png train/bedroom_0025/depth_0909.png train/bedroom_0025/filled_0909.png
+train/bedroom_0025/rgb_0910.png train/bedroom_0025/depth_0910.png train/bedroom_0025/filled_0910.png
+train/bedroom_0025/rgb_0911.png train/bedroom_0025/depth_0911.png train/bedroom_0025/filled_0911.png
+train/bedroom_0025/rgb_0912.png train/bedroom_0025/depth_0912.png train/bedroom_0025/filled_0912.png
+train/bedroom_0026/rgb_0913.png train/bedroom_0026/depth_0913.png train/bedroom_0026/filled_0913.png
+train/bedroom_0026/rgb_0914.png train/bedroom_0026/depth_0914.png train/bedroom_0026/filled_0914.png
+train/bedroom_0026/rgb_0915.png train/bedroom_0026/depth_0915.png train/bedroom_0026/filled_0915.png
+train/bedroom_0026/rgb_0916.png train/bedroom_0026/depth_0916.png train/bedroom_0026/filled_0916.png
+train/bedroom_0028/rgb_0920.png train/bedroom_0028/depth_0920.png train/bedroom_0028/filled_0920.png
+train/bedroom_0028/rgb_0921.png train/bedroom_0028/depth_0921.png train/bedroom_0028/filled_0921.png
+train/bedroom_0028/rgb_0922.png train/bedroom_0028/depth_0922.png train/bedroom_0028/filled_0922.png
+train/bedroom_0029/rgb_0923.png train/bedroom_0029/depth_0923.png train/bedroom_0029/filled_0923.png
+train/bedroom_0029/rgb_0924.png train/bedroom_0029/depth_0924.png train/bedroom_0029/filled_0924.png
+train/bedroom_0029/rgb_0925.png train/bedroom_0029/depth_0925.png train/bedroom_0029/filled_0925.png
+train/bedroom_0031/rgb_0929.png train/bedroom_0031/depth_0929.png train/bedroom_0031/filled_0929.png
+train/bedroom_0031/rgb_0930.png train/bedroom_0031/depth_0930.png train/bedroom_0031/filled_0930.png
+train/bedroom_0031/rgb_0931.png train/bedroom_0031/depth_0931.png train/bedroom_0031/filled_0931.png
+train/bedroom_0033/rgb_0936.png train/bedroom_0033/depth_0936.png train/bedroom_0033/filled_0936.png
+train/bedroom_0033/rgb_0937.png train/bedroom_0033/depth_0937.png train/bedroom_0033/filled_0937.png
+train/bedroom_0034/rgb_0938.png train/bedroom_0034/depth_0938.png train/bedroom_0034/filled_0938.png
+train/bedroom_0034/rgb_0939.png train/bedroom_0034/depth_0939.png train/bedroom_0034/filled_0939.png
+train/bedroom_0034/rgb_0940.png train/bedroom_0034/depth_0940.png train/bedroom_0034/filled_0940.png
+train/bedroom_0035/rgb_0941.png train/bedroom_0035/depth_0941.png train/bedroom_0035/filled_0941.png
+train/bedroom_0035/rgb_0942.png train/bedroom_0035/depth_0942.png train/bedroom_0035/filled_0942.png
+train/bedroom_0036/rgb_0943.png train/bedroom_0036/depth_0943.png train/bedroom_0036/filled_0943.png
+train/bedroom_0036/rgb_0944.png train/bedroom_0036/depth_0944.png train/bedroom_0036/filled_0944.png
+train/bedroom_0038/rgb_0948.png train/bedroom_0038/depth_0948.png train/bedroom_0038/filled_0948.png
+train/bedroom_0038/rgb_0949.png train/bedroom_0038/depth_0949.png train/bedroom_0038/filled_0949.png
+train/bedroom_0039/rgb_0950.png train/bedroom_0039/depth_0950.png train/bedroom_0039/filled_0950.png
+train/bedroom_0039/rgb_0951.png train/bedroom_0039/depth_0951.png train/bedroom_0039/filled_0951.png
+train/bedroom_0040/rgb_0952.png train/bedroom_0040/depth_0952.png train/bedroom_0040/filled_0952.png
+train/bedroom_0040/rgb_0953.png train/bedroom_0040/depth_0953.png train/bedroom_0040/filled_0953.png
+train/bedroom_0040/rgb_0954.png train/bedroom_0040/depth_0954.png train/bedroom_0040/filled_0954.png
+train/bedroom_0041/rgb_0955.png train/bedroom_0041/depth_0955.png train/bedroom_0041/filled_0955.png
+train/bedroom_0041/rgb_0956.png train/bedroom_0041/depth_0956.png train/bedroom_0041/filled_0956.png
+train/bedroom_0041/rgb_0957.png train/bedroom_0041/depth_0957.png train/bedroom_0041/filled_0957.png
+train/bedroom_0042/rgb_0958.png train/bedroom_0042/depth_0958.png train/bedroom_0042/filled_0958.png
+train/bedroom_0045/rgb_0963.png train/bedroom_0045/depth_0963.png train/bedroom_0045/filled_0963.png
+train/bedroom_0045/rgb_0964.png train/bedroom_0045/depth_0964.png train/bedroom_0045/filled_0964.png
+train/bedroom_0047/rgb_0968.png train/bedroom_0047/depth_0968.png train/bedroom_0047/filled_0968.png
+train/bedroom_0047/rgb_0969.png train/bedroom_0047/depth_0969.png train/bedroom_0047/filled_0969.png
+train/bedroom_0050/rgb_0978.png train/bedroom_0050/depth_0978.png train/bedroom_0050/filled_0978.png
+train/bedroom_0050/rgb_0979.png train/bedroom_0050/depth_0979.png train/bedroom_0050/filled_0979.png
+train/bedroom_0050/rgb_0980.png train/bedroom_0050/depth_0980.png train/bedroom_0050/filled_0980.png
+train/bedroom_0051/rgb_0981.png train/bedroom_0051/depth_0981.png train/bedroom_0051/filled_0981.png
+train/bedroom_0051/rgb_0982.png train/bedroom_0051/depth_0982.png train/bedroom_0051/filled_0982.png
+train/bedroom_0051/rgb_0983.png train/bedroom_0051/depth_0983.png train/bedroom_0051/filled_0983.png
+train/bedroom_0051/rgb_0984.png train/bedroom_0051/depth_0984.png train/bedroom_0051/filled_0984.png
+train/bedroom_0051/rgb_0985.png train/bedroom_0051/depth_0985.png train/bedroom_0051/filled_0985.png
+train/bedroom_0052/rgb_0986.png train/bedroom_0052/depth_0986.png train/bedroom_0052/filled_0986.png
+train/bedroom_0052/rgb_0987.png train/bedroom_0052/depth_0987.png train/bedroom_0052/filled_0987.png
+train/bedroom_0052/rgb_0988.png train/bedroom_0052/depth_0988.png train/bedroom_0052/filled_0988.png
+train/bedroom_0053/rgb_0989.png train/bedroom_0053/depth_0989.png train/bedroom_0053/filled_0989.png
+train/bedroom_0053/rgb_0990.png train/bedroom_0053/depth_0990.png train/bedroom_0053/filled_0990.png
+train/bedroom_0056/rgb_0996.png train/bedroom_0056/depth_0996.png train/bedroom_0056/filled_0996.png
+train/bedroom_0056/rgb_0997.png train/bedroom_0056/depth_0997.png train/bedroom_0056/filled_0997.png
+train/bedroom_0057/rgb_0998.png train/bedroom_0057/depth_0998.png train/bedroom_0057/filled_0998.png
+train/bedroom_0057/rgb_0999.png train/bedroom_0057/depth_0999.png train/bedroom_0057/filled_0999.png
+train/bedroom_0057/rgb_1000.png train/bedroom_0057/depth_1000.png train/bedroom_0057/filled_1000.png
+train/bedroom_0059/rgb_1005.png train/bedroom_0059/depth_1005.png train/bedroom_0059/filled_1005.png
+train/bedroom_0059/rgb_1006.png train/bedroom_0059/depth_1006.png train/bedroom_0059/filled_1006.png
+train/bedroom_0059/rgb_1007.png train/bedroom_0059/depth_1007.png train/bedroom_0059/filled_1007.png
+train/bedroom_0060/rgb_1008.png train/bedroom_0060/depth_1008.png train/bedroom_0060/filled_1008.png
+train/bedroom_0060/rgb_1009.png train/bedroom_0060/depth_1009.png train/bedroom_0060/filled_1009.png
+train/bedroom_0062/rgb_1013.png train/bedroom_0062/depth_1013.png train/bedroom_0062/filled_1013.png
+train/bedroom_0062/rgb_1014.png train/bedroom_0062/depth_1014.png train/bedroom_0062/filled_1014.png
+train/bedroom_0062/rgb_1015.png train/bedroom_0062/depth_1015.png train/bedroom_0062/filled_1015.png
+train/bedroom_0062/rgb_1016.png train/bedroom_0062/depth_1016.png train/bedroom_0062/filled_1016.png
+train/bedroom_0062/rgb_1017.png train/bedroom_0062/depth_1017.png train/bedroom_0062/filled_1017.png
+train/bedroom_0063/rgb_1018.png train/bedroom_0063/depth_1018.png train/bedroom_0063/filled_1018.png
+train/bedroom_0063/rgb_1019.png train/bedroom_0063/depth_1019.png train/bedroom_0063/filled_1019.png
+train/bedroom_0063/rgb_1020.png train/bedroom_0063/depth_1020.png train/bedroom_0063/filled_1020.png
+train/bedroom_0065/rgb_1024.png train/bedroom_0065/depth_1024.png train/bedroom_0065/filled_1024.png
+train/bedroom_0065/rgb_1025.png train/bedroom_0065/depth_1025.png train/bedroom_0065/filled_1025.png
+train/bedroom_0065/rgb_1026.png train/bedroom_0065/depth_1026.png train/bedroom_0065/filled_1026.png
+train/bedroom_0066/rgb_1027.png train/bedroom_0066/depth_1027.png train/bedroom_0066/filled_1027.png
+train/bedroom_0066/rgb_1028.png train/bedroom_0066/depth_1028.png train/bedroom_0066/filled_1028.png
+train/bedroom_0067/rgb_1029.png train/bedroom_0067/depth_1029.png train/bedroom_0067/filled_1029.png
+train/bedroom_0067/rgb_1030.png train/bedroom_0067/depth_1030.png train/bedroom_0067/filled_1030.png
+train/bedroom_0067/rgb_1031.png train/bedroom_0067/depth_1031.png train/bedroom_0067/filled_1031.png
+train/bedroom_0069/rgb_1035.png train/bedroom_0069/depth_1035.png train/bedroom_0069/filled_1035.png
+train/bedroom_0069/rgb_1036.png train/bedroom_0069/depth_1036.png train/bedroom_0069/filled_1036.png
+train/bedroom_0069/rgb_1037.png train/bedroom_0069/depth_1037.png train/bedroom_0069/filled_1037.png
+train/bedroom_0071/rgb_1040.png train/bedroom_0071/depth_1040.png train/bedroom_0071/filled_1040.png
+train/bedroom_0071/rgb_1041.png train/bedroom_0071/depth_1041.png train/bedroom_0071/filled_1041.png
+train/bedroom_0071/rgb_1042.png train/bedroom_0071/depth_1042.png train/bedroom_0071/filled_1042.png
+train/bedroom_0071/rgb_1043.png train/bedroom_0071/depth_1043.png train/bedroom_0071/filled_1043.png
+train/bedroom_0072/rgb_1044.png train/bedroom_0072/depth_1044.png train/bedroom_0072/filled_1044.png
+train/bedroom_0072/rgb_1045.png train/bedroom_0072/depth_1045.png train/bedroom_0072/filled_1045.png
+train/bedroom_0072/rgb_1046.png train/bedroom_0072/depth_1046.png train/bedroom_0072/filled_1046.png
+train/bedroom_0072/rgb_1047.png train/bedroom_0072/depth_1047.png train/bedroom_0072/filled_1047.png
+train/bedroom_0074/rgb_1050.png train/bedroom_0074/depth_1050.png train/bedroom_0074/filled_1050.png
+train/bedroom_0074/rgb_1051.png train/bedroom_0074/depth_1051.png train/bedroom_0074/filled_1051.png
+train/bedroom_0076/rgb_1054.png train/bedroom_0076/depth_1054.png train/bedroom_0076/filled_1054.png
+train/bedroom_0076/rgb_1055.png train/bedroom_0076/depth_1055.png train/bedroom_0076/filled_1055.png
+train/bedroom_0076/rgb_1056.png train/bedroom_0076/depth_1056.png train/bedroom_0076/filled_1056.png
+train/bedroom_0078/rgb_1059.png train/bedroom_0078/depth_1059.png train/bedroom_0078/filled_1059.png
+train/bedroom_0078/rgb_1060.png train/bedroom_0078/depth_1060.png train/bedroom_0078/filled_1060.png
+train/bedroom_0078/rgb_1061.png train/bedroom_0078/depth_1061.png train/bedroom_0078/filled_1061.png
+train/bedroom_0079/rgb_1062.png train/bedroom_0079/depth_1062.png train/bedroom_0079/filled_1062.png
+train/bedroom_0079/rgb_1063.png train/bedroom_0079/depth_1063.png train/bedroom_0079/filled_1063.png
+train/bedroom_0079/rgb_1064.png train/bedroom_0079/depth_1064.png train/bedroom_0079/filled_1064.png
+train/bedroom_0079/rgb_1065.png train/bedroom_0079/depth_1065.png train/bedroom_0079/filled_1065.png
+train/bedroom_0080/rgb_1066.png train/bedroom_0080/depth_1066.png train/bedroom_0080/filled_1066.png
+train/bedroom_0080/rgb_1067.png train/bedroom_0080/depth_1067.png train/bedroom_0080/filled_1067.png
+train/bedroom_0080/rgb_1068.png train/bedroom_0080/depth_1068.png train/bedroom_0080/filled_1068.png
+train/bedroom_0080/rgb_1069.png train/bedroom_0080/depth_1069.png train/bedroom_0080/filled_1069.png
+train/bedroom_0081/rgb_1070.png train/bedroom_0081/depth_1070.png train/bedroom_0081/filled_1070.png
+train/bedroom_0081/rgb_1071.png train/bedroom_0081/depth_1071.png train/bedroom_0081/filled_1071.png
+train/bedroom_0081/rgb_1072.png train/bedroom_0081/depth_1072.png train/bedroom_0081/filled_1072.png
+train/bedroom_0082/rgb_1073.png train/bedroom_0082/depth_1073.png train/bedroom_0082/filled_1073.png
+train/bedroom_0082/rgb_1074.png train/bedroom_0082/depth_1074.png train/bedroom_0082/filled_1074.png
+train/bedroom_0086/rgb_1085.png train/bedroom_0086/depth_1085.png train/bedroom_0086/filled_1085.png
+train/bedroom_0086/rgb_1086.png train/bedroom_0086/depth_1086.png train/bedroom_0086/filled_1086.png
+train/bedroom_0086/rgb_1087.png train/bedroom_0086/depth_1087.png train/bedroom_0086/filled_1087.png
+train/bedroom_0090/rgb_1097.png train/bedroom_0090/depth_1097.png train/bedroom_0090/filled_1097.png
+train/bedroom_0094/rgb_1105.png train/bedroom_0094/depth_1105.png train/bedroom_0094/filled_1105.png
+train/bedroom_0096/rgb_1110.png train/bedroom_0096/depth_1110.png train/bedroom_0096/filled_1110.png
+train/bedroom_0096/rgb_1111.png train/bedroom_0096/depth_1111.png train/bedroom_0096/filled_1111.png
+train/bedroom_0096/rgb_1112.png train/bedroom_0096/depth_1112.png train/bedroom_0096/filled_1112.png
+train/bedroom_0097/rgb_1113.png train/bedroom_0097/depth_1113.png train/bedroom_0097/filled_1113.png
+train/bedroom_0097/rgb_1114.png train/bedroom_0097/depth_1114.png train/bedroom_0097/filled_1114.png
+train/bedroom_0098/rgb_1115.png train/bedroom_0098/depth_1115.png train/bedroom_0098/filled_1115.png
+train/bedroom_0098/rgb_1116.png train/bedroom_0098/depth_1116.png train/bedroom_0098/filled_1116.png
+train/bedroom_0100/rgb_1120.png train/bedroom_0100/depth_1120.png train/bedroom_0100/filled_1120.png
+train/bedroom_0100/rgb_1121.png train/bedroom_0100/depth_1121.png train/bedroom_0100/filled_1121.png
+train/bedroom_0100/rgb_1122.png train/bedroom_0100/depth_1122.png train/bedroom_0100/filled_1122.png
+train/bedroom_0104/rgb_1132.png train/bedroom_0104/depth_1132.png train/bedroom_0104/filled_1132.png
+train/bedroom_0104/rgb_1133.png train/bedroom_0104/depth_1133.png train/bedroom_0104/filled_1133.png
+train/bedroom_0104/rgb_1134.png train/bedroom_0104/depth_1134.png train/bedroom_0104/filled_1134.png
+train/bedroom_0106/rgb_1137.png train/bedroom_0106/depth_1137.png train/bedroom_0106/filled_1137.png
+train/bedroom_0106/rgb_1138.png train/bedroom_0106/depth_1138.png train/bedroom_0106/filled_1138.png
+train/bedroom_0106/rgb_1139.png train/bedroom_0106/depth_1139.png train/bedroom_0106/filled_1139.png
+train/bedroom_0106/rgb_1140.png train/bedroom_0106/depth_1140.png train/bedroom_0106/filled_1140.png
+train/bedroom_0107/rgb_1141.png train/bedroom_0107/depth_1141.png train/bedroom_0107/filled_1141.png
+train/bedroom_0107/rgb_1142.png train/bedroom_0107/depth_1142.png train/bedroom_0107/filled_1142.png
+train/bedroom_0107/rgb_1143.png train/bedroom_0107/depth_1143.png train/bedroom_0107/filled_1143.png
+train/bedroom_0113/rgb_1159.png train/bedroom_0113/depth_1159.png train/bedroom_0113/filled_1159.png
+train/bedroom_0113/rgb_1160.png train/bedroom_0113/depth_1160.png train/bedroom_0113/filled_1160.png
+train/bedroom_0113/rgb_1161.png train/bedroom_0113/depth_1161.png train/bedroom_0113/filled_1161.png
+train/bedroom_0116/rgb_1168.png train/bedroom_0116/depth_1168.png train/bedroom_0116/filled_1168.png
+train/bedroom_0116/rgb_1169.png train/bedroom_0116/depth_1169.png train/bedroom_0116/filled_1169.png
+train/bedroom_0118/rgb_1172.png train/bedroom_0118/depth_1172.png train/bedroom_0118/filled_1172.png
+train/bedroom_0118/rgb_1173.png train/bedroom_0118/depth_1173.png train/bedroom_0118/filled_1173.png
+train/bedroom_0120/rgb_1177.png train/bedroom_0120/depth_1177.png train/bedroom_0120/filled_1177.png
+train/bedroom_0120/rgb_1178.png train/bedroom_0120/depth_1178.png train/bedroom_0120/filled_1178.png
+train/bedroom_0124/rgb_1185.png train/bedroom_0124/depth_1185.png train/bedroom_0124/filled_1185.png
+train/bedroom_0124/rgb_1186.png train/bedroom_0124/depth_1186.png train/bedroom_0124/filled_1186.png
+train/bedroom_0125/rgb_1187.png train/bedroom_0125/depth_1187.png train/bedroom_0125/filled_1187.png
+train/bedroom_0125/rgb_1188.png train/bedroom_0125/depth_1188.png train/bedroom_0125/filled_1188.png
+train/bedroom_0125/rgb_1189.png train/bedroom_0125/depth_1189.png train/bedroom_0125/filled_1189.png
+train/bedroom_0126/rgb_1190.png train/bedroom_0126/depth_1190.png train/bedroom_0126/filled_1190.png
+train/bedroom_0126/rgb_1191.png train/bedroom_0126/depth_1191.png train/bedroom_0126/filled_1191.png
+train/bedroom_0129/rgb_1197.png train/bedroom_0129/depth_1197.png train/bedroom_0129/filled_1197.png
+train/bedroom_0129/rgb_1198.png train/bedroom_0129/depth_1198.png train/bedroom_0129/filled_1198.png
+train/bedroom_0130/rgb_1199.png train/bedroom_0130/depth_1199.png train/bedroom_0130/filled_1199.png
+train/bedroom_0130/rgb_1200.png train/bedroom_0130/depth_1200.png train/bedroom_0130/filled_1200.png
+train/living_room_0029/rgb_1213.png train/living_room_0029/depth_1213.png train/living_room_0029/filled_1213.png
+train/living_room_0029/rgb_1214.png train/living_room_0029/depth_1214.png train/living_room_0029/filled_1214.png
+train/living_room_0029/rgb_1215.png train/living_room_0029/depth_1215.png train/living_room_0029/filled_1215.png
+train/living_room_0032/rgb_1221.png train/living_room_0032/depth_1221.png train/living_room_0032/filled_1221.png
+train/living_room_0032/rgb_1222.png train/living_room_0032/depth_1222.png train/living_room_0032/filled_1222.png
+train/living_room_0032/rgb_1223.png train/living_room_0032/depth_1223.png train/living_room_0032/filled_1223.png
+train/living_room_0033/rgb_1224.png train/living_room_0033/depth_1224.png train/living_room_0033/filled_1224.png
+train/living_room_0033/rgb_1225.png train/living_room_0033/depth_1225.png train/living_room_0033/filled_1225.png
+train/living_room_0035/rgb_1231.png train/living_room_0035/depth_1231.png train/living_room_0035/filled_1231.png
+train/living_room_0035/rgb_1232.png train/living_room_0035/depth_1232.png train/living_room_0035/filled_1232.png
+train/living_room_0037/rgb_1236.png train/living_room_0037/depth_1236.png train/living_room_0037/filled_1236.png
+train/living_room_0037/rgb_1237.png train/living_room_0037/depth_1237.png train/living_room_0037/filled_1237.png
+train/living_room_0038/rgb_1238.png train/living_room_0038/depth_1238.png train/living_room_0038/filled_1238.png
+train/living_room_0038/rgb_1239.png train/living_room_0038/depth_1239.png train/living_room_0038/filled_1239.png
+train/living_room_0038/rgb_1240.png train/living_room_0038/depth_1240.png train/living_room_0038/filled_1240.png
+train/living_room_0039/rgb_1241.png train/living_room_0039/depth_1241.png train/living_room_0039/filled_1241.png
+train/living_room_0039/rgb_1242.png train/living_room_0039/depth_1242.png train/living_room_0039/filled_1242.png
+train/living_room_0039/rgb_1243.png train/living_room_0039/depth_1243.png train/living_room_0039/filled_1243.png
+train/living_room_0040/rgb_1244.png train/living_room_0040/depth_1244.png train/living_room_0040/filled_1244.png
+train/living_room_0040/rgb_1245.png train/living_room_0040/depth_1245.png train/living_room_0040/filled_1245.png
+train/living_room_0040/rgb_1246.png train/living_room_0040/depth_1246.png train/living_room_0040/filled_1246.png
+train/living_room_0042/rgb_1251.png train/living_room_0042/depth_1251.png train/living_room_0042/filled_1251.png
+train/living_room_0042/rgb_1252.png train/living_room_0042/depth_1252.png train/living_room_0042/filled_1252.png
+train/living_room_0042/rgb_1253.png train/living_room_0042/depth_1253.png train/living_room_0042/filled_1253.png
+train/living_room_0046/rgb_1266.png train/living_room_0046/depth_1266.png train/living_room_0046/filled_1266.png
+train/living_room_0046/rgb_1267.png train/living_room_0046/depth_1267.png train/living_room_0046/filled_1267.png
+train/living_room_0046/rgb_1268.png train/living_room_0046/depth_1268.png train/living_room_0046/filled_1268.png
+train/living_room_0046/rgb_1269.png train/living_room_0046/depth_1269.png train/living_room_0046/filled_1269.png
+train/living_room_0046/rgb_1270.png train/living_room_0046/depth_1270.png train/living_room_0046/filled_1270.png
+train/living_room_0047/rgb_1271.png train/living_room_0047/depth_1271.png train/living_room_0047/filled_1271.png
+train/living_room_0047/rgb_1272.png train/living_room_0047/depth_1272.png train/living_room_0047/filled_1272.png
+train/living_room_0047/rgb_1273.png train/living_room_0047/depth_1273.png train/living_room_0047/filled_1273.png
+train/living_room_0047/rgb_1274.png train/living_room_0047/depth_1274.png train/living_room_0047/filled_1274.png
+train/living_room_0050/rgb_1281.png train/living_room_0050/depth_1281.png train/living_room_0050/filled_1281.png
+train/living_room_0050/rgb_1282.png train/living_room_0050/depth_1282.png train/living_room_0050/filled_1282.png
+train/living_room_0050/rgb_1283.png train/living_room_0050/depth_1283.png train/living_room_0050/filled_1283.png
+train/living_room_0050/rgb_1284.png train/living_room_0050/depth_1284.png train/living_room_0050/filled_1284.png
+train/living_room_0055/rgb_1296.png train/living_room_0055/depth_1296.png train/living_room_0055/filled_1296.png
+train/living_room_0058/rgb_1300.png train/living_room_0058/depth_1300.png train/living_room_0058/filled_1300.png
+train/living_room_0058/rgb_1301.png train/living_room_0058/depth_1301.png train/living_room_0058/filled_1301.png
+train/living_room_0062/rgb_1309.png train/living_room_0062/depth_1309.png train/living_room_0062/filled_1309.png
+train/living_room_0062/rgb_1310.png train/living_room_0062/depth_1310.png train/living_room_0062/filled_1310.png
+train/living_room_0062/rgb_1311.png train/living_room_0062/depth_1311.png train/living_room_0062/filled_1311.png
+train/living_room_0063/rgb_1312.png train/living_room_0063/depth_1312.png train/living_room_0063/filled_1312.png
+train/living_room_0063/rgb_1313.png train/living_room_0063/depth_1313.png train/living_room_0063/filled_1313.png
+train/living_room_0067/rgb_1316.png train/living_room_0067/depth_1316.png train/living_room_0067/filled_1316.png
+train/living_room_0068/rgb_1317.png train/living_room_0068/depth_1317.png train/living_room_0068/filled_1317.png
+train/living_room_0068/rgb_1318.png train/living_room_0068/depth_1318.png train/living_room_0068/filled_1318.png
+train/living_room_0068/rgb_1319.png train/living_room_0068/depth_1319.png train/living_room_0068/filled_1319.png
+train/living_room_0069/rgb_1320.png train/living_room_0069/depth_1320.png train/living_room_0069/filled_1320.png
+train/living_room_0069/rgb_1321.png train/living_room_0069/depth_1321.png train/living_room_0069/filled_1321.png
+train/living_room_0069/rgb_1322.png train/living_room_0069/depth_1322.png train/living_room_0069/filled_1322.png
+train/living_room_0069/rgb_1323.png train/living_room_0069/depth_1323.png train/living_room_0069/filled_1323.png
+train/living_room_0070/rgb_1324.png train/living_room_0070/depth_1324.png train/living_room_0070/filled_1324.png
+train/living_room_0070/rgb_1325.png train/living_room_0070/depth_1325.png train/living_room_0070/filled_1325.png
+train/living_room_0070/rgb_1326.png train/living_room_0070/depth_1326.png train/living_room_0070/filled_1326.png
+train/living_room_0071/rgb_1327.png train/living_room_0071/depth_1327.png train/living_room_0071/filled_1327.png
+train/living_room_0071/rgb_1328.png train/living_room_0071/depth_1328.png train/living_room_0071/filled_1328.png
+train/living_room_0078/rgb_1333.png train/living_room_0078/depth_1333.png train/living_room_0078/filled_1333.png
+train/living_room_0078/rgb_1334.png train/living_room_0078/depth_1334.png train/living_room_0078/filled_1334.png
+train/dining_room_0001/rgb_1341.png train/dining_room_0001/depth_1341.png train/dining_room_0001/filled_1341.png
+train/dining_room_0001/rgb_1342.png train/dining_room_0001/depth_1342.png train/dining_room_0001/filled_1342.png
+train/dining_room_0001/rgb_1343.png train/dining_room_0001/depth_1343.png train/dining_room_0001/filled_1343.png
+train/dining_room_0001/rgb_1344.png train/dining_room_0001/depth_1344.png train/dining_room_0001/filled_1344.png
+train/dining_room_0001/rgb_1345.png train/dining_room_0001/depth_1345.png train/dining_room_0001/filled_1345.png
+train/dining_room_0002/rgb_1346.png train/dining_room_0002/depth_1346.png train/dining_room_0002/filled_1346.png
+train/dining_room_0004/rgb_1350.png train/dining_room_0004/depth_1350.png train/dining_room_0004/filled_1350.png
+train/dining_room_0004/rgb_1351.png train/dining_room_0004/depth_1351.png train/dining_room_0004/filled_1351.png
+train/dining_room_0004/rgb_1352.png train/dining_room_0004/depth_1352.png train/dining_room_0004/filled_1352.png
+train/dining_room_0007/rgb_1357.png train/dining_room_0007/depth_1357.png train/dining_room_0007/filled_1357.png
+train/dining_room_0007/rgb_1358.png train/dining_room_0007/depth_1358.png train/dining_room_0007/filled_1358.png
+train/dining_room_0007/rgb_1359.png train/dining_room_0007/depth_1359.png train/dining_room_0007/filled_1359.png
+train/dining_room_0007/rgb_1360.png train/dining_room_0007/depth_1360.png train/dining_room_0007/filled_1360.png
+train/dining_room_0008/rgb_1361.png train/dining_room_0008/depth_1361.png train/dining_room_0008/filled_1361.png
+train/dining_room_0008/rgb_1362.png train/dining_room_0008/depth_1362.png train/dining_room_0008/filled_1362.png
+train/dining_room_0008/rgb_1363.png train/dining_room_0008/depth_1363.png train/dining_room_0008/filled_1363.png
+train/dining_room_0010/rgb_1366.png train/dining_room_0010/depth_1366.png train/dining_room_0010/filled_1366.png
+train/dining_room_0010/rgb_1367.png train/dining_room_0010/depth_1367.png train/dining_room_0010/filled_1367.png
+train/dining_room_0012/rgb_1370.png train/dining_room_0012/depth_1370.png train/dining_room_0012/filled_1370.png
+train/dining_room_0012/rgb_1371.png train/dining_room_0012/depth_1371.png train/dining_room_0012/filled_1371.png
+train/dining_room_0013/rgb_1372.png train/dining_room_0013/depth_1372.png train/dining_room_0013/filled_1372.png
+train/dining_room_0013/rgb_1373.png train/dining_room_0013/depth_1373.png train/dining_room_0013/filled_1373.png
+train/dining_room_0013/rgb_1374.png train/dining_room_0013/depth_1374.png train/dining_room_0013/filled_1374.png
+train/dining_room_0013/rgb_1375.png train/dining_room_0013/depth_1375.png train/dining_room_0013/filled_1375.png
+train/dining_room_0014/rgb_1376.png train/dining_room_0014/depth_1376.png train/dining_room_0014/filled_1376.png
+train/dining_room_0014/rgb_1377.png train/dining_room_0014/depth_1377.png train/dining_room_0014/filled_1377.png
+train/dining_room_0015/rgb_1378.png train/dining_room_0015/depth_1378.png train/dining_room_0015/filled_1378.png
+train/dining_room_0015/rgb_1379.png train/dining_room_0015/depth_1379.png train/dining_room_0015/filled_1379.png
+train/dining_room_0015/rgb_1380.png train/dining_room_0015/depth_1380.png train/dining_room_0015/filled_1380.png
+train/dining_room_0015/rgb_1381.png train/dining_room_0015/depth_1381.png train/dining_room_0015/filled_1381.png
+train/dining_room_0016/rgb_1382.png train/dining_room_0016/depth_1382.png train/dining_room_0016/filled_1382.png
+train/dining_room_0016/rgb_1383.png train/dining_room_0016/depth_1383.png train/dining_room_0016/filled_1383.png
+train/dining_room_0019/rgb_1392.png train/dining_room_0019/depth_1392.png train/dining_room_0019/filled_1392.png
+train/dining_room_0019/rgb_1393.png train/dining_room_0019/depth_1393.png train/dining_room_0019/filled_1393.png
+train/dining_room_0023/rgb_1402.png train/dining_room_0023/depth_1402.png train/dining_room_0023/filled_1402.png
+train/dining_room_0023/rgb_1403.png train/dining_room_0023/depth_1403.png train/dining_room_0023/filled_1403.png
+train/dining_room_0024/rgb_1404.png train/dining_room_0024/depth_1404.png train/dining_room_0024/filled_1404.png
+train/dining_room_0024/rgb_1405.png train/dining_room_0024/depth_1405.png train/dining_room_0024/filled_1405.png
+train/dining_room_0024/rgb_1406.png train/dining_room_0024/depth_1406.png train/dining_room_0024/filled_1406.png
+train/dining_room_0028/rgb_1415.png train/dining_room_0028/depth_1415.png train/dining_room_0028/filled_1415.png
+train/dining_room_0028/rgb_1416.png train/dining_room_0028/depth_1416.png train/dining_room_0028/filled_1416.png
+train/dining_room_0029/rgb_1417.png train/dining_room_0029/depth_1417.png train/dining_room_0029/filled_1417.png
+train/dining_room_0029/rgb_1418.png train/dining_room_0029/depth_1418.png train/dining_room_0029/filled_1418.png
+train/dining_room_0029/rgb_1419.png train/dining_room_0029/depth_1419.png train/dining_room_0029/filled_1419.png
+train/dining_room_0029/rgb_1420.png train/dining_room_0029/depth_1420.png train/dining_room_0029/filled_1420.png
+train/dining_room_0031/rgb_1425.png train/dining_room_0031/depth_1425.png train/dining_room_0031/filled_1425.png
+train/dining_room_0031/rgb_1426.png train/dining_room_0031/depth_1426.png train/dining_room_0031/filled_1426.png
+train/dining_room_0031/rgb_1427.png train/dining_room_0031/depth_1427.png train/dining_room_0031/filled_1427.png
+train/dining_room_0031/rgb_1428.png train/dining_room_0031/depth_1428.png train/dining_room_0031/filled_1428.png
+train/dining_room_0031/rgb_1429.png train/dining_room_0031/depth_1429.png train/dining_room_0031/filled_1429.png
+train/dining_room_0033/rgb_1434.png train/dining_room_0033/depth_1434.png train/dining_room_0033/filled_1434.png
+train/dining_room_0033/rgb_1435.png train/dining_room_0033/depth_1435.png train/dining_room_0033/filled_1435.png
+train/dining_room_0033/rgb_1436.png train/dining_room_0033/depth_1436.png train/dining_room_0033/filled_1436.png
+train/dining_room_0034/rgb_1437.png train/dining_room_0034/depth_1437.png train/dining_room_0034/filled_1437.png
+train/dining_room_0034/rgb_1438.png train/dining_room_0034/depth_1438.png train/dining_room_0034/filled_1438.png
+train/dining_room_0034/rgb_1439.png train/dining_room_0034/depth_1439.png train/dining_room_0034/filled_1439.png
+train/dining_room_0034/rgb_1440.png train/dining_room_0034/depth_1440.png train/dining_room_0034/filled_1440.png
\ No newline at end of file
diff --git a/Lotus/datasets/eval/depth/data_split/scannet/scannet_val_sampled_list_800_1.txt b/Lotus/datasets/eval/depth/data_split/scannet/scannet_val_sampled_list_800_1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b220dcdf98f7543922a5ca5ca226952a5e5b5b3f
--- /dev/null
+++ b/Lotus/datasets/eval/depth/data_split/scannet/scannet_val_sampled_list_800_1.txt
@@ -0,0 +1,800 @@
+scene0406_02/color/000300.jpg scene0406_02/depth/000300.png
+scene0088_02/color/001100.jpg scene0088_02/depth/001100.png
+scene0645_02/color/000800.jpg scene0645_02/depth/000800.png
+scene0084_00/color/001900.jpg scene0084_00/depth/001900.png
+scene0648_01/color/001300.jpg scene0648_01/depth/001300.png
+scene0629_02/color/001300.jpg scene0629_02/depth/001300.png
+scene0686_02/color/000500.jpg scene0686_02/depth/000500.png
+scene0616_00/color/000700.jpg scene0616_00/depth/000700.png
+scene0598_00/color/000300.jpg scene0598_00/depth/000300.png
+scene0084_00/color/001300.jpg scene0084_00/depth/001300.png
+scene0644_00/color/001300.jpg scene0644_00/depth/001300.png
+scene0222_00/color/003000.jpg scene0222_00/depth/003000.png
+scene0697_02/color/000700.jpg scene0697_02/depth/000700.png
+scene0342_00/color/000500.jpg scene0342_00/depth/000500.png
+scene0050_02/color/002700.jpg scene0050_02/depth/002700.png
+scene0277_00/color/000700.jpg scene0277_00/depth/000700.png
+scene0580_00/color/000200.jpg scene0580_00/depth/000200.png
+scene0653_00/color/000700.jpg scene0653_00/depth/000700.png
+scene0222_00/color/005400.jpg scene0222_00/depth/005400.png
+scene0568_02/color/000400.jpg scene0568_02/depth/000400.png
+scene0207_02/color/000500.jpg scene0207_02/depth/000500.png
+scene0435_01/color/001800.jpg scene0435_01/depth/001800.png
+scene0633_00/color/001400.jpg scene0633_00/depth/001400.png
+scene0050_00/color/000800.jpg scene0050_00/depth/000800.png
+scene0050_01/color/000100.jpg scene0050_01/depth/000100.png
+scene0644_00/color/000100.jpg scene0644_00/depth/000100.png
+scene0645_01/color/002500.jpg scene0645_01/depth/002500.png
+scene0575_02/color/001600.jpg scene0575_02/depth/001600.png
+scene0187_00/color/002100.jpg scene0187_00/depth/002100.png
+scene0207_01/color/000200.jpg scene0207_01/depth/000200.png
+scene0458_01/color/000500.jpg scene0458_01/depth/000500.png
+scene0685_00/color/000400.jpg scene0685_00/depth/000400.png
+scene0423_02/color/000100.jpg scene0423_02/depth/000100.png
+scene0695_00/color/000400.jpg scene0695_00/depth/000400.png
+scene0653_00/color/003200.jpg scene0653_00/depth/003200.png
+scene0644_00/color/001000.jpg scene0644_00/depth/001000.png
+scene0663_00/color/001200.jpg scene0663_00/depth/001200.png
+scene0430_01/color/001500.jpg scene0430_01/depth/001500.png
+scene0146_01/color/000100.jpg scene0146_01/depth/000100.png
+scene0616_00/color/000100.jpg scene0616_00/depth/000100.png
+scene0217_00/color/000700.jpg scene0217_00/depth/000700.png
+scene0629_02/color/001100.jpg scene0629_02/depth/001100.png
+scene0700_00/color/000400.jpg scene0700_00/depth/000400.png
+scene0011_00/color/001900.jpg scene0011_00/depth/001900.png
+scene0685_01/color/000900.jpg scene0685_01/depth/000900.png
+scene0378_01/color/002000.jpg scene0378_01/depth/002000.png
+scene0607_00/color/000000.jpg scene0607_00/depth/000000.png
+scene0700_00/color/004100.jpg scene0700_00/depth/004100.png
+scene0011_01/color/001000.jpg scene0011_01/depth/001000.png
+scene0046_01/color/002300.jpg scene0046_01/depth/002300.png
+scene0131_01/color/000600.jpg scene0131_01/depth/000600.png
+scene0011_00/color/000000.jpg scene0011_00/depth/000000.png
+scene0645_02/color/000900.jpg scene0645_02/depth/000900.png
+scene0231_02/color/001400.jpg scene0231_02/depth/001400.png
+scene0575_00/color/002900.jpg scene0575_00/depth/002900.png
+scene0046_00/color/001800.jpg scene0046_00/depth/001800.png
+scene0693_01/color/000500.jpg scene0693_01/depth/000500.png
+scene0187_00/color/002200.jpg scene0187_00/depth/002200.png
+scene0500_00/color/000000.jpg scene0500_00/depth/000000.png
+scene0693_01/color/000600.jpg scene0693_01/depth/000600.png
+scene0144_01/color/000800.jpg scene0144_01/depth/000800.png
+scene0663_01/color/001400.jpg scene0663_01/depth/001400.png
+scene0100_00/color/000200.jpg scene0100_00/depth/000200.png
+scene0616_01/color/002700.jpg scene0616_01/depth/002700.png
+scene0575_02/color/002600.jpg scene0575_02/depth/002600.png
+scene0086_02/color/001100.jpg scene0086_02/depth/001100.png
+scene0653_01/color/003500.jpg scene0653_01/depth/003500.png
+scene0095_00/color/001400.jpg scene0095_00/depth/001400.png
+scene0559_02/color/000000.jpg scene0559_02/depth/000000.png
+scene0629_00/color/000000.jpg scene0629_00/depth/000000.png
+scene0435_00/color/001300.jpg scene0435_00/depth/001300.png
+scene0435_01/color/001700.jpg scene0435_01/depth/001700.png
+scene0606_01/color/000600.jpg scene0606_01/depth/000600.png
+scene0203_00/color/000900.jpg scene0203_00/depth/000900.png
+scene0435_00/color/002800.jpg scene0435_00/depth/002800.png
+scene0598_02/color/000700.jpg scene0598_02/depth/000700.png
+scene0606_01/color/002100.jpg scene0606_01/depth/002100.png
+scene0019_01/color/000200.jpg scene0019_01/depth/000200.png
+scene0700_00/color/002700.jpg scene0700_00/depth/002700.png
+scene0663_01/color/002100.jpg scene0663_01/depth/002100.png
+scene0474_05/color/003000.jpg scene0474_05/depth/003000.png
+scene0700_00/color/001500.jpg scene0700_00/depth/001500.png
+scene0050_00/color/001800.jpg scene0050_00/depth/001800.png
+scene0458_00/color/000700.jpg scene0458_00/depth/000700.png
+scene0077_00/color/000600.jpg scene0077_00/depth/000600.png
+scene0221_01/color/000700.jpg scene0221_01/depth/000700.png
+scene0222_01/color/003500.jpg scene0222_01/depth/003500.png
+scene0575_01/color/003000.jpg scene0575_01/depth/003000.png
+scene0591_01/color/000600.jpg scene0591_01/depth/000600.png
+scene0704_00/color/000500.jpg scene0704_00/depth/000500.png
+scene0169_00/color/001000.jpg scene0169_00/depth/001000.png
+scene0329_02/color/000200.jpg scene0329_02/depth/000200.png
+scene0696_00/color/001000.jpg scene0696_00/depth/001000.png
+scene0663_01/color/000600.jpg scene0663_01/depth/000600.png
+scene0701_00/color/000300.jpg scene0701_00/depth/000300.png
+scene0695_02/color/000000.jpg scene0695_02/depth/000000.png
+scene0389_00/color/000300.jpg scene0389_00/depth/000300.png
+scene0095_01/color/000600.jpg scene0095_01/depth/000600.png
+scene0046_02/color/001900.jpg scene0046_02/depth/001900.png
+scene0609_00/color/000600.jpg scene0609_00/depth/000600.png
+scene0351_01/color/000600.jpg scene0351_01/depth/000600.png
+scene0616_00/color/000400.jpg scene0616_00/depth/000400.png
+scene0608_00/color/002200.jpg scene0608_00/depth/002200.png
+scene0686_00/color/001200.jpg scene0686_00/depth/001200.png
+scene0700_01/color/001000.jpg scene0700_01/depth/001000.png
+scene0164_03/color/000500.jpg scene0164_03/depth/000500.png
+scene0621_00/color/002400.jpg scene0621_00/depth/002400.png
+scene0207_02/color/000600.jpg scene0207_02/depth/000600.png
+scene0578_00/color/000800.jpg scene0578_00/depth/000800.png
+scene0025_01/color/001100.jpg scene0025_01/depth/001100.png
+scene0353_00/color/002600.jpg scene0353_00/depth/002600.png
+scene0629_00/color/000900.jpg scene0629_00/depth/000900.png
+scene0427_00/color/000200.jpg scene0427_00/depth/000200.png
+scene0430_00/color/002300.jpg scene0430_00/depth/002300.png
+scene0222_01/color/002400.jpg scene0222_01/depth/002400.png
+scene0164_00/color/000000.jpg scene0164_00/depth/000000.png
+scene0355_00/color/000300.jpg scene0355_00/depth/000300.png
+scene0435_01/color/000800.jpg scene0435_01/depth/000800.png
+scene0423_00/color/000200.jpg scene0423_00/depth/000200.png
+scene0050_02/color/002300.jpg scene0050_02/depth/002300.png
+scene0695_03/color/000400.jpg scene0695_03/depth/000400.png
+scene0462_00/color/000200.jpg scene0462_00/depth/000200.png
+scene0549_00/color/000600.jpg scene0549_00/depth/000600.png
+scene0050_00/color/002400.jpg scene0050_00/depth/002400.png
+scene0187_01/color/001600.jpg scene0187_01/depth/001600.png
+scene0693_00/color/001200.jpg scene0693_00/depth/001200.png
+scene0568_00/color/000900.jpg scene0568_00/depth/000900.png
+scene0246_00/color/002200.jpg scene0246_00/depth/002200.png
+scene0606_02/color/002300.jpg scene0606_02/depth/002300.png
+scene0307_00/color/001200.jpg scene0307_00/depth/001200.png
+scene0608_02/color/000700.jpg scene0608_02/depth/000700.png
+scene0574_00/color/000100.jpg scene0574_00/depth/000100.png
+scene0696_02/color/000500.jpg scene0696_02/depth/000500.png
+scene0606_00/color/000700.jpg scene0606_00/depth/000700.png
+scene0695_02/color/000900.jpg scene0695_02/depth/000900.png
+scene0203_02/color/001000.jpg scene0203_02/depth/001000.png
+scene0693_02/color/000600.jpg scene0693_02/depth/000600.png
+scene0249_00/color/000500.jpg scene0249_00/depth/000500.png
+scene0697_01/color/000800.jpg scene0697_01/depth/000800.png
+scene0146_02/color/001000.jpg scene0146_02/depth/001000.png
+scene0663_01/color/001000.jpg scene0663_01/depth/001000.png
+scene0426_00/color/000300.jpg scene0426_00/depth/000300.png
+scene0146_01/color/000000.jpg scene0146_01/depth/000000.png
+scene0583_01/color/000700.jpg scene0583_01/depth/000700.png
+scene0494_00/color/000600.jpg scene0494_00/depth/000600.png
+scene0608_00/color/001700.jpg scene0608_00/depth/001700.png
+scene0025_01/color/001600.jpg scene0025_01/depth/001600.png
+scene0553_02/color/000000.jpg scene0553_02/depth/000000.png
+scene0088_03/color/000100.jpg scene0088_03/depth/000100.png
+scene0357_00/color/000300.jpg scene0357_00/depth/000300.png
+scene0088_02/color/001600.jpg scene0088_02/depth/001600.png
+scene0474_03/color/000500.jpg scene0474_03/depth/000500.png
+scene0430_01/color/000700.jpg scene0430_01/depth/000700.png
+scene0430_00/color/002200.jpg scene0430_00/depth/002200.png
+scene0645_01/color/004000.jpg scene0645_01/depth/004000.png
+scene0616_00/color/001900.jpg scene0616_00/depth/001900.png
+scene0575_00/color/001500.jpg scene0575_00/depth/001500.png
+scene0382_00/color/000000.jpg scene0382_00/depth/000000.png
+scene0474_01/color/001500.jpg scene0474_01/depth/001500.png
+scene0629_01/color/002000.jpg scene0629_01/depth/002000.png
+scene0144_00/color/000300.jpg scene0144_00/depth/000300.png
+scene0663_00/color/002900.jpg scene0663_00/depth/002900.png
+scene0678_02/color/001200.jpg scene0678_02/depth/001200.png
+scene0664_02/color/001100.jpg scene0664_02/depth/001100.png
+scene0678_02/color/000000.jpg scene0678_02/depth/000000.png
+scene0699_00/color/002000.jpg scene0699_00/depth/002000.png
+scene0655_01/color/000600.jpg scene0655_01/depth/000600.png
+scene0088_02/color/001300.jpg scene0088_02/depth/001300.png
+scene0435_03/color/000200.jpg scene0435_03/depth/000200.png
+scene0591_02/color/002000.jpg scene0591_02/depth/002000.png
+scene0357_01/color/000200.jpg scene0357_01/depth/000200.png
+scene0435_00/color/002100.jpg scene0435_00/depth/002100.png
+scene0025_01/color/001400.jpg scene0025_01/depth/001400.png
+scene0353_00/color/000300.jpg scene0353_00/depth/000300.png
+scene0527_00/color/000000.jpg scene0527_00/depth/000000.png
+scene0606_01/color/002200.jpg scene0606_01/depth/002200.png
+scene0609_02/color/000900.jpg scene0609_02/depth/000900.png
+scene0702_02/color/000000.jpg scene0702_02/depth/000000.png
+scene0580_01/color/003100.jpg scene0580_01/depth/003100.png
+scene0663_01/color/001600.jpg scene0663_01/depth/001600.png
+scene0221_01/color/000300.jpg scene0221_01/depth/000300.png
+scene0015_00/color/001900.jpg scene0015_00/depth/001900.png
+scene0382_01/color/000600.jpg scene0382_01/depth/000600.png
+scene0621_00/color/000800.jpg scene0621_00/depth/000800.png
+scene0535_00/color/000100.jpg scene0535_00/depth/000100.png
+scene0378_00/color/000300.jpg scene0378_00/depth/000300.png
+scene0575_00/color/000500.jpg scene0575_00/depth/000500.png
+scene0187_00/color/000000.jpg scene0187_00/depth/000000.png
+scene0307_00/color/000500.jpg scene0307_00/depth/000500.png
+scene0011_01/color/000000.jpg scene0011_01/depth/000000.png
+scene0249_00/color/000000.jpg scene0249_00/depth/000000.png
+scene0356_00/color/000800.jpg scene0356_00/depth/000800.png
+scene0426_02/color/000900.jpg scene0426_02/depth/000900.png
+scene0697_03/color/002000.jpg scene0697_03/depth/002000.png
+scene0100_02/color/000000.jpg scene0100_02/depth/000000.png
+scene0695_03/color/001200.jpg scene0695_03/depth/001200.png
+scene0338_01/color/000000.jpg scene0338_01/depth/000000.png
+scene0088_02/color/000100.jpg scene0088_02/depth/000100.png
+scene0606_00/color/000600.jpg scene0606_00/depth/000600.png
+scene0598_00/color/000500.jpg scene0598_00/depth/000500.png
+scene0382_01/color/000800.jpg scene0382_01/depth/000800.png
+scene0580_01/color/000900.jpg scene0580_01/depth/000900.png
+scene0231_02/color/001800.jpg scene0231_02/depth/001800.png
+scene0196_00/color/001000.jpg scene0196_00/depth/001000.png
+scene0334_00/color/000100.jpg scene0334_00/depth/000100.png
+scene0474_03/color/000700.jpg scene0474_03/depth/000700.png
+scene0591_02/color/001600.jpg scene0591_02/depth/001600.png
+scene0578_00/color/000300.jpg scene0578_00/depth/000300.png
+scene0695_03/color/002300.jpg scene0695_03/depth/002300.png
+scene0695_02/color/000200.jpg scene0695_02/depth/000200.png
+scene0645_02/color/002500.jpg scene0645_02/depth/002500.png
+scene0144_00/color/001000.jpg scene0144_00/depth/001000.png
+scene0574_02/color/000100.jpg scene0574_02/depth/000100.png
+scene0580_01/color/003300.jpg scene0580_01/depth/003300.png
+scene0304_00/color/001600.jpg scene0304_00/depth/001600.png
+scene0377_02/color/000700.jpg scene0377_02/depth/000700.png
+scene0663_01/color/001100.jpg scene0663_01/depth/001100.png
+scene0353_02/color/000800.jpg scene0353_02/depth/000800.png
+scene0701_01/color/000500.jpg scene0701_01/depth/000500.png
+scene0355_00/color/000700.jpg scene0355_00/depth/000700.png
+scene0665_00/color/000400.jpg scene0665_00/depth/000400.png
+scene0665_00/color/000100.jpg scene0665_00/depth/000100.png
+scene0277_00/color/000900.jpg scene0277_00/depth/000900.png
+scene0329_00/color/000000.jpg scene0329_00/depth/000000.png
+scene0231_00/color/001200.jpg scene0231_00/depth/001200.png
+scene0307_02/color/000100.jpg scene0307_02/depth/000100.png
+scene0558_02/color/000800.jpg scene0558_02/depth/000800.png
+scene0474_01/color/000000.jpg scene0474_01/depth/000000.png
+scene0685_01/color/000700.jpg scene0685_01/depth/000700.png
+scene0100_01/color/000600.jpg scene0100_01/depth/000600.png
+scene0685_00/color/000200.jpg scene0685_00/depth/000200.png
+scene0580_01/color/002200.jpg scene0580_01/depth/002200.png
+scene0430_00/color/001500.jpg scene0430_00/depth/001500.png
+scene0606_01/color/002600.jpg scene0606_01/depth/002600.png
+scene0580_00/color/004700.jpg scene0580_00/depth/004700.png
+scene0474_04/color/000800.jpg scene0474_04/depth/000800.png
+scene0015_00/color/000200.jpg scene0015_00/depth/000200.png
+scene0046_02/color/001400.jpg scene0046_02/depth/001400.png
+scene0426_01/color/000800.jpg scene0426_01/depth/000800.png
+scene0256_02/color/000900.jpg scene0256_02/depth/000900.png
+scene0580_01/color/002700.jpg scene0580_01/depth/002700.png
+scene0353_02/color/001300.jpg scene0353_02/depth/001300.png
+scene0427_00/color/000900.jpg scene0427_00/depth/000900.png
+scene0595_00/color/000600.jpg scene0595_00/depth/000600.png
+scene0608_01/color/001900.jpg scene0608_01/depth/001900.png
+scene0643_00/color/001800.jpg scene0643_00/depth/001800.png
+scene0629_00/color/001600.jpg scene0629_00/depth/001600.png
+scene0608_00/color/002000.jpg scene0608_00/depth/002000.png
+scene0629_02/color/001400.jpg scene0629_02/depth/001400.png
+scene0697_03/color/000400.jpg scene0697_03/depth/000400.png
+scene0207_00/color/000600.jpg scene0207_00/depth/000600.png
+scene0652_00/color/001000.jpg scene0652_00/depth/001000.png
+scene0011_00/color/001200.jpg scene0011_00/depth/001200.png
+scene0583_00/color/000600.jpg scene0583_00/depth/000600.png
+scene0050_02/color/000000.jpg scene0050_02/depth/000000.png
+scene0304_00/color/001300.jpg scene0304_00/depth/001300.png
+scene0100_01/color/000700.jpg scene0100_01/depth/000700.png
+scene0574_00/color/000600.jpg scene0574_00/depth/000600.png
+scene0231_00/color/000100.jpg scene0231_00/depth/000100.png
+scene0256_02/color/000600.jpg scene0256_02/depth/000600.png
+scene0518_00/color/000200.jpg scene0518_00/depth/000200.png
+scene0412_00/color/000800.jpg scene0412_00/depth/000800.png
+scene0207_00/color/000900.jpg scene0207_00/depth/000900.png
+scene0663_00/color/000100.jpg scene0663_00/depth/000100.png
+scene0645_01/color/003700.jpg scene0645_01/depth/003700.png
+scene0246_00/color/000900.jpg scene0246_00/depth/000900.png
+scene0088_03/color/000200.jpg scene0088_03/depth/000200.png
+scene0149_00/color/000900.jpg scene0149_00/depth/000900.png
+scene0458_00/color/000000.jpg scene0458_00/depth/000000.png
+scene0084_02/color/000300.jpg scene0084_02/depth/000300.png
+scene0553_01/color/000600.jpg scene0553_01/depth/000600.png
+scene0474_01/color/000500.jpg scene0474_01/depth/000500.png
+scene0149_00/color/000700.jpg scene0149_00/depth/000700.png
+scene0256_01/color/001000.jpg scene0256_01/depth/001000.png
+scene0196_00/color/001100.jpg scene0196_00/depth/001100.png
+scene0461_00/color/000300.jpg scene0461_00/depth/000300.png
+scene0334_02/color/001000.jpg scene0334_02/depth/001000.png
+scene0426_00/color/000900.jpg scene0426_00/depth/000900.png
+scene0435_00/color/002000.jpg scene0435_00/depth/002000.png
+scene0607_01/color/000200.jpg scene0607_01/depth/000200.png
+scene0222_00/color/002200.jpg scene0222_00/depth/002200.png
+scene0621_00/color/000300.jpg scene0621_00/depth/000300.png
+scene0377_01/color/000700.jpg scene0377_01/depth/000700.png
+scene0015_00/color/001200.jpg scene0015_00/depth/001200.png
+scene0697_00/color/000500.jpg scene0697_00/depth/000500.png
+scene0591_02/color/000700.jpg scene0591_02/depth/000700.png
+scene0474_02/color/001100.jpg scene0474_02/depth/001100.png
+scene0518_00/color/001400.jpg scene0518_00/depth/001400.png
+scene0559_02/color/000300.jpg scene0559_02/depth/000300.png
+scene0685_01/color/000300.jpg scene0685_01/depth/000300.png
+scene0568_02/color/001200.jpg scene0568_02/depth/001200.png
+scene0695_02/color/000300.jpg scene0695_02/depth/000300.png
+scene0231_02/color/000800.jpg scene0231_02/depth/000800.png
+scene0050_00/color/003200.jpg scene0050_00/depth/003200.png
+scene0700_00/color/001600.jpg scene0700_00/depth/001600.png
+scene0599_02/color/002100.jpg scene0599_02/depth/002100.png
+scene0591_01/color/001500.jpg scene0591_01/depth/001500.png
+scene0648_01/color/000700.jpg scene0648_01/depth/000700.png
+scene0063_00/color/000300.jpg scene0063_00/depth/000300.png
+scene0406_00/color/000600.jpg scene0406_00/depth/000600.png
+scene0046_01/color/000000.jpg scene0046_01/depth/000000.png
+scene0329_00/color/000500.jpg scene0329_00/depth/000500.png
+scene0222_00/color/002100.jpg scene0222_00/depth/002100.png
+scene0580_01/color/000300.jpg scene0580_01/depth/000300.png
+scene0169_00/color/000000.jpg scene0169_00/depth/000000.png
+scene0690_00/color/000700.jpg scene0690_00/depth/000700.png
+scene0618_00/color/000000.jpg scene0618_00/depth/000000.png
+scene0621_00/color/001000.jpg scene0621_00/depth/001000.png
+scene0697_01/color/001000.jpg scene0697_01/depth/001000.png
+scene0696_01/color/001500.jpg scene0696_01/depth/001500.png
+scene0030_01/color/000200.jpg scene0030_01/depth/000200.png
+scene0435_03/color/001000.jpg scene0435_03/depth/001000.png
+scene0699_00/color/001500.jpg scene0699_00/depth/001500.png
+scene0046_02/color/002500.jpg scene0046_02/depth/002500.png
+scene0618_00/color/000800.jpg scene0618_00/depth/000800.png
+scene0025_01/color/000100.jpg scene0025_01/depth/000100.png
+scene0700_01/color/001500.jpg scene0700_01/depth/001500.png
+scene0652_00/color/000100.jpg scene0652_00/depth/000100.png
+scene0356_00/color/001100.jpg scene0356_00/depth/001100.png
+scene0652_00/color/000300.jpg scene0652_00/depth/000300.png
+scene0277_00/color/000300.jpg scene0277_00/depth/000300.png
+scene0527_00/color/000400.jpg scene0527_00/depth/000400.png
+scene0671_00/color/000400.jpg scene0671_00/depth/000400.png
+scene0663_02/color/002300.jpg scene0663_02/depth/002300.png
+scene0700_00/color/003100.jpg scene0700_00/depth/003100.png
+scene0355_00/color/000400.jpg scene0355_00/depth/000400.png
+scene0187_00/color/000600.jpg scene0187_00/depth/000600.png
+scene0599_01/color/000300.jpg scene0599_01/depth/000300.png
+scene0458_01/color/001100.jpg scene0458_01/depth/001100.png
+scene0435_02/color/000800.jpg scene0435_02/depth/000800.png
+scene0050_02/color/000900.jpg scene0050_02/depth/000900.png
+scene0015_00/color/000000.jpg scene0015_00/depth/000000.png
+scene0670_00/color/002300.jpg scene0670_00/depth/002300.png
+scene0474_04/color/000700.jpg scene0474_04/depth/000700.png
+scene0426_01/color/000700.jpg scene0426_01/depth/000700.png
+scene0550_00/color/001500.jpg scene0550_00/depth/001500.png
+scene0222_01/color/002000.jpg scene0222_01/depth/002000.png
+scene0653_01/color/000500.jpg scene0653_01/depth/000500.png
+scene0699_00/color/002100.jpg scene0699_00/depth/002100.png
+scene0575_01/color/001900.jpg scene0575_01/depth/001900.png
+scene0653_01/color/001900.jpg scene0653_01/depth/001900.png
+scene0575_02/color/000400.jpg scene0575_02/depth/000400.png
+scene0568_00/color/001100.jpg scene0568_00/depth/001100.png
+scene0580_01/color/000800.jpg scene0580_01/depth/000800.png
+scene0616_01/color/003000.jpg scene0616_01/depth/003000.png
+scene0222_00/color/000500.jpg scene0222_00/depth/000500.png
+scene0648_01/color/000500.jpg scene0648_01/depth/000500.png
+scene0583_01/color/001200.jpg scene0583_01/depth/001200.png
+scene0351_01/color/000700.jpg scene0351_01/depth/000700.png
+scene0583_02/color/000500.jpg scene0583_02/depth/000500.png
+scene0222_00/color/001800.jpg scene0222_00/depth/001800.png
+scene0307_01/color/001500.jpg scene0307_01/depth/001500.png
+scene0678_00/color/000800.jpg scene0678_00/depth/000800.png
+scene0430_01/color/000500.jpg scene0430_01/depth/000500.png
+scene0164_01/color/000200.jpg scene0164_01/depth/000200.png
+scene0608_01/color/001600.jpg scene0608_01/depth/001600.png
+scene0427_00/color/000000.jpg scene0427_00/depth/000000.png
+scene0488_00/color/000200.jpg scene0488_00/depth/000200.png
+scene0559_02/color/000100.jpg scene0559_02/depth/000100.png
+scene0686_02/color/000000.jpg scene0686_02/depth/000000.png
+scene0458_00/color/000400.jpg scene0458_00/depth/000400.png
+scene0086_00/color/000600.jpg scene0086_00/depth/000600.png
+scene0050_02/color/000100.jpg scene0050_02/depth/000100.png
+scene0011_01/color/000200.jpg scene0011_01/depth/000200.png
+scene0552_01/color/000000.jpg scene0552_01/depth/000000.png
+scene0606_01/color/000200.jpg scene0606_01/depth/000200.png
+scene0257_00/color/000500.jpg scene0257_00/depth/000500.png
+scene0518_00/color/000500.jpg scene0518_00/depth/000500.png
+scene0378_00/color/001400.jpg scene0378_00/depth/001400.png
+scene0644_00/color/001200.jpg scene0644_00/depth/001200.png
+scene0686_00/color/000800.jpg scene0686_00/depth/000800.png
+scene0697_03/color/001800.jpg scene0697_03/depth/001800.png
+scene0406_02/color/000600.jpg scene0406_02/depth/000600.png
+scene0697_02/color/000500.jpg scene0697_02/depth/000500.png
+scene0608_00/color/000600.jpg scene0608_00/depth/000600.png
+scene0695_01/color/002000.jpg scene0695_01/depth/002000.png
+scene0222_00/color/003900.jpg scene0222_00/depth/003900.png
+scene0378_00/color/000800.jpg scene0378_00/depth/000800.png
+scene0697_03/color/000600.jpg scene0697_03/depth/000600.png
+scene0353_00/color/001500.jpg scene0353_00/depth/001500.png
+scene0558_02/color/000000.jpg scene0558_02/depth/000000.png
+scene0300_00/color/001700.jpg scene0300_00/depth/001700.png
+scene0663_01/color/001300.jpg scene0663_01/depth/001300.png
+scene0616_00/color/001600.jpg scene0616_00/depth/001600.png
+scene0629_00/color/002400.jpg scene0629_00/depth/002400.png
+scene0304_00/color/001400.jpg scene0304_00/depth/001400.png
+scene0389_00/color/001000.jpg scene0389_00/depth/001000.png
+scene0231_00/color/004300.jpg scene0231_00/depth/004300.png
+scene0088_01/color/000000.jpg scene0088_01/depth/000000.png
+scene0435_03/color/000500.jpg scene0435_03/depth/000500.png
+scene0663_00/color/000600.jpg scene0663_00/depth/000600.png
+scene0231_01/color/002400.jpg scene0231_01/depth/002400.png
+scene0678_01/color/000700.jpg scene0678_01/depth/000700.png
+scene0353_02/color/000600.jpg scene0353_02/depth/000600.png
+scene0081_02/color/000800.jpg scene0081_02/depth/000800.png
+scene0578_00/color/001000.jpg scene0578_00/depth/001000.png
+scene0084_00/color/000800.jpg scene0084_00/depth/000800.png
+scene0081_01/color/000000.jpg scene0081_01/depth/000000.png
+scene0329_02/color/000900.jpg scene0329_02/depth/000900.png
+scene0633_01/color/000200.jpg scene0633_01/depth/000200.png
+scene0307_00/color/001400.jpg scene0307_00/depth/001400.png
+scene0435_02/color/001500.jpg scene0435_02/depth/001500.png
+scene0355_01/color/000000.jpg scene0355_01/depth/000000.png
+scene0700_01/color/001400.jpg scene0700_01/depth/001400.png
+scene0647_00/color/000700.jpg scene0647_00/depth/000700.png
+scene0474_05/color/001800.jpg scene0474_05/depth/001800.png
+scene0606_02/color/000800.jpg scene0606_02/depth/000800.png
+scene0684_01/color/000200.jpg scene0684_01/depth/000200.png
+scene0678_02/color/001900.jpg scene0678_02/depth/001900.png
+scene0474_03/color/003000.jpg scene0474_03/depth/003000.png
+scene0222_01/color/003600.jpg scene0222_01/depth/003600.png
+scene0458_01/color/000600.jpg scene0458_01/depth/000600.png
+scene0678_01/color/000500.jpg scene0678_01/depth/000500.png
+scene0208_00/color/002100.jpg scene0208_00/depth/002100.png
+scene0030_01/color/000600.jpg scene0030_01/depth/000600.png
+scene0583_01/color/000300.jpg scene0583_01/depth/000300.png
+scene0591_02/color/000600.jpg scene0591_02/depth/000600.png
+scene0599_02/color/001700.jpg scene0599_02/depth/001700.png
+scene0580_00/color/001000.jpg scene0580_00/depth/001000.png
+scene0599_02/color/001400.jpg scene0599_02/depth/001400.png
+scene0064_01/color/000100.jpg scene0064_01/depth/000100.png
+scene0187_01/color/001300.jpg scene0187_01/depth/001300.png
+scene0257_00/color/001000.jpg scene0257_00/depth/001000.png
+scene0046_00/color/000800.jpg scene0046_00/depth/000800.png
+scene0558_01/color/001000.jpg scene0558_01/depth/001000.png
+scene0030_01/color/000800.jpg scene0030_01/depth/000800.png
+scene0607_00/color/000600.jpg scene0607_00/depth/000600.png
+scene0704_00/color/001900.jpg scene0704_00/depth/001900.png
+scene0599_01/color/000000.jpg scene0599_01/depth/000000.png
+scene0084_01/color/000200.jpg scene0084_01/depth/000200.png
+scene0653_00/color/003700.jpg scene0653_00/depth/003700.png
+scene0025_02/color/000400.jpg scene0025_02/depth/000400.png
+scene0553_00/color/001100.jpg scene0553_00/depth/001100.png
+scene0300_01/color/001200.jpg scene0300_01/depth/001200.png
+scene0697_00/color/001800.jpg scene0697_00/depth/001800.png
+scene0435_01/color/002800.jpg scene0435_01/depth/002800.png
+scene0050_01/color/003200.jpg scene0050_01/depth/003200.png
+scene0606_01/color/002800.jpg scene0606_01/depth/002800.png
+scene0607_01/color/000100.jpg scene0607_01/depth/000100.png
+scene0575_00/color/000300.jpg scene0575_00/depth/000300.png
+scene0671_01/color/000100.jpg scene0671_01/depth/000100.png
+scene0598_02/color/000000.jpg scene0598_02/depth/000000.png
+scene0678_02/color/001400.jpg scene0678_02/depth/001400.png
+scene0356_01/color/000800.jpg scene0356_01/depth/000800.png
+scene0701_02/color/000300.jpg scene0701_02/depth/000300.png
+scene0651_00/color/000800.jpg scene0651_00/depth/000800.png
+scene0169_01/color/000200.jpg scene0169_01/depth/000200.png
+scene0580_00/color/002600.jpg scene0580_00/depth/002600.png
+scene0208_00/color/000600.jpg scene0208_00/depth/000600.png
+scene0558_01/color/001200.jpg scene0558_01/depth/001200.png
+scene0645_01/color/000800.jpg scene0645_01/depth/000800.png
+scene0653_01/color/003000.jpg scene0653_01/depth/003000.png
+scene0030_00/color/000800.jpg scene0030_00/depth/000800.png
+scene0011_00/color/001800.jpg scene0011_00/depth/001800.png
+scene0518_00/color/001000.jpg scene0518_00/depth/001000.png
+scene0307_02/color/001800.jpg scene0307_02/depth/001800.png
+scene0353_00/color/000000.jpg scene0353_00/depth/000000.png
+scene0550_00/color/000500.jpg scene0550_00/depth/000500.png
+scene0685_02/color/000900.jpg scene0685_02/depth/000900.png
+scene0702_00/color/000300.jpg scene0702_00/depth/000300.png
+scene0648_00/color/003900.jpg scene0648_00/depth/003900.png
+scene0423_00/color/000300.jpg scene0423_00/depth/000300.png
+scene0664_01/color/000000.jpg scene0664_01/depth/000000.png
+scene0670_01/color/000400.jpg scene0670_01/depth/000400.png
+scene0088_02/color/002100.jpg scene0088_02/depth/002100.png
+scene0144_01/color/000400.jpg scene0144_01/depth/000400.png
+scene0591_02/color/000300.jpg scene0591_02/depth/000300.png
+scene0686_01/color/000700.jpg scene0686_01/depth/000700.png
+scene0084_01/color/001200.jpg scene0084_01/depth/001200.png
+scene0574_00/color/000800.jpg scene0574_00/depth/000800.png
+scene0609_02/color/001600.jpg scene0609_02/depth/001600.png
+scene0500_01/color/001600.jpg scene0500_01/depth/001600.png
+scene0231_02/color/002800.jpg scene0231_02/depth/002800.png
+scene0598_01/color/000300.jpg scene0598_01/depth/000300.png
+scene0629_01/color/001900.jpg scene0629_01/depth/001900.png
+scene0578_00/color/000000.jpg scene0578_00/depth/000000.png
+scene0334_00/color/000200.jpg scene0334_00/depth/000200.png
+scene0084_01/color/001300.jpg scene0084_01/depth/001300.png
+scene0377_01/color/000400.jpg scene0377_01/depth/000400.png
+scene0608_01/color/001800.jpg scene0608_01/depth/001800.png
+scene0356_02/color/000300.jpg scene0356_02/depth/000300.png
+scene0025_00/color/001600.jpg scene0025_00/depth/001600.png
+scene0249_00/color/000300.jpg scene0249_00/depth/000300.png
+scene0208_00/color/001700.jpg scene0208_00/depth/001700.png
+scene0653_01/color/000000.jpg scene0653_01/depth/000000.png
+scene0146_02/color/000200.jpg scene0146_02/depth/000200.png
+scene0351_00/color/000800.jpg scene0351_00/depth/000800.png
+scene0593_00/color/000100.jpg scene0593_00/depth/000100.png
+scene0046_02/color/000200.jpg scene0046_02/depth/000200.png
+scene0606_02/color/000100.jpg scene0606_02/depth/000100.png
+scene0231_00/color/001000.jpg scene0231_00/depth/001000.png
+scene0300_01/color/000500.jpg scene0300_01/depth/000500.png
+scene0196_00/color/000100.jpg scene0196_00/depth/000100.png
+scene0377_00/color/000600.jpg scene0377_00/depth/000600.png
+scene0256_02/color/001100.jpg scene0256_02/depth/001100.png
+scene0678_01/color/001900.jpg scene0678_01/depth/001900.png
+scene0700_00/color/000600.jpg scene0700_00/depth/000600.png
+scene0629_02/color/000700.jpg scene0629_02/depth/000700.png
+scene0643_00/color/000200.jpg scene0643_00/depth/000200.png
+scene0050_01/color/002400.jpg scene0050_01/depth/002400.png
+scene0356_00/color/000900.jpg scene0356_00/depth/000900.png
+scene0704_01/color/001200.jpg scene0704_01/depth/001200.png
+scene0575_00/color/000900.jpg scene0575_00/depth/000900.png
+scene0583_00/color/001000.jpg scene0583_00/depth/001000.png
+scene0591_00/color/001700.jpg scene0591_00/depth/001700.png
+scene0164_02/color/000200.jpg scene0164_02/depth/000200.png
+scene0664_02/color/000600.jpg scene0664_02/depth/000600.png
+scene0575_01/color/002900.jpg scene0575_01/depth/002900.png
+scene0328_00/color/000500.jpg scene0328_00/depth/000500.png
+scene0671_01/color/000500.jpg scene0671_01/depth/000500.png
+scene0356_00/color/001300.jpg scene0356_00/depth/001300.png
+scene0580_00/color/001400.jpg scene0580_00/depth/001400.png
+scene0222_00/color/003500.jpg scene0222_00/depth/003500.png
+scene0015_00/color/001300.jpg scene0015_00/depth/001300.png
+scene0609_02/color/000500.jpg scene0609_02/depth/000500.png
+scene0645_02/color/002100.jpg scene0645_02/depth/002100.png
+scene0304_00/color/000200.jpg scene0304_00/depth/000200.png
+scene0598_01/color/000100.jpg scene0598_01/depth/000100.png
+scene0609_00/color/000200.jpg scene0609_00/depth/000200.png
+scene0700_01/color/000800.jpg scene0700_01/depth/000800.png
+scene0686_02/color/000700.jpg scene0686_02/depth/000700.png
+scene0553_01/color/000500.jpg scene0553_01/depth/000500.png
+scene0378_00/color/001500.jpg scene0378_00/depth/001500.png
+scene0550_00/color/003200.jpg scene0550_00/depth/003200.png
+scene0583_01/color/000200.jpg scene0583_01/depth/000200.png
+scene0550_00/color/003500.jpg scene0550_00/depth/003500.png
+scene0131_02/color/000100.jpg scene0131_02/depth/000100.png
+scene0131_00/color/000400.jpg scene0131_00/depth/000400.png
+scene0257_00/color/001100.jpg scene0257_00/depth/001100.png
+scene0406_00/color/000900.jpg scene0406_00/depth/000900.png
+scene0663_01/color/002200.jpg scene0663_01/depth/002200.png
+scene0307_00/color/000400.jpg scene0307_00/depth/000400.png
+scene0030_00/color/000400.jpg scene0030_00/depth/000400.png
+scene0131_00/color/000300.jpg scene0131_00/depth/000300.png
+scene0084_02/color/000200.jpg scene0084_02/depth/000200.png
+scene0030_00/color/001200.jpg scene0030_00/depth/001200.png
+scene0697_03/color/000500.jpg scene0697_03/depth/000500.png
+scene0653_00/color/003000.jpg scene0653_00/depth/003000.png
+scene0086_02/color/000800.jpg scene0086_02/depth/000800.png
+scene0146_01/color/000800.jpg scene0146_01/depth/000800.png
+scene0277_01/color/000500.jpg scene0277_01/depth/000500.png
+scene0353_00/color/001600.jpg scene0353_00/depth/001600.png
+scene0046_01/color/002200.jpg scene0046_01/depth/002200.png
+scene0222_00/color/001000.jpg scene0222_00/depth/001000.png
+scene0697_00/color/000800.jpg scene0697_00/depth/000800.png
+scene0426_02/color/000800.jpg scene0426_02/depth/000800.png
+scene0256_01/color/000600.jpg scene0256_01/depth/000600.png
+scene0606_01/color/000400.jpg scene0606_01/depth/000400.png
+scene0222_01/color/001300.jpg scene0222_01/depth/001300.png
+scene0084_01/color/001000.jpg scene0084_01/depth/001000.png
+scene0685_02/color/002200.jpg scene0685_02/depth/002200.png
+scene0599_02/color/000200.jpg scene0599_02/depth/000200.png
+scene0648_00/color/000800.jpg scene0648_00/depth/000800.png
+scene0030_00/color/001600.jpg scene0030_00/depth/001600.png
+scene0629_02/color/000600.jpg scene0629_02/depth/000600.png
+scene0389_00/color/000200.jpg scene0389_00/depth/000200.png
+scene0423_01/color/000000.jpg scene0423_01/depth/000000.png
+scene0697_00/color/002200.jpg scene0697_00/depth/002200.png
+scene0222_01/color/001400.jpg scene0222_01/depth/001400.png
+scene0231_02/color/002200.jpg scene0231_02/depth/002200.png
+scene0231_01/color/003500.jpg scene0231_01/depth/003500.png
+scene0222_00/color/000900.jpg scene0222_00/depth/000900.png
+scene0629_00/color/001300.jpg scene0629_00/depth/001300.png
+scene0500_00/color/001800.jpg scene0500_00/depth/001800.png
+scene0081_02/color/000700.jpg scene0081_02/depth/000700.png
+scene0458_00/color/000800.jpg scene0458_00/depth/000800.png
+scene0307_01/color/000700.jpg scene0307_01/depth/000700.png
+scene0458_00/color/001000.jpg scene0458_00/depth/001000.png
+scene0423_00/color/000000.jpg scene0423_00/depth/000000.png
+scene0203_00/color/000300.jpg scene0203_00/depth/000300.png
+scene0558_02/color/000100.jpg scene0558_02/depth/000100.png
+scene0086_01/color/000400.jpg scene0086_01/depth/000400.png
+scene0645_01/color/001700.jpg scene0645_01/depth/001700.png
+scene0458_00/color/000300.jpg scene0458_00/depth/000300.png
+scene0378_01/color/001100.jpg scene0378_01/depth/001100.png
+scene0050_00/color/002100.jpg scene0050_00/depth/002100.png
+scene0648_00/color/003000.jpg scene0648_00/depth/003000.png
+scene0550_00/color/002600.jpg scene0550_00/depth/002600.png
+scene0231_00/color/001400.jpg scene0231_00/depth/001400.png
+scene0412_01/color/000600.jpg scene0412_01/depth/000600.png
+scene0700_00/color/003300.jpg scene0700_00/depth/003300.png
+scene0307_00/color/002000.jpg scene0307_00/depth/002000.png
+scene0435_02/color/001300.jpg scene0435_02/depth/001300.png
+scene0550_00/color/003300.jpg scene0550_00/depth/003300.png
+scene0046_01/color/000800.jpg scene0046_01/depth/000800.png
+scene0084_00/color/000900.jpg scene0084_00/depth/000900.png
+scene0575_01/color/000800.jpg scene0575_01/depth/000800.png
+scene0146_02/color/000400.jpg scene0146_02/depth/000400.png
+scene0353_01/color/002100.jpg scene0353_01/depth/002100.png
+scene0648_01/color/000600.jpg scene0648_01/depth/000600.png
+scene0231_00/color/003300.jpg scene0231_00/depth/003300.png
+scene0606_02/color/001700.jpg scene0606_02/depth/001700.png
+scene0231_00/color/001800.jpg scene0231_00/depth/001800.png
+scene0329_01/color/000900.jpg scene0329_01/depth/000900.png
+scene0558_00/color/000300.jpg scene0558_00/depth/000300.png
+scene0704_00/color/002300.jpg scene0704_00/depth/002300.png
+scene0414_00/color/000900.jpg scene0414_00/depth/000900.png
+scene0645_00/color/004500.jpg scene0645_00/depth/004500.png
+scene0700_00/color/004500.jpg scene0700_00/depth/004500.png
+scene0678_02/color/001700.jpg scene0678_02/depth/001700.png
+scene0568_00/color/000100.jpg scene0568_00/depth/000100.png
+scene0458_00/color/001300.jpg scene0458_00/depth/001300.png
+scene0599_02/color/000500.jpg scene0599_02/depth/000500.png
+scene0693_00/color/000200.jpg scene0693_00/depth/000200.png
+scene0207_01/color/000300.jpg scene0207_01/depth/000300.png
+scene0025_00/color/000600.jpg scene0025_00/depth/000600.png
+scene0599_01/color/001100.jpg scene0599_01/depth/001100.png
+scene0670_00/color/001400.jpg scene0670_00/depth/001400.png
+scene0599_00/color/001000.jpg scene0599_00/depth/001000.png
+scene0535_00/color/000400.jpg scene0535_00/depth/000400.png
+scene0696_00/color/000500.jpg scene0696_00/depth/000500.png
+scene0701_01/color/000600.jpg scene0701_01/depth/000600.png
+scene0474_02/color/000300.jpg scene0474_02/depth/000300.png
+scene0665_01/color/000900.jpg scene0665_01/depth/000900.png
+scene0616_00/color/000900.jpg scene0616_00/depth/000900.png
+scene0307_01/color/001900.jpg scene0307_01/depth/001900.png
+scene0648_01/color/002600.jpg scene0648_01/depth/002600.png
+scene0207_01/color/001500.jpg scene0207_01/depth/001500.png
+scene0609_00/color/000100.jpg scene0609_00/depth/000100.png
+scene0131_00/color/000500.jpg scene0131_00/depth/000500.png
+scene0461_00/color/000200.jpg scene0461_00/depth/000200.png
+scene0696_02/color/001500.jpg scene0696_02/depth/001500.png
+scene0406_02/color/000700.jpg scene0406_02/depth/000700.png
+scene0064_00/color/001000.jpg scene0064_00/depth/001000.png
+scene0249_00/color/001500.jpg scene0249_00/depth/001500.png
+scene0496_00/color/000900.jpg scene0496_00/depth/000900.png
+scene0081_01/color/000700.jpg scene0081_01/depth/000700.png
+scene0081_01/color/001100.jpg scene0081_01/depth/001100.png
+scene0671_00/color/000500.jpg scene0671_00/depth/000500.png
+scene0606_02/color/000200.jpg scene0606_02/depth/000200.png
+scene0598_00/color/000800.jpg scene0598_00/depth/000800.png
+scene0697_03/color/002300.jpg scene0697_03/depth/002300.png
+scene0633_00/color/001200.jpg scene0633_00/depth/001200.png
+scene0593_00/color/000700.jpg scene0593_00/depth/000700.png
+scene0653_01/color/001600.jpg scene0653_01/depth/001600.png
+scene0655_00/color/000600.jpg scene0655_00/depth/000600.png
+scene0046_02/color/001600.jpg scene0046_02/depth/001600.png
+scene0608_00/color/001500.jpg scene0608_00/depth/001500.png
+scene0645_01/color/003100.jpg scene0645_01/depth/003100.png
+scene0328_00/color/000800.jpg scene0328_00/depth/000800.png
+scene0606_01/color/000800.jpg scene0606_01/depth/000800.png
+scene0655_01/color/000200.jpg scene0655_01/depth/000200.png
+scene0684_01/color/000400.jpg scene0684_01/depth/000400.png
+scene0329_01/color/000400.jpg scene0329_01/depth/000400.png
+scene0458_00/color/001600.jpg scene0458_00/depth/001600.png
+scene0207_00/color/001100.jpg scene0207_00/depth/001100.png
+scene0552_00/color/000600.jpg scene0552_00/depth/000600.png
+scene0208_00/color/000300.jpg scene0208_00/depth/000300.png
+scene0378_02/color/000600.jpg scene0378_02/depth/000600.png
+scene0704_00/color/002100.jpg scene0704_00/depth/002100.png
+scene0701_02/color/001000.jpg scene0701_02/depth/001000.png
+scene0609_01/color/000200.jpg scene0609_01/depth/000200.png
+scene0095_01/color/000400.jpg scene0095_01/depth/000400.png
+scene0357_01/color/000100.jpg scene0357_01/depth/000100.png
+scene0653_01/color/002400.jpg scene0653_01/depth/002400.png
+scene0462_00/color/000400.jpg scene0462_00/depth/000400.png
+scene0249_00/color/001700.jpg scene0249_00/depth/001700.png
+scene0221_00/color/000200.jpg scene0221_00/depth/000200.png
+scene0500_00/color/000900.jpg scene0500_00/depth/000900.png
+scene0474_03/color/001800.jpg scene0474_03/depth/001800.png
+scene0701_00/color/000400.jpg scene0701_00/depth/000400.png
+scene0222_00/color/004700.jpg scene0222_00/depth/004700.png
+scene0575_02/color/002200.jpg scene0575_02/depth/002200.png
+scene0598_02/color/001500.jpg scene0598_02/depth/001500.png
+scene0222_00/color/003700.jpg scene0222_00/depth/003700.png
+scene0084_01/color/001400.jpg scene0084_01/depth/001400.png
+scene0249_00/color/002000.jpg scene0249_00/depth/002000.png
+scene0697_00/color/000300.jpg scene0697_00/depth/000300.png
+scene0461_00/color/000500.jpg scene0461_00/depth/000500.png
+scene0629_01/color/000100.jpg scene0629_01/depth/000100.png
+scene0609_02/color/000100.jpg scene0609_02/depth/000100.png
+scene0606_00/color/001600.jpg scene0606_00/depth/001600.png
+scene0629_01/color/000600.jpg scene0629_01/depth/000600.png
+scene0697_00/color/000200.jpg scene0697_00/depth/000200.png
+scene0704_00/color/001600.jpg scene0704_00/depth/001600.png
+scene0050_00/color/000400.jpg scene0050_00/depth/000400.png
+scene0435_01/color/000700.jpg scene0435_01/depth/000700.png
+scene0095_00/color/001500.jpg scene0095_00/depth/001500.png
+scene0462_00/color/001100.jpg scene0462_00/depth/001100.png
+scene0696_02/color/000700.jpg scene0696_02/depth/000700.png
+scene0685_02/color/001200.jpg scene0685_02/depth/001200.png
+scene0663_02/color/002600.jpg scene0663_02/depth/002600.png
+scene0430_00/color/001700.jpg scene0430_00/depth/001700.png
+scene0670_00/color/001700.jpg scene0670_00/depth/001700.png
+scene0222_01/color/004000.jpg scene0222_01/depth/004000.png
+scene0606_01/color/002000.jpg scene0606_01/depth/002000.png
+scene0606_00/color/000300.jpg scene0606_00/depth/000300.png
+scene0412_00/color/001300.jpg scene0412_00/depth/001300.png
+scene0621_00/color/001300.jpg scene0621_00/depth/001300.png
+scene0146_00/color/001100.jpg scene0146_00/depth/001100.png
+scene0578_02/color/000900.jpg scene0578_02/depth/000900.png
+scene0629_01/color/002200.jpg scene0629_01/depth/002200.png
+scene0050_02/color/001100.jpg scene0050_02/depth/001100.png
+scene0670_01/color/003200.jpg scene0670_01/depth/003200.png
+scene0583_01/color/000900.jpg scene0583_01/depth/000900.png
+scene0664_01/color/000600.jpg scene0664_01/depth/000600.png
+scene0645_00/color/001300.jpg scene0645_00/depth/001300.png
+scene0678_02/color/000300.jpg scene0678_02/depth/000300.png
+scene0231_02/color/001500.jpg scene0231_02/depth/001500.png
+scene0700_02/color/002100.jpg scene0700_02/depth/002100.png
+scene0353_01/color/000600.jpg scene0353_01/depth/000600.png
+scene0231_00/color/002400.jpg scene0231_00/depth/002400.png
+scene0527_00/color/000100.jpg scene0527_00/depth/000100.png
+scene0500_01/color/001100.jpg scene0500_01/depth/001100.png
+scene0645_01/color/002800.jpg scene0645_01/depth/002800.png
+scene0011_01/color/002500.jpg scene0011_01/depth/002500.png
+scene0278_00/color/000000.jpg scene0278_00/depth/000000.png
+scene0050_02/color/000500.jpg scene0050_02/depth/000500.png
+scene0050_01/color/002000.jpg scene0050_01/depth/002000.png
+scene0663_00/color/002300.jpg scene0663_00/depth/002300.png
+scene0164_00/color/001400.jpg scene0164_00/depth/001400.png
+scene0651_00/color/000400.jpg scene0651_00/depth/000400.png
+scene0378_02/color/001300.jpg scene0378_02/depth/001300.png
+scene0412_00/color/000900.jpg scene0412_00/depth/000900.png
+scene0578_01/color/001200.jpg scene0578_01/depth/001200.png
+scene0316_00/color/000200.jpg scene0316_00/depth/000200.png
+scene0580_01/color/002100.jpg scene0580_01/depth/002100.png
+scene0131_02/color/000300.jpg scene0131_02/depth/000300.png
+scene0144_00/color/000600.jpg scene0144_00/depth/000600.png
+scene0697_02/color/002100.jpg scene0697_02/depth/002100.png
+scene0697_01/color/002300.jpg scene0697_01/depth/002300.png
+scene0025_01/color/001000.jpg scene0025_01/depth/001000.png
+scene0578_01/color/000700.jpg scene0578_01/depth/000700.png
+scene0334_01/color/000500.jpg scene0334_01/depth/000500.png
+scene0670_01/color/000600.jpg scene0670_01/depth/000600.png
+scene0231_02/color/002400.jpg scene0231_02/depth/002400.png
+scene0474_03/color/001900.jpg scene0474_03/depth/001900.png
+scene0621_00/color/002000.jpg scene0621_00/depth/002000.png
+scene0690_01/color/000000.jpg scene0690_01/depth/000000.png
+scene0231_01/color/001600.jpg scene0231_01/depth/001600.png
+scene0086_01/color/000900.jpg scene0086_01/depth/000900.png
+scene0550_00/color/002200.jpg scene0550_00/depth/002200.png
+scene0670_01/color/002700.jpg scene0670_01/depth/002700.png
+scene0328_00/color/000900.jpg scene0328_00/depth/000900.png
+scene0686_00/color/000900.jpg scene0686_00/depth/000900.png
+scene0300_00/color/000500.jpg scene0300_00/depth/000500.png
+scene0015_00/color/001600.jpg scene0015_00/depth/001600.png
+scene0334_01/color/000000.jpg scene0334_01/depth/000000.png
+scene0131_01/color/000300.jpg scene0131_01/depth/000300.png
+scene0474_03/color/002000.jpg scene0474_03/depth/002000.png
+scene0678_02/color/000600.jpg scene0678_02/depth/000600.png
+scene0231_00/color/004000.jpg scene0231_00/depth/004000.png
+scene0050_00/color/000300.jpg scene0050_00/depth/000300.png
+scene0599_01/color/000700.jpg scene0599_01/depth/000700.png
+scene0575_01/color/000900.jpg scene0575_01/depth/000900.png
+scene0329_01/color/000500.jpg scene0329_01/depth/000500.png
+scene0575_00/color/000100.jpg scene0575_00/depth/000100.png
+scene0086_01/color/000500.jpg scene0086_01/depth/000500.png
+scene0575_02/color/001800.jpg scene0575_02/depth/001800.png
+scene0187_00/color/001400.jpg scene0187_00/depth/001400.png
+scene0257_00/color/000300.jpg scene0257_00/depth/000300.png
+scene0653_00/color/000000.jpg scene0653_00/depth/000000.png
+scene0651_01/color/000800.jpg scene0651_01/depth/000800.png
+scene0608_01/color/000300.jpg scene0608_01/depth/000300.png
+scene0050_00/color/001700.jpg scene0050_00/depth/001700.png
+scene0664_01/color/001300.jpg scene0664_01/depth/001300.png
+scene0663_02/color/000200.jpg scene0663_02/depth/000200.png
+scene0568_00/color/000600.jpg scene0568_00/depth/000600.png
+scene0077_01/color/000200.jpg scene0077_01/depth/000200.png
+scene0608_01/color/002600.jpg scene0608_01/depth/002600.png
+scene0338_02/color/000000.jpg scene0338_02/depth/000000.png
+scene0693_02/color/000000.jpg scene0693_02/depth/000000.png
+scene0257_00/color/000400.jpg scene0257_00/depth/000400.png
+scene0011_01/color/000900.jpg scene0011_01/depth/000900.png
+scene0578_01/color/001100.jpg scene0578_01/depth/001100.png
+scene0435_00/color/000900.jpg scene0435_00/depth/000900.png
+scene0086_01/color/001100.jpg scene0086_01/depth/001100.png
+scene0427_00/color/000300.jpg scene0427_00/depth/000300.png
+scene0458_01/color/000200.jpg scene0458_01/depth/000200.png
+scene0663_00/color/002600.jpg scene0663_00/depth/002600.png
+scene0664_02/color/000700.jpg scene0664_02/depth/000700.png
+scene0670_00/color/002900.jpg scene0670_00/depth/002900.png
+scene0196_00/color/000500.jpg scene0196_00/depth/000500.png
+scene0575_01/color/000400.jpg scene0575_01/depth/000400.png
+scene0100_02/color/000100.jpg scene0100_02/depth/000100.png
+scene0606_01/color/001300.jpg scene0606_01/depth/001300.png
+scene0086_01/color/000600.jpg scene0086_01/depth/000600.png
+scene0231_01/color/002700.jpg scene0231_01/depth/002700.png
+scene0697_01/color/002800.jpg scene0697_01/depth/002800.png
+scene0474_03/color/002600.jpg scene0474_03/depth/002600.png
+scene0685_02/color/001900.jpg scene0685_02/depth/001900.png
+scene0435_01/color/001000.jpg scene0435_01/depth/001000.png
+scene0607_00/color/000100.jpg scene0607_00/depth/000100.png
+scene0353_01/color/000500.jpg scene0353_01/depth/000500.png
+scene0207_01/color/000500.jpg scene0207_01/depth/000500.png
+scene0575_02/color/000100.jpg scene0575_02/depth/000100.png
+scene0583_01/color/001500.jpg scene0583_01/depth/001500.png
+scene0187_00/color/001900.jpg scene0187_00/depth/001900.png
+scene0351_01/color/000100.jpg scene0351_01/depth/000100.png
+scene0700_00/color/001000.jpg scene0700_00/depth/001000.png
+scene0629_00/color/002300.jpg scene0629_00/depth/002300.png
+scene0629_02/color/000200.jpg scene0629_02/depth/000200.png
+scene0354_00/color/000200.jpg scene0354_00/depth/000200.png
+scene0575_01/color/001200.jpg scene0575_01/depth/001200.png
+scene0334_01/color/000800.jpg scene0334_01/depth/000800.png
+scene0378_01/color/000300.jpg scene0378_01/depth/000300.png
+scene0356_01/color/000100.jpg scene0356_01/depth/000100.png
+scene0064_00/color/000800.jpg scene0064_00/depth/000800.png
+scene0278_01/color/000400.jpg scene0278_01/depth/000400.png
+scene0678_01/color/001300.jpg scene0678_01/depth/001300.png
\ No newline at end of file
diff --git a/Lotus/datasets/eval/normal/.gitempty b/Lotus/datasets/eval/normal/.gitempty
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Lotus/datasets/quick_validation/01.jpg b/Lotus/datasets/quick_validation/01.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ad498862564b59d3fb546a1ae0700202e36643c4
Binary files /dev/null and b/Lotus/datasets/quick_validation/01.jpg differ
diff --git a/Lotus/datasets/quick_validation/02.jpg b/Lotus/datasets/quick_validation/02.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8b11d5c244e2abf8d20e29c0db1a002dcca9b52d
Binary files /dev/null and b/Lotus/datasets/quick_validation/02.jpg differ
diff --git a/Lotus/datasets/quick_validation/04.jpg b/Lotus/datasets/quick_validation/04.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ea2e6551c1dc101e2e9b6ce7b84f58e7ad104f8e
Binary files /dev/null and b/Lotus/datasets/quick_validation/04.jpg differ
diff --git a/Lotus/eval.py b/Lotus/eval.py
new file mode 100644
index 0000000000000000000000000000000000000000..819b3193955124d9360f439e3b904e89efff22ff
--- /dev/null
+++ b/Lotus/eval.py
@@ -0,0 +1,250 @@
+import logging
+import argparse
+import os
+
+from contextlib import nullcontext
+import torch
+from diffusers.utils import check_min_version
+import random
+import numpy as np
+
+from pipeline import LotusGPipeline, LotusDPipeline
+from utils.seed_all import seed_all
+from evaluation.evaluation import evaluation_depth, evaluation_normal
+
+check_min_version('0.28.0.dev0')
+
+def parse_args():
+ '''Set the Args'''
+ parser = argparse.ArgumentParser(
+ description="Run Lotus..."
+ )
+ # model settings
+ parser.add_argument(
+ "--pretrained_model_name_or_path",
+ type=str,
+ default=None,
+ help="pretrained model path from hugging face or local dir",
+ )
+ parser.add_argument(
+ "--prediction_type",
+ type=str,
+ default="sample",
+ help="The used prediction_type. ",
+ )
+ parser.add_argument(
+ "--timestep",
+ type=int,
+ default=999,
+ )
+ parser.add_argument(
+ "--mode",
+ type=str,
+ default="regression", # "generation"
+ help="Whether to use the generation or regression pipeline."
+ )
+ parser.add_argument(
+ "--task_name",
+ type=str,
+ default="depth", # "normal"
+ )
+ parser.add_argument(
+ "--disparity",
+ action="store_true",
+ )
+ parser.add_argument(
+ "--enable_xformers_memory_efficient_attention", action="store_true", help="Whether or not to use xformers."
+ )
+
+ # inference settings
+ parser.add_argument("--seed", type=int, default=None, help="Random seed.")
+ parser.add_argument(
+ "--output_dir", type=str, required=True, help="Output directory."
+ )
+ parser.add_argument(
+ "--base_test_data_dir",
+ type=str,
+ default="datasets/eval/"
+ )
+ parser.add_argument(
+ "--half_precision",
+ action="store_true",
+ help="Run with half-precision (16-bit float), might lead to suboptimal result.",
+ )
+ parser.add_argument(
+ "--processing_res",
+ type=int,
+ default=None,
+ help="Maximum resolution of processing. 0 for using input image resolution. Default: 768.",
+ )
+ parser.add_argument(
+ "--output_processing_res",
+ action="store_true",
+ help="When input is resized, out put depth at resized operating resolution. Default: False.",
+ )
+ parser.add_argument(
+ "--resample_method",
+ choices=["bilinear", "bicubic", "nearest"],
+ default="bilinear",
+ help="Resampling method used to resize images and depth predictions. This can be one of `bilinear`, `bicubic` or `nearest`. Default: `bilinear`",
+ )
+ parser.add_argument(
+ "--rng_state_path",
+ default=None,
+ help="Load the random number generator states from the given path to ensure reproducibility of the results. "
+ )
+
+ args = parser.parse_args()
+
+ return args
+
+
+def main():
+ logging.basicConfig(level=logging.INFO)
+ logging.info(f"Run evaluation...")
+
+ args = parse_args()
+
+ # -------------------- Preparation --------------------
+ # Random seed
+ if args.seed is not None:
+ seed_all(args.seed)
+
+ # Output directories
+ os.makedirs(args.output_dir, exist_ok=True)
+ logging.info(f"Output dir = {args.output_dir}")
+
+ # half_precision
+ if args.half_precision:
+ dtype = torch.float16
+ logging.info(f"Running with half precision ({dtype}).")
+ else:
+ dtype = torch.float32
+
+ # processing_res
+ processing_res = args.processing_res
+ match_input_res = not args.output_processing_res
+ if 0 == processing_res and match_input_res is False:
+ logging.warning(
+ "Processing at native resolution without resizing output might NOT lead to exactly the same resolution, due to the padding and pooling properties of conv layers."
+ )
+ # resample_method = args.resample_method
+
+ # -------------------- Device --------------------
+ if torch.cuda.is_available():
+ device = torch.device("cuda")
+ else:
+ device = torch.device("cpu")
+ logging.warning("CUDA is not available. Running on CPU will be slow.")
+ logging.info(f"Device = {device}")
+
+ if args.rng_state_path:
+ torch.cuda.synchronize()
+ states = torch.load(args.rng_state_path)
+ random.setstate(states["random_state"])
+ np.random.set_state(states["numpy_random_seed"])
+ torch.set_rng_state(states["torch_manual_seed"])
+ torch.cuda.set_rng_state_all(states["torch_cuda_manual_seed"][:1])
+ logging.info(f"Loading the RNG states from: {args.rng_state_path}")
+
+ # -------------------- Model --------------------
+ if args.mode == 'generation':
+ pipeline = LotusGPipeline.from_pretrained(
+ args.pretrained_model_name_or_path,
+ torch_dtype=dtype,
+ )
+ elif args.mode == 'regression':
+ pipeline = LotusDPipeline.from_pretrained(
+ args.pretrained_model_name_or_path,
+ torch_dtype=dtype,
+ )
+ else:
+ raise ValueError(f'Invalid mode: {args.mode}')
+ logging.info(f"Successfully loading pipeline from {args.pretrained_model_name_or_path}.")
+
+ pipeline = pipeline.to(device)
+ pipeline.set_progress_bar_config(disable=True)
+
+ if args.enable_xformers_memory_efficient_attention:
+ pipeline.enable_xformers_memory_efficient_attention()
+
+ def gen_depth(rgb_in, pipe, prompt="", num_inference_steps=1):
+ if torch.backends.mps.is_available():
+ autocast_ctx = nullcontext()
+ else:
+ autocast_ctx = torch.autocast(pipe.device.type)
+
+ with autocast_ctx:
+ rgb_input = rgb_in / 255.0 * 2.0 - 1.0 # [0, 255] -> [-1, 1]
+
+ task_emb = torch.tensor([1, 0]).float().unsqueeze(0).repeat(1, 1).to(pipe.device)
+ task_emb = torch.cat([torch.sin(task_emb), torch.cos(task_emb)], dim=-1).repeat(1, 1)
+
+ pred_depth = pipe(
+ rgb_in=rgb_input,
+ prompt=prompt,
+ num_inference_steps=num_inference_steps,
+ output_type='np',
+ timesteps=[args.timestep],
+ task_emb=task_emb,
+ processing_res=0, # processing resolution before the pipeline
+ ).images[0]
+ pred_depth = pred_depth.mean(axis=-1) # [0,1]
+ return pred_depth
+
+ def gen_normal(img, pipe, prompt="", num_inference_steps=1):
+ if torch.backends.mps.is_available():
+ autocast_ctx = nullcontext()
+ else:
+ autocast_ctx = torch.autocast(pipe.device.type)
+
+ with autocast_ctx:
+ task_emb = torch.tensor([1, 0]).float().unsqueeze(0).repeat(1, 1).to(pipe.device)
+ task_emb = torch.cat([torch.sin(task_emb), torch.cos(task_emb)], dim=-1).repeat(1, 1)
+
+ pred_normal = pipe(
+ rgb_in=img, # [-1,1]
+ prompt=prompt,
+ num_inference_steps=num_inference_steps,
+ output_type='pt',
+ timesteps=[args.timestep],
+ task_emb=task_emb,
+ processing_res=0, # processing resolution before the pipeline
+ ).images[0] # [0,1], (3,h,w)
+ pred_normal = (pred_normal*2-1.0).unsqueeze(0) # [-1,1], (1,3,h,w)
+ return pred_normal
+
+ # -------------------- Evaluation --------------------
+ with torch.no_grad():
+ if args.task_name == 'depth':
+ test_data_dir = os.path.join(args.base_test_data_dir, args.task_name)
+ test_depth_dataset_configs = {
+ "nyuv2": "configs/data_nyu_test.yaml",
+ "kitti": "configs/data_kitti_eigen_test.yaml",
+ "scannet": "configs/data_scannet_val.yaml",
+ "eth3d": "configs/data_eth3d.yaml",
+ "diode": "configs/data_diode_all.yaml",
+ }
+ for dataset_name, config_path in test_depth_dataset_configs.items():
+ eval_dir = os.path.join(args.output_dir, args.task_name, dataset_name)
+ test_dataset_config = os.path.join(test_data_dir, config_path)
+ alignment_type = "least_square_disparity" if args.disparity else "least_square"
+ metric_tracker = evaluation_depth(eval_dir, test_dataset_config, test_data_dir, eval_mode="generate_prediction",
+ gen_prediction=gen_depth, pipeline=pipeline, alignment=alignment_type, processing_res=None)
+ print(dataset_name,',', 'abs_relative_difference: ', metric_tracker.result()['abs_relative_difference'], 'delta1_acc: ', metric_tracker.result()['delta1_acc'])
+ elif args.task_name == 'normal':
+ test_data_dir = os.path.join(args.base_test_data_dir, args.task_name)
+ dataset_split_path = "evaluation/dataset_normal"
+ eval_datasets = [ ('nyuv2', 'test'), ('scannet', 'test'), ('ibims', 'ibims'), ('sintel', 'sintel'), ('oasis', 'val')]
+ eval_dir = os.path.join(args.output_dir, args.task_name)
+ evaluation_normal(eval_dir, test_data_dir, dataset_split_path, eval_mode="generate_prediction",
+ gen_prediction=gen_normal, pipeline=pipeline, eval_datasets=eval_datasets,
+ processing_res=processing_res)
+ else:
+ raise ValueError(f"Not support predicting {args.task_name} yet. ")
+
+ print('==> Evaluation is done. \n==> Results saved to:', args.output_dir)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/Lotus/eval_scripts/eval-depth-d.sh b/Lotus/eval_scripts/eval-depth-d.sh
new file mode 100644
index 0000000000000000000000000000000000000000..808967c63be891d9aba87fa81f028a6006e104c9
--- /dev/null
+++ b/Lotus/eval_scripts/eval-depth-d.sh
@@ -0,0 +1,22 @@
+
+export CUDA=0
+
+export BASE_TEST_DATA_DIR="datasets/eval/"
+
+export CHECKPOINT_DIR="jingheya/lotus-depth-d-v2-0-disparity"
+export OUTPUT_DIR="output/Depth_D_Eval"
+export TASK_NAME="depth"
+
+export MODE="regression"
+
+CUDA_VISIBLE_DEVICES=$CUDA python eval.py \
+ --pretrained_model_name_or_path=$CHECKPOINT_DIR \
+ --prediction_type="sample" \
+ --seed=42 \
+ --half_precision \
+ --base_test_data_dir=$BASE_TEST_DATA_DIR \
+ --task_name=$TASK_NAME \
+ --mode=$MODE \
+ --output_dir=$OUTPUT_DIR \
+ --disparity
+ # The defualt `processing_res` is set in the configuration file of each dataset.
diff --git a/Lotus/eval_scripts/eval-depth-g.sh b/Lotus/eval_scripts/eval-depth-g.sh
new file mode 100644
index 0000000000000000000000000000000000000000..ae4fd75b1f98f53aaf1517e3643deece027ebd40
--- /dev/null
+++ b/Lotus/eval_scripts/eval-depth-g.sh
@@ -0,0 +1,22 @@
+
+export CUDA=0
+
+export BASE_TEST_DATA_DIR="datasets/eval/"
+
+export CHECKPOINT_DIR="jingheya/lotus-depth-g-v2-1-disparity"
+export OUTPUT_DIR="output/Depth_G_Eval"
+export TASK_NAME="depth"
+
+export MODE="generation"
+
+CUDA_VISIBLE_DEVICES=$CUDA python eval.py \
+ --pretrained_model_name_or_path=$CHECKPOINT_DIR \
+ --prediction_type="sample" \
+ --seed=42 \
+ --half_precision \
+ --base_test_data_dir=$BASE_TEST_DATA_DIR \
+ --task_name=$TASK_NAME \
+ --mode=$MODE \
+ --output_dir=$OUTPUT_DIR \
+ --disparity
+ # The defualt `processing_res` is set in the configuration file of each dataset.
diff --git a/Lotus/eval_scripts/eval-normal-d.sh b/Lotus/eval_scripts/eval-normal-d.sh
new file mode 100644
index 0000000000000000000000000000000000000000..72c6a096f8146a02e56f158d87d24bb872a149c5
--- /dev/null
+++ b/Lotus/eval_scripts/eval-normal-d.sh
@@ -0,0 +1,22 @@
+
+export CUDA=0
+
+export BASE_TEST_DATA_DIR="datasets/eval/"
+
+export CHECKPOINT_DIR="jingheya/lotus-normal-d-v1-1"
+export OUTPUT_DIR="output/Normal_D_Eval"
+export TASK_NAME="normal"
+
+export MODE="regression"
+
+CUDA_VISIBLE_DEVICES=$CUDA python eval.py \
+ --pretrained_model_name_or_path=$CHECKPOINT_DIR \
+ --prediction_type="sample" \
+ --seed=42 \
+ --half_precision \
+ --base_test_data_dir=$BASE_TEST_DATA_DIR \
+ --task_name=$TASK_NAME \
+ --mode=$MODE \
+ --output_dir=$OUTPUT_DIR \
+ --disparity
+ # You can set `processing_res` for high-resolution images. Default: `--processing_res=None`.
\ No newline at end of file
diff --git a/Lotus/eval_scripts/eval-normal-g.sh b/Lotus/eval_scripts/eval-normal-g.sh
new file mode 100644
index 0000000000000000000000000000000000000000..498f1ae695e5ced210af536e62a15621ada61f44
--- /dev/null
+++ b/Lotus/eval_scripts/eval-normal-g.sh
@@ -0,0 +1,22 @@
+
+export CUDA=0
+
+export BASE_TEST_DATA_DIR="datasets/eval/"
+
+export CHECKPOINT_DIR="jingheya/lotus-normal-g-v1-1"
+export OUTPUT_DIR="output/Normal_G_Eval"
+export TASK_NAME="normal"
+
+export MODE="generation"
+
+CUDA_VISIBLE_DEVICES=$CUDA python eval.py \
+ --pretrained_model_name_or_path=$CHECKPOINT_DIR \
+ --prediction_type="sample" \
+ --seed=42 \
+ --half_precision \
+ --base_test_data_dir=$BASE_TEST_DATA_DIR \
+ --task_name=$TASK_NAME \
+ --mode=$MODE \
+ --output_dir=$OUTPUT_DIR \
+ --disparity
+ # You can set `processing_res` for high-resolution images. Default: `--processing_res=None`.
diff --git a/Lotus/evaluation/dataset_depth/__init__.py b/Lotus/evaluation/dataset_depth/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..847857cb2f119621dbfb006fd9ff40c77bef5abc
--- /dev/null
+++ b/Lotus/evaluation/dataset_depth/__init__.py
@@ -0,0 +1,37 @@
+# Author: Bingxin Ke
+# Last modified: 2024-03-30
+
+import os
+
+from .base_depth_dataset import BaseDepthDataset, get_pred_name, DatasetMode # noqa: F401
+from .eth3d_dataset import ETH3DDataset
+from .kitti_dataset import KITTIDataset
+from .nyu_dataset import NYUDataset
+from .scannet_dataset import ScanNetDataset
+from .diode_dataset import DIODEDataset
+
+dataset_name_class_dict = {
+ "nyu_v2": NYUDataset,
+ "kitti": KITTIDataset,
+ "eth3d": ETH3DDataset,
+ "scannet": ScanNetDataset,
+ "diode": DIODEDataset,
+}
+
+
+def get_dataset(
+ cfg_data_split, base_data_dir: str, mode: DatasetMode, **kwargs
+) -> BaseDepthDataset:
+ if cfg_data_split.name in dataset_name_class_dict.keys():
+ dataset_class = dataset_name_class_dict[cfg_data_split.name]
+ dataset = dataset_class(
+ mode=mode,
+ filename_ls_path=cfg_data_split.filenames,
+ dataset_dir=os.path.join(base_data_dir, cfg_data_split.dir),
+ **cfg_data_split,
+ **kwargs,
+ )
+ else:
+ raise NotImplementedError
+
+ return dataset
diff --git a/Lotus/evaluation/dataset_depth/base_depth_dataset.py b/Lotus/evaluation/dataset_depth/base_depth_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..878c03a3340079dab4dc9a98e0301266488bdbd7
--- /dev/null
+++ b/Lotus/evaluation/dataset_depth/base_depth_dataset.py
@@ -0,0 +1,256 @@
+# Author: Bingxin Ke
+# Last modified: 2024-04-15
+
+import io
+import os
+import random
+import tarfile
+from enum import Enum
+
+import numpy as np
+import torch
+from PIL import Image
+from torch.utils.data import Dataset
+from torchvision.transforms import InterpolationMode, Resize
+
+
+class DatasetMode(Enum):
+ RGB_ONLY = "rgb_only"
+ EVAL = "evaluate"
+ TRAIN = "train"
+
+
+def read_image_from_tar(tar_obj, img_rel_path):
+ image = tar_obj.extractfile("./" + img_rel_path)
+ image = image.read()
+ image = Image.open(io.BytesIO(image))
+
+
+class BaseDepthDataset(Dataset):
+ def __init__(
+ self,
+ mode: DatasetMode,
+ filename_ls_path: str,
+ dataset_dir: str,
+ disp_name: str,
+ min_depth,
+ max_depth,
+ has_filled_depth,
+ name_mode,
+ depth_transform=None,
+ augmentation_args: dict = None,
+ resize_to_hw=None,
+ move_invalid_to_far_plane: bool = True,
+ rgb_transform=lambda x: x / 255.0 * 2 - 1, # [0, 255] -> [-1, 1],
+ **kwargs,
+ ) -> None:
+ super().__init__()
+ self.mode = mode
+ # dataset info
+ self.filename_ls_path = filename_ls_path
+ self.dataset_dir = dataset_dir
+ self.disp_name = disp_name
+ self.has_filled_depth = has_filled_depth
+ self.name_mode: DepthFileNameMode = name_mode
+ self.min_depth = min_depth
+ self.max_depth = max_depth
+
+ # training arguments
+ self.depth_transform = depth_transform
+ self.augm_args = augmentation_args
+ self.resize_to_hw = resize_to_hw
+ self.rgb_transform = rgb_transform
+ self.move_invalid_to_far_plane = move_invalid_to_far_plane
+
+ # Load filenames
+ with open(self.filename_ls_path, "r") as f:
+ self.filenames = [
+ s.split() for s in f.readlines()
+ ] # [['rgb.png', 'depth.tif'], [], ...]
+
+ # Tar dataset
+ self.tar_obj = None
+ self.is_tar = (
+ True
+ if os.path.isfile(dataset_dir) and tarfile.is_tarfile(dataset_dir)
+ else False
+ )
+
+ def __len__(self):
+ return len(self.filenames)
+
+ def __getitem__(self, index):
+ rasters, other = self._get_data_item(index)
+ if DatasetMode.TRAIN == self.mode:
+ rasters = self._training_preprocess(rasters)
+ # merge
+ outputs = rasters
+ outputs.update(other)
+ return outputs
+
+ def _get_data_item(self, index):
+ rgb_rel_path, depth_rel_path, filled_rel_path = self._get_data_path(index=index)
+
+ rasters = {}
+
+ # RGB data
+ rasters.update(self._load_rgb_data(rgb_rel_path=rgb_rel_path))
+
+ # Depth data
+ if DatasetMode.RGB_ONLY != self.mode:
+ # load data
+ depth_data = self._load_depth_data(
+ depth_rel_path=depth_rel_path, filled_rel_path=filled_rel_path
+ )
+ rasters.update(depth_data)
+ # valid mask
+ rasters["valid_mask_raw"] = self._get_valid_mask(
+ rasters["depth_raw_linear"]
+ ).clone()
+ rasters["valid_mask_filled"] = self._get_valid_mask(
+ rasters["depth_filled_linear"]
+ ).clone()
+
+ other = {"index": index, "rgb_relative_path": rgb_rel_path}
+
+ return rasters, other
+
+ def _load_rgb_data(self, rgb_rel_path):
+ # Read RGB data
+ rgb = self._read_rgb_file(rgb_rel_path)
+
+ outputs = {
+ "rgb_int": torch.from_numpy(rgb).int(),
+ }
+ return outputs
+
+ def _load_depth_data(self, depth_rel_path, filled_rel_path):
+ # Read depth data
+ outputs = {}
+ depth_raw = self._read_depth_file(depth_rel_path).squeeze()
+ depth_raw_linear = torch.from_numpy(depth_raw).float().unsqueeze(0) # [1, H, W]
+ outputs["depth_raw_linear"] = depth_raw_linear.clone()
+
+ if self.has_filled_depth:
+ depth_filled = self._read_depth_file(filled_rel_path).squeeze()
+ depth_filled_linear = torch.from_numpy(depth_filled).float().unsqueeze(0)
+ outputs["depth_filled_linear"] = depth_filled_linear
+ else:
+ outputs["depth_filled_linear"] = depth_raw_linear.clone()
+
+ return outputs
+
+ def _get_data_path(self, index):
+ filename_line = self.filenames[index]
+
+ # Get data path
+ rgb_rel_path = filename_line[0]
+
+ depth_rel_path, filled_rel_path = None, None
+ if DatasetMode.RGB_ONLY != self.mode:
+ depth_rel_path = filename_line[1]
+ if self.has_filled_depth:
+ filled_rel_path = filename_line[2]
+ return rgb_rel_path, depth_rel_path, filled_rel_path
+
+ def _read_image(self, img_rel_path) -> np.ndarray:
+ if self.is_tar:
+ if self.tar_obj is None:
+ self.tar_obj = tarfile.open(self.dataset_dir)
+ image = self.tar_obj.extractfile("./" + img_rel_path)
+ image = image.read()
+ image = Image.open(io.BytesIO(image)) # [H, W, rgb]
+ else:
+ img_path = os.path.join(self.dataset_dir, img_rel_path)
+ image = Image.open(img_path)
+ image = np.asarray(image)
+ return image
+
+ def _read_rgb_file(self, rel_path) -> np.ndarray:
+ rgb = self._read_image(rel_path)
+ rgb = np.transpose(rgb, (2, 0, 1)).astype(int) # [rgb, H, W]
+ return rgb
+
+ def _read_depth_file(self, rel_path):
+ depth_in = self._read_image(rel_path)
+ # Replace code below to decode depth according to dataset definition
+ depth_decoded = depth_in
+
+ return depth_decoded
+
+ def _get_valid_mask(self, depth: torch.Tensor):
+ valid_mask = torch.logical_and(
+ (depth > self.min_depth), (depth < self.max_depth)
+ ).bool()
+ return valid_mask
+
+ def _training_preprocess(self, rasters):
+ # Augmentation
+ if self.augm_args is not None:
+ rasters = self._augment_data(rasters)
+
+ # Normalization
+ rasters["depth_raw_norm"] = self.depth_transform(
+ rasters["depth_raw_linear"], rasters["valid_mask_raw"]
+ ).clone()
+ rasters["depth_filled_norm"] = self.depth_transform(
+ rasters["depth_filled_linear"], rasters["valid_mask_filled"]
+ ).clone()
+
+ # Set invalid pixel to far plane
+ if self.move_invalid_to_far_plane:
+ if self.depth_transform.far_plane_at_max:
+ rasters["depth_filled_norm"][~rasters["valid_mask_filled"]] = (
+ self.depth_transform.norm_max
+ )
+ else:
+ rasters["depth_filled_norm"][~rasters["valid_mask_filled"]] = (
+ self.depth_transform.norm_min
+ )
+
+ # Resize
+ if self.resize_to_hw is not None:
+ resize_transform = Resize(
+ size=self.resize_to_hw, interpolation=InterpolationMode.NEAREST_EXACT
+ )
+ rasters = {k: resize_transform(v) for k, v in rasters.items()}
+
+ return rasters
+
+ def _augment_data(self, rasters_dict):
+ # lr flipping
+ lr_flip_p = self.augm_args.lr_flip_p
+ if random.random() < lr_flip_p:
+ rasters_dict = {k: v.flip(-1) for k, v in rasters_dict.items()}
+
+ return rasters_dict
+
+ def __del__(self):
+ if self.tar_obj is not None:
+ self.tar_obj.close()
+ self.tar_obj = None
+
+
+# Prediction file naming modes
+class DepthFileNameMode(Enum):
+ id = 1 # id.png
+ rgb_id = 2 # rgb_id.png
+ i_d_rgb = 3 # i_d_1_rgb.png
+ rgb_i_d = 4
+
+
+def get_pred_name(rgb_basename, name_mode, suffix=".png"):
+ if DepthFileNameMode.rgb_id == name_mode:
+ pred_basename = "pred_" + rgb_basename.split("_")[1]
+ elif DepthFileNameMode.i_d_rgb == name_mode:
+ pred_basename = rgb_basename.replace("_rgb.", "_pred.")
+ elif DepthFileNameMode.id == name_mode:
+ pred_basename = "pred_" + rgb_basename
+ elif DepthFileNameMode.rgb_i_d == name_mode:
+ pred_basename = "pred_" + "_".join(rgb_basename.split("_")[1:])
+ else:
+ raise NotImplementedError
+ # change suffix
+ pred_basename = os.path.splitext(pred_basename)[0] + suffix
+
+ return pred_basename
diff --git a/Lotus/evaluation/dataset_depth/diode_dataset.py b/Lotus/evaluation/dataset_depth/diode_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..81dc62f170aa13beb23f17226366de13f3c1443a
--- /dev/null
+++ b/Lotus/evaluation/dataset_depth/diode_dataset.py
@@ -0,0 +1,72 @@
+# Author: Bingxin Ke
+# Last modified: 2024-02-26
+
+import os
+import tarfile
+from io import BytesIO
+
+import numpy as np
+import torch
+
+from .base_depth_dataset import BaseDepthDataset, DepthFileNameMode, DatasetMode
+
+
+class DIODEDataset(BaseDepthDataset):
+ def __init__(
+ self,
+ **kwargs,
+ ) -> None:
+ super().__init__(
+ # DIODE data parameter
+ min_depth=0.6,
+ max_depth=350,
+ has_filled_depth=False,
+ name_mode=DepthFileNameMode.id,
+ **kwargs,
+ )
+
+ def _read_npy_file(self, rel_path):
+ if self.is_tar:
+ if self.tar_obj is None:
+ self.tar_obj = tarfile.open(self.dataset_dir)
+ fileobj = self.tar_obj.extractfile("./" + rel_path)
+ npy_path_or_content = BytesIO(fileobj.read())
+ else:
+ npy_path_or_content = os.path.join(self.dataset_dir, rel_path)
+ data = np.load(npy_path_or_content).squeeze()[np.newaxis, :, :]
+ return data
+
+ def _read_depth_file(self, rel_path):
+ depth = self._read_npy_file(rel_path)
+ return depth
+
+ def _get_data_path(self, index):
+ return self.filenames[index]
+
+ def _get_data_item(self, index):
+ # Special: depth mask is read from data
+
+ rgb_rel_path, depth_rel_path, mask_rel_path = self._get_data_path(index=index)
+
+ rasters = {}
+
+ # RGB data
+ rasters.update(self._load_rgb_data(rgb_rel_path=rgb_rel_path))
+
+ # Depth data
+ if DatasetMode.RGB_ONLY != self.mode:
+ # load data
+ depth_data = self._load_depth_data(
+ depth_rel_path=depth_rel_path, filled_rel_path=None
+ )
+ rasters.update(depth_data)
+
+ # valid mask
+ mask = self._read_npy_file(mask_rel_path).astype(bool)
+ mask = torch.from_numpy(mask).bool()
+ rasters["valid_mask_raw"] = mask.clone()
+ rasters["valid_mask_filled"] = mask.clone()
+
+ other = {"index": index, "rgb_relative_path": rgb_rel_path}
+
+ return rasters, other
diff --git a/Lotus/evaluation/dataset_depth/eth3d_dataset.py b/Lotus/evaluation/dataset_depth/eth3d_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..34acce06a39bd3226a8f4062b799767dac29e22e
--- /dev/null
+++ b/Lotus/evaluation/dataset_depth/eth3d_dataset.py
@@ -0,0 +1,46 @@
+# Author: Bingxin Ke
+# Last modified: 2024-02-08
+
+import torch
+import tarfile
+import os
+import numpy as np
+
+from .base_depth_dataset import BaseDepthDataset, DepthFileNameMode
+
+
+class ETH3DDataset(BaseDepthDataset):
+ HEIGHT, WIDTH = 4032, 6048
+
+ def __init__(
+ self,
+ **kwargs,
+ ) -> None:
+ super().__init__(
+ # ETH3D data parameter
+ min_depth=1e-5,
+ max_depth=torch.inf,
+ has_filled_depth=False,
+ name_mode=DepthFileNameMode.id,
+ **kwargs,
+ )
+
+ def _read_depth_file(self, rel_path):
+ # Read special binary data: https://www.eth3d.net/documentation#format-of-multi-view-data-image-formats
+ if self.is_tar:
+ if self.tar_obj is None:
+ self.tar_obj = tarfile.open(self.dataset_dir)
+ binary_data = self.tar_obj.extractfile("./" + rel_path)
+ binary_data = binary_data.read()
+
+ else:
+ depth_path = os.path.join(self.dataset_dir, rel_path)
+ with open(depth_path, "rb") as file:
+ binary_data = file.read()
+ # Convert the binary data to a numpy array of 32-bit floats
+ depth_decoded = np.frombuffer(binary_data, dtype=np.float32).copy()
+
+ depth_decoded[depth_decoded == torch.inf] = 0.0
+
+ depth_decoded = depth_decoded.reshape((self.HEIGHT, self.WIDTH))
+ return depth_decoded
diff --git a/Lotus/evaluation/dataset_depth/kitti_dataset.py b/Lotus/evaluation/dataset_depth/kitti_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..7cde0bb5d3f2bf4851c476c73c75fa91f8aad742
--- /dev/null
+++ b/Lotus/evaluation/dataset_depth/kitti_dataset.py
@@ -0,0 +1,105 @@
+# Author: Bingxin Ke
+# Last modified: 2024-02-08
+
+import torch
+
+from .base_depth_dataset import BaseDepthDataset, DepthFileNameMode
+
+
+class KITTIDataset(BaseDepthDataset):
+ def __init__(
+ self,
+ kitti_bm_crop, # Crop to KITTI benchmark size
+ valid_mask_crop, # Evaluation mask. [None, garg or eigen]
+ **kwargs,
+ ) -> None:
+ super().__init__(
+ # KITTI data parameter
+ min_depth=1e-5,
+ max_depth=80,
+ has_filled_depth=False,
+ name_mode=DepthFileNameMode.id,
+ **kwargs,
+ )
+ self.kitti_bm_crop = kitti_bm_crop
+ self.valid_mask_crop = valid_mask_crop
+ assert self.valid_mask_crop in [
+ None,
+ "garg", # set evaluation mask according to Garg ECCV16
+ "eigen", # set evaluation mask according to Eigen NIPS14
+ ], f"Unknown crop type: {self.valid_mask_crop}"
+
+ # Filter out empty depth
+ self.filenames = [f for f in self.filenames if "None" != f[1]]
+
+ def _read_depth_file(self, rel_path):
+ depth_in = self._read_image(rel_path)
+ # Decode KITTI depth
+ depth_decoded = depth_in / 256.0
+ return depth_decoded
+
+ def _load_rgb_data(self, rgb_rel_path):
+ rgb_data = super()._load_rgb_data(rgb_rel_path)
+ if self.kitti_bm_crop:
+ rgb_data = {k: self.kitti_benchmark_crop(v) for k, v in rgb_data.items()}
+ return rgb_data
+
+ def _load_depth_data(self, depth_rel_path, filled_rel_path):
+ depth_data = super()._load_depth_data(depth_rel_path, filled_rel_path)
+ if self.kitti_bm_crop:
+ depth_data = {
+ k: self.kitti_benchmark_crop(v) for k, v in depth_data.items()
+ }
+ return depth_data
+
+ @staticmethod
+ def kitti_benchmark_crop(input_img):
+ """
+ Crop images to KITTI benchmark size
+ Args:
+ `input_img` (torch.Tensor): Input image to be cropped.
+
+ Returns:
+ torch.Tensor:Cropped image.
+ """
+ KB_CROP_HEIGHT = 352
+ KB_CROP_WIDTH = 1216
+
+ height, width = input_img.shape[-2:]
+ top_margin = int(height - KB_CROP_HEIGHT)
+ left_margin = int((width - KB_CROP_WIDTH) / 2)
+ if 2 == len(input_img.shape):
+ out = input_img[
+ top_margin : top_margin + KB_CROP_HEIGHT,
+ left_margin : left_margin + KB_CROP_WIDTH,
+ ]
+ elif 3 == len(input_img.shape):
+ out = input_img[
+ :,
+ top_margin : top_margin + KB_CROP_HEIGHT,
+ left_margin : left_margin + KB_CROP_WIDTH,
+ ]
+ return out
+
+ def _get_valid_mask(self, depth: torch.Tensor):
+ # reference: https://github.com/cleinc/bts/blob/master/pytorch/bts_eval.py
+ valid_mask = super()._get_valid_mask(depth) # [1, H, W]
+
+ if self.valid_mask_crop is not None:
+ eval_mask = torch.zeros_like(valid_mask.squeeze()).bool()
+ gt_height, gt_width = eval_mask.shape
+
+ if "garg" == self.valid_mask_crop:
+ eval_mask[
+ int(0.40810811 * gt_height) : int(0.99189189 * gt_height),
+ int(0.03594771 * gt_width) : int(0.96405229 * gt_width),
+ ] = 1
+ elif "eigen" == self.valid_mask_crop:
+ eval_mask[
+ int(0.3324324 * gt_height) : int(0.91351351 * gt_height),
+ int(0.0359477 * gt_width) : int(0.96405229 * gt_width),
+ ] = 1
+
+ eval_mask.reshape(valid_mask.shape)
+ valid_mask = torch.logical_and(valid_mask, eval_mask)
+ return valid_mask
diff --git a/Lotus/evaluation/dataset_depth/nyu_dataset.py b/Lotus/evaluation/dataset_depth/nyu_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..e073c4c757eab182c9385ef06f897d6a5fa16491
--- /dev/null
+++ b/Lotus/evaluation/dataset_depth/nyu_dataset.py
@@ -0,0 +1,43 @@
+# Author: Bingxin Ke
+# Last modified: 2024-02-08
+
+
+import torch
+
+from .base_depth_dataset import BaseDepthDataset, DepthFileNameMode
+
+
+class NYUDataset(BaseDepthDataset):
+ def __init__(
+ self,
+ eigen_valid_mask: bool,
+ **kwargs,
+ ) -> None:
+ super().__init__(
+ # NYUv2 dataset parameter
+ min_depth=1e-3,
+ max_depth=10.0,
+ has_filled_depth=True,
+ name_mode=DepthFileNameMode.rgb_id,
+ **kwargs,
+ )
+
+ self.eigen_valid_mask = eigen_valid_mask
+
+ def _read_depth_file(self, rel_path):
+ depth_in = self._read_image(rel_path)
+ # Decode NYU depth
+ depth_decoded = depth_in / 1000.0
+ return depth_decoded
+
+ def _get_valid_mask(self, depth: torch.Tensor):
+ valid_mask = super()._get_valid_mask(depth)
+
+ # Eigen crop for evaluation
+ if self.eigen_valid_mask:
+ eval_mask = torch.zeros_like(valid_mask.squeeze()).bool()
+ eval_mask[45:471, 41:601] = 1
+ eval_mask.reshape(valid_mask.shape)
+ valid_mask = torch.logical_and(valid_mask, eval_mask)
+
+ return valid_mask
diff --git a/Lotus/evaluation/dataset_depth/scannet_dataset.py b/Lotus/evaluation/dataset_depth/scannet_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..251ba66be02d3fcf27191af7b2a77f1fd56b1462
--- /dev/null
+++ b/Lotus/evaluation/dataset_depth/scannet_dataset.py
@@ -0,0 +1,25 @@
+# Author: Bingxin Ke
+# Last modified: 2024-02-08
+
+from .base_depth_dataset import BaseDepthDataset, DepthFileNameMode
+
+
+class ScanNetDataset(BaseDepthDataset):
+ def __init__(
+ self,
+ **kwargs,
+ ) -> None:
+ super().__init__(
+ # ScanNet data parameter
+ min_depth=1e-3,
+ max_depth=10,
+ has_filled_depth=False,
+ name_mode=DepthFileNameMode.id,
+ **kwargs,
+ )
+
+ def _read_depth_file(self, rel_path):
+ depth_in = self._read_image(rel_path)
+ # Decode ScanNet depth
+ depth_decoded = depth_in / 1000.0
+ return depth_decoded
diff --git a/Lotus/evaluation/dataset_normal/__init__.py b/Lotus/evaluation/dataset_normal/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..fa59c8f842505001baa3f69d812a5afd2baf5c35
--- /dev/null
+++ b/Lotus/evaluation/dataset_normal/__init__.py
@@ -0,0 +1,27 @@
+""" data sample
+"""
+class Sample():
+ def __init__(self, img=None,
+ depth=None, depth_mask=None,
+ normal=None, normal_mask=None,
+ intrins=None, flipped=False,
+ dataset_name='dataset', scene_name='scene', img_name='img',
+ info={}):
+
+ self.img = img # input image
+
+ self.depth = depth # depth - GT
+ self.depth_mask = depth_mask # depth - valid_mask
+
+ self.normal = normal # surface normals - GT
+ self.normal_mask = normal_mask # surface normals - valid_mask
+
+ self.intrins = intrins # camera intrinsics
+ self.flipped = flipped # True when the image is flipped during augmentation
+
+ self.dataset_name = dataset_name
+ self.scene_name = scene_name
+ self.img_name = img_name
+
+ # other info (this is a dict containing any additional information)
+ self.info = info
\ No newline at end of file
diff --git a/Lotus/evaluation/dataset_normal/normal_dataloader.py b/Lotus/evaluation/dataset_normal/normal_dataloader.py
new file mode 100644
index 0000000000000000000000000000000000000000..81b2c0a6926d98e9030b2ef008b7c513519951e1
--- /dev/null
+++ b/Lotus/evaluation/dataset_normal/normal_dataloader.py
@@ -0,0 +1,79 @@
+import os
+import random
+
+import torch
+from torch.utils.data import Dataset
+from torch.utils.data import DataLoader
+from torchvision import transforms
+
+from . import aug_basic
+
+import logging
+logger = logging.getLogger('root')
+
+
+def get_transform(dataset_name='hypersim', mode='test'):
+ assert mode in ['test']
+ logger.info('Defining %s transform for %s dataset' % (mode, dataset_name))
+ tf_list = [
+ aug_basic.ToTensor(),
+ ]
+ tf_list += [
+ aug_basic.Normalize(mean=[0.5],std=[0.5]),
+ aug_basic.ToDict(),
+ ]
+ logger.info('Defining %s transform for %s dataset ... DONE' % (mode, dataset_name))
+ return transforms.Compose(tf_list)
+
+
+class NormalDataset(Dataset):
+ def __init__(self, base_data_dir, dataset_split_path, dataset_name='nyuv2', split='test', mode='test', epoch=0):
+ self.split = split
+ self.mode = mode
+ self.base_data_dir = base_data_dir
+ assert mode in ['test']
+
+ # data split
+ split_path = os.path.join(dataset_split_path, dataset_name, 'split', split+'.txt') # dataset_split_path: eval/dataset_normal/
+ assert os.path.exists(split_path)
+ with open(split_path, 'r') as f:
+ self.filenames = [i.strip() for i in f.readlines()]
+ self.split_path = split_path
+
+ # get_sample function
+ if dataset_name == 'nyuv2':
+ from evaluation.dataset_normal.nyuv2 import get_sample
+ elif dataset_name == 'scannet':
+ from evaluation.dataset_normal.scannet import get_sample
+ elif dataset_name == 'ibims':
+ from evaluation.dataset_normal.ibims import get_sample
+ elif dataset_name == 'sintel':
+ from evaluation.dataset_normal.sintel import get_sample
+ elif dataset_name == 'vkitti':
+ from evaluation.dataset_normal.vkitti import get_sample
+ elif dataset_name == 'oasis':
+ from evaluation.dataset_normal.oasis import get_sample
+ self.get_sample = get_sample
+
+ # data preprocessing/augmentation
+ self.transform = get_transform(dataset_name=dataset_name, mode=mode)
+
+ def __len__(self):
+ return len(self.filenames)
+
+ def __getitem__(self, index):
+ info = {}
+
+ sample = self.transform(self.get_sample(
+ base_data_dir = self.base_data_dir,
+ sample_path=self.filenames[index],
+ info=info)
+ )
+
+ return sample
+
+class TestLoader(object):
+ def __init__(self, base_data_dir, dataset_split_path, dataset_name_test, test_split):
+ self.test_samples = NormalDataset(base_data_dir, dataset_split_path, dataset_name=dataset_name_test,
+ split=test_split, mode='test', epoch=None)
+ self.data = DataLoader(self.test_samples, 1, shuffle=False, num_workers=1, pin_memory=True)
diff --git a/Lotus/evaluation/dataset_normal/nyuv2/__init__.py b/Lotus/evaluation/dataset_normal/nyuv2/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..cde15008871a6be4b3accf9a9935c91323344e00
--- /dev/null
+++ b/Lotus/evaluation/dataset_normal/nyuv2/__init__.py
@@ -0,0 +1,48 @@
+""" Get samples from NYUv2 (https://cs.nyu.edu/~fergus/datasets/nyu_depth_v2.html)
+ NOTE: GT surface normals are from GeoNet (CVPR 2018) - https://github.com/xjqi/GeoNet
+"""
+import os
+import cv2
+import numpy as np
+
+from evaluation.dataset_normal import Sample
+
+
+def get_sample(base_data_dir, sample_path, info):
+ # e.g. sample_path = "test/000000_img.png"
+ scene_name = sample_path.split('/')[0]
+ img_name, img_ext = sample_path.split('/')[1].split('_img')
+
+ dataset_path = os.path.join(base_data_dir, 'dsine_eval', 'nyuv2')
+ img_path = '%s/%s' % (dataset_path, sample_path)
+ normal_path = img_path.replace('_img'+img_ext, '_normal.png')
+ intrins_path = img_path.replace('_img'+img_ext, '_intrins.npy')
+ assert os.path.exists(img_path)
+ assert os.path.exists(normal_path)
+ assert os.path.exists(intrins_path)
+
+ # read image (H, W, 3)
+ img = cv2.cvtColor(cv2.imread(img_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ img = img.astype(np.float32) / 255.0
+
+ # read normal (H, W, 3)
+ normal = cv2.cvtColor(cv2.imread(normal_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ normal_mask = np.sum(normal, axis=2, keepdims=True) > 0
+ normal = (normal.astype(np.float32) / 255.0) * 2.0 - 1.0
+
+ # read intrins (3, 3)
+ intrins = np.load(intrins_path)
+
+ sample = Sample(
+ img=img,
+ normal=normal,
+ normal_mask=normal_mask,
+ intrins=intrins,
+
+ dataset_name='nyuv2',
+ scene_name=scene_name,
+ img_name=img_name,
+ info=info
+ )
+
+ return sample
\ No newline at end of file
diff --git a/Lotus/evaluation/dataset_normal/nyuv2/split/test.txt b/Lotus/evaluation/dataset_normal/nyuv2/split/test.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1ee98378c85a069a8fae059169a1118ad50712a3
--- /dev/null
+++ b/Lotus/evaluation/dataset_normal/nyuv2/split/test.txt
@@ -0,0 +1,654 @@
+test/000000_img.png
+test/000001_img.png
+test/000008_img.png
+test/000013_img.png
+test/000014_img.png
+test/000015_img.png
+test/000016_img.png
+test/000017_img.png
+test/000020_img.png
+test/000027_img.png
+test/000028_img.png
+test/000029_img.png
+test/000030_img.png
+test/000031_img.png
+test/000032_img.png
+test/000033_img.png
+test/000034_img.png
+test/000035_img.png
+test/000036_img.png
+test/000037_img.png
+test/000038_img.png
+test/000039_img.png
+test/000040_img.png
+test/000041_img.png
+test/000042_img.png
+test/000045_img.png
+test/000046_img.png
+test/000055_img.png
+test/000056_img.png
+test/000058_img.png
+test/000059_img.png
+test/000060_img.png
+test/000061_img.png
+test/000062_img.png
+test/000075_img.png
+test/000076_img.png
+test/000077_img.png
+test/000078_img.png
+test/000083_img.png
+test/000084_img.png
+test/000085_img.png
+test/000086_img.png
+test/000087_img.png
+test/000088_img.png
+test/000089_img.png
+test/000090_img.png
+test/000116_img.png
+test/000117_img.png
+test/000118_img.png
+test/000124_img.png
+test/000125_img.png
+test/000126_img.png
+test/000127_img.png
+test/000128_img.png
+test/000130_img.png
+test/000131_img.png
+test/000132_img.png
+test/000133_img.png
+test/000136_img.png
+test/000152_img.png
+test/000153_img.png
+test/000154_img.png
+test/000166_img.png
+test/000167_img.png
+test/000168_img.png
+test/000170_img.png
+test/000171_img.png
+test/000172_img.png
+test/000173_img.png
+test/000174_img.png
+test/000175_img.png
+test/000179_img.png
+test/000180_img.png
+test/000181_img.png
+test/000182_img.png
+test/000183_img.png
+test/000184_img.png
+test/000185_img.png
+test/000186_img.png
+test/000187_img.png
+test/000188_img.png
+test/000189_img.png
+test/000190_img.png
+test/000191_img.png
+test/000192_img.png
+test/000193_img.png
+test/000194_img.png
+test/000195_img.png
+test/000196_img.png
+test/000197_img.png
+test/000198_img.png
+test/000199_img.png
+test/000200_img.png
+test/000201_img.png
+test/000206_img.png
+test/000207_img.png
+test/000208_img.png
+test/000209_img.png
+test/000210_img.png
+test/000211_img.png
+test/000219_img.png
+test/000220_img.png
+test/000221_img.png
+test/000249_img.png
+test/000263_img.png
+test/000270_img.png
+test/000271_img.png
+test/000272_img.png
+test/000278_img.png
+test/000279_img.png
+test/000280_img.png
+test/000281_img.png
+test/000282_img.png
+test/000283_img.png
+test/000284_img.png
+test/000295_img.png
+test/000296_img.png
+test/000297_img.png
+test/000298_img.png
+test/000299_img.png
+test/000300_img.png
+test/000301_img.png
+test/000309_img.png
+test/000310_img.png
+test/000311_img.png
+test/000314_img.png
+test/000315_img.png
+test/000316_img.png
+test/000324_img.png
+test/000325_img.png
+test/000326_img.png
+test/000327_img.png
+test/000328_img.png
+test/000329_img.png
+test/000330_img.png
+test/000331_img.png
+test/000332_img.png
+test/000333_img.png
+test/000334_img.png
+test/000350_img.png
+test/000351_img.png
+test/000354_img.png
+test/000355_img.png
+test/000356_img.png
+test/000357_img.png
+test/000358_img.png
+test/000359_img.png
+test/000360_img.png
+test/000361_img.png
+test/000362_img.png
+test/000363_img.png
+test/000383_img.png
+test/000384_img.png
+test/000385_img.png
+test/000386_img.png
+test/000387_img.png
+test/000388_img.png
+test/000389_img.png
+test/000394_img.png
+test/000395_img.png
+test/000396_img.png
+test/000410_img.png
+test/000411_img.png
+test/000412_img.png
+test/000413_img.png
+test/000429_img.png
+test/000430_img.png
+test/000431_img.png
+test/000432_img.png
+test/000433_img.png
+test/000434_img.png
+test/000440_img.png
+test/000441_img.png
+test/000442_img.png
+test/000443_img.png
+test/000444_img.png
+test/000445_img.png
+test/000446_img.png
+test/000447_img.png
+test/000461_img.png
+test/000462_img.png
+test/000463_img.png
+test/000464_img.png
+test/000465_img.png
+test/000468_img.png
+test/000469_img.png
+test/000470_img.png
+test/000471_img.png
+test/000472_img.png
+test/000473_img.png
+test/000474_img.png
+test/000475_img.png
+test/000476_img.png
+test/000507_img.png
+test/000508_img.png
+test/000509_img.png
+test/000510_img.png
+test/000511_img.png
+test/000512_img.png
+test/000514_img.png
+test/000515_img.png
+test/000516_img.png
+test/000517_img.png
+test/000518_img.png
+test/000519_img.png
+test/000520_img.png
+test/000521_img.png
+test/000522_img.png
+test/000523_img.png
+test/000524_img.png
+test/000525_img.png
+test/000530_img.png
+test/000531_img.png
+test/000532_img.png
+test/000536_img.png
+test/000537_img.png
+test/000538_img.png
+test/000548_img.png
+test/000549_img.png
+test/000550_img.png
+test/000554_img.png
+test/000555_img.png
+test/000556_img.png
+test/000557_img.png
+test/000558_img.png
+test/000559_img.png
+test/000560_img.png
+test/000561_img.png
+test/000562_img.png
+test/000563_img.png
+test/000564_img.png
+test/000565_img.png
+test/000566_img.png
+test/000567_img.png
+test/000568_img.png
+test/000569_img.png
+test/000570_img.png
+test/000578_img.png
+test/000579_img.png
+test/000580_img.png
+test/000581_img.png
+test/000582_img.png
+test/000590_img.png
+test/000591_img.png
+test/000592_img.png
+test/000593_img.png
+test/000602_img.png
+test/000603_img.png
+test/000604_img.png
+test/000605_img.png
+test/000606_img.png
+test/000611_img.png
+test/000612_img.png
+test/000616_img.png
+test/000617_img.png
+test/000618_img.png
+test/000619_img.png
+test/000620_img.png
+test/000632_img.png
+test/000633_img.png
+test/000634_img.png
+test/000635_img.png
+test/000636_img.png
+test/000637_img.png
+test/000643_img.png
+test/000644_img.png
+test/000649_img.png
+test/000650_img.png
+test/000655_img.png
+test/000656_img.png
+test/000657_img.png
+test/000662_img.png
+test/000663_img.png
+test/000667_img.png
+test/000668_img.png
+test/000669_img.png
+test/000670_img.png
+test/000671_img.png
+test/000672_img.png
+test/000675_img.png
+test/000676_img.png
+test/000677_img.png
+test/000678_img.png
+test/000679_img.png
+test/000680_img.png
+test/000685_img.png
+test/000686_img.png
+test/000687_img.png
+test/000688_img.png
+test/000689_img.png
+test/000692_img.png
+test/000693_img.png
+test/000696_img.png
+test/000697_img.png
+test/000698_img.png
+test/000705_img.png
+test/000706_img.png
+test/000707_img.png
+test/000708_img.png
+test/000709_img.png
+test/000710_img.png
+test/000711_img.png
+test/000712_img.png
+test/000716_img.png
+test/000717_img.png
+test/000723_img.png
+test/000724_img.png
+test/000725_img.png
+test/000726_img.png
+test/000727_img.png
+test/000730_img.png
+test/000731_img.png
+test/000732_img.png
+test/000733_img.png
+test/000742_img.png
+test/000743_img.png
+test/000758_img.png
+test/000759_img.png
+test/000760_img.png
+test/000761_img.png
+test/000762_img.png
+test/000763_img.png
+test/000764_img.png
+test/000765_img.png
+test/000766_img.png
+test/000767_img.png
+test/000768_img.png
+test/000769_img.png
+test/000770_img.png
+test/000771_img.png
+test/000772_img.png
+test/000773_img.png
+test/000774_img.png
+test/000775_img.png
+test/000776_img.png
+test/000777_img.png
+test/000778_img.png
+test/000779_img.png
+test/000780_img.png
+test/000781_img.png
+test/000782_img.png
+test/000783_img.png
+test/000784_img.png
+test/000785_img.png
+test/000786_img.png
+test/000799_img.png
+test/000800_img.png
+test/000801_img.png
+test/000802_img.png
+test/000803_img.png
+test/000809_img.png
+test/000810_img.png
+test/000811_img.png
+test/000812_img.png
+test/000813_img.png
+test/000820_img.png
+test/000821_img.png
+test/000822_img.png
+test/000832_img.png
+test/000833_img.png
+test/000834_img.png
+test/000835_img.png
+test/000836_img.png
+test/000837_img.png
+test/000838_img.png
+test/000839_img.png
+test/000840_img.png
+test/000841_img.png
+test/000842_img.png
+test/000843_img.png
+test/000844_img.png
+test/000845_img.png
+test/000849_img.png
+test/000850_img.png
+test/000851_img.png
+test/000856_img.png
+test/000857_img.png
+test/000858_img.png
+test/000859_img.png
+test/000860_img.png
+test/000861_img.png
+test/000868_img.png
+test/000869_img.png
+test/000870_img.png
+test/000905_img.png
+test/000906_img.png
+test/000907_img.png
+test/000916_img.png
+test/000917_img.png
+test/000918_img.png
+test/000925_img.png
+test/000926_img.png
+test/000927_img.png
+test/000931_img.png
+test/000932_img.png
+test/000933_img.png
+test/000934_img.png
+test/000944_img.png
+test/000945_img.png
+test/000946_img.png
+test/000958_img.png
+test/000959_img.png
+test/000960_img.png
+test/000961_img.png
+test/000964_img.png
+test/000965_img.png
+test/000966_img.png
+test/000969_img.png
+test/000970_img.png
+test/000971_img.png
+test/000972_img.png
+test/000973_img.png
+test/000974_img.png
+test/000975_img.png
+test/000976_img.png
+test/000990_img.png
+test/000991_img.png
+test/000992_img.png
+test/000993_img.png
+test/000994_img.png
+test/001000_img.png
+test/001001_img.png
+test/001002_img.png
+test/001003_img.png
+test/001009_img.png
+test/001010_img.png
+test/001011_img.png
+test/001020_img.png
+test/001021_img.png
+test/001022_img.png
+test/001031_img.png
+test/001032_img.png
+test/001033_img.png
+test/001037_img.png
+test/001038_img.png
+test/001047_img.png
+test/001048_img.png
+test/001051_img.png
+test/001052_img.png
+test/001056_img.png
+test/001057_img.png
+test/001074_img.png
+test/001075_img.png
+test/001076_img.png
+test/001077_img.png
+test/001078_img.png
+test/001079_img.png
+test/001080_img.png
+test/001081_img.png
+test/001082_img.png
+test/001083_img.png
+test/001087_img.png
+test/001088_img.png
+test/001089_img.png
+test/001090_img.png
+test/001091_img.png
+test/001092_img.png
+test/001093_img.png
+test/001094_img.png
+test/001095_img.png
+test/001097_img.png
+test/001098_img.png
+test/001099_img.png
+test/001100_img.png
+test/001101_img.png
+test/001102_img.png
+test/001103_img.png
+test/001105_img.png
+test/001106_img.png
+test/001107_img.png
+test/001108_img.png
+test/001116_img.png
+test/001117_img.png
+test/001118_img.png
+test/001122_img.png
+test/001123_img.png
+test/001124_img.png
+test/001125_img.png
+test/001126_img.png
+test/001127_img.png
+test/001128_img.png
+test/001129_img.png
+test/001130_img.png
+test/001134_img.png
+test/001135_img.png
+test/001143_img.png
+test/001144_img.png
+test/001145_img.png
+test/001146_img.png
+test/001147_img.png
+test/001148_img.png
+test/001149_img.png
+test/001150_img.png
+test/001151_img.png
+test/001152_img.png
+test/001153_img.png
+test/001154_img.png
+test/001155_img.png
+test/001156_img.png
+test/001157_img.png
+test/001161_img.png
+test/001162_img.png
+test/001163_img.png
+test/001164_img.png
+test/001165_img.png
+test/001166_img.png
+test/001169_img.png
+test/001170_img.png
+test/001173_img.png
+test/001174_img.png
+test/001175_img.png
+test/001178_img.png
+test/001179_img.png
+test/001180_img.png
+test/001181_img.png
+test/001182_img.png
+test/001183_img.png
+test/001191_img.png
+test/001192_img.png
+test/001193_img.png
+test/001194_img.png
+test/001195_img.png
+test/001200_img.png
+test/001201_img.png
+test/001202_img.png
+test/001203_img.png
+test/001204_img.png
+test/001205_img.png
+test/001206_img.png
+test/001207_img.png
+test/001208_img.png
+test/001209_img.png
+test/001210_img.png
+test/001211_img.png
+test/001215_img.png
+test/001216_img.png
+test/001217_img.png
+test/001218_img.png
+test/001219_img.png
+test/001225_img.png
+test/001226_img.png
+test/001227_img.png
+test/001228_img.png
+test/001229_img.png
+test/001232_img.png
+test/001233_img.png
+test/001234_img.png
+test/001246_img.png
+test/001247_img.png
+test/001248_img.png
+test/001249_img.png
+test/001253_img.png
+test/001254_img.png
+test/001255_img.png
+test/001256_img.png
+test/001257_img.png
+test/001258_img.png
+test/001259_img.png
+test/001260_img.png
+test/001261_img.png
+test/001262_img.png
+test/001263_img.png
+test/001264_img.png
+test/001274_img.png
+test/001275_img.png
+test/001276_img.png
+test/001277_img.png
+test/001278_img.png
+test/001279_img.png
+test/001284_img.png
+test/001285_img.png
+test/001286_img.png
+test/001287_img.png
+test/001288_img.png
+test/001289_img.png
+test/001290_img.png
+test/001291_img.png
+test/001292_img.png
+test/001293_img.png
+test/001294_img.png
+test/001296_img.png
+test/001297_img.png
+test/001298_img.png
+test/001301_img.png
+test/001302_img.png
+test/001303_img.png
+test/001304_img.png
+test/001305_img.png
+test/001306_img.png
+test/001307_img.png
+test/001313_img.png
+test/001314_img.png
+test/001328_img.png
+test/001329_img.png
+test/001330_img.png
+test/001331_img.png
+test/001334_img.png
+test/001335_img.png
+test/001336_img.png
+test/001337_img.png
+test/001338_img.png
+test/001339_img.png
+test/001346_img.png
+test/001347_img.png
+test/001348_img.png
+test/001352_img.png
+test/001353_img.png
+test/001354_img.png
+test/001355_img.png
+test/001363_img.png
+test/001364_img.png
+test/001367_img.png
+test/001368_img.png
+test/001383_img.png
+test/001384_img.png
+test/001385_img.png
+test/001386_img.png
+test/001387_img.png
+test/001388_img.png
+test/001389_img.png
+test/001390_img.png
+test/001393_img.png
+test/001394_img.png
+test/001395_img.png
+test/001396_img.png
+test/001397_img.png
+test/001398_img.png
+test/001399_img.png
+test/001400_img.png
+test/001406_img.png
+test/001407_img.png
+test/001408_img.png
+test/001409_img.png
+test/001410_img.png
+test/001411_img.png
+test/001412_img.png
+test/001413_img.png
+test/001420_img.png
+test/001421_img.png
+test/001422_img.png
+test/001423_img.png
+test/001429_img.png
+test/001430_img.png
+test/001431_img.png
+test/001432_img.png
+test/001440_img.png
+test/001441_img.png
+test/001442_img.png
+test/001443_img.png
+test/001444_img.png
+test/001445_img.png
+test/001446_img.png
+test/001447_img.png
+test/001448_img.png
\ No newline at end of file
diff --git a/Lotus/evaluation/dataset_normal/nyuv2/split/train.txt b/Lotus/evaluation/dataset_normal/nyuv2/split/train.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f03309626327e00831f870c666871f6fe2c9e890
--- /dev/null
+++ b/Lotus/evaluation/dataset_normal/nyuv2/split/train.txt
@@ -0,0 +1,795 @@
+train/000002_img.png
+train/000003_img.png
+train/000004_img.png
+train/000005_img.png
+train/000006_img.png
+train/000007_img.png
+train/000009_img.png
+train/000010_img.png
+train/000011_img.png
+train/000012_img.png
+train/000018_img.png
+train/000019_img.png
+train/000021_img.png
+train/000022_img.png
+train/000023_img.png
+train/000024_img.png
+train/000025_img.png
+train/000026_img.png
+train/000043_img.png
+train/000044_img.png
+train/000047_img.png
+train/000048_img.png
+train/000049_img.png
+train/000050_img.png
+train/000051_img.png
+train/000052_img.png
+train/000053_img.png
+train/000054_img.png
+train/000057_img.png
+train/000063_img.png
+train/000064_img.png
+train/000065_img.png
+train/000066_img.png
+train/000067_img.png
+train/000068_img.png
+train/000069_img.png
+train/000070_img.png
+train/000071_img.png
+train/000072_img.png
+train/000073_img.png
+train/000074_img.png
+train/000079_img.png
+train/000080_img.png
+train/000081_img.png
+train/000082_img.png
+train/000091_img.png
+train/000092_img.png
+train/000093_img.png
+train/000094_img.png
+train/000095_img.png
+train/000096_img.png
+train/000097_img.png
+train/000098_img.png
+train/000099_img.png
+train/000100_img.png
+train/000101_img.png
+train/000102_img.png
+train/000103_img.png
+train/000104_img.png
+train/000105_img.png
+train/000106_img.png
+train/000107_img.png
+train/000108_img.png
+train/000109_img.png
+train/000110_img.png
+train/000111_img.png
+train/000112_img.png
+train/000113_img.png
+train/000114_img.png
+train/000115_img.png
+train/000119_img.png
+train/000120_img.png
+train/000121_img.png
+train/000122_img.png
+train/000123_img.png
+train/000129_img.png
+train/000134_img.png
+train/000135_img.png
+train/000137_img.png
+train/000138_img.png
+train/000139_img.png
+train/000140_img.png
+train/000141_img.png
+train/000142_img.png
+train/000143_img.png
+train/000144_img.png
+train/000145_img.png
+train/000146_img.png
+train/000147_img.png
+train/000148_img.png
+train/000149_img.png
+train/000150_img.png
+train/000151_img.png
+train/000155_img.png
+train/000156_img.png
+train/000157_img.png
+train/000158_img.png
+train/000159_img.png
+train/000160_img.png
+train/000161_img.png
+train/000162_img.png
+train/000163_img.png
+train/000164_img.png
+train/000165_img.png
+train/000169_img.png
+train/000176_img.png
+train/000177_img.png
+train/000178_img.png
+train/000202_img.png
+train/000203_img.png
+train/000204_img.png
+train/000205_img.png
+train/000212_img.png
+train/000213_img.png
+train/000214_img.png
+train/000215_img.png
+train/000216_img.png
+train/000217_img.png
+train/000218_img.png
+train/000222_img.png
+train/000223_img.png
+train/000224_img.png
+train/000225_img.png
+train/000226_img.png
+train/000227_img.png
+train/000228_img.png
+train/000229_img.png
+train/000230_img.png
+train/000231_img.png
+train/000232_img.png
+train/000233_img.png
+train/000234_img.png
+train/000235_img.png
+train/000236_img.png
+train/000237_img.png
+train/000238_img.png
+train/000239_img.png
+train/000240_img.png
+train/000241_img.png
+train/000242_img.png
+train/000243_img.png
+train/000244_img.png
+train/000245_img.png
+train/000246_img.png
+train/000247_img.png
+train/000248_img.png
+train/000250_img.png
+train/000251_img.png
+train/000252_img.png
+train/000253_img.png
+train/000254_img.png
+train/000255_img.png
+train/000256_img.png
+train/000257_img.png
+train/000258_img.png
+train/000259_img.png
+train/000260_img.png
+train/000261_img.png
+train/000262_img.png
+train/000264_img.png
+train/000265_img.png
+train/000266_img.png
+train/000267_img.png
+train/000268_img.png
+train/000269_img.png
+train/000273_img.png
+train/000274_img.png
+train/000275_img.png
+train/000276_img.png
+train/000277_img.png
+train/000285_img.png
+train/000286_img.png
+train/000287_img.png
+train/000288_img.png
+train/000289_img.png
+train/000290_img.png
+train/000291_img.png
+train/000292_img.png
+train/000293_img.png
+train/000294_img.png
+train/000302_img.png
+train/000303_img.png
+train/000304_img.png
+train/000305_img.png
+train/000306_img.png
+train/000307_img.png
+train/000308_img.png
+train/000312_img.png
+train/000313_img.png
+train/000317_img.png
+train/000318_img.png
+train/000319_img.png
+train/000320_img.png
+train/000321_img.png
+train/000322_img.png
+train/000323_img.png
+train/000335_img.png
+train/000336_img.png
+train/000337_img.png
+train/000338_img.png
+train/000339_img.png
+train/000340_img.png
+train/000341_img.png
+train/000342_img.png
+train/000343_img.png
+train/000344_img.png
+train/000345_img.png
+train/000346_img.png
+train/000347_img.png
+train/000348_img.png
+train/000349_img.png
+train/000352_img.png
+train/000353_img.png
+train/000364_img.png
+train/000365_img.png
+train/000366_img.png
+train/000367_img.png
+train/000368_img.png
+train/000369_img.png
+train/000370_img.png
+train/000371_img.png
+train/000372_img.png
+train/000373_img.png
+train/000374_img.png
+train/000375_img.png
+train/000376_img.png
+train/000377_img.png
+train/000378_img.png
+train/000379_img.png
+train/000380_img.png
+train/000381_img.png
+train/000382_img.png
+train/000390_img.png
+train/000391_img.png
+train/000392_img.png
+train/000393_img.png
+train/000397_img.png
+train/000398_img.png
+train/000399_img.png
+train/000400_img.png
+train/000401_img.png
+train/000402_img.png
+train/000403_img.png
+train/000404_img.png
+train/000405_img.png
+train/000406_img.png
+train/000407_img.png
+train/000408_img.png
+train/000409_img.png
+train/000414_img.png
+train/000415_img.png
+train/000416_img.png
+train/000417_img.png
+train/000418_img.png
+train/000419_img.png
+train/000420_img.png
+train/000421_img.png
+train/000422_img.png
+train/000423_img.png
+train/000424_img.png
+train/000425_img.png
+train/000426_img.png
+train/000427_img.png
+train/000428_img.png
+train/000435_img.png
+train/000436_img.png
+train/000437_img.png
+train/000438_img.png
+train/000439_img.png
+train/000448_img.png
+train/000449_img.png
+train/000450_img.png
+train/000451_img.png
+train/000452_img.png
+train/000453_img.png
+train/000454_img.png
+train/000455_img.png
+train/000456_img.png
+train/000457_img.png
+train/000458_img.png
+train/000459_img.png
+train/000460_img.png
+train/000466_img.png
+train/000467_img.png
+train/000477_img.png
+train/000478_img.png
+train/000479_img.png
+train/000480_img.png
+train/000481_img.png
+train/000482_img.png
+train/000483_img.png
+train/000484_img.png
+train/000485_img.png
+train/000486_img.png
+train/000487_img.png
+train/000488_img.png
+train/000489_img.png
+train/000490_img.png
+train/000491_img.png
+train/000492_img.png
+train/000493_img.png
+train/000494_img.png
+train/000495_img.png
+train/000496_img.png
+train/000497_img.png
+train/000498_img.png
+train/000499_img.png
+train/000500_img.png
+train/000501_img.png
+train/000502_img.png
+train/000503_img.png
+train/000504_img.png
+train/000505_img.png
+train/000506_img.png
+train/000513_img.png
+train/000526_img.png
+train/000527_img.png
+train/000528_img.png
+train/000529_img.png
+train/000533_img.png
+train/000534_img.png
+train/000535_img.png
+train/000539_img.png
+train/000540_img.png
+train/000541_img.png
+train/000542_img.png
+train/000543_img.png
+train/000544_img.png
+train/000545_img.png
+train/000546_img.png
+train/000547_img.png
+train/000551_img.png
+train/000552_img.png
+train/000553_img.png
+train/000571_img.png
+train/000572_img.png
+train/000573_img.png
+train/000574_img.png
+train/000575_img.png
+train/000576_img.png
+train/000577_img.png
+train/000583_img.png
+train/000584_img.png
+train/000585_img.png
+train/000586_img.png
+train/000587_img.png
+train/000588_img.png
+train/000589_img.png
+train/000594_img.png
+train/000595_img.png
+train/000596_img.png
+train/000597_img.png
+train/000598_img.png
+train/000599_img.png
+train/000600_img.png
+train/000601_img.png
+train/000607_img.png
+train/000608_img.png
+train/000609_img.png
+train/000610_img.png
+train/000613_img.png
+train/000614_img.png
+train/000615_img.png
+train/000621_img.png
+train/000622_img.png
+train/000623_img.png
+train/000624_img.png
+train/000625_img.png
+train/000626_img.png
+train/000627_img.png
+train/000628_img.png
+train/000629_img.png
+train/000630_img.png
+train/000631_img.png
+train/000638_img.png
+train/000639_img.png
+train/000640_img.png
+train/000641_img.png
+train/000642_img.png
+train/000645_img.png
+train/000646_img.png
+train/000647_img.png
+train/000648_img.png
+train/000651_img.png
+train/000652_img.png
+train/000653_img.png
+train/000654_img.png
+train/000658_img.png
+train/000659_img.png
+train/000660_img.png
+train/000661_img.png
+train/000664_img.png
+train/000665_img.png
+train/000666_img.png
+train/000673_img.png
+train/000674_img.png
+train/000681_img.png
+train/000682_img.png
+train/000683_img.png
+train/000684_img.png
+train/000690_img.png
+train/000691_img.png
+train/000694_img.png
+train/000695_img.png
+train/000699_img.png
+train/000700_img.png
+train/000701_img.png
+train/000702_img.png
+train/000703_img.png
+train/000704_img.png
+train/000713_img.png
+train/000714_img.png
+train/000715_img.png
+train/000718_img.png
+train/000719_img.png
+train/000720_img.png
+train/000721_img.png
+train/000722_img.png
+train/000728_img.png
+train/000729_img.png
+train/000734_img.png
+train/000735_img.png
+train/000736_img.png
+train/000737_img.png
+train/000738_img.png
+train/000739_img.png
+train/000740_img.png
+train/000741_img.png
+train/000744_img.png
+train/000745_img.png
+train/000746_img.png
+train/000747_img.png
+train/000748_img.png
+train/000749_img.png
+train/000750_img.png
+train/000751_img.png
+train/000752_img.png
+train/000753_img.png
+train/000754_img.png
+train/000755_img.png
+train/000756_img.png
+train/000757_img.png
+train/000787_img.png
+train/000788_img.png
+train/000789_img.png
+train/000790_img.png
+train/000791_img.png
+train/000792_img.png
+train/000793_img.png
+train/000794_img.png
+train/000795_img.png
+train/000796_img.png
+train/000797_img.png
+train/000798_img.png
+train/000804_img.png
+train/000805_img.png
+train/000806_img.png
+train/000807_img.png
+train/000808_img.png
+train/000814_img.png
+train/000815_img.png
+train/000816_img.png
+train/000817_img.png
+train/000818_img.png
+train/000819_img.png
+train/000823_img.png
+train/000824_img.png
+train/000825_img.png
+train/000826_img.png
+train/000827_img.png
+train/000828_img.png
+train/000829_img.png
+train/000830_img.png
+train/000831_img.png
+train/000846_img.png
+train/000847_img.png
+train/000848_img.png
+train/000852_img.png
+train/000853_img.png
+train/000854_img.png
+train/000855_img.png
+train/000862_img.png
+train/000863_img.png
+train/000864_img.png
+train/000865_img.png
+train/000866_img.png
+train/000867_img.png
+train/000871_img.png
+train/000872_img.png
+train/000873_img.png
+train/000874_img.png
+train/000875_img.png
+train/000876_img.png
+train/000877_img.png
+train/000878_img.png
+train/000879_img.png
+train/000880_img.png
+train/000881_img.png
+train/000882_img.png
+train/000883_img.png
+train/000884_img.png
+train/000885_img.png
+train/000886_img.png
+train/000887_img.png
+train/000888_img.png
+train/000889_img.png
+train/000890_img.png
+train/000891_img.png
+train/000892_img.png
+train/000893_img.png
+train/000894_img.png
+train/000895_img.png
+train/000896_img.png
+train/000897_img.png
+train/000898_img.png
+train/000899_img.png
+train/000900_img.png
+train/000901_img.png
+train/000902_img.png
+train/000903_img.png
+train/000904_img.png
+train/000908_img.png
+train/000909_img.png
+train/000910_img.png
+train/000911_img.png
+train/000912_img.png
+train/000913_img.png
+train/000914_img.png
+train/000915_img.png
+train/000919_img.png
+train/000920_img.png
+train/000921_img.png
+train/000922_img.png
+train/000923_img.png
+train/000924_img.png
+train/000928_img.png
+train/000929_img.png
+train/000930_img.png
+train/000935_img.png
+train/000936_img.png
+train/000937_img.png
+train/000938_img.png
+train/000939_img.png
+train/000940_img.png
+train/000941_img.png
+train/000942_img.png
+train/000943_img.png
+train/000947_img.png
+train/000948_img.png
+train/000949_img.png
+train/000950_img.png
+train/000951_img.png
+train/000952_img.png
+train/000953_img.png
+train/000954_img.png
+train/000955_img.png
+train/000956_img.png
+train/000957_img.png
+train/000962_img.png
+train/000963_img.png
+train/000967_img.png
+train/000968_img.png
+train/000977_img.png
+train/000978_img.png
+train/000979_img.png
+train/000980_img.png
+train/000981_img.png
+train/000982_img.png
+train/000983_img.png
+train/000984_img.png
+train/000985_img.png
+train/000986_img.png
+train/000987_img.png
+train/000988_img.png
+train/000989_img.png
+train/000995_img.png
+train/000996_img.png
+train/000997_img.png
+train/000998_img.png
+train/000999_img.png
+train/001004_img.png
+train/001005_img.png
+train/001006_img.png
+train/001007_img.png
+train/001008_img.png
+train/001012_img.png
+train/001013_img.png
+train/001014_img.png
+train/001015_img.png
+train/001016_img.png
+train/001017_img.png
+train/001018_img.png
+train/001019_img.png
+train/001023_img.png
+train/001024_img.png
+train/001025_img.png
+train/001026_img.png
+train/001027_img.png
+train/001028_img.png
+train/001029_img.png
+train/001030_img.png
+train/001034_img.png
+train/001035_img.png
+train/001036_img.png
+train/001039_img.png
+train/001040_img.png
+train/001041_img.png
+train/001042_img.png
+train/001043_img.png
+train/001044_img.png
+train/001045_img.png
+train/001046_img.png
+train/001049_img.png
+train/001050_img.png
+train/001053_img.png
+train/001054_img.png
+train/001055_img.png
+train/001058_img.png
+train/001059_img.png
+train/001060_img.png
+train/001061_img.png
+train/001062_img.png
+train/001063_img.png
+train/001064_img.png
+train/001065_img.png
+train/001066_img.png
+train/001067_img.png
+train/001068_img.png
+train/001069_img.png
+train/001070_img.png
+train/001071_img.png
+train/001072_img.png
+train/001073_img.png
+train/001084_img.png
+train/001085_img.png
+train/001086_img.png
+train/001096_img.png
+train/001104_img.png
+train/001109_img.png
+train/001110_img.png
+train/001111_img.png
+train/001112_img.png
+train/001113_img.png
+train/001114_img.png
+train/001115_img.png
+train/001119_img.png
+train/001120_img.png
+train/001121_img.png
+train/001131_img.png
+train/001132_img.png
+train/001133_img.png
+train/001136_img.png
+train/001137_img.png
+train/001138_img.png
+train/001139_img.png
+train/001140_img.png
+train/001141_img.png
+train/001142_img.png
+train/001158_img.png
+train/001159_img.png
+train/001160_img.png
+train/001167_img.png
+train/001168_img.png
+train/001171_img.png
+train/001172_img.png
+train/001176_img.png
+train/001177_img.png
+train/001184_img.png
+train/001185_img.png
+train/001186_img.png
+train/001187_img.png
+train/001188_img.png
+train/001189_img.png
+train/001190_img.png
+train/001196_img.png
+train/001197_img.png
+train/001198_img.png
+train/001199_img.png
+train/001212_img.png
+train/001213_img.png
+train/001214_img.png
+train/001220_img.png
+train/001221_img.png
+train/001222_img.png
+train/001223_img.png
+train/001224_img.png
+train/001230_img.png
+train/001231_img.png
+train/001235_img.png
+train/001236_img.png
+train/001237_img.png
+train/001238_img.png
+train/001239_img.png
+train/001240_img.png
+train/001241_img.png
+train/001242_img.png
+train/001243_img.png
+train/001244_img.png
+train/001245_img.png
+train/001250_img.png
+train/001251_img.png
+train/001252_img.png
+train/001265_img.png
+train/001266_img.png
+train/001267_img.png
+train/001268_img.png
+train/001269_img.png
+train/001270_img.png
+train/001271_img.png
+train/001272_img.png
+train/001273_img.png
+train/001280_img.png
+train/001281_img.png
+train/001282_img.png
+train/001283_img.png
+train/001295_img.png
+train/001299_img.png
+train/001300_img.png
+train/001308_img.png
+train/001309_img.png
+train/001310_img.png
+train/001311_img.png
+train/001312_img.png
+train/001315_img.png
+train/001316_img.png
+train/001317_img.png
+train/001318_img.png
+train/001319_img.png
+train/001320_img.png
+train/001321_img.png
+train/001322_img.png
+train/001323_img.png
+train/001324_img.png
+train/001325_img.png
+train/001326_img.png
+train/001327_img.png
+train/001332_img.png
+train/001333_img.png
+train/001340_img.png
+train/001341_img.png
+train/001342_img.png
+train/001343_img.png
+train/001344_img.png
+train/001345_img.png
+train/001349_img.png
+train/001350_img.png
+train/001351_img.png
+train/001356_img.png
+train/001357_img.png
+train/001358_img.png
+train/001359_img.png
+train/001360_img.png
+train/001361_img.png
+train/001362_img.png
+train/001365_img.png
+train/001366_img.png
+train/001369_img.png
+train/001370_img.png
+train/001371_img.png
+train/001372_img.png
+train/001373_img.png
+train/001374_img.png
+train/001375_img.png
+train/001376_img.png
+train/001377_img.png
+train/001378_img.png
+train/001379_img.png
+train/001380_img.png
+train/001381_img.png
+train/001382_img.png
+train/001391_img.png
+train/001392_img.png
+train/001401_img.png
+train/001402_img.png
+train/001403_img.png
+train/001404_img.png
+train/001405_img.png
+train/001414_img.png
+train/001415_img.png
+train/001416_img.png
+train/001417_img.png
+train/001418_img.png
+train/001419_img.png
+train/001424_img.png
+train/001425_img.png
+train/001426_img.png
+train/001427_img.png
+train/001428_img.png
+train/001433_img.png
+train/001434_img.png
+train/001435_img.png
+train/001436_img.png
+train/001437_img.png
+train/001438_img.png
+train/001439_img.png
\ No newline at end of file
diff --git a/Lotus/evaluation/dataset_normal/oasis/__init__.py b/Lotus/evaluation/dataset_normal/oasis/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..ebc095b4adeae22ca29fac2ba63f18fa8157070e
--- /dev/null
+++ b/Lotus/evaluation/dataset_normal/oasis/__init__.py
@@ -0,0 +1,76 @@
+""" Get samples from OASIS validation set (https://pvl.cs.princeton.edu/OASIS/)
+"""
+import os
+import cv2
+import numpy as np
+import pickle
+
+from evaluation.dataset_normal import Sample
+
+
+def read_normal(path, h, w):
+ normal_dict = pickle.load(open(path, 'rb'))
+
+ mask = np.zeros((h,w))
+ normal = np.zeros((h,w,3))
+
+ # Stuff ROI normal into bounding box
+ min_y = normal_dict['min_y']
+ max_y = normal_dict['max_y']
+ min_x = normal_dict['min_x']
+ max_x = normal_dict['max_x']
+ roi_normal = normal_dict['normal']
+
+ # to LUB
+ normal[min_y:max_y+1, min_x:max_x+1, :] = roi_normal
+ normal = normal.astype(np.float32)
+ normal[:,:,0] *= -1
+ normal[:,:,1] *= -1
+
+ # Make mask
+ roi_mask = np.logical_or(np.logical_or(roi_normal[:,:,0] != 0, roi_normal[:,:,1] != 0), roi_normal[:,:,2] != 0).astype(np.float32)
+ mask[min_y:max_y+1, min_x:max_x+1] = roi_mask
+ mask = mask[:, :, None]
+ mask = mask > 0.5
+
+ return normal, mask
+
+
+def get_sample(base_data_dir, sample_path, info):
+ # e.g. sample_path = "val/100277_DT_img.png"
+ scene_name = sample_path.split('/')[0]
+ img_name, img_ext = sample_path.split('/')[-1].split('_img')
+
+ dataset_path = os.path.join(base_data_dir, 'dsine_eval', 'oasis')
+ img_path = '%s/%s' % (dataset_path, sample_path)
+ normal_path = img_path.replace('_img'+img_ext, '_normal.pkl')
+ intrins_path = img_path.replace('_img'+img_ext, '_intrins.npy')
+ assert os.path.exists(img_path)
+ assert os.path.exists(normal_path)
+ assert os.path.exists(intrins_path)
+
+ # read image (H, W, 3)
+ img = cv2.cvtColor(cv2.imread(img_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ img = img.astype(np.float32) / 255.0
+
+ # read normal (H, W, 3)
+ h = img.shape[0]
+ w = img.shape[1]
+ normal, normal_mask = read_normal(normal_path, h, w)
+
+ # read intrins (3, 3)
+ intrins = np.load(intrins_path)
+
+ sample = Sample(
+ img=img,
+ normal=normal,
+ normal_mask=normal_mask,
+ intrins=intrins,
+
+ dataset_name='oasis',
+ scene_name=scene_name,
+ img_name=img_name,
+ info=info
+ )
+
+ return sample
diff --git a/Lotus/evaluation/dataset_normal/oasis/split/val.txt b/Lotus/evaluation/dataset_normal/oasis/split/val.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4b6249b57dace276a53b7999c3d48eca1a13873f
--- /dev/null
+++ b/Lotus/evaluation/dataset_normal/oasis/split/val.txt
@@ -0,0 +1,10000 @@
+val/100277_DT_img.png
+val/100591_DT_img.png
+val/100879_DT_img.png
+val/100950_DT_img.png
+val/101031_DT_img.png
+val/104064_DT_img.png
+val/110823_DT_img.png
+val/113371_DT_img.png
+val/114665_DT_img.png
+val/116321_DT_img.png
+val/116951_DT_img.png
+val/117166_DT_img.png
+val/117404_DT_img.png
+val/118866_DT_img.png
+val/119267_DT_img.png
+val/119500_DT_img.png
+val/121258_DT_img.png
+val/124772_DT_img.png
+val/124803_DT_img.png
+val/131283_DT_img.png
+val/131340_DT_img.png
+val/131613_DT_img.png
+val/131677_DT_img.png
+val/131986_DT_img.png
+val/132714_DT_img.png
+val/133065_DT_img.png
+val/133079_DT_img.png
+val/134427_DT_img.png
+val/135317_DT_img.png
+val/136221_DT_img.png
+val/136750_DT_img.png
+val/137342_DT_img.png
+val/137755_DT_img.png
+val/138905_DT_img.png
+val/139053_DT_img.png
+val/139398_DT_img.png
+val/143918_DT_img.png
+val/144229_DT_img.png
+val/144724_DT_img.png
+val/146270_DT_img.png
+val/146391_DT_img.png
+val/147200_DT_img.png
+val/147292_DT_img.png
+val/149025_DT_img.png
+val/149117_DT_img.png
+val/150483_DT_img.png
+val/151311_DT_img.png
+val/152393_DT_img.png
+val/152726_DT_img.png
+val/152884_DT_img.png
+val/153018_DT_img.png
+val/153928_DT_img.png
+val/155512_DT_img.png
+val/158802_DT_img.png
+val/159094_DT_img.png
+val/160128_DT_img.png
+val/161100_DT_img.png
+val/161357_DT_img.png
+val/161614_DT_img.png
+val/161925_DT_img.png
+val/162672_DT_img.png
+val/163474_DT_img.png
+val/164750_DT_img.png
+val/165401_DT_img.png
+val/166277_DT_img.png
+val/168209_DT_img.png
+val/168722_DT_img.png
+val/169000_DT_img.png
+val/169332_DT_img.png
+val/169911_DT_img.png
+val/169983_DT_img.png
+val/170837_DT_img.png
+val/171255_DT_img.png
+val/175073_DT_img.png
+val/175267_DT_img.png
+val/175300_DT_img.png
+val/175753_DT_img.png
+val/176345_DT_img.png
+val/177353_DT_img.png
+val/178075_DT_img.png
+val/178155_DT_img.png
+val/179380_DT_img.png
+val/179904_DT_img.png
+val/180276_DT_img.png
+val/180595_DT_img.png
+val/181086_DT_img.png
+val/181102_DT_img.png
+val/181288_DT_img.png
+val/181742_DT_img.png
+val/182405_DT_img.png
+val/182679_DT_img.png
+val/184869_DT_img.png
+val/185196_DT_img.png
+val/185622_DT_img.png
+val/185930_DT_img.png
+val/187812_DT_img.png
+val/189163_DT_img.png
+val/192102_DT_img.png
+val/192396_DT_img.png
+val/195268_DT_img.png
+val/195382_DT_img.png
+val/197807_DT_img.png
+val/197990_DT_img.png
+val/198932_DT_img.png
+val/200500_DT_img.png
+val/200525_DT_img.png
+val/200764_DT_img.png
+val/200879_DT_img.png
+val/201087_DT_img.png
+val/201583_DT_img.png
+val/201722_DT_img.png
+val/202711_DT_img.png
+val/202733_DT_img.png
+val/202907_DT_img.png
+val/203840_DT_img.png
+val/204265_DT_img.png
+val/205007_DT_img.png
+val/205056_DT_img.png
+val/205861_DT_img.png
+val/205863_DT_img.png
+val/206324_DT_img.png
+val/208003_DT_img.png
+val/210921_DT_img.png
+val/211702_DT_img.png
+val/211950_DT_img.png
+val/212409_DT_img.png
+val/213342_DT_img.png
+val/217130_DT_img.png
+val/217447_DT_img.png
+val/218258_DT_img.png
+val/218899_DT_img.png
+val/219647_DT_img.png
+val/221366_DT_img.png
+val/221451_DT_img.png
+val/221622_DT_img.png
+val/221710_DT_img.png
+val/221998_DT_img.png
+val/222356_DT_img.png
+val/222851_DT_img.png
+val/223163_DT_img.png
+val/223704_DT_img.png
+val/223743_DT_img.png
+val/224594_DT_img.png
+val/224596_DT_img.png
+val/224746_DT_img.png
+val/225180_DT_img.png
+val/225268_DT_img.png
+val/225849_ALI_img.png
+val/225951_ALI_img.png
+val/226062_ALI_img.png
+val/226082_ALI_img.png
+val/226105_ALI_img.png
+val/226126_ALI_img.png
+val/226127_ALI_img.png
+val/226152_ALI_img.png
+val/226208_ALI_img.png
+val/226214_ALI_img.png
+val/226221_ALI_img.png
+val/226226_ALI_img.png
+val/226319_ALI_img.png
+val/226330_ALI_img.png
+val/226331_ALI_img.png
+val/226353_ALI_img.png
+val/226372_ALI_img.png
+val/226430_ALI_img.png
+val/226441_ALI_img.png
+val/226442_ALI_img.png
+val/226443_ALI_img.png
+val/226451_ALI_img.png
+val/226471_ALI_img.png
+val/226474_ALI_img.png
+val/226522_ALI_img.png
+val/226560_ALI_img.png
+val/226563_ALI_img.png
+val/226565_DT_img.png
+val/226595_ALI_img.png
+val/226612_ALI_img.png
+val/226621_ALI_img.png
+val/226651_ALI_img.png
+val/226659_ALI_img.png
+val/226671_ALI_img.png
+val/226683_ALI_img.png
+val/226689_ALI_img.png
+val/226695_ALI_img.png
+val/226709_ALI_img.png
+val/226732_ALI_img.png
+val/226738_ALI_img.png
+val/226740_ALI_img.png
+val/226742_ALI_img.png
+val/226751_ALI_img.png
+val/226760_ALI_img.png
+val/226762_ALI_img.png
+val/226767_DT_img.png
+val/226781_ALI_img.png
+val/226783_ALI_img.png
+val/226795_ALI_img.png
+val/226846_ALI_img.png
+val/226876_ALI_img.png
+val/226896_ALI_img.png
+val/226897_ALI_img.png
+val/226899_ALI_img.png
+val/226916_ALI_img.png
+val/226927_ALI_img.png
+val/226979_ALI_img.png
+val/227014_ALI_img.png
+val/227018_ALI_img.png
+val/227033_ALI_img.png
+val/227047_ALI_img.png
+val/227054_ALI_img.png
+val/227062_ALI_img.png
+val/227067_ALI_img.png
+val/227073_ALI_img.png
+val/227090_ALI_img.png
+val/227095_ALI_img.png
+val/227104_ALI_img.png
+val/227109_ALI_img.png
+val/227110_ALI_img.png
+val/227115_ALI_img.png
+val/227154_ALI_img.png
+val/227194_ALI_img.png
+val/227199_ALI_img.png
+val/227216_ALI_img.png
+val/227220_ALI_img.png
+val/227226_ALI_img.png
+val/227276_ALI_img.png
+val/227287_ALI_img.png
+val/227292_DT_img.png
+val/227308_ALI_img.png
+val/227310_ALI_img.png
+val/227336_ALI_img.png
+val/227361_ALI_img.png
+val/227372_ALI_img.png
+val/227377_ALI_img.png
+val/227390_ALI_img.png
+val/227391_ALI_img.png
+val/227415_ALI_img.png
+val/227445_ALI_img.png
+val/227472_ALI_img.png
+val/227482_ALI_img.png
+val/227500_ALI_img.png
+val/227517_ALI_img.png
+val/227524_ALI_img.png
+val/227534_ALI_img.png
+val/227553_ALI_img.png
+val/227555_DT_img.png
+val/227580_ALI_img.png
+val/227584_ALI_img.png
+val/227585_ALI_img.png
+val/227588_ALI_img.png
+val/227594_ALI_img.png
+val/227597_ALI_img.png
+val/227606_ALI_img.png
+val/227633_ALI_img.png
+val/227635_ALI_img.png
+val/227641_ALI_img.png
+val/227647_ALI_img.png
+val/227651_ALI_img.png
+val/227674_ALI_img.png
+val/227684_ALI_img.png
+val/227686_ALI_img.png
+val/227710_ALI_img.png
+val/227718_ALI_img.png
+val/227719_ALI_img.png
+val/227724_ALI_img.png
+val/227726_ALI_img.png
+val/227746_ALI_img.png
+val/227786_ALI_img.png
+val/227816_ALI_img.png
+val/227840_ALI_img.png
+val/227854_ALI_img.png
+val/227869_ALI_img.png
+val/227873_ALI_img.png
+val/227878_ALI_img.png
+val/227883_ALI_img.png
+val/227898_ALI_img.png
+val/227909_ALI_img.png
+val/227915_ALI_img.png
+val/227926_ALI_img.png
+val/227935_ALI_img.png
+val/227972_DT_img.png
+val/227986_ALI_img.png
+val/227988_ALI_img.png
+val/227991_ALI_img.png
+val/227999_ALI_img.png
+val/228003_DT_img.png
+val/228006_ALI_img.png
+val/228012_ALI_img.png
+val/228014_ALI_img.png
+val/228015_ALI_img.png
+val/228023_ALI_img.png
+val/228044_ALI_img.png
+val/228050_ALI_img.png
+val/228067_ALI_img.png
+val/228086_ALI_img.png
+val/228131_ALI_img.png
+val/228142_ALI_img.png
+val/228146_ALI_img.png
+val/228164_ALI_img.png
+val/228169_ALI_img.png
+val/228177_ALI_img.png
+val/228181_ALI_img.png
+val/228207_ALI_img.png
+val/228214_ALI_img.png
+val/228224_ALI_img.png
+val/228242_ALI_img.png
+val/228248_ALI_img.png
+val/228252_ALI_img.png
+val/228269_ALI_img.png
+val/228270_ALI_img.png
+val/228273_ALI_img.png
+val/228275_ALI_img.png
+val/228280_ALI_img.png
+val/228283_DT_img.png
+val/228285_ALI_img.png
+val/228296_ALI_img.png
+val/228319_ALI_img.png
+val/228320_ALI_img.png
+val/228325_ALI_img.png
+val/228348_ALI_img.png
+val/228355_ALI_img.png
+val/228364_ALI_img.png
+val/228379_ALI_img.png
+val/228382_ALI_img.png
+val/228393_ALI_img.png
+val/228395_ALI_img.png
+val/228403_ALI_img.png
+val/228406_ALI_img.png
+val/228413_ALI_img.png
+val/228421_ALI_img.png
+val/228429_ALI_img.png
+val/228434_ALI_img.png
+val/228440_ALI_img.png
+val/228447_ALI_img.png
+val/228450_ALI_img.png
+val/228454_ALI_img.png
+val/228456_ALI_img.png
+val/228458_ALI_img.png
+val/228466_ALI_img.png
+val/228470_ALI_img.png
+val/228474_ALI_img.png
+val/228480_ALI_img.png
+val/228483_ALI_img.png
+val/228486_ALI_img.png
+val/228487_ALI_img.png
+val/228491_ALI_img.png
+val/228506_ALI_img.png
+val/228530_ALI_img.png
+val/228532_ALI_img.png
+val/228555_ALI_img.png
+val/228572_ALI_img.png
+val/228577_ALI_img.png
+val/228593_ALI_img.png
+val/228599_ALI_img.png
+val/228610_ALI_img.png
+val/228612_ALI_img.png
+val/228617_ALI_img.png
+val/228629_ALI_img.png
+val/228639_ALI_img.png
+val/228654_ALI_img.png
+val/228671_ALI_img.png
+val/228696_ALI_img.png
+val/228697_ALI_img.png
+val/228712_ALI_img.png
+val/228714_ALI_img.png
+val/228716_ALI_img.png
+val/228718_ALI_img.png
+val/228725_ALI_img.png
+val/228730_ALI_img.png
+val/228743_ALI_img.png
+val/228765_ALI_img.png
+val/228767_ALI_img.png
+val/228784_ALI_img.png
+val/228809_ALI_img.png
+val/228829_ALI_img.png
+val/228832_ALI_img.png
+val/228837_ALI_img.png
+val/228856_ALI_img.png
+val/228905_ALI_img.png
+val/228911_ALI_img.png
+val/228924_ALI_img.png
+val/228938_ALI_img.png
+val/228965_ALI_img.png
+val/228973_ALI_img.png
+val/228984_ALI_img.png
+val/229014_ALI_img.png
+val/229016_ALI_img.png
+val/229018_ALI_img.png
+val/229033_ALI_img.png
+val/229035_ALI_img.png
+val/229039_ALI_img.png
+val/229053_ALI_img.png
+val/229055_ALI_img.png
+val/229064_ALI_img.png
+val/229066_ALI_img.png
+val/229078_ALI_img.png
+val/229079_ALI_img.png
+val/229084_ALI_img.png
+val/229091_ALI_img.png
+val/229096_ALI_img.png
+val/229100_ALI_img.png
+val/229104_ALI_img.png
+val/229105_ALI_img.png
+val/229113_ALI_img.png
+val/229117_ALI_img.png
+val/229120_ALI_img.png
+val/229126_ALI_img.png
+val/229132_ALI_img.png
+val/229134_ALI_img.png
+val/229135_ALI_img.png
+val/229138_ALI_img.png
+val/229149_ALI_img.png
+val/229150_ALI_img.png
+val/229160_ALI_img.png
+val/229169_ALI_img.png
+val/229174_ALI_img.png
+val/229177_ALI_img.png
+val/229178_ALI_img.png
+val/229183_ALI_img.png
+val/229190_ALI_img.png
+val/229193_ALI_img.png
+val/229197_ALI_img.png
+val/229199_ALI_img.png
+val/229200_ALI_img.png
+val/229207_ALI_img.png
+val/229211_ALI_img.png
+val/229214_ALI_img.png
+val/229237_ALI_img.png
+val/229238_ALI_img.png
+val/229264_ALI_img.png
+val/229265_ALI_img.png
+val/229277_ALI_img.png
+val/229282_ALI_img.png
+val/229283_ALI_img.png
+val/229286_ALI_img.png
+val/229295_ALI_img.png
+val/229296_ALI_img.png
+val/229298_ALI_img.png
+val/229305_ALI_img.png
+val/229310_ALI_img.png
+val/229315_ALI_img.png
+val/229323_ALI_img.png
+val/229328_ALI_img.png
+val/229329_ALI_img.png
+val/229335_ALI_img.png
+val/229345_ALI_img.png
+val/229346_ALI_img.png
+val/229347_ALI_img.png
+val/229368_ALI_img.png
+val/229370_ALI_img.png
+val/229371_ALI_img.png
+val/229398_ALI_img.png
+val/229406_ALI_img.png
+val/229408_ALI_img.png
+val/229412_ALI_img.png
+val/229416_ALI_img.png
+val/229420_ALI_img.png
+val/229420_DT_img.png
+val/229428_ALI_img.png
+val/229430_ALI_img.png
+val/229434_ALI_img.png
+val/229439_ALI_img.png
+val/229445_ALI_img.png
+val/229448_ALI_img.png
+val/229452_ALI_img.png
+val/229455_ALI_img.png
+val/229457_ALI_img.png
+val/229458_ALI_img.png
+val/229461_ALI_img.png
+val/229469_ALI_img.png
+val/229474_ALI_img.png
+val/229482_ALI_img.png
+val/229498_ALI_img.png
+val/229499_ALI_img.png
+val/229500_ALI_img.png
+val/229501_ALI_img.png
+val/229502_ALI_img.png
+val/229506_ALI_img.png
+val/229512_ALI_img.png
+val/229513_ALI_img.png
+val/229517_ALI_img.png
+val/229520_ALI_img.png
+val/229522_ALI_img.png
+val/229547_ALI_img.png
+val/229550_ALI_img.png
+val/229553_ALI_img.png
+val/229557_ALI_img.png
+val/229563_ALI_img.png
+val/229564_ALI_img.png
+val/229565_ALI_img.png
+val/229581_ALI_img.png
+val/229587_ALI_img.png
+val/229588_ALI_img.png
+val/229600_ALI_img.png
+val/229601_ALI_img.png
+val/229606_ALI_img.png
+val/229607_ALI_img.png
+val/229608_ALI_img.png
+val/229625_ALI_img.png
+val/229632_ALI_img.png
+val/229636_ALI_img.png
+val/229640_ALI_img.png
+val/229641_ALI_img.png
+val/229648_ALI_img.png
+val/229649_ALI_img.png
+val/229671_ALI_img.png
+val/229681_ALI_img.png
+val/229685_ALI_img.png
+val/229686_ALI_img.png
+val/229695_ALI_img.png
+val/229696_ALI_img.png
+val/229699_ALI_img.png
+val/229701_ALI_img.png
+val/229705_ALI_img.png
+val/229707_ALI_img.png
+val/229710_ALI_img.png
+val/229711_ALI_img.png
+val/229726_ALI_img.png
+val/229730_ALI_img.png
+val/229740_ALI_img.png
+val/229746_ALI_img.png
+val/229748_ALI_img.png
+val/229752_ALI_img.png
+val/229755_ALI_img.png
+val/229760_ALI_img.png
+val/229767_ALI_img.png
+val/229768_ALI_img.png
+val/229770_ALI_img.png
+val/229780_ALI_img.png
+val/229788_ALI_img.png
+val/229791_ALI_img.png
+val/229794_ALI_img.png
+val/229812_ALI_img.png
+val/229819_ALI_img.png
+val/229820_ALI_img.png
+val/229823_ALI_img.png
+val/229830_ALI_img.png
+val/229832_ALI_img.png
+val/229834_ALI_img.png
+val/229836_ALI_img.png
+val/229840_ALI_img.png
+val/229845_ALI_img.png
+val/229863_DT_img.png
+val/229864_ALI_img.png
+val/229867_ALI_img.png
+val/229873_ALI_img.png
+val/229876_ALI_img.png
+val/229881_ALI_img.png
+val/229894_ALI_img.png
+val/229907_ALI_img.png
+val/229909_ALI_img.png
+val/229913_ALI_img.png
+val/229924_ALI_img.png
+val/229928_ALI_img.png
+val/229933_ALI_img.png
+val/229936_ALI_img.png
+val/229941_ALI_img.png
+val/229946_ALI_img.png
+val/229951_ALI_img.png
+val/229961_ALI_img.png
+val/229970_ALI_img.png
+val/229974_ALI_img.png
+val/229982_ALI_img.png
+val/229987_ALI_img.png
+val/229989_ALI_img.png
+val/229990_ALI_img.png
+val/229993_ALI_img.png
+val/230006_ALI_img.png
+val/230008_ALI_img.png
+val/230015_ALI_img.png
+val/230026_ALI_img.png
+val/230030_ALI_img.png
+val/230031_ALI_img.png
+val/230038_ALI_img.png
+val/230039_ALI_img.png
+val/230044_ALI_img.png
+val/230052_ALI_img.png
+val/230065_ALI_img.png
+val/230066_ALI_img.png
+val/230071_ALI_img.png
+val/230079_ALI_img.png
+val/230081_ALI_img.png
+val/230103_ALI_img.png
+val/230110_ALI_img.png
+val/230117_ALI_img.png
+val/230119_ALI_img.png
+val/230122_ALI_img.png
+val/230123_ALI_img.png
+val/230134_ALI_img.png
+val/230136_ALI_img.png
+val/230151_ALI_img.png
+val/230158_ALI_img.png
+val/230168_ALI_img.png
+val/230172_ALI_img.png
+val/230173_ALI_img.png
+val/230183_ALI_img.png
+val/230187_ALI_img.png
+val/230189_ALI_img.png
+val/230193_ALI_img.png
+val/230195_ALI_img.png
+val/230200_ALI_img.png
+val/230206_ALI_img.png
+val/230215_ALI_img.png
+val/230220_ALI_img.png
+val/230221_ALI_img.png
+val/230226_ALI_img.png
+val/230227_ALI_img.png
+val/230234_ALI_img.png
+val/230238_ALI_img.png
+val/230241_ALI_img.png
+val/230248_ALI_img.png
+val/230250_ALI_img.png
+val/230254_ALI_img.png
+val/230255_ALI_img.png
+val/230258_ALI_img.png
+val/230263_ALI_img.png
+val/230264_ALI_img.png
+val/230266_ALI_img.png
+val/230274_ALI_img.png
+val/230276_ALI_img.png
+val/230279_ALI_img.png
+val/230298_ALI_img.png
+val/230300_ALI_img.png
+val/230310_ALI_img.png
+val/230320_ALI_img.png
+val/230333_ALI_img.png
+val/230336_ALI_img.png
+val/230338_ALI_img.png
+val/230341_ALI_img.png
+val/230350_ALI_img.png
+val/230352_ALI_img.png
+val/230363_ALI_img.png
+val/230364_ALI_img.png
+val/230375_ALI_img.png
+val/230383_ALI_img.png
+val/230385_ALI_img.png
+val/230397_ALI_img.png
+val/230399_ALI_img.png
+val/230408_ALI_img.png
+val/230417_ALI_img.png
+val/230422_ALI_img.png
+val/230430_ALI_img.png
+val/230433_ALI_img.png
+val/230444_ALI_img.png
+val/230447_ALI_img.png
+val/230462_ALI_img.png
+val/230463_ALI_img.png
+val/230467_ALI_img.png
+val/230468_ALI_img.png
+val/230471_ALI_img.png
+val/230472_ALI_img.png
+val/230476_ALI_img.png
+val/230479_ALI_img.png
+val/230480_ALI_img.png
+val/230485_ALI_img.png
+val/230490_ALI_img.png
+val/230492_ALI_img.png
+val/230496_ALI_img.png
+val/230503_ALI_img.png
+val/230510_ALI_img.png
+val/230512_ALI_img.png
+val/230520_ALI_img.png
+val/230524_ALI_img.png
+val/230531_ALI_img.png
+val/230537_ALI_img.png
+val/230549_ALI_img.png
+val/230550_ALI_img.png
+val/230551_ALI_img.png
+val/230553_ALI_img.png
+val/230557_ALI_img.png
+val/230560_ALI_img.png
+val/230564_ALI_img.png
+val/230567_ALI_img.png
+val/230568_ALI_img.png
+val/230572_ALI_img.png
+val/230587_ALI_img.png
+val/230589_ALI_img.png
+val/230592_ALI_img.png
+val/230595_ALI_img.png
+val/230596_ALI_img.png
+val/230602_ALI_img.png
+val/230603_DT_img.png
+val/230609_ALI_img.png
+val/230610_ALI_img.png
+val/230614_ALI_img.png
+val/230629_ALI_img.png
+val/230632_ALI_img.png
+val/230633_ALI_img.png
+val/230641_ALI_img.png
+val/230642_ALI_img.png
+val/230644_ALI_img.png
+val/230651_ALI_img.png
+val/230660_ALI_img.png
+val/230678_ALI_img.png
+val/230684_ALI_img.png
+val/230691_ALI_img.png
+val/230699_ALI_img.png
+val/230703_ALI_img.png
+val/230709_ALI_img.png
+val/230718_ALI_img.png
+val/230721_ALI_img.png
+val/230722_ALI_img.png
+val/230745_ALI_img.png
+val/230746_ALI_img.png
+val/230748_ALI_img.png
+val/230762_ALI_img.png
+val/230765_ALI_img.png
+val/230767_ALI_img.png
+val/230786_ALI_img.png
+val/230794_ALI_img.png
+val/230796_ALI_img.png
+val/230803_ALI_img.png
+val/230814_ALI_img.png
+val/230817_ALI_img.png
+val/230832_ALI_img.png
+val/230838_ALI_img.png
+val/230848_ALI_img.png
+val/230859_ALI_img.png
+val/230863_ALI_img.png
+val/230866_ALI_img.png
+val/230874_ALI_img.png
+val/230882_ALI_img.png
+val/230883_ALI_img.png
+val/230884_ALI_img.png
+val/230886_ALI_img.png
+val/230889_ALI_img.png
+val/230900_ALI_img.png
+val/230901_ALI_img.png
+val/230905_ALI_img.png
+val/230906_ALI_img.png
+val/230911_ALI_img.png
+val/230915_ALI_img.png
+val/230919_ALI_img.png
+val/230921_ALI_img.png
+val/230925_ALI_img.png
+val/230928_ALI_img.png
+val/230936_ALI_img.png
+val/230963_ALI_img.png
+val/230965_ALI_img.png
+val/230974_ALI_img.png
+val/230975_ALI_img.png
+val/230976_ALI_img.png
+val/230977_ALI_img.png
+val/230981_ALI_img.png
+val/230982_ALI_img.png
+val/230984_ALI_img.png
+val/230989_ALI_img.png
+val/230995_ALI_img.png
+val/231002_ALI_img.png
+val/231009_ALI_img.png
+val/231016_ALI_img.png
+val/231019_ALI_img.png
+val/231022_ALI_img.png
+val/231023_ALI_img.png
+val/231024_ALI_img.png
+val/231027_ALI_img.png
+val/231028_ALI_img.png
+val/231033_ALI_img.png
+val/231036_ALI_img.png
+val/231040_ALI_img.png
+val/231046_ALI_img.png
+val/231047_ALI_img.png
+val/231048_ALI_img.png
+val/231050_ALI_img.png
+val/231052_ALI_img.png
+val/231055_ALI_img.png
+val/231061_ALI_img.png
+val/231073_ALI_img.png
+val/231078_ALI_img.png
+val/231084_ALI_img.png
+val/231085_ALI_img.png
+val/231087_ALI_img.png
+val/231089_ALI_img.png
+val/231090_ALI_img.png
+val/231092_ALI_img.png
+val/231094_ALI_img.png
+val/231096_ALI_img.png
+val/231098_ALI_img.png
+val/231099_ALI_img.png
+val/231107_ALI_img.png
+val/231110_ALI_img.png
+val/231113_ALI_img.png
+val/231124_ALI_img.png
+val/231127_ALI_img.png
+val/231130_ALI_img.png
+val/231132_ALI_img.png
+val/231133_ALI_img.png
+val/231143_ALI_img.png
+val/231145_ALI_img.png
+val/231157_ALI_img.png
+val/231162_ALI_img.png
+val/231180_ALI_img.png
+val/231188_ALI_img.png
+val/231194_ALI_img.png
+val/231195_ALI_img.png
+val/231196_ALI_img.png
+val/231197_ALI_img.png
+val/231198_ALI_img.png
+val/231200_ALI_img.png
+val/231207_ALI_img.png
+val/231218_ALI_img.png
+val/231221_ALI_img.png
+val/231223_ALI_img.png
+val/231225_ALI_img.png
+val/231228_ALI_img.png
+val/231233_ALI_img.png
+val/231237_ALI_img.png
+val/231242_ALI_img.png
+val/231247_ALI_img.png
+val/231260_ALI_img.png
+val/231263_ALI_img.png
+val/231265_ALI_img.png
+val/231268_ALI_img.png
+val/231269_ALI_img.png
+val/231275_ALI_img.png
+val/231281_ALI_img.png
+val/231282_ALI_img.png
+val/231289_ALI_img.png
+val/231291_ALI_img.png
+val/231293_ALI_img.png
+val/231310_ALI_img.png
+val/231312_ALI_img.png
+val/231313_ALI_img.png
+val/231330_ALI_img.png
+val/231337_ALI_img.png
+val/231340_ALI_img.png
+val/231343_DT_img.png
+val/231348_ALI_img.png
+val/231356_ALI_img.png
+val/231362_ALI_img.png
+val/231366_ALI_img.png
+val/231375_ALI_img.png
+val/231379_ALI_img.png
+val/231383_ALI_img.png
+val/231384_ALI_img.png
+val/231387_ALI_img.png
+val/231390_ALI_img.png
+val/231391_ALI_img.png
+val/231392_ALI_img.png
+val/231394_ALI_img.png
+val/231400_ALI_img.png
+val/231402_ALI_img.png
+val/231407_ALI_img.png
+val/231413_ALI_img.png
+val/231416_ALI_img.png
+val/231420_ALI_img.png
+val/231422_ALI_img.png
+val/231424_ALI_img.png
+val/231427_ALI_img.png
+val/231428_ALI_img.png
+val/231442_ALI_img.png
+val/231448_ALI_img.png
+val/231451_ALI_img.png
+val/231456_ALI_img.png
+val/231459_ALI_img.png
+val/231461_ALI_img.png
+val/231463_ALI_img.png
+val/231470_ALI_img.png
+val/231474_ALI_img.png
+val/231475_ALI_img.png
+val/231481_ALI_img.png
+val/231485_ALI_img.png
+val/231489_ALI_img.png
+val/231496_ALI_img.png
+val/231498_ALI_img.png
+val/231501_ALI_img.png
+val/231508_ALI_img.png
+val/231522_ALI_img.png
+val/231526_ALI_img.png
+val/231529_ALI_img.png
+val/231532_ALI_img.png
+val/231534_ALI_img.png
+val/231535_ALI_img.png
+val/231542_ALI_img.png
+val/231548_ALI_img.png
+val/231551_ALI_img.png
+val/231554_ALI_img.png
+val/231555_ALI_img.png
+val/231557_ALI_img.png
+val/231560_ALI_img.png
+val/231562_ALI_img.png
+val/231570_ALI_img.png
+val/231573_ALI_img.png
+val/231576_ALI_img.png
+val/231584_ALI_img.png
+val/231586_ALI_img.png
+val/231591_ALI_img.png
+val/231594_ALI_img.png
+val/231598_ALI_img.png
+val/231599_ALI_img.png
+val/231607_ALI_img.png
+val/231611_ALI_img.png
+val/231613_ALI_img.png
+val/231615_ALI_img.png
+val/231619_ALI_img.png
+val/231621_ALI_img.png
+val/231627_ALI_img.png
+val/231628_ALI_img.png
+val/231632_ALI_img.png
+val/231634_ALI_img.png
+val/231635_ALI_img.png
+val/231644_ALI_img.png
+val/231646_ALI_img.png
+val/231648_ALI_img.png
+val/231651_ALI_img.png
+val/231654_ALI_img.png
+val/231659_ALI_img.png
+val/231660_ALI_img.png
+val/231661_ALI_img.png
+val/231662_ALI_img.png
+val/231668_ALI_img.png
+val/231671_ALI_img.png
+val/231673_ALI_img.png
+val/231682_ALI_img.png
+val/231686_ALI_img.png
+val/231687_ALI_img.png
+val/231688_ALI_img.png
+val/231692_ALI_img.png
+val/231695_ALI_img.png
+val/231700_ALI_img.png
+val/231701_ALI_img.png
+val/231702_ALI_img.png
+val/231706_ALI_img.png
+val/231709_ALI_img.png
+val/231716_ALI_img.png
+val/231722_ALI_img.png
+val/231743_ALI_img.png
+val/231751_ALI_img.png
+val/231760_ALI_img.png
+val/231761_ALI_img.png
+val/231764_ALI_img.png
+val/231779_ALI_img.png
+val/231780_ALI_img.png
+val/231792_ALI_img.png
+val/231795_ALI_img.png
+val/231796_ALI_img.png
+val/231797_ALI_img.png
+val/231798_ALI_img.png
+val/231800_ALI_img.png
+val/231801_ALI_img.png
+val/231802_ALI_img.png
+val/231803_ALI_img.png
+val/231805_ALI_img.png
+val/231809_ALI_img.png
+val/231814_ALI_img.png
+val/231816_ALI_img.png
+val/231817_DT_img.png
+val/231826_ALI_img.png
+val/231832_ALI_img.png
+val/231833_ALI_img.png
+val/231847_ALI_img.png
+val/231849_ALI_img.png
+val/231851_ALI_img.png
+val/231863_ALI_img.png
+val/231866_ALI_img.png
+val/231868_ALI_img.png
+val/231869_ALI_img.png
+val/231870_ALI_img.png
+val/231875_ALI_img.png
+val/231879_ALI_img.png
+val/231884_ALI_img.png
+val/231899_ALI_img.png
+val/231901_ALI_img.png
+val/231903_ALI_img.png
+val/231910_ALI_img.png
+val/231911_ALI_img.png
+val/231923_ALI_img.png
+val/231925_ALI_img.png
+val/231926_ALI_img.png
+val/231927_ALI_img.png
+val/231931_ALI_img.png
+val/231932_ALI_img.png
+val/231939_ALI_img.png
+val/231944_ALI_img.png
+val/231945_ALI_img.png
+val/231949_ALI_img.png
+val/231951_ALI_img.png
+val/231964_ALI_img.png
+val/231967_ALI_img.png
+val/231977_ALI_img.png
+val/231981_ALI_img.png
+val/231984_ALI_img.png
+val/232001_ALI_img.png
+val/232002_ALI_img.png
+val/232008_ALI_img.png
+val/232009_ALI_img.png
+val/232014_ALI_img.png
+val/232015_ALI_img.png
+val/232019_ALI_img.png
+val/232021_ALI_img.png
+val/232024_ALI_img.png
+val/232027_ALI_img.png
+val/232040_ALI_img.png
+val/232042_ALI_img.png
+val/232043_ALI_img.png
+val/232044_ALI_img.png
+val/232045_ALI_img.png
+val/232046_ALI_img.png
+val/232051_ALI_img.png
+val/232054_ALI_img.png
+val/232058_ALI_img.png
+val/232060_ALI_img.png
+val/232063_ALI_img.png
+val/232064_ALI_img.png
+val/232067_ALI_img.png
+val/232072_ALI_img.png
+val/232075_ALI_img.png
+val/232078_ALI_img.png
+val/232079_ALI_img.png
+val/232081_ALI_img.png
+val/232087_ALI_img.png
+val/232090_ALI_img.png
+val/232093_ALI_img.png
+val/232106_ALI_img.png
+val/232112_ALI_img.png
+val/232124_ALI_img.png
+val/232126_ALI_img.png
+val/232127_ALI_img.png
+val/232131_ALI_img.png
+val/232139_ALI_img.png
+val/232141_ALI_img.png
+val/232143_ALI_img.png
+val/232146_ALI_img.png
+val/232147_ALI_img.png
+val/232160_ALI_img.png
+val/232162_ALI_img.png
+val/232168_ALI_img.png
+val/232180_ALI_img.png
+val/232187_ALI_img.png
+val/232194_ALI_img.png
+val/232199_ALI_img.png
+val/232201_ALI_img.png
+val/232205_ALI_img.png
+val/232208_ALI_img.png
+val/232213_ALI_img.png
+val/232215_ALI_img.png
+val/232216_ALI_img.png
+val/232218_ALI_img.png
+val/232223_ALI_img.png
+val/232224_ALI_img.png
+val/232225_ALI_img.png
+val/232227_ALI_img.png
+val/232235_ALI_img.png
+val/232240_ALI_img.png
+val/232243_ALI_img.png
+val/232252_ALI_img.png
+val/232255_ALI_img.png
+val/232264_ALI_img.png
+val/232278_ALI_img.png
+val/232281_ALI_img.png
+val/232283_ALI_img.png
+val/232286_ALI_img.png
+val/232293_ALI_img.png
+val/232294_ALI_img.png
+val/232297_ALI_img.png
+val/232298_ALI_img.png
+val/232301_DT_img.png
+val/232313_ALI_img.png
+val/232316_ALI_img.png
+val/232320_ALI_img.png
+val/232321_ALI_img.png
+val/232331_ALI_img.png
+val/232332_ALI_img.png
+val/232334_ALI_img.png
+val/232350_ALI_img.png
+val/232352_ALI_img.png
+val/232373_ALI_img.png
+val/232390_ALI_img.png
+val/232392_ALI_img.png
+val/232400_ALI_img.png
+val/232406_ALI_img.png
+val/232415_ALI_img.png
+val/232418_ALI_img.png
+val/232425_ALI_img.png
+val/232433_ALI_img.png
+val/232438_ALI_img.png
+val/232439_ALI_img.png
+val/232445_ALI_img.png
+val/232453_ALI_img.png
+val/232463_ALI_img.png
+val/232467_ALI_img.png
+val/232476_ALI_img.png
+val/232479_ALI_img.png
+val/232482_ALI_img.png
+val/232484_ALI_img.png
+val/232486_ALI_img.png
+val/232489_ALI_img.png
+val/232496_ALI_img.png
+val/232504_ALI_img.png
+val/232513_ALI_img.png
+val/232514_ALI_img.png
+val/232516_ALI_img.png
+val/232525_ALI_img.png
+val/232531_ALI_img.png
+val/232535_ALI_img.png
+val/232542_ALI_img.png
+val/232553_ALI_img.png
+val/232559_ALI_img.png
+val/232567_ALI_img.png
+val/232569_ALI_img.png
+val/232571_ALI_img.png
+val/232575_ALI_img.png
+val/232576_ALI_img.png
+val/232581_ALI_img.png
+val/232583_ALI_img.png
+val/232585_ALI_img.png
+val/232591_ALI_img.png
+val/232610_ALI_img.png
+val/232619_ALI_img.png
+val/232628_ALI_img.png
+val/232629_ALI_img.png
+val/232630_ALI_img.png
+val/232632_ALI_img.png
+val/232638_ALI_img.png
+val/232643_ALI_img.png
+val/232647_ALI_img.png
+val/232649_ALI_img.png
+val/232651_ALI_img.png
+val/232659_ALI_img.png
+val/232660_ALI_img.png
+val/232663_ALI_img.png
+val/232677_ALI_img.png
+val/232678_ALI_img.png
+val/232689_ALI_img.png
+val/232690_ALI_img.png
+val/232699_ALI_img.png
+val/232705_ALI_img.png
+val/232715_ALI_img.png
+val/232716_ALI_img.png
+val/232718_ALI_img.png
+val/232724_ALI_img.png
+val/232727_ALI_img.png
+val/232730_ALI_img.png
+val/232734_ALI_img.png
+val/232737_ALI_img.png
+val/232738_ALI_img.png
+val/232745_ALI_img.png
+val/232748_ALI_img.png
+val/232749_ALI_img.png
+val/232756_ALI_img.png
+val/232757_ALI_img.png
+val/232764_ALI_img.png
+val/232771_ALI_img.png
+val/232773_ALI_img.png
+val/232791_ALI_img.png
+val/232793_ALI_img.png
+val/232800_ALI_img.png
+val/232811_ALI_img.png
+val/232812_ALI_img.png
+val/232813_ALI_img.png
+val/232824_ALI_img.png
+val/232827_ALI_img.png
+val/232835_ALI_img.png
+val/232837_ALI_img.png
+val/232841_ALI_img.png
+val/232850_ALI_img.png
+val/232859_ALI_img.png
+val/232864_ALI_img.png
+val/232877_ALI_img.png
+val/232880_ALI_img.png
+val/232883_ALI_img.png
+val/232888_ALI_img.png
+val/232891_ALI_img.png
+val/232904_ALI_img.png
+val/232919_ALI_img.png
+val/232922_ALI_img.png
+val/232929_ALI_img.png
+val/232936_ALI_img.png
+val/232938_ALI_img.png
+val/232946_ALI_img.png
+val/232947_ALI_img.png
+val/232949_ALI_img.png
+val/232953_ALI_img.png
+val/232957_ALI_img.png
+val/232963_ALI_img.png
+val/232964_ALI_img.png
+val/232965_ALI_img.png
+val/232967_ALI_img.png
+val/232968_ALI_img.png
+val/232970_ALI_img.png
+val/232978_ALI_img.png
+val/232982_ALI_img.png
+val/232983_ALI_img.png
+val/232990_ALI_img.png
+val/232997_ALI_img.png
+val/232998_ALI_img.png
+val/233001_ALI_img.png
+val/233003_ALI_img.png
+val/233010_ALI_img.png
+val/233014_ALI_img.png
+val/233015_ALI_img.png
+val/233022_ALI_img.png
+val/233026_ALI_img.png
+val/233028_ALI_img.png
+val/233051_ALI_img.png
+val/233063_ALI_img.png
+val/233075_ALI_img.png
+val/233080_ALI_img.png
+val/233086_ALI_img.png
+val/233087_ALI_img.png
+val/233105_ALI_img.png
+val/233136_ALI_img.png
+val/233138_ALI_img.png
+val/233139_ALI_img.png
+val/233145_ALI_img.png
+val/233146_ALI_img.png
+val/233149_ALI_img.png
+val/233157_ALI_img.png
+val/233167_ALI_img.png
+val/233175_ALI_img.png
+val/233176_ALI_img.png
+val/233180_ALI_img.png
+val/233191_ALI_img.png
+val/233193_ALI_img.png
+val/233194_ALI_img.png
+val/233197_ALI_img.png
+val/233202_ALI_img.png
+val/233204_ALI_img.png
+val/233208_ALI_img.png
+val/233213_ALI_img.png
+val/233217_ALI_img.png
+val/233227_ALI_img.png
+val/233239_ALI_img.png
+val/233242_ALI_img.png
+val/233245_ALI_img.png
+val/233247_ALI_img.png
+val/233249_ALI_img.png
+val/233255_ALI_img.png
+val/233265_ALI_img.png
+val/233266_ALI_img.png
+val/233271_ALI_img.png
+val/233274_ALI_img.png
+val/233278_ALI_img.png
+val/233283_ALI_img.png
+val/233284_ALI_img.png
+val/233295_ALI_img.png
+val/233305_ALI_img.png
+val/233308_ALI_img.png
+val/233311_ALI_img.png
+val/233312_ALI_img.png
+val/233321_ALI_img.png
+val/233322_ALI_img.png
+val/233324_DT_img.png
+val/233326_ALI_img.png
+val/233335_ALI_img.png
+val/233338_ALI_img.png
+val/233348_ALI_img.png
+val/233350_ALI_img.png
+val/233351_ALI_img.png
+val/233354_ALI_img.png
+val/233386_ALI_img.png
+val/233391_ALI_img.png
+val/233392_ALI_img.png
+val/233404_ALI_img.png
+val/233413_ALI_img.png
+val/233425_DT_img.png
+val/233431_ALI_img.png
+val/233433_ALI_img.png
+val/233434_ALI_img.png
+val/233435_ALI_img.png
+val/233441_ALI_img.png
+val/233465_ALI_img.png
+val/233470_ALI_img.png
+val/233471_ALI_img.png
+val/233480_ALI_img.png
+val/233494_ALI_img.png
+val/233498_ALI_img.png
+val/233500_ALI_img.png
+val/233507_ALI_img.png
+val/233508_ALI_img.png
+val/233510_ALI_img.png
+val/233519_ALI_img.png
+val/233524_ALI_img.png
+val/233525_ALI_img.png
+val/233546_ALI_img.png
+val/233548_ALI_img.png
+val/233556_ALI_img.png
+val/233561_ALI_img.png
+val/233563_ALI_img.png
+val/233569_ALI_img.png
+val/233571_ALI_img.png
+val/233573_ALI_img.png
+val/233575_ALI_img.png
+val/233580_ALI_img.png
+val/233587_ALI_img.png
+val/233599_ALI_img.png
+val/233604_ALI_img.png
+val/233608_ALI_img.png
+val/233614_ALI_img.png
+val/233618_ALI_img.png
+val/233622_ALI_img.png
+val/233623_ALI_img.png
+val/233627_ALI_img.png
+val/233630_ALI_img.png
+val/233634_ALI_img.png
+val/233641_ALI_img.png
+val/233646_ALI_img.png
+val/233647_ALI_img.png
+val/233654_ALI_img.png
+val/233661_ALI_img.png
+val/233662_ALI_img.png
+val/233681_ALI_img.png
+val/233682_ALI_img.png
+val/233686_ALI_img.png
+val/233691_ALI_img.png
+val/233696_ALI_img.png
+val/233702_ALI_img.png
+val/233720_ALI_img.png
+val/233733_ALI_img.png
+val/233734_ALI_img.png
+val/233746_ALI_img.png
+val/233757_ALI_img.png
+val/233760_ALI_img.png
+val/233761_DT_img.png
+val/233763_ALI_img.png
+val/233767_ALI_img.png
+val/233779_ALI_img.png
+val/233783_ALI_img.png
+val/233784_ALI_img.png
+val/233786_ALI_img.png
+val/233795_ALI_img.png
+val/233828_ALI_img.png
+val/233834_ALI_img.png
+val/233835_ALI_img.png
+val/233841_ALI_img.png
+val/233856_ALI_img.png
+val/233857_ALI_img.png
+val/233865_ALI_img.png
+val/233866_ALI_img.png
+val/233868_ALI_img.png
+val/233871_ALI_img.png
+val/233877_ALI_img.png
+val/233892_ALI_img.png
+val/233896_ALI_img.png
+val/233906_ALI_img.png
+val/233922_ALI_img.png
+val/233926_ALI_img.png
+val/233934_ALI_img.png
+val/233938_ALI_img.png
+val/233944_ALI_img.png
+val/233946_ALI_img.png
+val/233947_ALI_img.png
+val/233952_ALI_img.png
+val/233953_ALI_img.png
+val/233960_ALI_img.png
+val/233963_ALI_img.png
+val/233984_ALI_img.png
+val/233988_ALI_img.png
+val/233997_ALI_img.png
+val/234001_ALI_img.png
+val/234007_ALI_img.png
+val/234011_ALI_img.png
+val/234033_ALI_img.png
+val/234041_ALI_img.png
+val/234045_ALI_img.png
+val/234047_ALI_img.png
+val/234049_ALI_img.png
+val/234052_ALI_img.png
+val/234053_ALI_img.png
+val/234070_ALI_img.png
+val/234075_ALI_img.png
+val/234081_ALI_img.png
+val/234082_ALI_img.png
+val/234083_ALI_img.png
+val/234090_ALI_img.png
+val/234091_ALI_img.png
+val/234094_ALI_img.png
+val/234103_DT_img.png
+val/234105_ALI_img.png
+val/234106_ALI_img.png
+val/234113_ALI_img.png
+val/234117_ALI_img.png
+val/234123_ALI_img.png
+val/234128_ALI_img.png
+val/234131_ALI_img.png
+val/234133_ALI_img.png
+val/234157_ALI_img.png
+val/234164_ALI_img.png
+val/234165_ALI_img.png
+val/234180_ALI_img.png
+val/234181_ALI_img.png
+val/234194_ALI_img.png
+val/234200_ALI_img.png
+val/234201_ALI_img.png
+val/234206_ALI_img.png
+val/234207_ALI_img.png
+val/234223_ALI_img.png
+val/234224_ALI_img.png
+val/234227_ALI_img.png
+val/234230_ALI_img.png
+val/234234_ALI_img.png
+val/234237_ALI_img.png
+val/234238_ALI_img.png
+val/234242_ALI_img.png
+val/234243_ALI_img.png
+val/234247_ALI_img.png
+val/234248_ALI_img.png
+val/234259_ALI_img.png
+val/234274_ALI_img.png
+val/234277_ALI_img.png
+val/234283_ALI_img.png
+val/234287_ALI_img.png
+val/234288_ALI_img.png
+val/234289_ALI_img.png
+val/234295_ALI_img.png
+val/234300_ALI_img.png
+val/234301_ALI_img.png
+val/234304_ALI_img.png
+val/234306_ALI_img.png
+val/234324_ALI_img.png
+val/234326_ALI_img.png
+val/234331_ALI_img.png
+val/234337_ALI_img.png
+val/234345_ALI_img.png
+val/234347_ALI_img.png
+val/234354_ALI_img.png
+val/234360_ALI_img.png
+val/234381_ALI_img.png
+val/234382_ALI_img.png
+val/234386_ALI_img.png
+val/234388_ALI_img.png
+val/234389_ALI_img.png
+val/234398_ALI_img.png
+val/234401_ALI_img.png
+val/234419_ALI_img.png
+val/234427_ALI_img.png
+val/234429_ALI_img.png
+val/234430_ALI_img.png
+val/234442_ALI_img.png
+val/234446_ALI_img.png
+val/234457_ALI_img.png
+val/234459_ALI_img.png
+val/234460_ALI_img.png
+val/234463_ALI_img.png
+val/234464_ALI_img.png
+val/234478_ALI_img.png
+val/234480_ALI_img.png
+val/234485_ALI_img.png
+val/234492_ALI_img.png
+val/234504_ALI_img.png
+val/234516_ALI_img.png
+val/234525_ALI_img.png
+val/234527_ALI_img.png
+val/234529_ALI_img.png
+val/234530_ALI_img.png
+val/234545_ALI_img.png
+val/234548_ALI_img.png
+val/234559_ALI_img.png
+val/234560_ALI_img.png
+val/234564_ALI_img.png
+val/234565_ALI_img.png
+val/234590_ALI_img.png
+val/234594_ALI_img.png
+val/234597_ALI_img.png
+val/234605_ALI_img.png
+val/234609_ALI_img.png
+val/234610_ALI_img.png
+val/234621_ALI_img.png
+val/234624_ALI_img.png
+val/234628_ALI_img.png
+val/234629_ALI_img.png
+val/234631_ALI_img.png
+val/234633_ALI_img.png
+val/234641_ALI_img.png
+val/234644_ALI_img.png
+val/234647_ALI_img.png
+val/234648_ALI_img.png
+val/234655_ALI_img.png
+val/234656_ALI_img.png
+val/234658_ALI_img.png
+val/234666_ALI_img.png
+val/234672_ALI_img.png
+val/234680_ALI_img.png
+val/234682_ALI_img.png
+val/234686_ALI_img.png
+val/234688_ALI_img.png
+val/234690_ALI_img.png
+val/234694_ALI_img.png
+val/234701_ALI_img.png
+val/234703_ALI_img.png
+val/234705_ALI_img.png
+val/234706_ALI_img.png
+val/234712_ALI_img.png
+val/234715_ALI_img.png
+val/234716_ALI_img.png
+val/234723_ALI_img.png
+val/234740_ALI_img.png
+val/234743_ALI_img.png
+val/234747_ALI_img.png
+val/234756_ALI_img.png
+val/234768_ALI_img.png
+val/234784_ALI_img.png
+val/234785_ALI_img.png
+val/234795_ALI_img.png
+val/234796_ALI_img.png
+val/234804_ALI_img.png
+val/234805_DT_img.png
+val/234807_ALI_img.png
+val/234814_ALI_img.png
+val/234839_ALI_img.png
+val/234843_ALI_img.png
+val/234857_ALI_img.png
+val/234870_ALI_img.png
+val/234871_ALI_img.png
+val/234877_ALI_img.png
+val/234879_ALI_img.png
+val/234905_ALI_img.png
+val/234906_ALI_img.png
+val/234913_ALI_img.png
+val/234921_ALI_img.png
+val/234922_ALI_img.png
+val/234923_ALI_img.png
+val/234927_ALI_img.png
+val/234927_DT_img.png
+val/234932_ALI_img.png
+val/234935_ALI_img.png
+val/234951_ALI_img.png
+val/234953_ALI_img.png
+val/234956_ALI_img.png
+val/234972_ALI_img.png
+val/234976_ALI_img.png
+val/234982_ALI_img.png
+val/234983_ALI_img.png
+val/234988_ALI_img.png
+val/234990_ALI_img.png
+val/234993_ALI_img.png
+val/235005_ALI_img.png
+val/235006_ALI_img.png
+val/235007_ALI_img.png
+val/235008_ALI_img.png
+val/235010_ALI_img.png
+val/235012_ALI_img.png
+val/235018_ALI_img.png
+val/235022_ALI_img.png
+val/235031_ALI_img.png
+val/235032_ALI_img.png
+val/235038_ALI_img.png
+val/235047_ALI_img.png
+val/235051_ALI_img.png
+val/235063_ALI_img.png
+val/235064_ALI_img.png
+val/235065_ALI_img.png
+val/235075_ALI_img.png
+val/235083_ALI_img.png
+val/235086_ALI_img.png
+val/235087_ALI_img.png
+val/235090_ALI_img.png
+val/235102_ALI_img.png
+val/235109_ALI_img.png
+val/235117_ALI_img.png
+val/235119_ALI_img.png
+val/235135_ALI_img.png
+val/235140_ALI_img.png
+val/235150_ALI_img.png
+val/235151_ALI_img.png
+val/235158_ALI_img.png
+val/235159_ALI_img.png
+val/235173_ALI_img.png
+val/235174_ALI_img.png
+val/235185_ALI_img.png
+val/235191_ALI_img.png
+val/235195_ALI_img.png
+val/235197_ALI_img.png
+val/235202_ALI_img.png
+val/235210_ALI_img.png
+val/235217_ALI_img.png
+val/235223_ALI_img.png
+val/235238_ALI_img.png
+val/235254_ALI_img.png
+val/235260_ALI_img.png
+val/235271_ALI_img.png
+val/235276_ALI_img.png
+val/235279_ALI_img.png
+val/235292_ALI_img.png
+val/235295_ALI_img.png
+val/235296_ALI_img.png
+val/235297_ALI_img.png
+val/235305_ALI_img.png
+val/235307_ALI_img.png
+val/235315_ALI_img.png
+val/235324_ALI_img.png
+val/235325_ALI_img.png
+val/235333_ALI_img.png
+val/235334_ALI_img.png
+val/235337_ALI_img.png
+val/235351_ALI_img.png
+val/235352_ALI_img.png
+val/235356_ALI_img.png
+val/235359_ALI_img.png
+val/235362_ALI_img.png
+val/235367_ALI_img.png
+val/235374_ALI_img.png
+val/235377_ALI_img.png
+val/235379_ALI_img.png
+val/235386_ALI_img.png
+val/235393_ALI_img.png
+val/235394_ALI_img.png
+val/235401_ALI_img.png
+val/235405_ALI_img.png
+val/235410_ALI_img.png
+val/235430_ALI_img.png
+val/235442_ALI_img.png
+val/235447_ALI_img.png
+val/235456_ALI_img.png
+val/235463_ALI_img.png
+val/235494_ALI_img.png
+val/235501_ALI_img.png
+val/235506_ALI_img.png
+val/235508_ALI_img.png
+val/235509_ALI_img.png
+val/235512_ALI_img.png
+val/235513_ALI_img.png
+val/235514_ALI_img.png
+val/235523_ALI_img.png
+val/235527_ALI_img.png
+val/235534_ALI_img.png
+val/235537_ALI_img.png
+val/235548_ALI_img.png
+val/235549_ALI_img.png
+val/235550_ALI_img.png
+val/235559_ALI_img.png
+val/235561_ALI_img.png
+val/235563_ALI_img.png
+val/235566_ALI_img.png
+val/235568_ALI_img.png
+val/235588_ALI_img.png
+val/235590_ALI_img.png
+val/235592_ALI_img.png
+val/235594_ALI_img.png
+val/235596_ALI_img.png
+val/235602_ALI_img.png
+val/235606_ALI_img.png
+val/235610_ALI_img.png
+val/235621_ALI_img.png
+val/235628_ALI_img.png
+val/235630_ALI_img.png
+val/235634_ALI_img.png
+val/235636_ALI_img.png
+val/235652_ALI_img.png
+val/235662_ALI_img.png
+val/235665_ALI_img.png
+val/235667_ALI_img.png
+val/235675_ALI_img.png
+val/235682_ALI_img.png
+val/235686_ALI_img.png
+val/235687_ALI_img.png
+val/235691_ALI_img.png
+val/235695_ALI_img.png
+val/235696_ALI_img.png
+val/235698_ALI_img.png
+val/235703_ALI_img.png
+val/235704_ALI_img.png
+val/235706_ALI_img.png
+val/235717_ALI_img.png
+val/235722_ALI_img.png
+val/235733_ALI_img.png
+val/235741_ALI_img.png
+val/235744_ALI_img.png
+val/235748_ALI_img.png
+val/235751_ALI_img.png
+val/235754_ALI_img.png
+val/235757_ALI_img.png
+val/235759_ALI_img.png
+val/235764_ALI_img.png
+val/235768_ALI_img.png
+val/235769_ALI_img.png
+val/235779_ALI_img.png
+val/235782_ALI_img.png
+val/235793_ALI_img.png
+val/235794_ALI_img.png
+val/235796_DT_img.png
+val/235804_ALI_img.png
+val/235806_ALI_img.png
+val/235808_ALI_img.png
+val/235814_ALI_img.png
+val/235816_ALI_img.png
+val/235819_ALI_img.png
+val/235825_ALI_img.png
+val/235832_ALI_img.png
+val/235836_ALI_img.png
+val/235838_ALI_img.png
+val/235845_ALI_img.png
+val/235861_ALI_img.png
+val/235867_ALI_img.png
+val/235868_ALI_img.png
+val/235872_ALI_img.png
+val/235874_ALI_img.png
+val/235882_ALI_img.png
+val/235888_ALI_img.png
+val/235890_ALI_img.png
+val/235897_ALI_img.png
+val/235900_ALI_img.png
+val/235901_ALI_img.png
+val/235907_ALI_img.png
+val/235909_ALI_img.png
+val/235910_ALI_img.png
+val/235922_ALI_img.png
+val/235926_ALI_img.png
+val/235935_ALI_img.png
+val/235946_ALI_img.png
+val/235954_ALI_img.png
+val/235961_ALI_img.png
+val/235973_ALI_img.png
+val/235977_ALI_img.png
+val/235982_ALI_img.png
+val/235992_ALI_img.png
+val/235997_ALI_img.png
+val/236005_ALI_img.png
+val/236032_ALI_img.png
+val/236038_ALI_img.png
+val/236041_ALI_img.png
+val/236045_ALI_img.png
+val/236049_ALI_img.png
+val/236054_ALI_img.png
+val/236059_ALI_img.png
+val/236091_ALI_img.png
+val/236099_ALI_img.png
+val/236101_ALI_img.png
+val/236104_ALI_img.png
+val/236105_ALI_img.png
+val/236106_ALI_img.png
+val/236109_ALI_img.png
+val/236111_ALI_img.png
+val/236124_ALI_img.png
+val/236127_ALI_img.png
+val/236129_ALI_img.png
+val/236132_ALI_img.png
+val/236144_ALI_img.png
+val/236152_ALI_img.png
+val/236157_ALI_img.png
+val/236178_ALI_img.png
+val/236183_ALI_img.png
+val/236189_ALI_img.png
+val/236193_ALI_img.png
+val/236204_ALI_img.png
+val/236208_ALI_img.png
+val/236211_ALI_img.png
+val/236216_ALI_img.png
+val/236219_ALI_img.png
+val/236234_ALI_img.png
+val/236235_ALI_img.png
+val/236236_ALI_img.png
+val/236241_ALI_img.png
+val/236244_ALI_img.png
+val/236247_ALI_img.png
+val/236248_ALI_img.png
+val/236253_ALI_img.png
+val/236263_ALI_img.png
+val/236265_ALI_img.png
+val/236272_ALI_img.png
+val/236276_ALI_img.png
+val/236278_ALI_img.png
+val/236290_ALI_img.png
+val/236291_ALI_img.png
+val/236295_ALI_img.png
+val/236300_ALI_img.png
+val/236309_ALI_img.png
+val/236313_ALI_img.png
+val/236314_ALI_img.png
+val/236316_ALI_img.png
+val/236317_ALI_img.png
+val/236319_ALI_img.png
+val/236320_ALI_img.png
+val/236324_ALI_img.png
+val/236332_ALI_img.png
+val/236346_ALI_img.png
+val/236347_ALI_img.png
+val/236352_ALI_img.png
+val/236356_ALI_img.png
+val/236366_ALI_img.png
+val/236373_ALI_img.png
+val/236376_ALI_img.png
+val/236379_ALI_img.png
+val/236384_ALI_img.png
+val/236385_ALI_img.png
+val/236399_ALI_img.png
+val/236400_ALI_img.png
+val/236405_ALI_img.png
+val/236406_ALI_img.png
+val/236408_ALI_img.png
+val/236413_ALI_img.png
+val/236414_ALI_img.png
+val/236420_ALI_img.png
+val/236422_ALI_img.png
+val/236432_ALI_img.png
+val/236433_ALI_img.png
+val/236436_ALI_img.png
+val/236438_ALI_img.png
+val/236439_ALI_img.png
+val/236456_ALI_img.png
+val/236457_ALI_img.png
+val/236464_ALI_img.png
+val/236470_ALI_img.png
+val/236473_ALI_img.png
+val/236480_ALI_img.png
+val/236481_ALI_img.png
+val/236482_ALI_img.png
+val/236495_ALI_img.png
+val/236496_ALI_img.png
+val/236498_ALI_img.png
+val/236507_ALI_img.png
+val/236511_ALI_img.png
+val/236525_ALI_img.png
+val/236529_ALI_img.png
+val/236531_ALI_img.png
+val/236532_ALI_img.png
+val/236538_ALI_img.png
+val/236542_ALI_img.png
+val/236543_ALI_img.png
+val/236549_ALI_img.png
+val/236571_ALI_img.png
+val/236580_ALI_img.png
+val/236582_ALI_img.png
+val/236586_ALI_img.png
+val/236588_ALI_img.png
+val/236595_ALI_img.png
+val/236596_ALI_img.png
+val/236600_ALI_img.png
+val/236606_ALI_img.png
+val/236607_ALI_img.png
+val/236613_ALI_img.png
+val/236615_ALI_img.png
+val/236619_ALI_img.png
+val/236628_ALI_img.png
+val/236632_ALI_img.png
+val/236637_ALI_img.png
+val/236643_ALI_img.png
+val/236648_ALI_img.png
+val/236659_ALI_img.png
+val/236661_ALI_img.png
+val/236663_ALI_img.png
+val/236665_ALI_img.png
+val/236667_ALI_img.png
+val/236674_ALI_img.png
+val/236675_ALI_img.png
+val/236680_ALI_img.png
+val/236686_ALI_img.png
+val/236688_ALI_img.png
+val/236695_ALI_img.png
+val/236697_ALI_img.png
+val/236698_ALI_img.png
+val/236701_ALI_img.png
+val/236717_ALI_img.png
+val/236721_ALI_img.png
+val/236724_ALI_img.png
+val/236733_ALI_img.png
+val/236738_ALI_img.png
+val/236745_ALI_img.png
+val/236747_ALI_img.png
+val/236748_ALI_img.png
+val/236750_ALI_img.png
+val/236756_ALI_img.png
+val/236759_ALI_img.png
+val/236768_ALI_img.png
+val/236773_ALI_img.png
+val/236780_ALI_img.png
+val/236791_ALI_img.png
+val/236792_ALI_img.png
+val/236797_DT_img.png
+val/236804_ALI_img.png
+val/236808_ALI_img.png
+val/236809_ALI_img.png
+val/236829_ALI_img.png
+val/236830_ALI_img.png
+val/236840_ALI_img.png
+val/236842_ALI_img.png
+val/236843_ALI_img.png
+val/236844_ALI_img.png
+val/236850_ALI_img.png
+val/236865_ALI_img.png
+val/236870_ALI_img.png
+val/236879_ALI_img.png
+val/236890_ALI_img.png
+val/236894_ALI_img.png
+val/236908_ALI_img.png
+val/236910_ALI_img.png
+val/236917_ALI_img.png
+val/236918_ALI_img.png
+val/236919_ALI_img.png
+val/236920_ALI_img.png
+val/236925_ALI_img.png
+val/236926_ALI_img.png
+val/236927_ALI_img.png
+val/236933_ALI_img.png
+val/236935_ALI_img.png
+val/236936_ALI_img.png
+val/236937_ALI_img.png
+val/236938_ALI_img.png
+val/236942_ALI_img.png
+val/236946_ALI_img.png
+val/236947_ALI_img.png
+val/236953_ALI_img.png
+val/236957_ALI_img.png
+val/236960_ALI_img.png
+val/236979_ALI_img.png
+val/236980_ALI_img.png
+val/236981_ALI_img.png
+val/236984_DT_img.png
+val/236985_ALI_img.png
+val/236986_ALI_img.png
+val/236989_ALI_img.png
+val/236997_ALI_img.png
+val/236999_ALI_img.png
+val/237005_ALI_img.png
+val/237006_ALI_img.png
+val/237008_ALI_img.png
+val/237011_ALI_img.png
+val/237012_ALI_img.png
+val/237014_ALI_img.png
+val/237016_ALI_img.png
+val/237030_ALI_img.png
+val/237031_ALI_img.png
+val/237032_ALI_img.png
+val/237041_ALI_img.png
+val/237052_ALI_img.png
+val/237053_ALI_img.png
+val/237056_ALI_img.png
+val/237062_ALI_img.png
+val/237064_ALI_img.png
+val/237066_ALI_img.png
+val/237076_ALI_img.png
+val/237081_ALI_img.png
+val/237083_ALI_img.png
+val/237084_ALI_img.png
+val/237085_ALI_img.png
+val/237090_DT_img.png
+val/237092_ALI_img.png
+val/237094_ALI_img.png
+val/237107_ALI_img.png
+val/237109_ALI_img.png
+val/237112_ALI_img.png
+val/237125_ALI_img.png
+val/237130_ALI_img.png
+val/237137_ALI_img.png
+val/237139_ALI_img.png
+val/237143_ALI_img.png
+val/237146_ALI_img.png
+val/237149_ALI_img.png
+val/237151_ALI_img.png
+val/237152_ALI_img.png
+val/237153_ALI_img.png
+val/237154_ALI_img.png
+val/237159_ALI_img.png
+val/237160_ALI_img.png
+val/237161_ALI_img.png
+val/237162_ALI_img.png
+val/237163_ALI_img.png
+val/237165_ALI_img.png
+val/237170_ALI_img.png
+val/237189_ALI_img.png
+val/237195_ALI_img.png
+val/237197_ALI_img.png
+val/237203_ALI_img.png
+val/237204_ALI_img.png
+val/237218_ALI_img.png
+val/237226_ALI_img.png
+val/237227_ALI_img.png
+val/237237_ALI_img.png
+val/237239_ALI_img.png
+val/237241_ALI_img.png
+val/237244_ALI_img.png
+val/237245_ALI_img.png
+val/237251_ALI_img.png
+val/237258_ALI_img.png
+val/237261_ALI_img.png
+val/237278_ALI_img.png
+val/237281_ALI_img.png
+val/237282_ALI_img.png
+val/237293_ALI_img.png
+val/237297_ALI_img.png
+val/237298_ALI_img.png
+val/237311_ALI_img.png
+val/237316_ALI_img.png
+val/237320_ALI_img.png
+val/237327_ALI_img.png
+val/237331_ALI_img.png
+val/237333_ALI_img.png
+val/237336_ALI_img.png
+val/237349_ALI_img.png
+val/237355_ALI_img.png
+val/237357_ALI_img.png
+val/237368_ALI_img.png
+val/237374_ALI_img.png
+val/237381_ALI_img.png
+val/237382_ALI_img.png
+val/237387_ALI_img.png
+val/237388_ALI_img.png
+val/237406_ALI_img.png
+val/237414_ALI_img.png
+val/237416_ALI_img.png
+val/237421_ALI_img.png
+val/237423_ALI_img.png
+val/237424_ALI_img.png
+val/237426_ALI_img.png
+val/237428_ALI_img.png
+val/237429_ALI_img.png
+val/237432_ALI_img.png
+val/237438_ALI_img.png
+val/237443_ALI_img.png
+val/237473_ALI_img.png
+val/237476_ALI_img.png
+val/237481_ALI_img.png
+val/237482_ALI_img.png
+val/237486_ALI_img.png
+val/237486_DT_img.png
+val/237491_ALI_img.png
+val/237493_ALI_img.png
+val/237499_ALI_img.png
+val/237501_ALI_img.png
+val/237513_ALI_img.png
+val/237515_ALI_img.png
+val/237521_ALI_img.png
+val/237522_ALI_img.png
+val/237523_ALI_img.png
+val/237526_ALI_img.png
+val/237527_ALI_img.png
+val/237533_ALI_img.png
+val/237534_ALI_img.png
+val/237535_ALI_img.png
+val/237540_ALI_img.png
+val/237541_ALI_img.png
+val/237543_ALI_img.png
+val/237544_ALI_img.png
+val/237547_ALI_img.png
+val/237550_ALI_img.png
+val/237563_ALI_img.png
+val/237566_ALI_img.png
+val/237570_ALI_img.png
+val/237571_ALI_img.png
+val/237574_ALI_img.png
+val/237577_ALI_img.png
+val/237579_ALI_img.png
+val/237583_ALI_img.png
+val/237585_ALI_img.png
+val/237586_ALI_img.png
+val/237589_ALI_img.png
+val/237596_ALI_img.png
+val/237597_ALI_img.png
+val/237602_ALI_img.png
+val/237606_ALI_img.png
+val/237611_ALI_img.png
+val/237613_ALI_img.png
+val/237617_ALI_img.png
+val/237621_ALI_img.png
+val/237627_ALI_img.png
+val/237629_ALI_img.png
+val/237632_ALI_img.png
+val/237655_ALI_img.png
+val/237662_ALI_img.png
+val/237668_ALI_img.png
+val/237677_ALI_img.png
+val/237678_ALI_img.png
+val/237680_ALI_img.png
+val/237681_ALI_img.png
+val/237687_ALI_img.png
+val/237690_ALI_img.png
+val/237696_ALI_img.png
+val/237705_ALI_img.png
+val/237707_ALI_img.png
+val/237713_ALI_img.png
+val/237719_ALI_img.png
+val/237721_ALI_img.png
+val/237723_ALI_img.png
+val/237729_ALI_img.png
+val/237736_ALI_img.png
+val/237738_ALI_img.png
+val/237740_ALI_img.png
+val/237744_ALI_img.png
+val/237747_ALI_img.png
+val/237751_ALI_img.png
+val/237755_ALI_img.png
+val/237757_ALI_img.png
+val/237758_ALI_img.png
+val/237759_ALI_img.png
+val/237764_ALI_img.png
+val/237766_ALI_img.png
+val/237770_ALI_img.png
+val/237776_ALI_img.png
+val/237782_ALI_img.png
+val/237783_ALI_img.png
+val/237788_ALI_img.png
+val/237793_ALI_img.png
+val/237795_ALI_img.png
+val/237798_ALI_img.png
+val/237800_ALI_img.png
+val/237801_ALI_img.png
+val/237805_ALI_img.png
+val/237808_ALI_img.png
+val/237810_ALI_img.png
+val/237811_ALI_img.png
+val/237819_ALI_img.png
+val/237821_ALI_img.png
+val/237828_ALI_img.png
+val/237829_ALI_img.png
+val/237831_ALI_img.png
+val/237833_ALI_img.png
+val/237835_ALI_img.png
+val/237837_ALI_img.png
+val/237844_ALI_img.png
+val/237846_ALI_img.png
+val/237847_ALI_img.png
+val/237850_ALI_img.png
+val/237851_ALI_img.png
+val/237858_ALI_img.png
+val/237860_ALI_img.png
+val/237867_ALI_img.png
+val/237869_ALI_img.png
+val/237872_ALI_img.png
+val/237875_ALI_img.png
+val/237895_ALI_img.png
+val/237903_ALI_img.png
+val/237910_ALI_img.png
+val/237918_ALI_img.png
+val/237921_ALI_img.png
+val/237922_ALI_img.png
+val/237923_ALI_img.png
+val/237934_ALI_img.png
+val/237937_ALI_img.png
+val/237938_ALI_img.png
+val/237942_ALI_img.png
+val/237944_ALI_img.png
+val/237951_ALI_img.png
+val/237960_ALI_img.png
+val/237962_ALI_img.png
+val/237965_ALI_img.png
+val/237967_ALI_img.png
+val/237970_ALI_img.png
+val/237974_ALI_img.png
+val/237986_ALI_img.png
+val/237988_ALI_img.png
+val/237989_ALI_img.png
+val/237991_ALI_img.png
+val/237999_ALI_img.png
+val/238011_ALI_img.png
+val/238014_ALI_img.png
+val/238035_ALI_img.png
+val/238038_ALI_img.png
+val/238039_ALI_img.png
+val/238040_ALI_img.png
+val/238043_ALI_img.png
+val/238045_ALI_img.png
+val/238063_ALI_img.png
+val/238070_ALI_img.png
+val/238071_ALI_img.png
+val/238072_ALI_img.png
+val/238078_ALI_img.png
+val/238086_ALI_img.png
+val/238087_ALI_img.png
+val/238090_ALI_img.png
+val/238092_ALI_img.png
+val/238095_ALI_img.png
+val/238098_ALI_img.png
+val/238103_ALI_img.png
+val/238106_ALI_img.png
+val/238109_ALI_img.png
+val/238119_ALI_img.png
+val/238120_ALI_img.png
+val/238123_ALI_img.png
+val/238132_ALI_img.png
+val/238133_ALI_img.png
+val/238138_ALI_img.png
+val/238143_ALI_img.png
+val/238147_ALI_img.png
+val/238151_ALI_img.png
+val/238156_ALI_img.png
+val/238159_ALI_img.png
+val/238172_ALI_img.png
+val/238174_ALI_img.png
+val/238178_ALI_img.png
+val/238179_ALI_img.png
+val/238182_ALI_img.png
+val/238190_DT_img.png
+val/238191_ALI_img.png
+val/238194_ALI_img.png
+val/238198_ALI_img.png
+val/238202_ALI_img.png
+val/238203_ALI_img.png
+val/238207_ALI_img.png
+val/238208_ALI_img.png
+val/238212_ALI_img.png
+val/238217_ALI_img.png
+val/238219_ALI_img.png
+val/238227_ALI_img.png
+val/238231_ALI_img.png
+val/238232_ALI_img.png
+val/238240_ALI_img.png
+val/238251_ALI_img.png
+val/238252_ALI_img.png
+val/238255_ALI_img.png
+val/238261_ALI_img.png
+val/238262_ALI_img.png
+val/238265_ALI_img.png
+val/238271_ALI_img.png
+val/238284_ALI_img.png
+val/238286_ALI_img.png
+val/238295_ALI_img.png
+val/238298_ALI_img.png
+val/238299_ALI_img.png
+val/238300_ALI_img.png
+val/238301_ALI_img.png
+val/238303_ALI_img.png
+val/238308_ALI_img.png
+val/238310_ALI_img.png
+val/238324_ALI_img.png
+val/238328_ALI_img.png
+val/238333_ALI_img.png
+val/238354_ALI_img.png
+val/238359_ALI_img.png
+val/238363_ALI_img.png
+val/238365_ALI_img.png
+val/238373_ALI_img.png
+val/238375_ALI_img.png
+val/238376_ALI_img.png
+val/238380_ALI_img.png
+val/238382_ALI_img.png
+val/238384_ALI_img.png
+val/238386_ALI_img.png
+val/238387_ALI_img.png
+val/238392_ALI_img.png
+val/238393_ALI_img.png
+val/238399_ALI_img.png
+val/238403_ALI_img.png
+val/238417_ALI_img.png
+val/238418_ALI_img.png
+val/238421_ALI_img.png
+val/238422_ALI_img.png
+val/238424_ALI_img.png
+val/238427_ALI_img.png
+val/238434_ALI_img.png
+val/238445_ALI_img.png
+val/238446_ALI_img.png
+val/238447_ALI_img.png
+val/238448_ALI_img.png
+val/238449_ALI_img.png
+val/238453_ALI_img.png
+val/238455_ALI_img.png
+val/238458_ALI_img.png
+val/238462_ALI_img.png
+val/238465_ALI_img.png
+val/238467_ALI_img.png
+val/238469_ALI_img.png
+val/238473_ALI_img.png
+val/238475_ALI_img.png
+val/238477_ALI_img.png
+val/238495_ALI_img.png
+val/238499_ALI_img.png
+val/238500_ALI_img.png
+val/238502_ALI_img.png
+val/238503_ALI_img.png
+val/238504_ALI_img.png
+val/238505_ALI_img.png
+val/238507_ALI_img.png
+val/238508_ALI_img.png
+val/238514_ALI_img.png
+val/238522_ALI_img.png
+val/238525_ALI_img.png
+val/238526_ALI_img.png
+val/238528_ALI_img.png
+val/238530_ALI_img.png
+val/238531_ALI_img.png
+val/238533_ALI_img.png
+val/238536_ALI_img.png
+val/238542_ALI_img.png
+val/238556_ALI_img.png
+val/238558_ALI_img.png
+val/238560_ALI_img.png
+val/238567_ALI_img.png
+val/238569_ALI_img.png
+val/238577_ALI_img.png
+val/238580_ALI_img.png
+val/238582_ALI_img.png
+val/238585_ALI_img.png
+val/238586_ALI_img.png
+val/238587_ALI_img.png
+val/238588_ALI_img.png
+val/238592_ALI_img.png
+val/238593_ALI_img.png
+val/238595_ALI_img.png
+val/238597_DT_img.png
+val/238603_ALI_img.png
+val/238606_ALI_img.png
+val/238614_ALI_img.png
+val/238629_ALI_img.png
+val/238637_ALI_img.png
+val/238638_ALI_img.png
+val/238649_ALI_img.png
+val/238654_ALI_img.png
+val/238662_ALI_img.png
+val/238671_ALI_img.png
+val/238672_ALI_img.png
+val/238676_ALI_img.png
+val/238679_ALI_img.png
+val/238687_ALI_img.png
+val/238690_ALI_img.png
+val/238695_ALI_img.png
+val/238697_ALI_img.png
+val/238698_ALI_img.png
+val/238703_ALI_img.png
+val/238704_ALI_img.png
+val/238706_ALI_img.png
+val/238707_ALI_img.png
+val/238713_ALI_img.png
+val/238715_ALI_img.png
+val/238717_ALI_img.png
+val/238720_ALI_img.png
+val/238731_ALI_img.png
+val/238735_ALI_img.png
+val/238736_ALI_img.png
+val/238756_ALI_img.png
+val/238761_ALI_img.png
+val/238769_ALI_img.png
+val/238770_ALI_img.png
+val/238771_ALI_img.png
+val/238774_ALI_img.png
+val/238775_ALI_img.png
+val/238776_ALI_img.png
+val/238787_ALI_img.png
+val/238795_ALI_img.png
+val/238805_ALI_img.png
+val/238812_ALI_img.png
+val/238816_ALI_img.png
+val/238819_ALI_img.png
+val/238823_ALI_img.png
+val/238826_ALI_img.png
+val/238832_ALI_img.png
+val/238842_ALI_img.png
+val/238844_ALI_img.png
+val/238845_ALI_img.png
+val/238848_ALI_img.png
+val/238849_ALI_img.png
+val/238858_ALI_img.png
+val/238862_ALI_img.png
+val/238863_ALI_img.png
+val/238865_ALI_img.png
+val/238866_ALI_img.png
+val/238867_ALI_img.png
+val/238876_ALI_img.png
+val/238877_ALI_img.png
+val/238880_ALI_img.png
+val/238881_ALI_img.png
+val/238884_ALI_img.png
+val/238886_ALI_img.png
+val/238895_ALI_img.png
+val/238897_ALI_img.png
+val/238901_ALI_img.png
+val/238904_ALI_img.png
+val/238906_ALI_img.png
+val/238911_ALI_img.png
+val/238912_ALI_img.png
+val/238914_ALI_img.png
+val/238920_ALI_img.png
+val/238928_ALI_img.png
+val/238930_ALI_img.png
+val/238935_ALI_img.png
+val/238938_ALI_img.png
+val/238939_ALI_img.png
+val/238941_ALI_img.png
+val/238945_ALI_img.png
+val/238946_ALI_img.png
+val/238952_ALI_img.png
+val/238965_ALI_img.png
+val/238973_ALI_img.png
+val/238978_ALI_img.png
+val/238981_ALI_img.png
+val/238982_ALI_img.png
+val/238985_ALI_img.png
+val/238986_ALI_img.png
+val/238988_ALI_img.png
+val/238995_ALI_img.png
+val/238998_ALI_img.png
+val/239005_ALI_img.png
+val/239009_ALI_img.png
+val/239016_ALI_img.png
+val/239026_ALI_img.png
+val/239031_ALI_img.png
+val/239032_ALI_img.png
+val/239033_ALI_img.png
+val/239036_ALI_img.png
+val/239039_ALI_img.png
+val/239043_ALI_img.png
+val/239047_ALI_img.png
+val/239054_ALI_img.png
+val/239056_ALI_img.png
+val/239058_ALI_img.png
+val/239089_ALI_img.png
+val/239094_ALI_img.png
+val/239095_ALI_img.png
+val/239109_ALI_img.png
+val/239114_ALI_img.png
+val/239120_ALI_img.png
+val/239121_ALI_img.png
+val/239131_ALI_img.png
+val/239138_ALI_img.png
+val/239144_ALI_img.png
+val/239147_ALI_img.png
+val/239166_ALI_img.png
+val/239168_ALI_img.png
+val/239170_ALI_img.png
+val/239173_ALI_img.png
+val/239174_ALI_img.png
+val/239175_ALI_img.png
+val/239177_ALI_img.png
+val/239180_ALI_img.png
+val/239183_ALI_img.png
+val/239184_ALI_img.png
+val/239189_ALI_img.png
+val/239191_ALI_img.png
+val/239194_ALI_img.png
+val/239195_ALI_img.png
+val/239197_ALI_img.png
+val/239199_ALI_img.png
+val/239202_ALI_img.png
+val/239203_ALI_img.png
+val/239208_ALI_img.png
+val/239212_ALI_img.png
+val/239215_ALI_img.png
+val/239218_ALI_img.png
+val/239219_ALI_img.png
+val/239220_ALI_img.png
+val/239221_ALI_img.png
+val/239229_ALI_img.png
+val/239238_ALI_img.png
+val/239242_ALI_img.png
+val/239246_ALI_img.png
+val/239250_ALI_img.png
+val/239253_ALI_img.png
+val/239254_ALI_img.png
+val/239263_ALI_img.png
+val/239264_ALI_img.png
+val/239271_ALI_img.png
+val/239275_ALI_img.png
+val/239276_ALI_img.png
+val/239277_ALI_img.png
+val/239279_ALI_img.png
+val/239280_ALI_img.png
+val/239284_ALI_img.png
+val/239286_ALI_img.png
+val/239292_ALI_img.png
+val/239301_ALI_img.png
+val/239303_ALI_img.png
+val/239307_ALI_img.png
+val/239310_ALI_img.png
+val/239317_ALI_img.png
+val/239321_ALI_img.png
+val/239324_ALI_img.png
+val/239331_ALI_img.png
+val/239334_ALI_img.png
+val/239339_ALI_img.png
+val/239340_ALI_img.png
+val/239342_ALI_img.png
+val/239345_ALI_img.png
+val/239346_ALI_img.png
+val/239350_ALI_img.png
+val/239357_ALI_img.png
+val/239382_ALI_img.png
+val/239387_ALI_img.png
+val/239389_ALI_img.png
+val/239390_ALI_img.png
+val/239396_ALI_img.png
+val/239397_ALI_img.png
+val/239405_ALI_img.png
+val/239413_DT_img.png
+val/239419_ALI_img.png
+val/239420_ALI_img.png
+val/239424_ALI_img.png
+val/239432_ALI_img.png
+val/239436_ALI_img.png
+val/239437_ALI_img.png
+val/239438_ALI_img.png
+val/239453_ALI_img.png
+val/239455_ALI_img.png
+val/239459_ALI_img.png
+val/239465_ALI_img.png
+val/239471_ALI_img.png
+val/239482_ALI_img.png
+val/239483_ALI_img.png
+val/239489_ALI_img.png
+val/239491_ALI_img.png
+val/239493_ALI_img.png
+val/239496_ALI_img.png
+val/239500_ALI_img.png
+val/239502_ALI_img.png
+val/239506_ALI_img.png
+val/239508_ALI_img.png
+val/239519_ALI_img.png
+val/239521_ALI_img.png
+val/239522_ALI_img.png
+val/239528_ALI_img.png
+val/239548_ALI_img.png
+val/239555_ALI_img.png
+val/239570_ALI_img.png
+val/239574_ALI_img.png
+val/239575_ALI_img.png
+val/239578_ALI_img.png
+val/239580_ALI_img.png
+val/239589_ALI_img.png
+val/239597_ALI_img.png
+val/239599_ALI_img.png
+val/239600_ALI_img.png
+val/239601_ALI_img.png
+val/239608_ALI_img.png
+val/239614_ALI_img.png
+val/239615_ALI_img.png
+val/239621_ALI_img.png
+val/239627_ALI_img.png
+val/239635_ALI_img.png
+val/239639_ALI_img.png
+val/239640_ALI_img.png
+val/239648_ALI_img.png
+val/239649_ALI_img.png
+val/239656_ALI_img.png
+val/239662_ALI_img.png
+val/239667_ALI_img.png
+val/239674_ALI_img.png
+val/239678_ALI_img.png
+val/239689_ALI_img.png
+val/239691_ALI_img.png
+val/239692_ALI_img.png
+val/239695_ALI_img.png
+val/239696_ALI_img.png
+val/239697_ALI_img.png
+val/239701_ALI_img.png
+val/239706_ALI_img.png
+val/239709_ALI_img.png
+val/239710_ALI_img.png
+val/239713_ALI_img.png
+val/239715_ALI_img.png
+val/239716_ALI_img.png
+val/239724_ALI_img.png
+val/239727_ALI_img.png
+val/239728_ALI_img.png
+val/239729_ALI_img.png
+val/239736_ALI_img.png
+val/239738_ALI_img.png
+val/239741_ALI_img.png
+val/239742_ALI_img.png
+val/239747_ALI_img.png
+val/239763_ALI_img.png
+val/239774_ALI_img.png
+val/239777_ALI_img.png
+val/239779_ALI_img.png
+val/239781_ALI_img.png
+val/239782_ALI_img.png
+val/239785_ALI_img.png
+val/239786_ALI_img.png
+val/239798_ALI_img.png
+val/239800_ALI_img.png
+val/239801_ALI_img.png
+val/239806_ALI_img.png
+val/239809_ALI_img.png
+val/239811_ALI_img.png
+val/239813_ALI_img.png
+val/239832_ALI_img.png
+val/239853_ALI_img.png
+val/239855_ALI_img.png
+val/239856_ALI_img.png
+val/239871_ALI_img.png
+val/239872_ALI_img.png
+val/239875_ALI_img.png
+val/239881_ALI_img.png
+val/239885_ALI_img.png
+val/239889_ALI_img.png
+val/239899_ALI_img.png
+val/239901_ALI_img.png
+val/239909_ALI_img.png
+val/239913_ALI_img.png
+val/239925_ALI_img.png
+val/239926_ALI_img.png
+val/239942_ALI_img.png
+val/239945_ALI_img.png
+val/239948_ALI_img.png
+val/239950_ALI_img.png
+val/239951_ALI_img.png
+val/239956_ALI_img.png
+val/239958_ALI_img.png
+val/239959_ALI_img.png
+val/239962_ALI_img.png
+val/239963_ALI_img.png
+val/239966_ALI_img.png
+val/239976_ALI_img.png
+val/239981_ALI_img.png
+val/239985_ALI_img.png
+val/239988_ALI_img.png
+val/240005_ALI_img.png
+val/240012_ALI_img.png
+val/240025_ALI_img.png
+val/240026_ALI_img.png
+val/240030_ALI_img.png
+val/240035_ALI_img.png
+val/240043_ALI_img.png
+val/240049_ALI_img.png
+val/240050_ALI_img.png
+val/240052_ALI_img.png
+val/240053_ALI_img.png
+val/240057_ALI_img.png
+val/240071_ALI_img.png
+val/240073_ALI_img.png
+val/240076_ALI_img.png
+val/240077_ALI_img.png
+val/240083_ALI_img.png
+val/240087_ALI_img.png
+val/240089_ALI_img.png
+val/240090_ALI_img.png
+val/240091_ALI_img.png
+val/240092_ALI_img.png
+val/240093_ALI_img.png
+val/240095_ALI_img.png
+val/240099_ALI_img.png
+val/240102_ALI_img.png
+val/240108_ALI_img.png
+val/240112_ALI_img.png
+val/240115_ALI_img.png
+val/240117_ALI_img.png
+val/240128_ALI_img.png
+val/240133_ALI_img.png
+val/240135_ALI_img.png
+val/240139_ALI_img.png
+val/240141_ALI_img.png
+val/240142_ALI_img.png
+val/240143_ALI_img.png
+val/240145_ALI_img.png
+val/240147_ALI_img.png
+val/240156_ALI_img.png
+val/240157_ALI_img.png
+val/240159_ALI_img.png
+val/240160_ALI_img.png
+val/240161_ALI_img.png
+val/240168_ALI_img.png
+val/240177_ALI_img.png
+val/240179_ALI_img.png
+val/240180_ALI_img.png
+val/240185_ALI_img.png
+val/240191_ALI_img.png
+val/240192_ALI_img.png
+val/240197_ALI_img.png
+val/240203_ALI_img.png
+val/240208_ALI_img.png
+val/240210_ALI_img.png
+val/240215_ALI_img.png
+val/240218_ALI_img.png
+val/240235_ALI_img.png
+val/240236_ALI_img.png
+val/240237_ALI_img.png
+val/240242_DT_img.png
+val/240251_ALI_img.png
+val/240264_ALI_img.png
+val/240266_ALI_img.png
+val/240269_ALI_img.png
+val/240271_ALI_img.png
+val/240278_ALI_img.png
+val/240279_ALI_img.png
+val/240284_ALI_img.png
+val/240286_ALI_img.png
+val/240287_ALI_img.png
+val/240289_ALI_img.png
+val/240294_ALI_img.png
+val/240298_ALI_img.png
+val/240300_ALI_img.png
+val/240308_ALI_img.png
+val/240314_ALI_img.png
+val/240317_ALI_img.png
+val/240325_ALI_img.png
+val/240326_ALI_img.png
+val/240329_ALI_img.png
+val/240329_DT_img.png
+val/240330_ALI_img.png
+val/240331_ALI_img.png
+val/240338_ALI_img.png
+val/240344_ALI_img.png
+val/240346_ALI_img.png
+val/240347_ALI_img.png
+val/240349_ALI_img.png
+val/240350_ALI_img.png
+val/240351_ALI_img.png
+val/240352_ALI_img.png
+val/240354_ALI_img.png
+val/240359_ALI_img.png
+val/240361_ALI_img.png
+val/240362_ALI_img.png
+val/240365_ALI_img.png
+val/240366_ALI_img.png
+val/240368_ALI_img.png
+val/240374_ALI_img.png
+val/240383_ALI_img.png
+val/240388_ALI_img.png
+val/240409_ALI_img.png
+val/240415_ALI_img.png
+val/240425_ALI_img.png
+val/240428_ALI_img.png
+val/240440_ALI_img.png
+val/240447_ALI_img.png
+val/240448_ALI_img.png
+val/240450_ALI_img.png
+val/240452_ALI_img.png
+val/240453_ALI_img.png
+val/240458_ALI_img.png
+val/240461_ALI_img.png
+val/240474_ALI_img.png
+val/240479_ALI_img.png
+val/240480_ALI_img.png
+val/240483_ALI_img.png
+val/240487_ALI_img.png
+val/240490_ALI_img.png
+val/240491_ALI_img.png
+val/240493_ALI_img.png
+val/240503_ALI_img.png
+val/240511_ALI_img.png
+val/240519_ALI_img.png
+val/240520_ALI_img.png
+val/240525_ALI_img.png
+val/240528_ALI_img.png
+val/240536_ALI_img.png
+val/240538_ALI_img.png
+val/240540_ALI_img.png
+val/240543_ALI_img.png
+val/240544_ALI_img.png
+val/240546_ALI_img.png
+val/240548_ALI_img.png
+val/240552_ALI_img.png
+val/240555_ALI_img.png
+val/240566_ALI_img.png
+val/240572_ALI_img.png
+val/240586_ALI_img.png
+val/240587_ALI_img.png
+val/240596_ALI_img.png
+val/240598_ALI_img.png
+val/240599_ALI_img.png
+val/240600_ALI_img.png
+val/240606_ALI_img.png
+val/240611_ALI_img.png
+val/240617_ALI_img.png
+val/240618_ALI_img.png
+val/240619_ALI_img.png
+val/240628_ALI_img.png
+val/240631_ALI_img.png
+val/240639_ALI_img.png
+val/240640_ALI_img.png
+val/240643_ALI_img.png
+val/240649_ALI_img.png
+val/240651_ALI_img.png
+val/240653_ALI_img.png
+val/240657_ALI_img.png
+val/240659_ALI_img.png
+val/240663_ALI_img.png
+val/240666_ALI_img.png
+val/240667_ALI_img.png
+val/240673_ALI_img.png
+val/240674_ALI_img.png
+val/240676_ALI_img.png
+val/240681_ALI_img.png
+val/240690_ALI_img.png
+val/240692_ALI_img.png
+val/240696_ALI_img.png
+val/240699_ALI_img.png
+val/240700_ALI_img.png
+val/240703_ALI_img.png
+val/240707_ALI_img.png
+val/240712_ALI_img.png
+val/240719_ALI_img.png
+val/240723_ALI_img.png
+val/240730_ALI_img.png
+val/240731_ALI_img.png
+val/240732_ALI_img.png
+val/240739_ALI_img.png
+val/240740_ALI_img.png
+val/240747_ALI_img.png
+val/240749_ALI_img.png
+val/240750_ALI_img.png
+val/240758_ALI_img.png
+val/240764_ALI_img.png
+val/240765_ALI_img.png
+val/240766_ALI_img.png
+val/240767_ALI_img.png
+val/240768_ALI_img.png
+val/240774_ALI_img.png
+val/240782_ALI_img.png
+val/240787_ALI_img.png
+val/240795_ALI_img.png
+val/240796_ALI_img.png
+val/240798_ALI_img.png
+val/240805_ALI_img.png
+val/240810_ALI_img.png
+val/240811_ALI_img.png
+val/240817_ALI_img.png
+val/240819_ALI_img.png
+val/240828_ALI_img.png
+val/240830_ALI_img.png
+val/240833_ALI_img.png
+val/240836_ALI_img.png
+val/240837_ALI_img.png
+val/240843_ALI_img.png
+val/240848_ALI_img.png
+val/240858_ALI_img.png
+val/240864_DT_img.png
+val/240865_ALI_img.png
+val/240872_ALI_img.png
+val/240875_ALI_img.png
+val/240881_ALI_img.png
+val/240883_ALI_img.png
+val/240885_ALI_img.png
+val/240886_ALI_img.png
+val/240892_ALI_img.png
+val/240893_ALI_img.png
+val/240901_ALI_img.png
+val/240906_ALI_img.png
+val/240907_ALI_img.png
+val/240912_ALI_img.png
+val/240913_DT_img.png
+val/240927_ALI_img.png
+val/240928_ALI_img.png
+val/240934_ALI_img.png
+val/240939_ALI_img.png
+val/240945_ALI_img.png
+val/240948_ALI_img.png
+val/240951_ALI_img.png
+val/240955_ALI_img.png
+val/240962_ALI_img.png
+val/240969_ALI_img.png
+val/240970_ALI_img.png
+val/240974_ALI_img.png
+val/240979_ALI_img.png
+val/240983_ALI_img.png
+val/240987_ALI_img.png
+val/240994_ALI_img.png
+val/240995_ALI_img.png
+val/240997_ALI_img.png
+val/240998_ALI_img.png
+val/241000_ALI_img.png
+val/241002_ALI_img.png
+val/241005_ALI_img.png
+val/241009_ALI_img.png
+val/241019_ALI_img.png
+val/241025_ALI_img.png
+val/241042_ALI_img.png
+val/241045_ALI_img.png
+val/241049_ALI_img.png
+val/241050_ALI_img.png
+val/241051_ALI_img.png
+val/241057_ALI_img.png
+val/241058_ALI_img.png
+val/241059_ALI_img.png
+val/241062_ALI_img.png
+val/241068_ALI_img.png
+val/241076_ALI_img.png
+val/241078_ALI_img.png
+val/241079_ALI_img.png
+val/241080_ALI_img.png
+val/241084_ALI_img.png
+val/241089_ALI_img.png
+val/241090_ALI_img.png
+val/241093_ALI_img.png
+val/241099_ALI_img.png
+val/241100_ALI_img.png
+val/241101_ALI_img.png
+val/241102_ALI_img.png
+val/241104_ALI_img.png
+val/241106_ALI_img.png
+val/241110_ALI_img.png
+val/241113_ALI_img.png
+val/241118_ALI_img.png
+val/241122_ALI_img.png
+val/241124_ALI_img.png
+val/241132_ALI_img.png
+val/241136_ALI_img.png
+val/241143_ALI_img.png
+val/241149_ALI_img.png
+val/241157_ALI_img.png
+val/241158_ALI_img.png
+val/241176_ALI_img.png
+val/241178_ALI_img.png
+val/241188_ALI_img.png
+val/241195_ALI_img.png
+val/241200_ALI_img.png
+val/241203_ALI_img.png
+val/241208_ALI_img.png
+val/241211_ALI_img.png
+val/241212_ALI_img.png
+val/241213_ALI_img.png
+val/241214_ALI_img.png
+val/241217_ALI_img.png
+val/241220_ALI_img.png
+val/241224_ALI_img.png
+val/241240_ALI_img.png
+val/241244_ALI_img.png
+val/241247_ALI_img.png
+val/241251_ALI_img.png
+val/241255_ALI_img.png
+val/241274_ALI_img.png
+val/241279_ALI_img.png
+val/241295_ALI_img.png
+val/241302_ALI_img.png
+val/241311_ALI_img.png
+val/241320_ALI_img.png
+val/241321_ALI_img.png
+val/241324_ALI_img.png
+val/241327_ALI_img.png
+val/241328_ALI_img.png
+val/241334_ALI_img.png
+val/241343_ALI_img.png
+val/241346_ALI_img.png
+val/241350_ALI_img.png
+val/241358_ALI_img.png
+val/241367_ALI_img.png
+val/241369_ALI_img.png
+val/241374_ALI_img.png
+val/241375_ALI_img.png
+val/241378_ALI_img.png
+val/241380_ALI_img.png
+val/241381_ALI_img.png
+val/241383_ALI_img.png
+val/241386_ALI_img.png
+val/241387_ALI_img.png
+val/241401_ALI_img.png
+val/241403_ALI_img.png
+val/241417_ALI_img.png
+val/241424_ALI_img.png
+val/241428_ALI_img.png
+val/241430_ALI_img.png
+val/241431_ALI_img.png
+val/241450_ALI_img.png
+val/241452_ALI_img.png
+val/241459_ALI_img.png
+val/241464_ALI_img.png
+val/241467_ALI_img.png
+val/241469_ALI_img.png
+val/241473_ALI_img.png
+val/241474_ALI_img.png
+val/241481_ALI_img.png
+val/241483_ALI_img.png
+val/241484_ALI_img.png
+val/241485_ALI_img.png
+val/241489_ALI_img.png
+val/241492_ALI_img.png
+val/241505_ALI_img.png
+val/241509_ALI_img.png
+val/241513_ALI_img.png
+val/241516_ALI_img.png
+val/241533_ALI_img.png
+val/241548_ALI_img.png
+val/241550_ALI_img.png
+val/241554_ALI_img.png
+val/241572_ALI_img.png
+val/241582_ALI_img.png
+val/241584_ALI_img.png
+val/241589_ALI_img.png
+val/241591_ALI_img.png
+val/241597_ALI_img.png
+val/241601_ALI_img.png
+val/241612_ALI_img.png
+val/241616_ALI_img.png
+val/241628_ALI_img.png
+val/241633_ALI_img.png
+val/241640_ALI_img.png
+val/241642_ALI_img.png
+val/241652_ALI_img.png
+val/241653_ALI_img.png
+val/241655_ALI_img.png
+val/241658_ALI_img.png
+val/241659_ALI_img.png
+val/241679_ALI_img.png
+val/241680_ALI_img.png
+val/241685_ALI_img.png
+val/241689_ALI_img.png
+val/241696_ALI_img.png
+val/241699_ALI_img.png
+val/241700_ALI_img.png
+val/241708_ALI_img.png
+val/241713_ALI_img.png
+val/241715_ALI_img.png
+val/241719_ALI_img.png
+val/241720_ALI_img.png
+val/241728_ALI_img.png
+val/241732_ALI_img.png
+val/241733_ALI_img.png
+val/241735_ALI_img.png
+val/241741_ALI_img.png
+val/241742_ALI_img.png
+val/241745_ALI_img.png
+val/241748_ALI_img.png
+val/241750_ALI_img.png
+val/241753_ALI_img.png
+val/241757_ALI_img.png
+val/241758_ALI_img.png
+val/241760_DT_img.png
+val/241766_ALI_img.png
+val/241773_ALI_img.png
+val/241776_ALI_img.png
+val/241782_ALI_img.png
+val/241789_ALI_img.png
+val/241798_ALI_img.png
+val/241800_ALI_img.png
+val/241802_ALI_img.png
+val/241814_ALI_img.png
+val/241816_ALI_img.png
+val/241820_ALI_img.png
+val/241822_ALI_img.png
+val/241835_ALI_img.png
+val/241842_ALI_img.png
+val/241843_ALI_img.png
+val/241846_ALI_img.png
+val/241852_ALI_img.png
+val/241853_ALI_img.png
+val/241855_ALI_img.png
+val/241856_ALI_img.png
+val/241859_ALI_img.png
+val/241860_ALI_img.png
+val/241862_ALI_img.png
+val/241865_ALI_img.png
+val/241868_ALI_img.png
+val/241869_ALI_img.png
+val/241877_ALI_img.png
+val/241881_ALI_img.png
+val/241883_ALI_img.png
+val/241889_ALI_img.png
+val/241891_ALI_img.png
+val/241894_ALI_img.png
+val/241897_ALI_img.png
+val/241901_ALI_img.png
+val/241906_ALI_img.png
+val/241913_ALI_img.png
+val/241914_ALI_img.png
+val/241916_ALI_img.png
+val/241923_ALI_img.png
+val/241925_ALI_img.png
+val/241928_ALI_img.png
+val/241930_ALI_img.png
+val/241938_ALI_img.png
+val/241940_ALI_img.png
+val/241943_ALI_img.png
+val/241945_ALI_img.png
+val/241948_ALI_img.png
+val/241955_ALI_img.png
+val/241971_ALI_img.png
+val/241976_ALI_img.png
+val/241982_ALI_img.png
+val/241983_ALI_img.png
+val/241985_ALI_img.png
+val/241986_ALI_img.png
+val/241990_ALI_img.png
+val/241995_ALI_img.png
+val/241999_ALI_img.png
+val/242003_ALI_img.png
+val/242004_ALI_img.png
+val/242006_ALI_img.png
+val/242014_ALI_img.png
+val/242022_ALI_img.png
+val/242026_ALI_img.png
+val/242028_ALI_img.png
+val/242040_ALI_img.png
+val/242043_ALI_img.png
+val/242050_ALI_img.png
+val/242051_ALI_img.png
+val/242053_ALI_img.png
+val/242060_ALI_img.png
+val/242066_ALI_img.png
+val/242068_ALI_img.png
+val/242071_ALI_img.png
+val/242079_ALI_img.png
+val/242082_ALI_img.png
+val/242083_ALI_img.png
+val/242085_ALI_img.png
+val/242092_ALI_img.png
+val/242098_ALI_img.png
+val/242101_ALI_img.png
+val/242102_ALI_img.png
+val/242106_ALI_img.png
+val/242113_ALI_img.png
+val/242122_ALI_img.png
+val/242130_ALI_img.png
+val/242139_ALI_img.png
+val/242142_ALI_img.png
+val/242145_ALI_img.png
+val/242171_ALI_img.png
+val/242175_ALI_img.png
+val/242176_ALI_img.png
+val/242177_ALI_img.png
+val/242188_ALI_img.png
+val/242189_ALI_img.png
+val/242200_ALI_img.png
+val/242201_ALI_img.png
+val/242203_ALI_img.png
+val/242208_ALI_img.png
+val/242214_ALI_img.png
+val/242218_ALI_img.png
+val/242221_ALI_img.png
+val/242222_ALI_img.png
+val/242226_ALI_img.png
+val/242227_ALI_img.png
+val/242228_ALI_img.png
+val/242233_ALI_img.png
+val/242235_ALI_img.png
+val/242236_ALI_img.png
+val/242242_ALI_img.png
+val/242250_ALI_img.png
+val/242253_ALI_img.png
+val/242264_ALI_img.png
+val/242269_ALI_img.png
+val/242271_ALI_img.png
+val/242273_ALI_img.png
+val/242277_ALI_img.png
+val/242281_ALI_img.png
+val/242286_ALI_img.png
+val/242288_ALI_img.png
+val/242293_ALI_img.png
+val/242296_ALI_img.png
+val/242298_ALI_img.png
+val/242299_ALI_img.png
+val/242302_ALI_img.png
+val/242303_ALI_img.png
+val/242304_ALI_img.png
+val/242313_ALI_img.png
+val/242315_ALI_img.png
+val/242320_ALI_img.png
+val/242322_ALI_img.png
+val/242331_ALI_img.png
+val/242333_ALI_img.png
+val/242335_ALI_img.png
+val/242342_ALI_img.png
+val/242352_ALI_img.png
+val/242355_ALI_img.png
+val/242358_ALI_img.png
+val/242359_ALI_img.png
+val/242360_ALI_img.png
+val/242363_ALI_img.png
+val/242364_ALI_img.png
+val/242365_ALI_img.png
+val/242370_ALI_img.png
+val/242378_ALI_img.png
+val/242386_ALI_img.png
+val/242389_ALI_img.png
+val/242396_ALI_img.png
+val/242397_ALI_img.png
+val/242401_ALI_img.png
+val/242404_ALI_img.png
+val/242408_ALI_img.png
+val/242409_ALI_img.png
+val/242410_ALI_img.png
+val/242418_ALI_img.png
+val/242424_ALI_img.png
+val/242425_ALI_img.png
+val/242428_ALI_img.png
+val/242430_ALI_img.png
+val/242432_ALI_img.png
+val/242433_ALI_img.png
+val/242442_ALI_img.png
+val/242443_ALI_img.png
+val/242450_ALI_img.png
+val/242455_ALI_img.png
+val/242458_ALI_img.png
+val/242459_ALI_img.png
+val/242467_ALI_img.png
+val/242468_ALI_img.png
+val/242471_ALI_img.png
+val/242482_ALI_img.png
+val/242497_ALI_img.png
+val/242504_ALI_img.png
+val/242508_ALI_img.png
+val/242515_ALI_img.png
+val/242516_ALI_img.png
+val/242522_ALI_img.png
+val/242525_ALI_img.png
+val/242532_ALI_img.png
+val/242534_ALI_img.png
+val/242536_ALI_img.png
+val/242545_ALI_img.png
+val/242550_ALI_img.png
+val/242554_ALI_img.png
+val/242556_ALI_img.png
+val/242557_ALI_img.png
+val/242558_ALI_img.png
+val/242559_ALI_img.png
+val/242569_ALI_img.png
+val/242573_ALI_img.png
+val/242577_ALI_img.png
+val/242583_ALI_img.png
+val/242585_ALI_img.png
+val/242591_ALI_img.png
+val/242592_ALI_img.png
+val/242601_ALI_img.png
+val/242606_ALI_img.png
+val/242607_ALI_img.png
+val/242628_ALI_img.png
+val/242630_ALI_img.png
+val/242632_ALI_img.png
+val/242634_ALI_img.png
+val/242640_ALI_img.png
+val/242652_ALI_img.png
+val/242655_ALI_img.png
+val/242660_ALI_img.png
+val/242662_ALI_img.png
+val/242669_ALI_img.png
+val/242673_ALI_img.png
+val/242676_ALI_img.png
+val/242680_ALI_img.png
+val/242685_ALI_img.png
+val/242688_ALI_img.png
+val/242699_ALI_img.png
+val/242704_ALI_img.png
+val/242713_ALI_img.png
+val/242715_ALI_img.png
+val/242723_ALI_img.png
+val/242725_ALI_img.png
+val/242729_ALI_img.png
+val/242730_ALI_img.png
+val/242735_ALI_img.png
+val/242740_ALI_img.png
+val/242742_ALI_img.png
+val/242749_ALI_img.png
+val/242751_ALI_img.png
+val/242753_ALI_img.png
+val/242763_ALI_img.png
+val/242765_ALI_img.png
+val/242768_ALI_img.png
+val/242772_ALI_img.png
+val/242774_ALI_img.png
+val/242776_ALI_img.png
+val/242779_ALI_img.png
+val/242782_ALI_img.png
+val/242783_ALI_img.png
+val/242785_ALI_img.png
+val/242793_ALI_img.png
+val/242794_ALI_img.png
+val/242804_ALI_img.png
+val/242810_ALI_img.png
+val/242813_ALI_img.png
+val/242820_ALI_img.png
+val/242829_ALI_img.png
+val/242837_DT_img.png
+val/242838_ALI_img.png
+val/242840_ALI_img.png
+val/242844_ALI_img.png
+val/242847_ALI_img.png
+val/242852_ALI_img.png
+val/242853_ALI_img.png
+val/242854_ALI_img.png
+val/242864_ALI_img.png
+val/242868_ALI_img.png
+val/242871_ALI_img.png
+val/242882_ALI_img.png
+val/242890_ALI_img.png
+val/242891_ALI_img.png
+val/242898_ALI_img.png
+val/242903_ALI_img.png
+val/242905_ALI_img.png
+val/242907_ALI_img.png
+val/242910_ALI_img.png
+val/242912_ALI_img.png
+val/242915_ALI_img.png
+val/242917_ALI_img.png
+val/242918_ALI_img.png
+val/242919_ALI_img.png
+val/242920_ALI_img.png
+val/242927_ALI_img.png
+val/242932_ALI_img.png
+val/242933_ALI_img.png
+val/242936_ALI_img.png
+val/242938_ALI_img.png
+val/242943_ALI_img.png
+val/242946_ALI_img.png
+val/242947_ALI_img.png
+val/242948_ALI_img.png
+val/242959_ALI_img.png
+val/242967_ALI_img.png
+val/242979_ALI_img.png
+val/242981_ALI_img.png
+val/242985_ALI_img.png
+val/242989_ALI_img.png
+val/242991_ALI_img.png
+val/242997_ALI_img.png
+val/242999_ALI_img.png
+val/243009_ALI_img.png
+val/243012_ALI_img.png
+val/243015_ALI_img.png
+val/243016_ALI_img.png
+val/243033_ALI_img.png
+val/243035_ALI_img.png
+val/243045_ALI_img.png
+val/243049_ALI_img.png
+val/243050_ALI_img.png
+val/243051_ALI_img.png
+val/243053_ALI_img.png
+val/243054_ALI_img.png
+val/243056_ALI_img.png
+val/243059_ALI_img.png
+val/243062_ALI_img.png
+val/243066_ALI_img.png
+val/243071_ALI_img.png
+val/243075_ALI_img.png
+val/243076_ALI_img.png
+val/243080_ALI_img.png
+val/243082_ALI_img.png
+val/243088_ALI_img.png
+val/243090_ALI_img.png
+val/243091_ALI_img.png
+val/243093_ALI_img.png
+val/243100_ALI_img.png
+val/243108_ALI_img.png
+val/243121_ALI_img.png
+val/243129_ALI_img.png
+val/243132_ALI_img.png
+val/243136_ALI_img.png
+val/243142_ALI_img.png
+val/243146_ALI_img.png
+val/243148_ALI_img.png
+val/243150_ALI_img.png
+val/243158_ALI_img.png
+val/243166_ALI_img.png
+val/243167_ALI_img.png
+val/243176_ALI_img.png
+val/243177_ALI_img.png
+val/243181_ALI_img.png
+val/243182_ALI_img.png
+val/243183_ALI_img.png
+val/243184_ALI_img.png
+val/243192_ALI_img.png
+val/243202_ALI_img.png
+val/243203_ALI_img.png
+val/243205_ALI_img.png
+val/243210_ALI_img.png
+val/243220_ALI_img.png
+val/243222_ALI_img.png
+val/243225_ALI_img.png
+val/243234_ALI_img.png
+val/243237_ALI_img.png
+val/243240_ALI_img.png
+val/243242_ALI_img.png
+val/243243_ALI_img.png
+val/243248_ALI_img.png
+val/243265_ALI_img.png
+val/243266_ALI_img.png
+val/243268_ALI_img.png
+val/243272_ALI_img.png
+val/243276_ALI_img.png
+val/243292_ALI_img.png
+val/243294_ALI_img.png
+val/243295_ALI_img.png
+val/243299_ALI_img.png
+val/243311_ALI_img.png
+val/243320_ALI_img.png
+val/243325_ALI_img.png
+val/243326_ALI_img.png
+val/243328_ALI_img.png
+val/243329_ALI_img.png
+val/243330_ALI_img.png
+val/243337_ALI_img.png
+val/243339_ALI_img.png
+val/243343_ALI_img.png
+val/243346_ALI_img.png
+val/243349_ALI_img.png
+val/243350_ALI_img.png
+val/243357_ALI_img.png
+val/243365_ALI_img.png
+val/243373_ALI_img.png
+val/243375_ALI_img.png
+val/243377_ALI_img.png
+val/243381_ALI_img.png
+val/243382_ALI_img.png
+val/243383_ALI_img.png
+val/243390_ALI_img.png
+val/243397_ALI_img.png
+val/243406_ALI_img.png
+val/243410_ALI_img.png
+val/243414_ALI_img.png
+val/243415_ALI_img.png
+val/243417_ALI_img.png
+val/243420_ALI_img.png
+val/243422_ALI_img.png
+val/243426_ALI_img.png
+val/243430_ALI_img.png
+val/243431_ALI_img.png
+val/243432_ALI_img.png
+val/243443_ALI_img.png
+val/243445_ALI_img.png
+val/243446_ALI_img.png
+val/243448_ALI_img.png
+val/243451_ALI_img.png
+val/243452_ALI_img.png
+val/243456_ALI_img.png
+val/243463_ALI_img.png
+val/243476_ALI_img.png
+val/243478_ALI_img.png
+val/243482_ALI_img.png
+val/243486_ALI_img.png
+val/243490_ALI_img.png
+val/243492_ALI_img.png
+val/243496_ALI_img.png
+val/243500_ALI_img.png
+val/243501_ALI_img.png
+val/243506_ALI_img.png
+val/243515_ALI_img.png
+val/243524_ALI_img.png
+val/243529_ALI_img.png
+val/243532_ALI_img.png
+val/243534_ALI_img.png
+val/243539_ALI_img.png
+val/243540_ALI_img.png
+val/243541_ALI_img.png
+val/243542_ALI_img.png
+val/243551_ALI_img.png
+val/243553_ALI_img.png
+val/243555_ALI_img.png
+val/243559_ALI_img.png
+val/243560_ALI_img.png
+val/243564_ALI_img.png
+val/243573_ALI_img.png
+val/243576_ALI_img.png
+val/243577_ALI_img.png
+val/243579_ALI_img.png
+val/243580_ALI_img.png
+val/243590_ALI_img.png
+val/243598_ALI_img.png
+val/243599_ALI_img.png
+val/243602_ALI_img.png
+val/243611_ALI_img.png
+val/243613_ALI_img.png
+val/243614_ALI_img.png
+val/243617_ALI_img.png
+val/243621_ALI_img.png
+val/243624_ALI_img.png
+val/243625_ALI_img.png
+val/243628_ALI_img.png
+val/243634_ALI_img.png
+val/243635_ALI_img.png
+val/243640_ALI_img.png
+val/243643_ALI_img.png
+val/243655_ALI_img.png
+val/243657_ALI_img.png
+val/243658_ALI_img.png
+val/243665_ALI_img.png
+val/243668_ALI_img.png
+val/243670_ALI_img.png
+val/243678_ALI_img.png
+val/243681_ALI_img.png
+val/243684_ALI_img.png
+val/243693_ALI_img.png
+val/243696_DT_img.png
+val/243698_ALI_img.png
+val/243699_ALI_img.png
+val/243703_ALI_img.png
+val/243706_ALI_img.png
+val/243709_ALI_img.png
+val/243725_ALI_img.png
+val/243731_ALI_img.png
+val/243734_ALI_img.png
+val/243736_ALI_img.png
+val/243738_ALI_img.png
+val/243748_ALI_img.png
+val/243752_ALI_img.png
+val/243756_ALI_img.png
+val/243764_ALI_img.png
+val/243767_ALI_img.png
+val/243771_ALI_img.png
+val/243779_ALI_img.png
+val/243782_ALI_img.png
+val/243783_ALI_img.png
+val/243784_ALI_img.png
+val/243786_ALI_img.png
+val/243787_ALI_img.png
+val/243789_ALI_img.png
+val/243795_ALI_img.png
+val/243804_ALI_img.png
+val/243805_ALI_img.png
+val/243808_ALI_img.png
+val/243812_ALI_img.png
+val/243815_ALI_img.png
+val/243824_ALI_img.png
+val/243825_ALI_img.png
+val/243828_ALI_img.png
+val/243836_ALI_img.png
+val/243837_ALI_img.png
+val/243838_ALI_img.png
+val/243841_ALI_img.png
+val/243843_ALI_img.png
+val/243847_ALI_img.png
+val/243848_ALI_img.png
+val/243864_ALI_img.png
+val/243865_ALI_img.png
+val/243867_ALI_img.png
+val/243874_ALI_img.png
+val/243878_ALI_img.png
+val/243887_ALI_img.png
+val/243890_ALI_img.png
+val/243894_ALI_img.png
+val/243896_ALI_img.png
+val/243897_ALI_img.png
+val/243899_ALI_img.png
+val/243906_ALI_img.png
+val/243907_ALI_img.png
+val/243910_ALI_img.png
+val/243911_ALI_img.png
+val/243912_ALI_img.png
+val/243914_ALI_img.png
+val/243916_ALI_img.png
+val/243920_ALI_img.png
+val/243923_ALI_img.png
+val/243931_ALI_img.png
+val/243935_ALI_img.png
+val/243938_ALI_img.png
+val/243943_ALI_img.png
+val/243946_ALI_img.png
+val/243948_ALI_img.png
+val/243956_ALI_img.png
+val/243959_ALI_img.png
+val/243962_ALI_img.png
+val/243963_ALI_img.png
+val/243964_ALI_img.png
+val/243965_ALI_img.png
+val/243967_ALI_img.png
+val/243970_ALI_img.png
+val/243981_ALI_img.png
+val/243982_ALI_img.png
+val/243983_ALI_img.png
+val/243984_ALI_img.png
+val/243985_ALI_img.png
+val/243990_ALI_img.png
+val/243993_ALI_img.png
+val/244010_ALI_img.png
+val/244012_ALI_img.png
+val/244014_ALI_img.png
+val/244016_ALI_img.png
+val/244017_ALI_img.png
+val/244021_ALI_img.png
+val/244024_ALI_img.png
+val/244025_ALI_img.png
+val/244028_ALI_img.png
+val/244041_ALI_img.png
+val/244051_ALI_img.png
+val/244056_ALI_img.png
+val/244058_ALI_img.png
+val/244063_ALI_img.png
+val/244064_ALI_img.png
+val/244071_ALI_img.png
+val/244075_ALI_img.png
+val/244077_ALI_img.png
+val/244084_ALI_img.png
+val/244087_ALI_img.png
+val/244096_ALI_img.png
+val/244100_ALI_img.png
+val/244102_ALI_img.png
+val/244104_ALI_img.png
+val/244106_ALI_img.png
+val/244110_ALI_img.png
+val/244114_ALI_img.png
+val/244120_ALI_img.png
+val/244125_ALI_img.png
+val/244132_ALI_img.png
+val/244141_ALI_img.png
+val/244144_ALI_img.png
+val/244145_ALI_img.png
+val/244155_ALI_img.png
+val/244161_ALI_img.png
+val/244164_ALI_img.png
+val/244167_ALI_img.png
+val/244168_ALI_img.png
+val/244179_ALI_img.png
+val/244181_ALI_img.png
+val/244182_ALI_img.png
+val/244188_ALI_img.png
+val/244195_ALI_img.png
+val/244196_ALI_img.png
+val/244203_ALI_img.png
+val/244204_ALI_img.png
+val/244206_ALI_img.png
+val/244211_ALI_img.png
+val/244220_ALI_img.png
+val/244221_ALI_img.png
+val/244223_ALI_img.png
+val/244233_ALI_img.png
+val/244234_ALI_img.png
+val/244240_ALI_img.png
+val/244242_ALI_img.png
+val/244243_ALI_img.png
+val/244248_ALI_img.png
+val/244249_ALI_img.png
+val/244253_ALI_img.png
+val/244259_ALI_img.png
+val/244263_ALI_img.png
+val/244268_ALI_img.png
+val/244269_ALI_img.png
+val/244289_ALI_img.png
+val/244290_ALI_img.png
+val/244295_ALI_img.png
+val/244296_ALI_img.png
+val/244297_ALI_img.png
+val/244298_ALI_img.png
+val/244305_ALI_img.png
+val/244308_ALI_img.png
+val/244316_ALI_img.png
+val/244317_ALI_img.png
+val/244318_ALI_img.png
+val/244320_ALI_img.png
+val/244321_ALI_img.png
+val/244323_ALI_img.png
+val/244341_ALI_img.png
+val/244345_ALI_img.png
+val/244348_ALI_img.png
+val/244358_ALI_img.png
+val/244363_ALI_img.png
+val/244367_ALI_img.png
+val/244369_ALI_img.png
+val/244375_ALI_img.png
+val/244377_ALI_img.png
+val/244385_ALI_img.png
+val/244386_ALI_img.png
+val/244390_ALI_img.png
+val/244391_ALI_img.png
+val/244392_ALI_img.png
+val/244400_ALI_img.png
+val/244401_ALI_img.png
+val/244402_ALI_img.png
+val/244408_ALI_img.png
+val/244409_ALI_img.png
+val/244413_ALI_img.png
+val/244416_ALI_img.png
+val/244422_ALI_img.png
+val/244427_ALI_img.png
+val/244430_ALI_img.png
+val/244434_ALI_img.png
+val/244435_ALI_img.png
+val/244436_ALI_img.png
+val/244441_ALI_img.png
+val/244450_ALI_img.png
+val/244452_ALI_img.png
+val/244455_ALI_img.png
+val/244456_ALI_img.png
+val/244457_ALI_img.png
+val/244459_ALI_img.png
+val/244460_ALI_img.png
+val/244465_ALI_img.png
+val/244466_ALI_img.png
+val/244467_ALI_img.png
+val/244469_ALI_img.png
+val/244470_ALI_img.png
+val/244475_ALI_img.png
+val/244488_ALI_img.png
+val/244489_ALI_img.png
+val/244492_ALI_img.png
+val/244493_ALI_img.png
+val/244495_ALI_img.png
+val/244498_ALI_img.png
+val/244512_ALI_img.png
+val/244514_ALI_img.png
+val/244515_ALI_img.png
+val/244517_ALI_img.png
+val/244521_ALI_img.png
+val/244523_ALI_img.png
+val/244526_ALI_img.png
+val/244533_ALI_img.png
+val/244534_ALI_img.png
+val/244535_ALI_img.png
+val/244538_ALI_img.png
+val/244540_ALI_img.png
+val/244550_ALI_img.png
+val/244553_ALI_img.png
+val/244556_ALI_img.png
+val/244564_ALI_img.png
+val/244570_ALI_img.png
+val/244571_ALI_img.png
+val/244576_ALI_img.png
+val/244583_ALI_img.png
+val/244584_ALI_img.png
+val/244585_ALI_img.png
+val/244590_ALI_img.png
+val/244598_ALI_img.png
+val/244616_ALI_img.png
+val/244617_ALI_img.png
+val/244618_ALI_img.png
+val/244629_ALI_img.png
+val/244631_ALI_img.png
+val/244639_ALI_img.png
+val/244640_ALI_img.png
+val/244645_ALI_img.png
+val/244647_ALI_img.png
+val/244649_ALI_img.png
+val/244652_ALI_img.png
+val/244657_ALI_img.png
+val/244667_ALI_img.png
+val/244674_ALI_img.png
+val/244679_ALI_img.png
+val/244681_ALI_img.png
+val/244682_ALI_img.png
+val/244693_ALI_img.png
+val/244695_ALI_img.png
+val/244699_ALI_img.png
+val/244702_ALI_img.png
+val/244703_ALI_img.png
+val/244704_ALI_img.png
+val/244706_ALI_img.png
+val/244708_ALI_img.png
+val/244719_ALI_img.png
+val/244721_ALI_img.png
+val/244722_ALI_img.png
+val/244723_ALI_img.png
+val/244730_ALI_img.png
+val/244731_ALI_img.png
+val/244732_ALI_img.png
+val/244735_ALI_img.png
+val/244739_ALI_img.png
+val/244746_ALI_img.png
+val/244748_ALI_img.png
+val/244751_ALI_img.png
+val/244752_ALI_img.png
+val/244754_ALI_img.png
+val/244755_ALI_img.png
+val/244763_ALI_img.png
+val/244764_ALI_img.png
+val/244771_ALI_img.png
+val/244776_ALI_img.png
+val/244778_ALI_img.png
+val/244783_ALI_img.png
+val/244800_ALI_img.png
+val/244802_ALI_img.png
+val/244807_ALI_img.png
+val/244810_ALI_img.png
+val/244814_ALI_img.png
+val/244821_ALI_img.png
+val/244827_ALI_img.png
+val/244830_ALI_img.png
+val/244833_ALI_img.png
+val/244848_ALI_img.png
+val/244849_ALI_img.png
+val/244850_ALI_img.png
+val/244851_ALI_img.png
+val/244854_ALI_img.png
+val/244855_ALI_img.png
+val/244858_ALI_img.png
+val/244867_ALI_img.png
+val/244868_ALI_img.png
+val/244877_ALI_img.png
+val/244880_ALI_img.png
+val/244883_ALI_img.png
+val/244885_ALI_img.png
+val/244889_ALI_img.png
+val/244903_ALI_img.png
+val/244906_ALI_img.png
+val/244907_ALI_img.png
+val/244910_ALI_img.png
+val/244916_ALI_img.png
+val/244921_ALI_img.png
+val/244931_ALI_img.png
+val/244944_ALI_img.png
+val/244950_ALI_img.png
+val/244951_ALI_img.png
+val/244955_ALI_img.png
+val/244956_ALI_img.png
+val/244963_ALI_img.png
+val/244967_ALI_img.png
+val/244969_ALI_img.png
+val/244974_ALI_img.png
+val/244976_ALI_img.png
+val/244978_ALI_img.png
+val/244980_ALI_img.png
+val/244990_ALI_img.png
+val/244992_ALI_img.png
+val/244994_ALI_img.png
+val/244998_ALI_img.png
+val/245006_ALI_img.png
+val/245008_ALI_img.png
+val/245015_ALI_img.png
+val/245027_ALI_img.png
+val/245035_ALI_img.png
+val/245049_ALI_img.png
+val/245053_ALI_img.png
+val/245057_ALI_img.png
+val/245058_ALI_img.png
+val/245060_ALI_img.png
+val/245062_ALI_img.png
+val/245066_ALI_img.png
+val/245076_ALI_img.png
+val/245083_ALI_img.png
+val/245086_ALI_img.png
+val/245097_ALI_img.png
+val/245098_ALI_img.png
+val/245100_ALI_img.png
+val/245101_ALI_img.png
+val/245103_ALI_img.png
+val/245104_ALI_img.png
+val/245108_ALI_img.png
+val/245111_ALI_img.png
+val/245115_ALI_img.png
+val/245116_ALI_img.png
+val/245117_ALI_img.png
+val/245122_ALI_img.png
+val/245129_ALI_img.png
+val/245130_ALI_img.png
+val/245136_ALI_img.png
+val/245137_ALI_img.png
+val/245140_ALI_img.png
+val/245143_ALI_img.png
+val/245148_ALI_img.png
+val/245150_ALI_img.png
+val/245152_ALI_img.png
+val/245154_ALI_img.png
+val/245155_ALI_img.png
+val/245171_ALI_img.png
+val/245172_ALI_img.png
+val/245180_ALI_img.png
+val/245183_ALI_img.png
+val/245185_ALI_img.png
+val/245189_ALI_img.png
+val/245196_ALI_img.png
+val/245207_ALI_img.png
+val/245210_ALI_img.png
+val/245220_ALI_img.png
+val/245222_ALI_img.png
+val/245223_ALI_img.png
+val/245225_ALI_img.png
+val/245229_ALI_img.png
+val/245234_ALI_img.png
+val/245237_ALI_img.png
+val/245238_ALI_img.png
+val/245245_ALI_img.png
+val/245253_ALI_img.png
+val/245260_ALI_img.png
+val/245264_ALI_img.png
+val/245266_ALI_img.png
+val/245268_ALI_img.png
+val/245269_ALI_img.png
+val/245271_ALI_img.png
+val/245276_ALI_img.png
+val/245277_ALI_img.png
+val/245280_ALI_img.png
+val/245282_ALI_img.png
+val/245292_ALI_img.png
+val/245295_ALI_img.png
+val/245298_ALI_img.png
+val/245303_ALI_img.png
+val/245307_ALI_img.png
+val/245310_ALI_img.png
+val/245312_ALI_img.png
+val/245313_ALI_img.png
+val/245314_ALI_img.png
+val/245315_ALI_img.png
+val/245317_ALI_img.png
+val/245319_ALI_img.png
+val/245320_ALI_img.png
+val/245324_ALI_img.png
+val/245325_ALI_img.png
+val/245328_ALI_img.png
+val/245329_ALI_img.png
+val/245332_ALI_img.png
+val/245333_ALI_img.png
+val/245334_ALI_img.png
+val/245338_ALI_img.png
+val/245342_ALI_img.png
+val/245343_ALI_img.png
+val/245349_ALI_img.png
+val/245356_ALI_img.png
+val/245358_ALI_img.png
+val/245360_ALI_img.png
+val/245364_ALI_img.png
+val/245368_ALI_img.png
+val/245376_ALI_img.png
+val/245383_ALI_img.png
+val/245384_ALI_img.png
+val/245386_ALI_img.png
+val/245395_ALI_img.png
+val/245399_ALI_img.png
+val/245408_ALI_img.png
+val/245413_ALI_img.png
+val/245416_ALI_img.png
+val/245417_ALI_img.png
+val/245420_ALI_img.png
+val/245423_ALI_img.png
+val/245424_ALI_img.png
+val/245426_ALI_img.png
+val/245433_ALI_img.png
+val/245435_ALI_img.png
+val/245443_ALI_img.png
+val/245446_ALI_img.png
+val/245448_ALI_img.png
+val/245449_ALI_img.png
+val/245457_ALI_img.png
+val/245460_ALI_img.png
+val/245466_ALI_img.png
+val/245467_ALI_img.png
+val/245473_ALI_img.png
+val/245474_ALI_img.png
+val/245478_ALI_img.png
+val/245485_ALI_img.png
+val/245492_ALI_img.png
+val/245494_ALI_img.png
+val/245503_ALI_img.png
+val/245510_ALI_img.png
+val/245525_ALI_img.png
+val/245526_ALI_img.png
+val/245534_ALI_img.png
+val/245537_ALI_img.png
+val/245538_ALI_img.png
+val/245541_ALI_img.png
+val/245542_ALI_img.png
+val/245548_ALI_img.png
+val/245552_ALI_img.png
+val/245555_ALI_img.png
+val/245558_ALI_img.png
+val/245559_ALI_img.png
+val/245563_ALI_img.png
+val/245565_ALI_img.png
+val/245571_ALI_img.png
+val/245572_ALI_img.png
+val/245582_ALI_img.png
+val/245588_ALI_img.png
+val/245593_ALI_img.png
+val/245603_ALI_img.png
+val/245604_ALI_img.png
+val/245611_ALI_img.png
+val/245617_ALI_img.png
+val/245618_ALI_img.png
+val/245626_ALI_img.png
+val/245629_ALI_img.png
+val/245631_ALI_img.png
+val/245636_ALI_img.png
+val/245637_ALI_img.png
+val/245639_ALI_img.png
+val/245640_ALI_img.png
+val/245642_ALI_img.png
+val/245651_ALI_img.png
+val/245652_ALI_img.png
+val/245654_ALI_img.png
+val/245655_ALI_img.png
+val/245657_ALI_img.png
+val/245660_ALI_img.png
+val/245667_ALI_img.png
+val/245672_ALI_img.png
+val/245673_ALI_img.png
+val/245676_ALI_img.png
+val/245685_ALI_img.png
+val/245687_ALI_img.png
+val/245696_ALI_img.png
+val/245697_ALI_img.png
+val/245698_ALI_img.png
+val/245707_ALI_img.png
+val/245709_ALI_img.png
+val/245711_ALI_img.png
+val/245716_ALI_img.png
+val/245717_ALI_img.png
+val/245725_ALI_img.png
+val/245727_ALI_img.png
+val/245731_ALI_img.png
+val/245733_ALI_img.png
+val/245735_ALI_img.png
+val/245736_ALI_img.png
+val/245740_ALI_img.png
+val/245742_ALI_img.png
+val/245743_ALI_img.png
+val/245747_ALI_img.png
+val/245749_ALI_img.png
+val/245760_ALI_img.png
+val/245767_ALI_img.png
+val/245774_ALI_img.png
+val/245775_ALI_img.png
+val/245776_ALI_img.png
+val/245779_ALI_img.png
+val/245781_ALI_img.png
+val/245791_DT_img.png
+val/245792_ALI_img.png
+val/245795_ALI_img.png
+val/245797_ALI_img.png
+val/245813_ALI_img.png
+val/245817_ALI_img.png
+val/245821_ALI_img.png
+val/245826_ALI_img.png
+val/245838_ALI_img.png
+val/245842_ALI_img.png
+val/245845_ALI_img.png
+val/245852_ALI_img.png
+val/245855_DT_img.png
+val/245860_ALI_img.png
+val/245867_ALI_img.png
+val/245872_ALI_img.png
+val/245875_ALI_img.png
+val/245884_ALI_img.png
+val/245886_ALI_img.png
+val/245887_ALI_img.png
+val/245894_ALI_img.png
+val/245895_ALI_img.png
+val/245901_ALI_img.png
+val/245906_ALI_img.png
+val/245930_ALI_img.png
+val/245931_ALI_img.png
+val/245932_ALI_img.png
+val/245935_ALI_img.png
+val/245939_ALI_img.png
+val/245941_ALI_img.png
+val/245942_ALI_img.png
+val/245944_DT_img.png
+val/245946_ALI_img.png
+val/245950_ALI_img.png
+val/245955_ALI_img.png
+val/245961_ALI_img.png
+val/245970_ALI_img.png
+val/245973_ALI_img.png
+val/245974_ALI_img.png
+val/245979_ALI_img.png
+val/245980_ALI_img.png
+val/245991_ALI_img.png
+val/245995_ALI_img.png
+val/245998_ALI_img.png
+val/246000_ALI_img.png
+val/246004_ALI_img.png
+val/246005_ALI_img.png
+val/246011_ALI_img.png
+val/246017_ALI_img.png
+val/246020_ALI_img.png
+val/246022_ALI_img.png
+val/246027_ALI_img.png
+val/246029_ALI_img.png
+val/246037_ALI_img.png
+val/246038_ALI_img.png
+val/246043_ALI_img.png
+val/246045_ALI_img.png
+val/246046_ALI_img.png
+val/246054_ALI_img.png
+val/246073_ALI_img.png
+val/246077_ALI_img.png
+val/246089_ALI_img.png
+val/246092_ALI_img.png
+val/246100_ALI_img.png
+val/246101_ALI_img.png
+val/246102_ALI_img.png
+val/246107_ALI_img.png
+val/246110_ALI_img.png
+val/246112_ALI_img.png
+val/246117_ALI_img.png
+val/246122_ALI_img.png
+val/246124_ALI_img.png
+val/246128_ALI_img.png
+val/246130_ALI_img.png
+val/246132_ALI_img.png
+val/246133_ALI_img.png
+val/246134_DT_img.png
+val/246147_ALI_img.png
+val/246149_ALI_img.png
+val/246152_ALI_img.png
+val/246155_ALI_img.png
+val/246157_ALI_img.png
+val/246162_ALI_img.png
+val/246163_ALI_img.png
+val/246168_ALI_img.png
+val/246172_ALI_img.png
+val/246173_ALI_img.png
+val/246179_ALI_img.png
+val/246184_ALI_img.png
+val/246185_ALI_img.png
+val/246186_ALI_img.png
+val/246188_ALI_img.png
+val/246189_ALI_img.png
+val/246194_ALI_img.png
+val/246205_ALI_img.png
+val/246206_ALI_img.png
+val/246207_ALI_img.png
+val/246208_ALI_img.png
+val/246212_ALI_img.png
+val/246215_ALI_img.png
+val/246216_ALI_img.png
+val/246219_ALI_img.png
+val/246224_ALI_img.png
+val/246230_ALI_img.png
+val/246232_ALI_img.png
+val/246234_ALI_img.png
+val/246241_ALI_img.png
+val/246243_ALI_img.png
+val/246244_ALI_img.png
+val/246247_ALI_img.png
+val/246249_ALI_img.png
+val/246252_ALI_img.png
+val/246255_ALI_img.png
+val/246259_ALI_img.png
+val/246264_ALI_img.png
+val/246266_ALI_img.png
+val/246269_ALI_img.png
+val/246273_ALI_img.png
+val/246274_ALI_img.png
+val/246287_ALI_img.png
+val/246290_ALI_img.png
+val/246291_ALI_img.png
+val/246294_ALI_img.png
+val/246295_ALI_img.png
+val/246296_ALI_img.png
+val/246303_ALI_img.png
+val/246311_ALI_img.png
+val/246313_ALI_img.png
+val/246315_ALI_img.png
+val/246324_ALI_img.png
+val/246325_DT_img.png
+val/246326_ALI_img.png
+val/246337_ALI_img.png
+val/246342_ALI_img.png
+val/246347_ALI_img.png
+val/246349_ALI_img.png
+val/246351_ALI_img.png
+val/246354_ALI_img.png
+val/246358_ALI_img.png
+val/246366_ALI_img.png
+val/246377_ALI_img.png
+val/246382_ALI_img.png
+val/246383_ALI_img.png
+val/246386_ALI_img.png
+val/246388_ALI_img.png
+val/246389_ALI_img.png
+val/246391_ALI_img.png
+val/246396_ALI_img.png
+val/246401_ALI_img.png
+val/246402_ALI_img.png
+val/246403_ALI_img.png
+val/246404_ALI_img.png
+val/246406_ALI_img.png
+val/246409_ALI_img.png
+val/246411_ALI_img.png
+val/246413_ALI_img.png
+val/246416_ALI_img.png
+val/246424_ALI_img.png
+val/246428_ALI_img.png
+val/246429_ALI_img.png
+val/246433_ALI_img.png
+val/246434_ALI_img.png
+val/246446_ALI_img.png
+val/246447_ALI_img.png
+val/246450_ALI_img.png
+val/246452_ALI_img.png
+val/246458_ALI_img.png
+val/246468_ALI_img.png
+val/246474_ALI_img.png
+val/246477_ALI_img.png
+val/246479_ALI_img.png
+val/246481_ALI_img.png
+val/246490_ALI_img.png
+val/246492_ALI_img.png
+val/246494_ALI_img.png
+val/246500_ALI_img.png
+val/246502_ALI_img.png
+val/246506_ALI_img.png
+val/246512_ALI_img.png
+val/246513_ALI_img.png
+val/246528_ALI_img.png
+val/246531_ALI_img.png
+val/246532_ALI_img.png
+val/246536_ALI_img.png
+val/246547_ALI_img.png
+val/246551_ALI_img.png
+val/246554_ALI_img.png
+val/246557_ALI_img.png
+val/246562_ALI_img.png
+val/246572_ALI_img.png
+val/246573_ALI_img.png
+val/246574_ALI_img.png
+val/246575_ALI_img.png
+val/246576_ALI_img.png
+val/246585_ALI_img.png
+val/246598_ALI_img.png
+val/246613_ALI_img.png
+val/246616_ALI_img.png
+val/246618_ALI_img.png
+val/246621_ALI_img.png
+val/246624_ALI_img.png
+val/246630_ALI_img.png
+val/246638_ALI_img.png
+val/246648_ALI_img.png
+val/246652_ALI_img.png
+val/246655_ALI_img.png
+val/246666_ALI_img.png
+val/246671_ALI_img.png
+val/246682_ALI_img.png
+val/246687_ALI_img.png
+val/246690_ALI_img.png
+val/246691_ALI_img.png
+val/246694_ALI_img.png
+val/246696_ALI_img.png
+val/246700_ALI_img.png
+val/246703_ALI_img.png
+val/246707_ALI_img.png
+val/246712_ALI_img.png
+val/246716_ALI_img.png
+val/246719_ALI_img.png
+val/246727_ALI_img.png
+val/246730_ALI_img.png
+val/246734_ALI_img.png
+val/246735_ALI_img.png
+val/246736_ALI_img.png
+val/246738_ALI_img.png
+val/246743_ALI_img.png
+val/246750_ALI_img.png
+val/246751_ALI_img.png
+val/246754_ALI_img.png
+val/246761_ALI_img.png
+val/246773_ALI_img.png
+val/246776_ALI_img.png
+val/246777_ALI_img.png
+val/246781_ALI_img.png
+val/246784_ALI_img.png
+val/246786_ALI_img.png
+val/246787_ALI_img.png
+val/246794_ALI_img.png
+val/246799_ALI_img.png
+val/246803_ALI_img.png
+val/246805_ALI_img.png
+val/246810_ALI_img.png
+val/246811_ALI_img.png
+val/246815_ALI_img.png
+val/246823_ALI_img.png
+val/246824_ALI_img.png
+val/246839_ALI_img.png
+val/246840_ALI_img.png
+val/246842_ALI_img.png
+val/246846_ALI_img.png
+val/246848_ALI_img.png
+val/246852_ALI_img.png
+val/246854_ALI_img.png
+val/246862_ALI_img.png
+val/246866_ALI_img.png
+val/246870_ALI_img.png
+val/246872_ALI_img.png
+val/246874_ALI_img.png
+val/246876_ALI_img.png
+val/246880_ALI_img.png
+val/246882_ALI_img.png
+val/246884_ALI_img.png
+val/246898_ALI_img.png
+val/246900_ALI_img.png
+val/246901_ALI_img.png
+val/246903_ALI_img.png
+val/246905_ALI_img.png
+val/246907_ALI_img.png
+val/246918_ALI_img.png
+val/246923_ALI_img.png
+val/246935_ALI_img.png
+val/246937_ALI_img.png
+val/246938_ALI_img.png
+val/246945_ALI_img.png
+val/246949_ALI_img.png
+val/246955_ALI_img.png
+val/246968_ALI_img.png
+val/246971_ALI_img.png
+val/246972_ALI_img.png
+val/246975_ALI_img.png
+val/246976_ALI_img.png
+val/246981_ALI_img.png
+val/246983_ALI_img.png
+val/246986_ALI_img.png
+val/246991_ALI_img.png
+val/246995_ALI_img.png
+val/247003_ALI_img.png
+val/247006_ALI_img.png
+val/247007_ALI_img.png
+val/247008_ALI_img.png
+val/247009_ALI_img.png
+val/247013_ALI_img.png
+val/247015_ALI_img.png
+val/247018_ALI_img.png
+val/247019_ALI_img.png
+val/247021_ALI_img.png
+val/247022_ALI_img.png
+val/247023_ALI_img.png
+val/247025_ALI_img.png
+val/247026_ALI_img.png
+val/247030_ALI_img.png
+val/247031_ALI_img.png
+val/247034_ALI_img.png
+val/247035_ALI_img.png
+val/247037_ALI_img.png
+val/247042_ALI_img.png
+val/247050_ALI_img.png
+val/247059_ALI_img.png
+val/247060_ALI_img.png
+val/247075_ALI_img.png
+val/247077_ALI_img.png
+val/247081_ALI_img.png
+val/247082_ALI_img.png
+val/247085_ALI_img.png
+val/247087_ALI_img.png
+val/247089_ALI_img.png
+val/247092_ALI_img.png
+val/247098_ALI_img.png
+val/247102_ALI_img.png
+val/247104_ALI_img.png
+val/247110_ALI_img.png
+val/247111_ALI_img.png
+val/247114_ALI_img.png
+val/247116_ALI_img.png
+val/247117_ALI_img.png
+val/247118_ALI_img.png
+val/247121_ALI_img.png
+val/247124_ALI_img.png
+val/247126_ALI_img.png
+val/247127_ALI_img.png
+val/247130_ALI_img.png
+val/247131_ALI_img.png
+val/247141_ALI_img.png
+val/247142_ALI_img.png
+val/247143_ALI_img.png
+val/247146_ALI_img.png
+val/247152_ALI_img.png
+val/247156_ALI_img.png
+val/247157_ALI_img.png
+val/247159_ALI_img.png
+val/247167_ALI_img.png
+val/247171_ALI_img.png
+val/247177_ALI_img.png
+val/247179_ALI_img.png
+val/247182_ALI_img.png
+val/247189_ALI_img.png
+val/247192_ALI_img.png
+val/247193_ALI_img.png
+val/247203_ALI_img.png
+val/247206_ALI_img.png
+val/247209_ALI_img.png
+val/247213_ALI_img.png
+val/247214_ALI_img.png
+val/247216_ALI_img.png
+val/247217_ALI_img.png
+val/247218_ALI_img.png
+val/247224_ALI_img.png
+val/247230_ALI_img.png
+val/247237_ALI_img.png
+val/247242_ALI_img.png
+val/247245_ALI_img.png
+val/247246_ALI_img.png
+val/247248_ALI_img.png
+val/247254_ALI_img.png
+val/247258_ALI_img.png
+val/247260_ALI_img.png
+val/247261_ALI_img.png
+val/247262_ALI_img.png
+val/247264_ALI_img.png
+val/247270_ALI_img.png
+val/247273_ALI_img.png
+val/247277_ALI_img.png
+val/247279_ALI_img.png
+val/247280_ALI_img.png
+val/247281_ALI_img.png
+val/247283_ALI_img.png
+val/247284_ALI_img.png
+val/247287_ALI_img.png
+val/247289_ALI_img.png
+val/247295_ALI_img.png
+val/247298_ALI_img.png
+val/247305_ALI_img.png
+val/247309_ALI_img.png
+val/247314_ALI_img.png
+val/247320_ALI_img.png
+val/247323_ALI_img.png
+val/247327_ALI_img.png
+val/247331_ALI_img.png
+val/247333_ALI_img.png
+val/247336_ALI_img.png
+val/247346_ALI_img.png
+val/247353_ALI_img.png
+val/247355_ALI_img.png
+val/247357_ALI_img.png
+val/247359_ALI_img.png
+val/247363_ALI_img.png
+val/247386_ALI_img.png
+val/247389_ALI_img.png
+val/247397_ALI_img.png
+val/247401_ALI_img.png
+val/247409_ALI_img.png
+val/247411_ALI_img.png
+val/247413_ALI_img.png
+val/247422_ALI_img.png
+val/247424_ALI_img.png
+val/247427_ALI_img.png
+val/247428_ALI_img.png
+val/247429_ALI_img.png
+val/247431_ALI_img.png
+val/247431_DT_img.png
+val/247432_ALI_img.png
+val/247438_ALI_img.png
+val/247445_ALI_img.png
+val/247446_ALI_img.png
+val/247458_ALI_img.png
+val/247462_ALI_img.png
+val/247469_ALI_img.png
+val/247474_ALI_img.png
+val/247475_ALI_img.png
+val/247476_ALI_img.png
+val/247487_ALI_img.png
+val/247494_ALI_img.png
+val/247495_ALI_img.png
+val/247496_ALI_img.png
+val/247497_ALI_img.png
+val/247498_ALI_img.png
+val/247500_ALI_img.png
+val/247509_ALI_img.png
+val/247511_ALI_img.png
+val/247512_ALI_img.png
+val/247513_ALI_img.png
+val/247514_ALI_img.png
+val/247525_ALI_img.png
+val/247534_ALI_img.png
+val/247535_ALI_img.png
+val/247538_ALI_img.png
+val/247546_ALI_img.png
+val/247551_ALI_img.png
+val/247554_ALI_img.png
+val/247555_ALI_img.png
+val/247557_ALI_img.png
+val/247562_ALI_img.png
+val/247567_ALI_img.png
+val/247569_ALI_img.png
+val/247579_ALI_img.png
+val/247586_ALI_img.png
+val/247590_ALI_img.png
+val/247591_ALI_img.png
+val/247595_ALI_img.png
+val/247600_ALI_img.png
+val/247607_ALI_img.png
+val/247611_ALI_img.png
+val/247613_ALI_img.png
+val/247614_ALI_img.png
+val/247622_ALI_img.png
+val/247624_ALI_img.png
+val/247628_ALI_img.png
+val/247634_ALI_img.png
+val/247636_ALI_img.png
+val/247638_ALI_img.png
+val/247639_ALI_img.png
+val/247640_ALI_img.png
+val/247647_ALI_img.png
+val/247655_ALI_img.png
+val/247666_ALI_img.png
+val/247667_ALI_img.png
+val/247677_ALI_img.png
+val/247682_ALI_img.png
+val/247686_ALI_img.png
+val/247690_ALI_img.png
+val/247692_ALI_img.png
+val/247693_ALI_img.png
+val/247696_ALI_img.png
+val/247700_ALI_img.png
+val/247709_ALI_img.png
+val/247710_ALI_img.png
+val/247713_ALI_img.png
+val/247715_ALI_img.png
+val/247722_ALI_img.png
+val/247730_ALI_img.png
+val/247734_ALI_img.png
+val/247741_ALI_img.png
+val/247744_ALI_img.png
+val/247748_ALI_img.png
+val/247751_ALI_img.png
+val/247752_ALI_img.png
+val/247754_ALI_img.png
+val/247764_ALI_img.png
+val/247765_ALI_img.png
+val/247766_ALI_img.png
+val/247768_ALI_img.png
+val/247774_ALI_img.png
+val/247782_ALI_img.png
+val/247789_ALI_img.png
+val/247791_ALI_img.png
+val/247794_ALI_img.png
+val/247797_ALI_img.png
+val/247798_ALI_img.png
+val/247799_ALI_img.png
+val/247802_ALI_img.png
+val/247808_ALI_img.png
+val/247809_ALI_img.png
+val/247812_ALI_img.png
+val/247815_ALI_img.png
+val/247819_ALI_img.png
+val/247821_ALI_img.png
+val/247822_ALI_img.png
+val/247823_ALI_img.png
+val/247830_ALI_img.png
+val/247834_ALI_img.png
+val/247836_ALI_img.png
+val/247837_ALI_img.png
+val/247838_ALI_img.png
+val/247839_ALI_img.png
+val/247846_ALI_img.png
+val/247848_ALI_img.png
+val/247849_ALI_img.png
+val/247850_ALI_img.png
+val/247852_ALI_img.png
+val/247855_ALI_img.png
+val/247857_ALI_img.png
+val/247864_ALI_img.png
+val/247886_ALI_img.png
+val/247893_ALI_img.png
+val/247897_ALI_img.png
+val/247899_ALI_img.png
+val/247913_ALI_img.png
+val/247914_ALI_img.png
+val/247915_ALI_img.png
+val/247916_ALI_img.png
+val/247919_ALI_img.png
+val/247927_ALI_img.png
+val/247941_ALI_img.png
+val/247944_ALI_img.png
+val/247948_ALI_img.png
+val/247952_ALI_img.png
+val/247962_ALI_img.png
+val/247968_ALI_img.png
+val/247969_ALI_img.png
+val/247974_ALI_img.png
+val/247977_ALI_img.png
+val/247978_ALI_img.png
+val/247979_ALI_img.png
+val/247985_ALI_img.png
+val/247987_ALI_img.png
+val/247991_ALI_img.png
+val/247993_ALI_img.png
+val/247995_ALI_img.png
+val/247999_ALI_img.png
+val/248001_ALI_img.png
+val/248002_ALI_img.png
+val/248009_ALI_img.png
+val/248012_ALI_img.png
+val/248023_ALI_img.png
+val/248024_ALI_img.png
+val/248028_ALI_img.png
+val/248029_ALI_img.png
+val/248031_ALI_img.png
+val/248034_ALI_img.png
+val/248037_ALI_img.png
+val/248038_ALI_img.png
+val/248046_ALI_img.png
+val/248050_ALI_img.png
+val/248052_ALI_img.png
+val/248057_ALI_img.png
+val/248061_ALI_img.png
+val/248066_ALI_img.png
+val/248068_ALI_img.png
+val/248075_ALI_img.png
+val/248076_ALI_img.png
+val/248082_ALI_img.png
+val/248083_ALI_img.png
+val/248086_ALI_img.png
+val/248091_ALI_img.png
+val/248095_ALI_img.png
+val/248096_ALI_img.png
+val/248099_ALI_img.png
+val/248104_ALI_img.png
+val/248108_ALI_img.png
+val/248110_ALI_img.png
+val/248116_ALI_img.png
+val/248120_ALI_img.png
+val/248121_ALI_img.png
+val/248123_ALI_img.png
+val/248124_ALI_img.png
+val/248126_ALI_img.png
+val/248136_ALI_img.png
+val/248138_ALI_img.png
+val/248139_ALI_img.png
+val/248151_ALI_img.png
+val/248153_ALI_img.png
+val/248157_ALI_img.png
+val/248158_ALI_img.png
+val/248159_ALI_img.png
+val/248161_ALI_img.png
+val/248168_ALI_img.png
+val/248172_ALI_img.png
+val/248182_ALI_img.png
+val/248186_ALI_img.png
+val/248190_ALI_img.png
+val/248194_ALI_img.png
+val/248196_ALI_img.png
+val/248201_ALI_img.png
+val/248204_ALI_img.png
+val/248206_ALI_img.png
+val/248210_ALI_img.png
+val/248216_ALI_img.png
+val/248220_ALI_img.png
+val/248222_ALI_img.png
+val/248224_ALI_img.png
+val/248228_ALI_img.png
+val/248229_ALI_img.png
+val/248233_ALI_img.png
+val/248235_ALI_img.png
+val/248238_ALI_img.png
+val/248239_ALI_img.png
+val/248244_ALI_img.png
+val/248247_ALI_img.png
+val/248248_ALI_img.png
+val/248253_ALI_img.png
+val/248260_ALI_img.png
+val/248264_ALI_img.png
+val/248267_ALI_img.png
+val/248268_ALI_img.png
+val/248269_ALI_img.png
+val/248275_ALI_img.png
+val/248278_ALI_img.png
+val/248282_ALI_img.png
+val/248290_ALI_img.png
+val/248291_ALI_img.png
+val/248292_ALI_img.png
+val/248297_ALI_img.png
+val/248301_ALI_img.png
+val/248303_ALI_img.png
+val/248304_ALI_img.png
+val/248306_ALI_img.png
+val/248310_ALI_img.png
+val/248311_ALI_img.png
+val/248320_ALI_img.png
+val/248329_ALI_img.png
+val/248331_ALI_img.png
+val/248338_ALI_img.png
+val/248339_ALI_img.png
+val/248340_ALI_img.png
+val/248341_ALI_img.png
+val/248343_ALI_img.png
+val/248349_ALI_img.png
+val/248354_ALI_img.png
+val/248356_ALI_img.png
+val/248360_ALI_img.png
+val/248361_ALI_img.png
+val/248363_ALI_img.png
+val/248366_ALI_img.png
+val/248371_ALI_img.png
+val/248372_ALI_img.png
+val/248377_ALI_img.png
+val/248385_ALI_img.png
+val/248392_ALI_img.png
+val/248396_ALI_img.png
+val/248399_ALI_img.png
+val/248402_ALI_img.png
+val/248403_ALI_img.png
+val/248408_ALI_img.png
+val/248411_ALI_img.png
+val/248415_ALI_img.png
+val/248416_ALI_img.png
+val/248419_ALI_img.png
+val/248429_ALI_img.png
+val/248431_ALI_img.png
+val/248433_ALI_img.png
+val/248434_ALI_img.png
+val/248436_ALI_img.png
+val/248437_ALI_img.png
+val/248438_ALI_img.png
+val/248447_ALI_img.png
+val/248452_ALI_img.png
+val/248455_ALI_img.png
+val/248459_ALI_img.png
+val/248460_ALI_img.png
+val/248465_ALI_img.png
+val/248468_ALI_img.png
+val/248472_ALI_img.png
+val/248476_ALI_img.png
+val/248484_ALI_img.png
+val/248489_ALI_img.png
+val/248493_ALI_img.png
+val/248497_ALI_img.png
+val/248498_ALI_img.png
+val/248501_ALI_img.png
+val/248505_ALI_img.png
+val/248509_ALI_img.png
+val/248515_DT_img.png
+val/248516_ALI_img.png
+val/248517_ALI_img.png
+val/248519_ALI_img.png
+val/248529_ALI_img.png
+val/248530_ALI_img.png
+val/248537_ALI_img.png
+val/248538_ALI_img.png
+val/248546_ALI_img.png
+val/248549_ALI_img.png
+val/248551_ALI_img.png
+val/248558_ALI_img.png
+val/248566_ALI_img.png
+val/248573_ALI_img.png
+val/248575_ALI_img.png
+val/248581_ALI_img.png
+val/248585_ALI_img.png
+val/248587_ALI_img.png
+val/248589_ALI_img.png
+val/248591_ALI_img.png
+val/248595_ALI_img.png
+val/248601_ALI_img.png
+val/248603_ALI_img.png
+val/248615_ALI_img.png
+val/248616_ALI_img.png
+val/248617_ALI_img.png
+val/248623_ALI_img.png
+val/248624_ALI_img.png
+val/248627_ALI_img.png
+val/248628_ALI_img.png
+val/248630_ALI_img.png
+val/248631_ALI_img.png
+val/248632_ALI_img.png
+val/248637_ALI_img.png
+val/248644_ALI_img.png
+val/248649_ALI_img.png
+val/248650_ALI_img.png
+val/248653_ALI_img.png
+val/248656_ALI_img.png
+val/248658_ALI_img.png
+val/248661_ALI_img.png
+val/248667_ALI_img.png
+val/248668_ALI_img.png
+val/248677_ALI_img.png
+val/248678_ALI_img.png
+val/248680_ALI_img.png
+val/248686_ALI_img.png
+val/248690_ALI_img.png
+val/248691_ALI_img.png
+val/248694_ALI_img.png
+val/248695_ALI_img.png
+val/248701_ALI_img.png
+val/248704_ALI_img.png
+val/248706_ALI_img.png
+val/248707_ALI_img.png
+val/248714_ALI_img.png
+val/248718_ALI_img.png
+val/248722_ALI_img.png
+val/248725_ALI_img.png
+val/248727_ALI_img.png
+val/248729_ALI_img.png
+val/248731_ALI_img.png
+val/248735_ALI_img.png
+val/248736_ALI_img.png
+val/248737_ALI_img.png
+val/248742_ALI_img.png
+val/248743_ALI_img.png
+val/248746_ALI_img.png
+val/248752_ALI_img.png
+val/248757_ALI_img.png
+val/248758_ALI_img.png
+val/248762_ALI_img.png
+val/248763_ALI_img.png
+val/248776_ALI_img.png
+val/248778_ALI_img.png
+val/248792_ALI_img.png
+val/248793_ALI_img.png
+val/248801_ALI_img.png
+val/248811_ALI_img.png
+val/248815_ALI_img.png
+val/248816_ALI_img.png
+val/248817_ALI_img.png
+val/248818_ALI_img.png
+val/248819_ALI_img.png
+val/248820_ALI_img.png
+val/248822_ALI_img.png
+val/248823_ALI_img.png
+val/248824_ALI_img.png
+val/248826_ALI_img.png
+val/248828_ALI_img.png
+val/248835_ALI_img.png
+val/248836_ALI_img.png
+val/248839_ALI_img.png
+val/248840_ALI_img.png
+val/248844_ALI_img.png
+val/248846_ALI_img.png
+val/248847_ALI_img.png
+val/248850_ALI_img.png
+val/248861_ALI_img.png
+val/248863_ALI_img.png
+val/248864_ALI_img.png
+val/248866_ALI_img.png
+val/248869_ALI_img.png
+val/248870_ALI_img.png
+val/248874_ALI_img.png
+val/248882_ALI_img.png
+val/248888_ALI_img.png
+val/248897_ALI_img.png
+val/248902_ALI_img.png
+val/248911_ALI_img.png
+val/248923_ALI_img.png
+val/248926_ALI_img.png
+val/248927_ALI_img.png
+val/248928_ALI_img.png
+val/248929_ALI_img.png
+val/248929_DT_img.png
+val/248932_ALI_img.png
+val/248933_ALI_img.png
+val/248937_ALI_img.png
+val/248938_ALI_img.png
+val/248940_ALI_img.png
+val/248942_ALI_img.png
+val/248944_ALI_img.png
+val/248956_ALI_img.png
+val/248963_ALI_img.png
+val/248966_ALI_img.png
+val/248970_ALI_img.png
+val/248979_ALI_img.png
+val/248980_ALI_img.png
+val/248982_ALI_img.png
+val/248987_ALI_img.png
+val/249002_ALI_img.png
+val/249004_ALI_img.png
+val/249007_ALI_img.png
+val/249013_ALI_img.png
+val/249015_ALI_img.png
+val/249023_ALI_img.png
+val/249027_ALI_img.png
+val/249034_ALI_img.png
+val/249038_ALI_img.png
+val/249044_ALI_img.png
+val/249048_ALI_img.png
+val/249050_ALI_img.png
+val/249064_ALI_img.png
+val/249069_ALI_img.png
+val/249075_ALI_img.png
+val/249079_ALI_img.png
+val/249081_ALI_img.png
+val/249083_ALI_img.png
+val/249093_ALI_img.png
+val/249096_ALI_img.png
+val/249100_ALI_img.png
+val/249103_ALI_img.png
+val/249104_ALI_img.png
+val/249109_ALI_img.png
+val/249110_ALI_img.png
+val/249111_ALI_img.png
+val/249122_ALI_img.png
+val/249123_ALI_img.png
+val/249125_ALI_img.png
+val/249127_ALI_img.png
+val/249128_ALI_img.png
+val/249135_ALI_img.png
+val/249144_ALI_img.png
+val/249146_ALI_img.png
+val/249149_ALI_img.png
+val/249165_ALI_img.png
+val/249169_ALI_img.png
+val/249172_ALI_img.png
+val/249179_ALI_img.png
+val/249184_ALI_img.png
+val/249186_ALI_img.png
+val/249191_ALI_img.png
+val/249193_ALI_img.png
+val/249199_ALI_img.png
+val/249200_ALI_img.png
+val/249202_ALI_img.png
+val/249211_ALI_img.png
+val/249213_ALI_img.png
+val/249219_ALI_img.png
+val/249220_ALI_img.png
+val/249228_ALI_img.png
+val/249231_ALI_img.png
+val/249233_ALI_img.png
+val/249237_ALI_img.png
+val/249248_ALI_img.png
+val/249254_ALI_img.png
+val/249255_ALI_img.png
+val/249264_ALI_img.png
+val/249267_ALI_img.png
+val/249268_ALI_img.png
+val/249270_ALI_img.png
+val/249272_ALI_img.png
+val/249273_ALI_img.png
+val/249288_ALI_img.png
+val/249289_ALI_img.png
+val/249292_ALI_img.png
+val/249293_ALI_img.png
+val/249302_ALI_img.png
+val/249306_ALI_img.png
+val/249308_ALI_img.png
+val/249310_ALI_img.png
+val/249314_ALI_img.png
+val/249316_ALI_img.png
+val/249320_ALI_img.png
+val/249321_ALI_img.png
+val/249326_ALI_img.png
+val/249328_ALI_img.png
+val/249329_ALI_img.png
+val/249330_ALI_img.png
+val/249335_ALI_img.png
+val/249342_ALI_img.png
+val/249350_ALI_img.png
+val/249354_ALI_img.png
+val/249355_ALI_img.png
+val/249357_ALI_img.png
+val/249358_ALI_img.png
+val/249368_ALI_img.png
+val/249369_ALI_img.png
+val/249372_ALI_img.png
+val/249375_ALI_img.png
+val/249378_ALI_img.png
+val/249389_ALI_img.png
+val/249396_ALI_img.png
+val/249399_ALI_img.png
+val/249402_ALI_img.png
+val/249411_ALI_img.png
+val/249412_ALI_img.png
+val/249414_ALI_img.png
+val/249416_ALI_img.png
+val/249425_ALI_img.png
+val/249426_ALI_img.png
+val/249435_ALI_img.png
+val/249439_ALI_img.png
+val/249444_ALI_img.png
+val/249447_ALI_img.png
+val/249452_ALI_img.png
+val/249456_ALI_img.png
+val/249459_ALI_img.png
+val/249465_ALI_img.png
+val/249468_ALI_img.png
+val/249477_ALI_img.png
+val/249478_ALI_img.png
+val/249482_ALI_img.png
+val/249483_ALI_img.png
+val/249486_ALI_img.png
+val/249487_ALI_img.png
+val/249493_ALI_img.png
+val/249495_ALI_img.png
+val/249498_ALI_img.png
+val/249513_ALI_img.png
+val/249515_ALI_img.png
+val/249518_ALI_img.png
+val/249519_ALI_img.png
+val/249528_ALI_img.png
+val/249531_ALI_img.png
+val/249538_ALI_img.png
+val/249540_ALI_img.png
+val/249544_ALI_img.png
+val/249545_ALI_img.png
+val/249547_ALI_img.png
+val/249550_ALI_img.png
+val/249551_ALI_img.png
+val/249552_ALI_img.png
+val/249557_ALI_img.png
+val/249559_ALI_img.png
+val/249565_ALI_img.png
+val/249572_ALI_img.png
+val/249574_ALI_img.png
+val/249587_ALI_img.png
+val/249593_ALI_img.png
+val/249603_ALI_img.png
+val/249606_ALI_img.png
+val/249608_ALI_img.png
+val/249611_ALI_img.png
+val/249623_ALI_img.png
+val/249624_ALI_img.png
+val/249637_ALI_img.png
+val/249638_ALI_img.png
+val/249640_ALI_img.png
+val/249641_ALI_img.png
+val/249651_ALI_img.png
+val/249655_ALI_img.png
+val/249659_ALI_img.png
+val/249661_ALI_img.png
+val/249666_ALI_img.png
+val/249674_ALI_img.png
+val/249675_ALI_img.png
+val/249677_ALI_img.png
+val/249679_ALI_img.png
+val/249680_ALI_img.png
+val/249682_ALI_img.png
+val/249683_ALI_img.png
+val/249689_ALI_img.png
+val/249690_ALI_img.png
+val/249691_ALI_img.png
+val/249693_ALI_img.png
+val/249698_ALI_img.png
+val/249701_ALI_img.png
+val/249704_ALI_img.png
+val/249706_ALI_img.png
+val/249707_ALI_img.png
+val/249712_ALI_img.png
+val/249714_ALI_img.png
+val/249717_ALI_img.png
+val/249718_ALI_img.png
+val/249719_ALI_img.png
+val/249720_ALI_img.png
+val/249725_ALI_img.png
+val/249727_ALI_img.png
+val/249731_ALI_img.png
+val/249748_ALI_img.png
+val/249752_ALI_img.png
+val/249758_ALI_img.png
+val/249764_ALI_img.png
+val/249765_ALI_img.png
+val/249766_ALI_img.png
+val/249768_ALI_img.png
+val/249770_ALI_img.png
+val/249772_ALI_img.png
+val/249775_ALI_img.png
+val/249778_ALI_img.png
+val/249779_ALI_img.png
+val/249782_ALI_img.png
+val/249783_ALI_img.png
+val/249788_ALI_img.png
+val/249791_ALI_img.png
+val/249800_ALI_img.png
+val/249803_ALI_img.png
+val/249806_ALI_img.png
+val/249813_ALI_img.png
+val/249829_ALI_img.png
+val/249831_ALI_img.png
+val/249833_ALI_img.png
+val/249834_ALI_img.png
+val/249835_ALI_img.png
+val/249837_ALI_img.png
+val/249840_ALI_img.png
+val/249841_ALI_img.png
+val/249846_ALI_img.png
+val/249848_ALI_img.png
+val/249856_ALI_img.png
+val/249862_ALI_img.png
+val/249866_ALI_img.png
+val/249868_ALI_img.png
+val/249871_ALI_img.png
+val/249874_ALI_img.png
+val/249877_ALI_img.png
+val/249881_ALI_img.png
+val/249883_ALI_img.png
+val/249886_ALI_img.png
+val/249888_ALI_img.png
+val/249896_ALI_img.png
+val/249897_ALI_img.png
+val/249900_ALI_img.png
+val/249901_ALI_img.png
+val/249913_ALI_img.png
+val/249914_ALI_img.png
+val/249920_ALI_img.png
+val/249927_ALI_img.png
+val/249930_ALI_img.png
+val/249933_ALI_img.png
+val/249937_ALI_img.png
+val/249945_ALI_img.png
+val/249946_ALI_img.png
+val/249949_ALI_img.png
+val/249954_ALI_img.png
+val/249962_ALI_img.png
+val/249963_ALI_img.png
+val/249964_ALI_img.png
+val/249969_ALI_img.png
+val/249977_ALI_img.png
+val/249978_ALI_img.png
+val/249986_ALI_img.png
+val/249995_ALI_img.png
+val/249998_ALI_img.png
+val/250000_ALI_img.png
+val/250003_ALI_img.png
+val/250009_ALI_img.png
+val/250019_ALI_img.png
+val/250020_ALI_img.png
+val/250022_ALI_img.png
+val/250026_ALI_img.png
+val/250040_ALI_img.png
+val/250041_ALI_img.png
+val/250042_ALI_img.png
+val/250045_ALI_img.png
+val/250056_ALI_img.png
+val/250060_ALI_img.png
+val/250062_ALI_img.png
+val/250067_ALI_img.png
+val/250068_ALI_img.png
+val/250070_ALI_img.png
+val/250071_DT_img.png
+val/250076_ALI_img.png
+val/250077_ALI_img.png
+val/250080_ALI_img.png
+val/250083_ALI_img.png
+val/250084_ALI_img.png
+val/250085_ALI_img.png
+val/250087_ALI_img.png
+val/250093_ALI_img.png
+val/250095_ALI_img.png
+val/250099_ALI_img.png
+val/250115_ALI_img.png
+val/250118_ALI_img.png
+val/250124_ALI_img.png
+val/250125_ALI_img.png
+val/250126_ALI_img.png
+val/250130_ALI_img.png
+val/250132_ALI_img.png
+val/250140_ALI_img.png
+val/250144_ALI_img.png
+val/250145_ALI_img.png
+val/250153_ALI_img.png
+val/250155_ALI_img.png
+val/250157_ALI_img.png
+val/250168_ALI_img.png
+val/250174_ALI_img.png
+val/250186_ALI_img.png
+val/250190_ALI_img.png
+val/250195_ALI_img.png
+val/250198_ALI_img.png
+val/250200_ALI_img.png
+val/250202_ALI_img.png
+val/250204_ALI_img.png
+val/250205_ALI_img.png
+val/250210_ALI_img.png
+val/250211_ALI_img.png
+val/250214_ALI_img.png
+val/250215_ALI_img.png
+val/250218_ALI_img.png
+val/250219_ALI_img.png
+val/250221_ALI_img.png
+val/250224_ALI_img.png
+val/250225_ALI_img.png
+val/250230_ALI_img.png
+val/250232_ALI_img.png
+val/250237_ALI_img.png
+val/250241_ALI_img.png
+val/250242_ALI_img.png
+val/250244_ALI_img.png
+val/250245_ALI_img.png
+val/250255_ALI_img.png
+val/250259_ALI_img.png
+val/250260_ALI_img.png
+val/250262_ALI_img.png
+val/250263_ALI_img.png
+val/250268_ALI_img.png
+val/250282_ALI_img.png
+val/250290_ALI_img.png
+val/250296_ALI_img.png
+val/250297_ALI_img.png
+val/250306_ALI_img.png
+val/250310_ALI_img.png
+val/250316_ALI_img.png
+val/250317_ALI_img.png
+val/250319_ALI_img.png
+val/250321_ALI_img.png
+val/250323_ALI_img.png
+val/250328_ALI_img.png
+val/250345_ALI_img.png
+val/250348_ALI_img.png
+val/250354_ALI_img.png
+val/250356_ALI_img.png
+val/250371_ALI_img.png
+val/250379_ALI_img.png
+val/250384_ALI_img.png
+val/250388_ALI_img.png
+val/250389_ALI_img.png
+val/250390_ALI_img.png
+val/250393_ALI_img.png
+val/250395_ALI_img.png
+val/250396_ALI_img.png
+val/250397_ALI_img.png
+val/250404_ALI_img.png
+val/250414_ALI_img.png
+val/250429_ALI_img.png
+val/250435_ALI_img.png
+val/250436_ALI_img.png
+val/250438_ALI_img.png
+val/250439_ALI_img.png
+val/250446_ALI_img.png
+val/250452_ALI_img.png
+val/250454_ALI_img.png
+val/250459_ALI_img.png
+val/250461_ALI_img.png
+val/250466_ALI_img.png
+val/250468_ALI_img.png
+val/250469_ALI_img.png
+val/250475_ALI_img.png
+val/250478_ALI_img.png
+val/250479_ALI_img.png
+val/250482_ALI_img.png
+val/250493_ALI_img.png
+val/250496_ALI_img.png
+val/250499_ALI_img.png
+val/250506_ALI_img.png
+val/250507_ALI_img.png
+val/250509_ALI_img.png
+val/250510_ALI_img.png
+val/250511_ALI_img.png
+val/250522_ALI_img.png
+val/250529_ALI_img.png
+val/250537_ALI_img.png
+val/250538_ALI_img.png
+val/250553_ALI_img.png
+val/250561_ALI_img.png
+val/250564_ALI_img.png
+val/250566_ALI_img.png
+val/250568_ALI_img.png
+val/250569_ALI_img.png
+val/250570_ALI_img.png
+val/250576_ALI_img.png
+val/250579_ALI_img.png
+val/250587_ALI_img.png
+val/250588_ALI_img.png
+val/250589_ALI_img.png
+val/250590_ALI_img.png
+val/250592_ALI_img.png
+val/250596_ALI_img.png
+val/250609_ALI_img.png
+val/250610_ALI_img.png
+val/250613_ALI_img.png
+val/250616_ALI_img.png
+val/250617_ALI_img.png
+val/250623_ALI_img.png
+val/250628_ALI_img.png
+val/250630_ALI_img.png
+val/250633_ALI_img.png
+val/250634_ALI_img.png
+val/250635_ALI_img.png
+val/250636_ALI_img.png
+val/250638_ALI_img.png
+val/250639_ALI_img.png
+val/250647_ALI_img.png
+val/250649_ALI_img.png
+val/250650_ALI_img.png
+val/250652_ALI_img.png
+val/250656_ALI_img.png
+val/250657_ALI_img.png
+val/250659_ALI_img.png
+val/250664_ALI_img.png
+val/250668_ALI_img.png
+val/250669_ALI_img.png
+val/250670_ALI_img.png
+val/250674_ALI_img.png
+val/250680_ALI_img.png
+val/250686_ALI_img.png
+val/250688_ALI_img.png
+val/250701_ALI_img.png
+val/250707_ALI_img.png
+val/250711_ALI_img.png
+val/250715_ALI_img.png
+val/250721_ALI_img.png
+val/250723_ALI_img.png
+val/250727_ALI_img.png
+val/250728_ALI_img.png
+val/250730_ALI_img.png
+val/250736_ALI_img.png
+val/250740_ALI_img.png
+val/250742_ALI_img.png
+val/250744_ALI_img.png
+val/250754_ALI_img.png
+val/250762_ALI_img.png
+val/250766_ALI_img.png
+val/250767_ALI_img.png
+val/250768_ALI_img.png
+val/250770_ALI_img.png
+val/250772_ALI_img.png
+val/250775_ALI_img.png
+val/250782_ALI_img.png
+val/250786_ALI_img.png
+val/250787_ALI_img.png
+val/250791_ALI_img.png
+val/250793_ALI_img.png
+val/250795_ALI_img.png
+val/250796_ALI_img.png
+val/250797_ALI_img.png
+val/250798_ALI_img.png
+val/250807_ALI_img.png
+val/250814_ALI_img.png
+val/250821_ALI_img.png
+val/250823_ALI_img.png
+val/250830_ALI_img.png
+val/250835_ALI_img.png
+val/250836_ALI_img.png
+val/250840_ALI_img.png
+val/250841_ALI_img.png
+val/250843_ALI_img.png
+val/250850_ALI_img.png
+val/250854_ALI_img.png
+val/250855_ALI_img.png
+val/250859_ALI_img.png
+val/250860_ALI_img.png
+val/250865_ALI_img.png
+val/250866_ALI_img.png
+val/250868_ALI_img.png
+val/250872_ALI_img.png
+val/250880_ALI_img.png
+val/250883_ALI_img.png
+val/250891_ALI_img.png
+val/250895_ALI_img.png
+val/250897_ALI_img.png
+val/250900_ALI_img.png
+val/250901_ALI_img.png
+val/250902_ALI_img.png
+val/250906_ALI_img.png
+val/250913_ALI_img.png
+val/250919_ALI_img.png
+val/250921_ALI_img.png
+val/250924_ALI_img.png
+val/250936_ALI_img.png
+val/250946_ALI_img.png
+val/250947_ALI_img.png
+val/250952_ALI_img.png
+val/250953_ALI_img.png
+val/250956_ALI_img.png
+val/250957_ALI_img.png
+val/250959_ALI_img.png
+val/250973_ALI_img.png
+val/250974_ALI_img.png
+val/250978_ALI_img.png
+val/250984_ALI_img.png
+val/250985_ALI_img.png
+val/250995_ALI_img.png
+val/250998_ALI_img.png
+val/250999_ALI_img.png
+val/251001_ALI_img.png
+val/251002_ALI_img.png
+val/251003_ALI_img.png
+val/251004_ALI_img.png
+val/251014_ALI_img.png
+val/251018_ALI_img.png
+val/251025_ALI_img.png
+val/251026_ALI_img.png
+val/251033_ALI_img.png
+val/251040_ALI_img.png
+val/251051_ALI_img.png
+val/251058_ALI_img.png
+val/251063_ALI_img.png
+val/251064_ALI_img.png
+val/251072_ALI_img.png
+val/251076_ALI_img.png
+val/251078_ALI_img.png
+val/251085_ALI_img.png
+val/251086_ALI_img.png
+val/251090_ALI_img.png
+val/251091_ALI_img.png
+val/251092_ALI_img.png
+val/251098_ALI_img.png
+val/251100_ALI_img.png
+val/251107_ALI_img.png
+val/251109_ALI_img.png
+val/251117_ALI_img.png
+val/251119_ALI_img.png
+val/251123_ALI_img.png
+val/251124_ALI_img.png
+val/251126_ALI_img.png
+val/251130_ALI_img.png
+val/251134_ALI_img.png
+val/251136_ALI_img.png
+val/251142_ALI_img.png
+val/251145_ALI_img.png
+val/251148_ALI_img.png
+val/251149_ALI_img.png
+val/251152_ALI_img.png
+val/251154_ALI_img.png
+val/251159_ALI_img.png
+val/251163_ALI_img.png
+val/251164_ALI_img.png
+val/251168_ALI_img.png
+val/251172_ALI_img.png
+val/251175_ALI_img.png
+val/251179_ALI_img.png
+val/251180_ALI_img.png
+val/251183_ALI_img.png
+val/251187_ALI_img.png
+val/251189_ALI_img.png
+val/251193_ALI_img.png
+val/251194_ALI_img.png
+val/251200_ALI_img.png
+val/251201_ALI_img.png
+val/251204_ALI_img.png
+val/251209_ALI_img.png
+val/251212_ALI_img.png
+val/251213_ALI_img.png
+val/251214_ALI_img.png
+val/251215_ALI_img.png
+val/251223_ALI_img.png
+val/251234_ALI_img.png
+val/251240_ALI_img.png
+val/251244_ALI_img.png
+val/251251_ALI_img.png
+val/251252_ALI_img.png
+val/251253_ALI_img.png
+val/251254_ALI_img.png
+val/251265_ALI_img.png
+val/251266_ALI_img.png
+val/251274_ALI_img.png
+val/251276_ALI_img.png
+val/251277_ALI_img.png
+val/251279_ALI_img.png
+val/251285_ALI_img.png
+val/251287_ALI_img.png
+val/251290_ALI_img.png
+val/251293_ALI_img.png
+val/251298_ALI_img.png
+val/251299_ALI_img.png
+val/251300_ALI_img.png
+val/251321_ALI_img.png
+val/251323_ALI_img.png
+val/251334_ALI_img.png
+val/251344_ALI_img.png
+val/251344_DT_img.png
+val/251345_ALI_img.png
+val/251346_ALI_img.png
+val/251349_ALI_img.png
+val/251353_ALI_img.png
+val/251356_ALI_img.png
+val/251358_ALI_img.png
+val/251366_ALI_img.png
+val/251368_ALI_img.png
+val/251370_ALI_img.png
+val/251379_ALI_img.png
+val/251380_ALI_img.png
+val/251381_ALI_img.png
+val/251383_ALI_img.png
+val/251385_ALI_img.png
+val/251388_ALI_img.png
+val/251396_ALI_img.png
+val/251398_ALI_img.png
+val/251407_ALI_img.png
+val/251408_ALI_img.png
+val/251411_ALI_img.png
+val/251413_ALI_img.png
+val/251414_ALI_img.png
+val/251419_ALI_img.png
+val/251426_ALI_img.png
+val/251429_ALI_img.png
+val/251432_ALI_img.png
+val/251436_ALI_img.png
+val/251441_ALI_img.png
+val/251445_ALI_img.png
+val/251448_ALI_img.png
+val/251452_ALI_img.png
+val/251455_ALI_img.png
+val/251457_ALI_img.png
+val/251458_ALI_img.png
+val/251461_ALI_img.png
+val/251467_ALI_img.png
+val/251468_ALI_img.png
+val/251469_ALI_img.png
+val/251471_ALI_img.png
+val/251478_ALI_img.png
+val/251491_ALI_img.png
+val/251496_ALI_img.png
+val/251501_ALI_img.png
+val/251503_ALI_img.png
+val/251505_ALI_img.png
+val/251509_ALI_img.png
+val/251510_ALI_img.png
+val/251512_ALI_img.png
+val/251515_ALI_img.png
+val/251516_ALI_img.png
+val/251519_ALI_img.png
+val/251528_ALI_img.png
+val/251530_ALI_img.png
+val/251534_ALI_img.png
+val/251536_ALI_img.png
+val/251542_ALI_img.png
+val/251549_ALI_img.png
+val/251550_ALI_img.png
+val/251551_ALI_img.png
+val/251555_ALI_img.png
+val/251557_ALI_img.png
+val/251558_ALI_img.png
+val/251559_ALI_img.png
+val/251566_ALI_img.png
+val/251574_ALI_img.png
+val/251575_ALI_img.png
+val/251577_ALI_img.png
+val/251579_ALI_img.png
+val/251596_ALI_img.png
+val/251606_ALI_img.png
+val/251609_ALI_img.png
+val/251611_ALI_img.png
+val/251618_ALI_img.png
+val/251619_ALI_img.png
+val/251628_ALI_img.png
+val/251636_ALI_img.png
+val/251643_ALI_img.png
+val/251647_ALI_img.png
+val/251650_ALI_img.png
+val/251654_ALI_img.png
+val/251663_ALI_img.png
+val/251670_ALI_img.png
+val/251672_ALI_img.png
+val/251676_ALI_img.png
+val/251677_ALI_img.png
+val/251684_ALI_img.png
+val/251685_ALI_img.png
+val/251688_ALI_img.png
+val/251689_ALI_img.png
+val/251697_ALI_img.png
+val/251699_ALI_img.png
+val/251710_ALI_img.png
+val/251711_ALI_img.png
+val/251719_ALI_img.png
+val/251724_ALI_img.png
+val/251729_ALI_img.png
+val/251733_ALI_img.png
+val/251734_ALI_img.png
+val/251736_ALI_img.png
+val/251739_ALI_img.png
+val/251748_ALI_img.png
+val/251749_ALI_img.png
+val/251756_ALI_img.png
+val/251758_ALI_img.png
+val/251766_ALI_img.png
+val/251773_ALI_img.png
+val/251778_ALI_img.png
+val/251781_ALI_img.png
+val/251784_ALI_img.png
+val/251795_ALI_img.png
+val/251798_ALI_img.png
+val/251799_ALI_img.png
+val/251801_ALI_img.png
+val/251806_ALI_img.png
+val/251809_ALI_img.png
+val/251811_ALI_img.png
+val/251813_ALI_img.png
+val/251825_ALI_img.png
+val/251826_ALI_img.png
+val/251827_ALI_img.png
+val/251830_ALI_img.png
+val/251836_ALI_img.png
+val/251838_ALI_img.png
+val/251839_ALI_img.png
+val/251848_ALI_img.png
+val/251852_ALI_img.png
+val/251864_ALI_img.png
+val/251870_ALI_img.png
+val/251882_ALI_img.png
+val/251886_ALI_img.png
+val/251895_ALI_img.png
+val/251896_ALI_img.png
+val/251896_DT_img.png
+val/251897_ALI_img.png
+val/251900_ALI_img.png
+val/251908_ALI_img.png
+val/251910_ALI_img.png
+val/251911_ALI_img.png
+val/251919_ALI_img.png
+val/251922_ALI_img.png
+val/251930_ALI_img.png
+val/251934_ALI_img.png
+val/251937_ALI_img.png
+val/251938_ALI_img.png
+val/251949_ALI_img.png
+val/251955_ALI_img.png
+val/251960_ALI_img.png
+val/251961_ALI_img.png
+val/251965_ALI_img.png
+val/251967_ALI_img.png
+val/251969_ALI_img.png
+val/251970_ALI_img.png
+val/251973_ALI_img.png
+val/251977_ALI_img.png
+val/251978_ALI_img.png
+val/251982_ALI_img.png
+val/251985_DT_img.png
+val/251990_ALI_img.png
+val/251992_ALI_img.png
+val/251994_ALI_img.png
+val/251995_ALI_img.png
+val/251997_ALI_img.png
+val/252004_DT_img.png
+val/252005_ALI_img.png
+val/252010_ALI_img.png
+val/252019_ALI_img.png
+val/252021_ALI_img.png
+val/252026_ALI_img.png
+val/252029_ALI_img.png
+val/252030_ALI_img.png
+val/252039_ALI_img.png
+val/252040_ALI_img.png
+val/252043_ALI_img.png
+val/252048_ALI_img.png
+val/252050_ALI_img.png
+val/252054_ALI_img.png
+val/252060_ALI_img.png
+val/252061_ALI_img.png
+val/252062_ALI_img.png
+val/252070_ALI_img.png
+val/252073_ALI_img.png
+val/252077_ALI_img.png
+val/252080_ALI_img.png
+val/252081_ALI_img.png
+val/252082_ALI_img.png
+val/252083_ALI_img.png
+val/252088_ALI_img.png
+val/252094_ALI_img.png
+val/252097_ALI_img.png
+val/252099_ALI_img.png
+val/252102_ALI_img.png
+val/252105_ALI_img.png
+val/252109_ALI_img.png
+val/252120_ALI_img.png
+val/252122_ALI_img.png
+val/252124_ALI_img.png
+val/252125_ALI_img.png
+val/252127_ALI_img.png
+val/252129_ALI_img.png
+val/252132_ALI_img.png
+val/252135_ALI_img.png
+val/252140_ALI_img.png
+val/252141_ALI_img.png
+val/252143_ALI_img.png
+val/252147_ALI_img.png
+val/252151_ALI_img.png
+val/252154_ALI_img.png
+val/252159_ALI_img.png
+val/252169_ALI_img.png
+val/252170_ALI_img.png
+val/252180_ALI_img.png
+val/252183_ALI_img.png
+val/252190_ALI_img.png
+val/252197_ALI_img.png
+val/252200_DT_img.png
+val/252203_ALI_img.png
+val/252206_ALI_img.png
+val/252207_ALI_img.png
+val/252209_ALI_img.png
+val/252219_ALI_img.png
+val/252222_ALI_img.png
+val/252223_ALI_img.png
+val/252229_ALI_img.png
+val/252230_ALI_img.png
+val/252232_ALI_img.png
+val/252241_ALI_img.png
+val/252253_ALI_img.png
+val/252254_ALI_img.png
+val/252257_ALI_img.png
+val/252258_ALI_img.png
+val/252265_ALI_img.png
+val/252266_ALI_img.png
+val/252267_ALI_img.png
+val/252268_ALI_img.png
+val/252274_ALI_img.png
+val/252279_ALI_img.png
+val/252284_ALI_img.png
+val/252287_ALI_img.png
+val/252288_ALI_img.png
+val/252289_ALI_img.png
+val/252290_ALI_img.png
+val/252294_ALI_img.png
+val/252295_ALI_img.png
+val/252303_ALI_img.png
+val/252308_ALI_img.png
+val/252310_ALI_img.png
+val/252313_ALI_img.png
+val/252314_ALI_img.png
+val/252317_ALI_img.png
+val/252323_ALI_img.png
+val/252324_ALI_img.png
+val/252325_ALI_img.png
+val/252326_ALI_img.png
+val/252331_ALI_img.png
+val/252332_ALI_img.png
+val/252333_ALI_img.png
+val/252338_ALI_img.png
+val/252340_ALI_img.png
+val/252347_ALI_img.png
+val/252348_ALI_img.png
+val/252360_ALI_img.png
+val/252361_ALI_img.png
+val/252372_ALI_img.png
+val/252376_ALI_img.png
+val/252378_ALI_img.png
+val/252382_ALI_img.png
+val/252386_ALI_img.png
+val/252389_ALI_img.png
+val/252392_ALI_img.png
+val/252393_ALI_img.png
+val/252413_ALI_img.png
+val/252417_ALI_img.png
+val/252422_ALI_img.png
+val/252423_ALI_img.png
+val/252427_ALI_img.png
+val/252436_ALI_img.png
+val/252438_ALI_img.png
+val/252453_ALI_img.png
+val/252454_ALI_img.png
+val/252455_ALI_img.png
+val/252466_ALI_img.png
+val/252468_ALI_img.png
+val/252472_ALI_img.png
+val/252476_ALI_img.png
+val/252486_ALI_img.png
+val/252495_ALI_img.png
+val/252499_ALI_img.png
+val/252511_ALI_img.png
+val/252512_ALI_img.png
+val/252524_ALI_img.png
+val/252527_ALI_img.png
+val/252528_ALI_img.png
+val/252529_ALI_img.png
+val/252532_ALI_img.png
+val/252534_ALI_img.png
+val/252536_ALI_img.png
+val/252538_ALI_img.png
+val/252539_ALI_img.png
+val/252541_ALI_img.png
+val/252551_ALI_img.png
+val/252554_ALI_img.png
+val/252557_ALI_img.png
+val/252558_ALI_img.png
+val/252579_ALI_img.png
+val/252586_ALI_img.png
+val/252596_ALI_img.png
+val/252599_ALI_img.png
+val/252600_ALI_img.png
+val/252607_ALI_img.png
+val/252610_ALI_img.png
+val/252612_ALI_img.png
+val/252621_ALI_img.png
+val/252624_ALI_img.png
+val/252627_ALI_img.png
+val/252628_ALI_img.png
+val/252631_ALI_img.png
+val/252632_ALI_img.png
+val/252637_ALI_img.png
+val/252643_ALI_img.png
+val/252653_ALI_img.png
+val/252662_ALI_img.png
+val/252665_ALI_img.png
+val/252678_ALI_img.png
+val/252680_ALI_img.png
+val/252684_ALI_img.png
+val/252688_ALI_img.png
+val/252689_ALI_img.png
+val/252690_ALI_img.png
+val/252693_ALI_img.png
+val/252700_ALI_img.png
+val/252702_ALI_img.png
+val/252707_ALI_img.png
+val/252712_ALI_img.png
+val/252714_ALI_img.png
+val/252723_ALI_img.png
+val/252729_ALI_img.png
+val/252735_ALI_img.png
+val/252740_ALI_img.png
+val/252743_ALI_img.png
+val/252747_ALI_img.png
+val/252748_ALI_img.png
+val/252755_ALI_img.png
+val/252756_ALI_img.png
+val/252757_ALI_img.png
+val/252758_ALI_img.png
+val/252761_ALI_img.png
+val/252762_ALI_img.png
+val/252766_ALI_img.png
+val/252770_ALI_img.png
+val/252785_ALI_img.png
+val/252786_ALI_img.png
+val/252798_ALI_img.png
+val/252800_ALI_img.png
+val/252812_ALI_img.png
+val/252814_ALI_img.png
+val/252815_ALI_img.png
+val/252818_ALI_img.png
+val/252822_ALI_img.png
+val/252824_ALI_img.png
+val/252827_ALI_img.png
+val/252829_ALI_img.png
+val/252831_ALI_img.png
+val/252834_ALI_img.png
+val/252837_ALI_img.png
+val/252840_ALI_img.png
+val/252841_ALI_img.png
+val/252848_ALI_img.png
+val/252851_ALI_img.png
+val/252853_ALI_img.png
+val/252862_ALI_img.png
+val/252872_ALI_img.png
+val/252874_ALI_img.png
+val/252876_ALI_img.png
+val/252880_ALI_img.png
+val/252883_ALI_img.png
+val/252884_ALI_img.png
+val/252892_ALI_img.png
+val/252897_ALI_img.png
+val/252902_ALI_img.png
+val/252903_ALI_img.png
+val/252904_ALI_img.png
+val/252905_ALI_img.png
+val/252914_ALI_img.png
+val/252917_ALI_img.png
+val/252918_ALI_img.png
+val/252924_ALI_img.png
+val/252930_ALI_img.png
+val/252934_ALI_img.png
+val/252942_ALI_img.png
+val/252946_ALI_img.png
+val/252955_ALI_img.png
+val/252957_ALI_img.png
+val/252958_ALI_img.png
+val/252959_ALI_img.png
+val/252960_ALI_img.png
+val/252962_ALI_img.png
+val/252968_ALI_img.png
+val/252972_ALI_img.png
+val/252976_ALI_img.png
+val/252983_ALI_img.png
+val/252986_ALI_img.png
+val/252987_ALI_img.png
+val/252988_ALI_img.png
+val/252991_ALI_img.png
+val/252997_ALI_img.png
+val/253008_ALI_img.png
+val/253011_ALI_img.png
+val/253016_ALI_img.png
+val/253023_ALI_img.png
+val/253025_ALI_img.png
+val/253029_ALI_img.png
+val/253034_ALI_img.png
+val/253039_ALI_img.png
+val/253040_ALI_img.png
+val/253051_ALI_img.png
+val/253052_ALI_img.png
+val/253056_ALI_img.png
+val/253063_ALI_img.png
+val/253064_ALI_img.png
+val/253065_ALI_img.png
+val/253070_ALI_img.png
+val/253076_ALI_img.png
+val/253078_DT_img.png
+val/253079_ALI_img.png
+val/253081_ALI_img.png
+val/253088_ALI_img.png
+val/253090_ALI_img.png
+val/253094_ALI_img.png
+val/253096_ALI_img.png
+val/253099_ALI_img.png
+val/253101_ALI_img.png
+val/253103_ALI_img.png
+val/253105_ALI_img.png
+val/253107_ALI_img.png
+val/253108_ALI_img.png
+val/253110_ALI_img.png
+val/253111_ALI_img.png
+val/253116_ALI_img.png
+val/253122_ALI_img.png
+val/253128_ALI_img.png
+val/253130_ALI_img.png
+val/253133_ALI_img.png
+val/253138_ALI_img.png
+val/253142_ALI_img.png
+val/253146_ALI_img.png
+val/253148_ALI_img.png
+val/253153_ALI_img.png
+val/253159_ALI_img.png
+val/253162_ALI_img.png
+val/253172_ALI_img.png
+val/253174_ALI_img.png
+val/253183_ALI_img.png
+val/253184_ALI_img.png
+val/253186_ALI_img.png
+val/253194_ALI_img.png
+val/253196_ALI_img.png
+val/253201_ALI_img.png
+val/253209_ALI_img.png
+val/253210_ALI_img.png
+val/253217_ALI_img.png
+val/253219_ALI_img.png
+val/253221_ALI_img.png
+val/253227_ALI_img.png
+val/253229_ALI_img.png
+val/253235_ALI_img.png
+val/253241_ALI_img.png
+val/253244_ALI_img.png
+val/253248_ALI_img.png
+val/253253_ALI_img.png
+val/253256_ALI_img.png
+val/253257_ALI_img.png
+val/253258_ALI_img.png
+val/253260_ALI_img.png
+val/253263_ALI_img.png
+val/253265_ALI_img.png
+val/253270_ALI_img.png
+val/253271_ALI_img.png
+val/253275_ALI_img.png
+val/253278_ALI_img.png
+val/253279_ALI_img.png
+val/253287_ALI_img.png
+val/253289_ALI_img.png
+val/253291_ALI_img.png
+val/253296_ALI_img.png
+val/253298_ALI_img.png
+val/253305_ALI_img.png
+val/253309_ALI_img.png
+val/253313_ALI_img.png
+val/253314_ALI_img.png
+val/253316_ALI_img.png
+val/253322_ALI_img.png
+val/253326_ALI_img.png
+val/253339_ALI_img.png
+val/253345_ALI_img.png
+val/253351_ALI_img.png
+val/253353_ALI_img.png
+val/253354_ALI_img.png
+val/253355_ALI_img.png
+val/253356_ALI_img.png
+val/253358_ALI_img.png
+val/253359_ALI_img.png
+val/253362_ALI_img.png
+val/253363_ALI_img.png
+val/253369_ALI_img.png
+val/253371_ALI_img.png
+val/253372_ALI_img.png
+val/253374_ALI_img.png
+val/253375_ALI_img.png
+val/253376_ALI_img.png
+val/253379_ALI_img.png
+val/253380_ALI_img.png
+val/253383_ALI_img.png
+val/253389_ALI_img.png
+val/253394_ALI_img.png
+val/253398_ALI_img.png
+val/253399_ALI_img.png
+val/253400_ALI_img.png
+val/253401_ALI_img.png
+val/253405_ALI_img.png
+val/253409_ALI_img.png
+val/253410_ALI_img.png
+val/253412_ALI_img.png
+val/253415_ALI_img.png
+val/253416_ALI_img.png
+val/253420_ALI_img.png
+val/253430_ALI_img.png
+val/253434_ALI_img.png
+val/253439_ALI_img.png
+val/253445_ALI_img.png
+val/253448_ALI_img.png
+val/253456_ALI_img.png
+val/253460_ALI_img.png
+val/253462_ALI_img.png
+val/253465_ALI_img.png
+val/253469_ALI_img.png
+val/253471_ALI_img.png
+val/253472_ALI_img.png
+val/253478_ALI_img.png
+val/253480_ALI_img.png
+val/253481_ALI_img.png
+val/253485_ALI_img.png
+val/253486_ALI_img.png
+val/253487_ALI_img.png
+val/253493_ALI_img.png
+val/253502_ALI_img.png
+val/253505_ALI_img.png
+val/253513_ALI_img.png
+val/253515_ALI_img.png
+val/253518_ALI_img.png
+val/253519_ALI_img.png
+val/253528_ALI_img.png
+val/253529_ALI_img.png
+val/253542_ALI_img.png
+val/253550_ALI_img.png
+val/253551_ALI_img.png
+val/253552_ALI_img.png
+val/253555_ALI_img.png
+val/253558_ALI_img.png
+val/253560_ALI_img.png
+val/253566_ALI_img.png
+val/253573_ALI_img.png
+val/253575_ALI_img.png
+val/253577_ALI_img.png
+val/253580_ALI_img.png
+val/253585_ALI_img.png
+val/253586_ALI_img.png
+val/253587_ALI_img.png
+val/253593_ALI_img.png
+val/253594_ALI_img.png
+val/253595_ALI_img.png
+val/253601_ALI_img.png
+val/253602_ALI_img.png
+val/253603_ALI_img.png
+val/253605_ALI_img.png
+val/253607_ALI_img.png
+val/253610_ALI_img.png
+val/253611_ALI_img.png
+val/253613_ALI_img.png
+val/253615_ALI_img.png
+val/253617_ALI_img.png
+val/253623_ALI_img.png
+val/253628_ALI_img.png
+val/253631_ALI_img.png
+val/253634_ALI_img.png
+val/253635_ALI_img.png
+val/253636_ALI_img.png
+val/253637_ALI_img.png
+val/253638_ALI_img.png
+val/253639_ALI_img.png
+val/253657_ALI_img.png
+val/253658_ALI_img.png
+val/253660_ALI_img.png
+val/253668_ALI_img.png
+val/253675_ALI_img.png
+val/253677_ALI_img.png
+val/253678_ALI_img.png
+val/253682_ALI_img.png
+val/253685_ALI_img.png
+val/253686_ALI_img.png
+val/253691_ALI_img.png
+val/253697_ALI_img.png
+val/253703_ALI_img.png
+val/253704_ALI_img.png
+val/253705_ALI_img.png
+val/253706_ALI_img.png
+val/253707_ALI_img.png
+val/253711_ALI_img.png
+val/253712_ALI_img.png
+val/253716_ALI_img.png
+val/253718_ALI_img.png
+val/253726_ALI_img.png
+val/253732_ALI_img.png
+val/253752_ALI_img.png
+val/253753_DT_img.png
+val/253755_ALI_img.png
+val/253758_ALI_img.png
+val/253762_ALI_img.png
+val/253767_ALI_img.png
+val/253771_ALI_img.png
+val/253773_ALI_img.png
+val/253775_ALI_img.png
+val/253778_ALI_img.png
+val/253781_ALI_img.png
+val/253782_ALI_img.png
+val/253785_ALI_img.png
+val/253786_ALI_img.png
+val/253787_ALI_img.png
+val/253790_ALI_img.png
+val/253792_ALI_img.png
+val/253793_ALI_img.png
+val/253796_ALI_img.png
+val/253799_ALI_img.png
+val/253801_ALI_img.png
+val/253802_ALI_img.png
+val/253803_ALI_img.png
+val/253804_ALI_img.png
+val/253806_ALI_img.png
+val/253808_ALI_img.png
+val/253811_ALI_img.png
+val/253814_ALI_img.png
+val/253817_ALI_img.png
+val/253819_ALI_img.png
+val/253820_ALI_img.png
+val/253821_ALI_img.png
+val/253824_ALI_img.png
+val/253839_ALI_img.png
+val/253844_ALI_img.png
+val/253847_ALI_img.png
+val/253849_ALI_img.png
+val/253852_ALI_img.png
+val/253855_ALI_img.png
+val/253861_ALI_img.png
+val/253864_ALI_img.png
+val/253865_ALI_img.png
+val/253869_ALI_img.png
+val/253871_ALI_img.png
+val/253872_ALI_img.png
+val/253874_ALI_img.png
+val/253877_ALI_img.png
+val/253891_ALI_img.png
+val/253892_ALI_img.png
+val/253895_ALI_img.png
+val/253897_ALI_img.png
+val/253898_ALI_img.png
+val/253909_ALI_img.png
+val/253910_ALI_img.png
+val/253912_ALI_img.png
+val/253914_ALI_img.png
+val/253919_ALI_img.png
+val/253931_ALI_img.png
+val/253932_ALI_img.png
+val/253935_ALI_img.png
+val/253942_ALI_img.png
+val/253948_ALI_img.png
+val/253960_ALI_img.png
+val/253961_ALI_img.png
+val/253964_ALI_img.png
+val/253970_ALI_img.png
+val/253972_ALI_img.png
+val/253975_ALI_img.png
+val/253977_ALI_img.png
+val/253982_ALI_img.png
+val/253985_ALI_img.png
+val/253990_ALI_img.png
+val/253992_ALI_img.png
+val/254000_ALI_img.png
+val/254007_ALI_img.png
+val/254020_ALI_img.png
+val/254024_ALI_img.png
+val/254025_ALI_img.png
+val/254028_ALI_img.png
+val/254030_ALI_img.png
+val/254033_ALI_img.png
+val/254034_ALI_img.png
+val/254038_ALI_img.png
+val/254045_ALI_img.png
+val/254047_ALI_img.png
+val/254049_ALI_img.png
+val/254050_ALI_img.png
+val/254051_ALI_img.png
+val/254057_ALI_img.png
+val/254062_ALI_img.png
+val/254066_ALI_img.png
+val/254070_ALI_img.png
+val/254094_ALI_img.png
+val/254097_ALI_img.png
+val/254102_ALI_img.png
+val/254104_ALI_img.png
+val/254106_ALI_img.png
+val/254108_ALI_img.png
+val/254110_ALI_img.png
+val/254112_ALI_img.png
+val/254117_ALI_img.png
+val/254122_ALI_img.png
+val/254124_ALI_img.png
+val/254126_ALI_img.png
+val/254127_ALI_img.png
+val/254129_ALI_img.png
+val/254130_ALI_img.png
+val/254138_ALI_img.png
+val/254141_ALI_img.png
+val/254146_ALI_img.png
+val/254147_ALI_img.png
+val/254148_ALI_img.png
+val/254151_ALI_img.png
+val/254156_ALI_img.png
+val/254157_ALI_img.png
+val/254159_ALI_img.png
+val/254161_ALI_img.png
+val/254172_ALI_img.png
+val/254175_ALI_img.png
+val/254176_ALI_img.png
+val/254189_ALI_img.png
+val/254190_ALI_img.png
+val/254194_ALI_img.png
+val/254195_ALI_img.png
+val/254210_ALI_img.png
+val/254218_ALI_img.png
+val/254226_ALI_img.png
+val/254227_ALI_img.png
+val/254231_ALI_img.png
+val/254236_ALI_img.png
+val/254237_ALI_img.png
+val/254243_ALI_img.png
+val/254248_ALI_img.png
+val/254251_ALI_img.png
+val/254253_ALI_img.png
+val/254259_ALI_img.png
+val/254268_ALI_img.png
+val/254269_ALI_img.png
+val/254273_ALI_img.png
+val/254276_ALI_img.png
+val/254277_ALI_img.png
+val/254278_ALI_img.png
+val/254280_ALI_img.png
+val/254284_ALI_img.png
+val/254292_ALI_img.png
+val/254297_ALI_img.png
+val/254302_ALI_img.png
+val/254304_ALI_img.png
+val/254307_ALI_img.png
+val/254310_ALI_img.png
+val/254313_ALI_img.png
+val/254314_ALI_img.png
+val/254316_ALI_img.png
+val/254318_ALI_img.png
+val/254319_ALI_img.png
+val/254321_ALI_img.png
+val/254324_ALI_img.png
+val/254327_ALI_img.png
+val/254340_ALI_img.png
+val/254341_ALI_img.png
+val/254350_ALI_img.png
+val/254351_ALI_img.png
+val/254354_ALI_img.png
+val/254357_ALI_img.png
+val/254361_ALI_img.png
+val/254364_ALI_img.png
+val/254368_ALI_img.png
+val/254374_ALI_img.png
+val/254388_ALI_img.png
+val/254394_ALI_img.png
+val/254395_ALI_img.png
+val/254402_ALI_img.png
+val/254403_ALI_img.png
+val/254404_ALI_img.png
+val/254405_ALI_img.png
+val/254412_ALI_img.png
+val/254416_ALI_img.png
+val/254417_ALI_img.png
+val/254421_ALI_img.png
+val/254422_ALI_img.png
+val/254424_ALI_img.png
+val/254433_ALI_img.png
+val/254446_ALI_img.png
+val/254449_ALI_img.png
+val/254452_ALI_img.png
+val/254453_ALI_img.png
+val/254456_ALI_img.png
+val/254462_ALI_img.png
+val/254467_ALI_img.png
+val/254468_ALI_img.png
+val/254469_ALI_img.png
+val/254470_ALI_img.png
+val/254472_ALI_img.png
+val/254473_ALI_img.png
+val/254479_ALI_img.png
+val/254480_ALI_img.png
+val/254481_ALI_img.png
+val/254483_ALI_img.png
+val/254484_ALI_img.png
+val/254487_ALI_img.png
+val/254490_ALI_img.png
+val/254491_ALI_img.png
+val/254499_ALI_img.png
+val/254500_ALI_img.png
+val/254502_ALI_img.png
+val/254509_ALI_img.png
+val/254511_ALI_img.png
+val/254518_ALI_img.png
+val/254519_ALI_img.png
+val/254520_ALI_img.png
+val/254524_ALI_img.png
+val/254528_ALI_img.png
+val/254529_ALI_img.png
+val/254530_ALI_img.png
+val/254532_ALI_img.png
+val/254535_ALI_img.png
+val/254539_ALI_img.png
+val/254540_ALI_img.png
+val/254541_ALI_img.png
+val/254542_ALI_img.png
+val/254550_ALI_img.png
+val/254553_ALI_img.png
+val/254561_ALI_img.png
+val/254566_ALI_img.png
+val/254570_ALI_img.png
+val/254574_ALI_img.png
+val/254577_ALI_img.png
+val/254580_ALI_img.png
+val/254584_ALI_img.png
+val/254589_ALI_img.png
+val/254597_ALI_img.png
+val/254608_ALI_img.png
+val/254610_ALI_img.png
+val/254617_ALI_img.png
+val/254621_ALI_img.png
+val/254624_ALI_img.png
+val/254625_ALI_img.png
+val/254626_ALI_img.png
+val/254634_ALI_img.png
+val/254648_ALI_img.png
+val/254653_ALI_img.png
+val/254664_ALI_img.png
+val/254666_ALI_img.png
+val/254667_ALI_img.png
+val/254669_ALI_img.png
+val/254670_ALI_img.png
+val/254673_DT_img.png
+val/254674_ALI_img.png
+val/254677_ALI_img.png
+val/254685_ALI_img.png
+val/254687_ALI_img.png
+val/254688_ALI_img.png
+val/254689_ALI_img.png
+val/254693_ALI_img.png
+val/254696_ALI_img.png
+val/254700_ALI_img.png
+val/254704_ALI_img.png
+val/254707_ALI_img.png
+val/254714_ALI_img.png
+val/254718_ALI_img.png
+val/254724_ALI_img.png
+val/254725_ALI_img.png
+val/254729_ALI_img.png
+val/254731_ALI_img.png
+val/254732_ALI_img.png
+val/254735_ALI_img.png
+val/254737_ALI_img.png
+val/254749_ALI_img.png
+val/254750_ALI_img.png
+val/254751_ALI_img.png
+val/254757_ALI_img.png
+val/254766_ALI_img.png
+val/254768_ALI_img.png
+val/254769_ALI_img.png
+val/254775_ALI_img.png
+val/254776_ALI_img.png
+val/254791_ALI_img.png
+val/254792_ALI_img.png
+val/254799_ALI_img.png
+val/254801_ALI_img.png
+val/254802_ALI_img.png
+val/254806_ALI_img.png
+val/254808_ALI_img.png
+val/254814_ALI_img.png
+val/254815_ALI_img.png
+val/254822_ALI_img.png
+val/254826_ALI_img.png
+val/254833_ALI_img.png
+val/254840_ALI_img.png
+val/254844_ALI_img.png
+val/254864_ALI_img.png
+val/254866_ALI_img.png
+val/254868_ALI_img.png
+val/254872_ALI_img.png
+val/254874_ALI_img.png
+val/254878_ALI_img.png
+val/254882_ALI_img.png
+val/254884_ALI_img.png
+val/254892_ALI_img.png
+val/254898_ALI_img.png
+val/254900_ALI_img.png
+val/254909_ALI_img.png
+val/254911_ALI_img.png
+val/254912_ALI_img.png
+val/254920_ALI_img.png
+val/254921_ALI_img.png
+val/254923_ALI_img.png
+val/254928_ALI_img.png
+val/254932_ALI_img.png
+val/254935_ALI_img.png
+val/254936_ALI_img.png
+val/254938_ALI_img.png
+val/254939_ALI_img.png
+val/254945_ALI_img.png
+val/254948_ALI_img.png
+val/254950_ALI_img.png
+val/254951_ALI_img.png
+val/254955_ALI_img.png
+val/254956_ALI_img.png
+val/254959_ALI_img.png
+val/254960_ALI_img.png
+val/254962_ALI_img.png
+val/254963_ALI_img.png
+val/254964_ALI_img.png
+val/254972_DT_img.png
+val/254979_ALI_img.png
+val/254985_ALI_img.png
+val/254987_ALI_img.png
+val/254990_ALI_img.png
+val/254993_ALI_img.png
+val/254994_ALI_img.png
+val/254996_ALI_img.png
+val/255002_ALI_img.png
+val/255003_ALI_img.png
+val/255004_ALI_img.png
+val/255007_ALI_img.png
+val/255013_ALI_img.png
+val/255016_ALI_img.png
+val/255022_ALI_img.png
+val/255024_DT_img.png
+val/255027_ALI_img.png
+val/255032_ALI_img.png
+val/255033_ALI_img.png
+val/255037_ALI_img.png
+val/255040_ALI_img.png
+val/255044_ALI_img.png
+val/255048_ALI_img.png
+val/255049_ALI_img.png
+val/255054_ALI_img.png
+val/255058_ALI_img.png
+val/255059_ALI_img.png
+val/255068_ALI_img.png
+val/255070_ALI_img.png
+val/255073_ALI_img.png
+val/255076_ALI_img.png
+val/255089_ALI_img.png
+val/255093_ALI_img.png
+val/255095_ALI_img.png
+val/255097_ALI_img.png
+val/255099_ALI_img.png
+val/255105_ALI_img.png
+val/255114_ALI_img.png
+val/255122_ALI_img.png
+val/255123_ALI_img.png
+val/255124_ALI_img.png
+val/255125_ALI_img.png
+val/255130_ALI_img.png
+val/255134_ALI_img.png
+val/255137_ALI_img.png
+val/255143_ALI_img.png
+val/255144_ALI_img.png
+val/255148_ALI_img.png
+val/255150_ALI_img.png
+val/255152_ALI_img.png
+val/255156_ALI_img.png
+val/255157_ALI_img.png
+val/255160_ALI_img.png
+val/255165_ALI_img.png
+val/255171_ALI_img.png
+val/255172_ALI_img.png
+val/255176_ALI_img.png
+val/255179_ALI_img.png
+val/255187_ALI_img.png
+val/255189_ALI_img.png
+val/255196_ALI_img.png
+val/255200_ALI_img.png
+val/255204_ALI_img.png
+val/255206_ALI_img.png
+val/255207_ALI_img.png
+val/255213_ALI_img.png
+val/255214_ALI_img.png
+val/255221_ALI_img.png
+val/255224_ALI_img.png
+val/255229_ALI_img.png
+val/255230_ALI_img.png
+val/255237_ALI_img.png
+val/255239_ALI_img.png
+val/255241_ALI_img.png
+val/255246_ALI_img.png
+val/255247_ALI_img.png
+val/255248_ALI_img.png
+val/255255_ALI_img.png
+val/255261_ALI_img.png
+val/255262_ALI_img.png
+val/255264_ALI_img.png
+val/255267_ALI_img.png
+val/255272_ALI_img.png
+val/255274_ALI_img.png
+val/255275_ALI_img.png
+val/255276_ALI_img.png
+val/255282_ALI_img.png
+val/255287_ALI_img.png
+val/255292_ALI_img.png
+val/255296_ALI_img.png
+val/255299_ALI_img.png
+val/255307_ALI_img.png
+val/255308_ALI_img.png
+val/255313_ALI_img.png
+val/255317_ALI_img.png
+val/255322_ALI_img.png
+val/255325_ALI_img.png
+val/255328_ALI_img.png
+val/255331_ALI_img.png
+val/255340_ALI_img.png
+val/255341_ALI_img.png
+val/255345_ALI_img.png
+val/255350_ALI_img.png
+val/255353_ALI_img.png
+val/255354_ALI_img.png
+val/255359_ALI_img.png
+val/255364_ALI_img.png
+val/255370_ALI_img.png
+val/255371_ALI_img.png
+val/255378_ALI_img.png
+val/255379_ALI_img.png
+val/255382_ALI_img.png
+val/255383_ALI_img.png
+val/255388_ALI_img.png
+val/255396_ALI_img.png
+val/255397_ALI_img.png
+val/255400_ALI_img.png
+val/255402_ALI_img.png
+val/255407_ALI_img.png
+val/255416_ALI_img.png
+val/255418_ALI_img.png
+val/255419_ALI_img.png
+val/255425_ALI_img.png
+val/255428_ALI_img.png
+val/255435_ALI_img.png
+val/255438_ALI_img.png
+val/255441_ALI_img.png
+val/255443_ALI_img.png
+val/255449_ALI_img.png
+val/255450_ALI_img.png
+val/255451_ALI_img.png
+val/255452_ALI_img.png
+val/255454_ALI_img.png
+val/255455_ALI_img.png
+val/255457_ALI_img.png
+val/255465_ALI_img.png
+val/255468_ALI_img.png
+val/255472_ALI_img.png
+val/255478_ALI_img.png
+val/255482_ALI_img.png
+val/255484_ALI_img.png
+val/255487_ALI_img.png
+val/255489_ALI_img.png
+val/255490_ALI_img.png
+val/255495_ALI_img.png
+val/255500_ALI_img.png
+val/255502_ALI_img.png
+val/255503_ALI_img.png
+val/255505_ALI_img.png
+val/255515_ALI_img.png
+val/255516_ALI_img.png
+val/255533_ALI_img.png
+val/255544_ALI_img.png
+val/255552_ALI_img.png
+val/255564_ALI_img.png
+val/255568_ALI_img.png
+val/255570_ALI_img.png
+val/255571_ALI_img.png
+val/255575_ALI_img.png
+val/255582_ALI_img.png
+val/255587_ALI_img.png
+val/255591_ALI_img.png
+val/255598_ALI_img.png
+val/255601_ALI_img.png
+val/255602_ALI_img.png
+val/255610_ALI_img.png
+val/255615_ALI_img.png
+val/255622_ALI_img.png
+val/255635_ALI_img.png
+val/255638_DT_img.png
+val/255640_ALI_img.png
+val/255641_ALI_img.png
+val/255643_ALI_img.png
+val/255644_ALI_img.png
+val/255645_ALI_img.png
+val/255652_ALI_img.png
+val/255654_ALI_img.png
+val/255658_ALI_img.png
+val/255659_ALI_img.png
+val/255664_ALI_img.png
+val/255665_ALI_img.png
+val/255676_ALI_img.png
+val/255683_ALI_img.png
+val/255686_ALI_img.png
+val/255687_ALI_img.png
+val/255692_ALI_img.png
+val/255697_ALI_img.png
+val/255703_ALI_img.png
+val/255716_ALI_img.png
+val/255718_ALI_img.png
+val/255732_ALI_img.png
+val/255738_ALI_img.png
+val/255739_ALI_img.png
+val/255746_ALI_img.png
+val/255756_ALI_img.png
+val/255764_ALI_img.png
+val/255766_ALI_img.png
+val/255767_ALI_img.png
+val/255768_ALI_img.png
+val/255781_ALI_img.png
+val/255786_ALI_img.png
+val/255787_ALI_img.png
+val/255796_ALI_img.png
+val/255798_ALI_img.png
+val/255801_ALI_img.png
+val/255803_ALI_img.png
+val/255806_ALI_img.png
+val/255812_ALI_img.png
+val/255817_ALI_img.png
+val/255818_ALI_img.png
+val/255827_ALI_img.png
+val/255830_ALI_img.png
+val/255833_ALI_img.png
+val/255834_ALI_img.png
+val/255838_ALI_img.png
+val/255840_ALI_img.png
+val/255851_ALI_img.png
+val/255854_ALI_img.png
+val/255855_ALI_img.png
+val/255859_ALI_img.png
+val/255863_ALI_img.png
+val/255879_ALI_img.png
+val/255880_ALI_img.png
+val/255884_ALI_img.png
+val/255893_ALI_img.png
+val/255896_ALI_img.png
+val/255904_ALI_img.png
+val/255906_ALI_img.png
+val/255909_ALI_img.png
+val/255912_ALI_img.png
+val/255915_ALI_img.png
+val/255922_ALI_img.png
+val/255933_ALI_img.png
+val/255944_ALI_img.png
+val/255946_ALI_img.png
+val/255950_ALI_img.png
+val/255951_ALI_img.png
+val/255952_ALI_img.png
+val/255953_ALI_img.png
+val/255957_ALI_img.png
+val/255959_ALI_img.png
+val/255962_ALI_img.png
+val/255967_ALI_img.png
+val/255971_ALI_img.png
+val/255974_ALI_img.png
+val/255977_ALI_img.png
+val/255980_ALI_img.png
+val/255982_ALI_img.png
+val/255984_ALI_img.png
+val/255988_ALI_img.png
+val/255989_ALI_img.png
+val/255990_ALI_img.png
+val/255993_ALI_img.png
+val/255994_ALI_img.png
+val/256000_ALI_img.png
+val/256004_ALI_img.png
+val/256005_ALI_img.png
+val/256006_ALI_img.png
+val/256008_ALI_img.png
+val/256010_ALI_img.png
+val/256022_ALI_img.png
+val/256024_ALI_img.png
+val/256027_ALI_img.png
+val/256028_ALI_img.png
+val/256030_ALI_img.png
+val/256031_ALI_img.png
+val/256043_ALI_img.png
+val/256046_ALI_img.png
+val/256055_ALI_img.png
+val/256063_ALI_img.png
+val/256064_ALI_img.png
+val/256065_ALI_img.png
+val/256069_ALI_img.png
+val/256074_ALI_img.png
+val/256075_ALI_img.png
+val/256080_ALI_img.png
+val/256081_ALI_img.png
+val/256086_ALI_img.png
+val/256095_ALI_img.png
+val/256113_ALI_img.png
+val/256119_ALI_img.png
+val/256121_ALI_img.png
+val/256124_DT_img.png
+val/256134_ALI_img.png
+val/256135_ALI_img.png
+val/256144_ALI_img.png
+val/256157_ALI_img.png
+val/256161_ALI_img.png
+val/256162_ALI_img.png
+val/256163_ALI_img.png
+val/256171_ALI_img.png
+val/256178_ALI_img.png
+val/256183_ALI_img.png
+val/256186_ALI_img.png
+val/256188_ALI_img.png
+val/256193_ALI_img.png
+val/256198_ALI_img.png
+val/256201_ALI_img.png
+val/256210_ALI_img.png
+val/256214_ALI_img.png
+val/256217_ALI_img.png
+val/256218_ALI_img.png
+val/256222_ALI_img.png
+val/256224_ALI_img.png
+val/256225_ALI_img.png
+val/256227_ALI_img.png
+val/256238_ALI_img.png
+val/256245_ALI_img.png
+val/256248_ALI_img.png
+val/256253_ALI_img.png
+val/256255_ALI_img.png
+val/256260_ALI_img.png
+val/256263_ALI_img.png
+val/256266_ALI_img.png
+val/256267_ALI_img.png
+val/256270_ALI_img.png
+val/256275_ALI_img.png
+val/256277_ALI_img.png
+val/256278_ALI_img.png
+val/256286_ALI_img.png
+val/256289_ALI_img.png
+val/256290_ALI_img.png
+val/256301_ALI_img.png
+val/256315_ALI_img.png
+val/256316_ALI_img.png
+val/256322_ALI_img.png
+val/256324_ALI_img.png
+val/256325_ALI_img.png
+val/256326_ALI_img.png
+val/256336_ALI_img.png
+val/256340_ALI_img.png
+val/256342_ALI_img.png
+val/256344_ALI_img.png
+val/256346_ALI_img.png
+val/256347_ALI_img.png
+val/256351_ALI_img.png
+val/256357_ALI_img.png
+val/256359_ALI_img.png
+val/256375_ALI_img.png
+val/256377_ALI_img.png
+val/256379_ALI_img.png
+val/256381_ALI_img.png
+val/256386_ALI_img.png
+val/256387_ALI_img.png
+val/256398_ALI_img.png
+val/256404_ALI_img.png
+val/256411_ALI_img.png
+val/256420_ALI_img.png
+val/256421_ALI_img.png
+val/256424_ALI_img.png
+val/256426_ALI_img.png
+val/256428_ALI_img.png
+val/256430_ALI_img.png
+val/256432_ALI_img.png
+val/256433_ALI_img.png
+val/256440_ALI_img.png
+val/256442_ALI_img.png
+val/256446_ALI_img.png
+val/256447_ALI_img.png
+val/256450_ALI_img.png
+val/256455_ALI_img.png
+val/256456_ALI_img.png
+val/256460_ALI_img.png
+val/256463_ALI_img.png
+val/256476_ALI_img.png
+val/256487_ALI_img.png
+val/256492_ALI_img.png
+val/256496_ALI_img.png
+val/256502_ALI_img.png
+val/256503_ALI_img.png
+val/256507_ALI_img.png
+val/256511_ALI_img.png
+val/256520_ALI_img.png
+val/256521_ALI_img.png
+val/256528_ALI_img.png
+val/256529_ALI_img.png
+val/256531_DT_img.png
+val/256532_ALI_img.png
+val/256533_ALI_img.png
+val/256538_ALI_img.png
+val/256541_ALI_img.png
+val/256546_ALI_img.png
+val/256547_ALI_img.png
+val/256548_ALI_img.png
+val/256555_ALI_img.png
+val/256559_ALI_img.png
+val/256560_ALI_img.png
+val/256561_ALI_img.png
+val/256563_ALI_img.png
+val/256567_ALI_img.png
+val/256571_ALI_img.png
+val/256572_ALI_img.png
+val/256578_ALI_img.png
+val/256585_ALI_img.png
+val/256588_ALI_img.png
+val/256589_ALI_img.png
+val/256590_ALI_img.png
+val/256593_ALI_img.png
+val/256595_ALI_img.png
+val/256600_ALI_img.png
+val/256601_ALI_img.png
+val/256604_ALI_img.png
+val/256605_ALI_img.png
+val/256609_ALI_img.png
+val/256610_ALI_img.png
+val/256611_ALI_img.png
+val/256614_ALI_img.png
+val/256618_ALI_img.png
+val/256619_ALI_img.png
+val/256621_ALI_img.png
+val/256630_ALI_img.png
+val/256638_ALI_img.png
+val/256639_ALI_img.png
+val/256641_ALI_img.png
+val/256642_ALI_img.png
+val/256645_ALI_img.png
+val/256647_ALI_img.png
+val/256650_ALI_img.png
+val/256660_ALI_img.png
+val/256661_ALI_img.png
+val/256663_ALI_img.png
+val/256664_ALI_img.png
+val/256665_ALI_img.png
+val/256678_ALI_img.png
+val/256690_ALI_img.png
+val/256696_ALI_img.png
+val/256698_ALI_img.png
+val/256703_ALI_img.png
+val/256707_ALI_img.png
+val/256721_ALI_img.png
+val/256724_ALI_img.png
+val/256726_ALI_img.png
+val/256731_ALI_img.png
+val/256732_ALI_img.png
+val/256733_ALI_img.png
+val/256736_ALI_img.png
+val/256740_ALI_img.png
+val/256748_ALI_img.png
+val/256755_ALI_img.png
+val/256765_ALI_img.png
+val/256767_ALI_img.png
+val/256769_ALI_img.png
+val/256770_ALI_img.png
+val/256771_ALI_img.png
+val/256772_ALI_img.png
+val/256774_ALI_img.png
+val/256785_ALI_img.png
+val/256787_DT_img.png
+val/256807_ALI_img.png
+val/256815_ALI_img.png
+val/256819_ALI_img.png
+val/256822_ALI_img.png
+val/256824_ALI_img.png
+val/256827_ALI_img.png
+val/256830_ALI_img.png
+val/256835_ALI_img.png
+val/256836_ALI_img.png
+val/256843_ALI_img.png
+val/256847_ALI_img.png
+val/256848_ALI_img.png
+val/256851_ALI_img.png
+val/256856_ALI_img.png
+val/256862_ALI_img.png
+val/256866_ALI_img.png
+val/256875_ALI_img.png
+val/256887_ALI_img.png
+val/256893_ALI_img.png
+val/256895_ALI_img.png
+val/256896_ALI_img.png
+val/256900_ALI_img.png
+val/256901_ALI_img.png
+val/256904_ALI_img.png
+val/256910_ALI_img.png
+val/256912_ALI_img.png
+val/256913_ALI_img.png
+val/256915_ALI_img.png
+val/256919_ALI_img.png
+val/256930_ALI_img.png
+val/256931_ALI_img.png
+val/256932_ALI_img.png
+val/256937_ALI_img.png
+val/256939_ALI_img.png
+val/256942_ALI_img.png
+val/256945_ALI_img.png
+val/256951_ALI_img.png
+val/256954_ALI_img.png
+val/256962_ALI_img.png
+val/256965_ALI_img.png
+val/256968_ALI_img.png
+val/256970_ALI_img.png
+val/256973_ALI_img.png
+val/256974_ALI_img.png
+val/256982_ALI_img.png
+val/256986_ALI_img.png
+val/256989_ALI_img.png
+val/256991_ALI_img.png
+val/256992_ALI_img.png
+val/256993_ALI_img.png
+val/256995_ALI_img.png
+val/257002_ALI_img.png
+val/257006_ALI_img.png
+val/257010_ALI_img.png
+val/257011_ALI_img.png
+val/257019_ALI_img.png
+val/257024_ALI_img.png
+val/257033_ALI_img.png
+val/257034_ALI_img.png
+val/257036_ALI_img.png
+val/257038_ALI_img.png
+val/257044_ALI_img.png
+val/257046_ALI_img.png
+val/257047_ALI_img.png
+val/257053_ALI_img.png
+val/257054_ALI_img.png
+val/257061_ALI_img.png
+val/257068_ALI_img.png
+val/257071_ALI_img.png
+val/257072_ALI_img.png
+val/257075_ALI_img.png
+val/257077_ALI_img.png
+val/257079_ALI_img.png
+val/257087_ALI_img.png
+val/257091_ALI_img.png
+val/257092_ALI_img.png
+val/257096_ALI_img.png
+val/257098_ALI_img.png
+val/257103_ALI_img.png
+val/257107_ALI_img.png
+val/257110_ALI_img.png
+val/257117_ALI_img.png
+val/257122_ALI_img.png
+val/257125_ALI_img.png
+val/257126_ALI_img.png
+val/257128_ALI_img.png
+val/257130_ALI_img.png
+val/257133_ALI_img.png
+val/257136_ALI_img.png
+val/257137_ALI_img.png
+val/257138_ALI_img.png
+val/257139_ALI_img.png
+val/257156_ALI_img.png
+val/257160_ALI_img.png
+val/257173_ALI_img.png
+val/257174_ALI_img.png
+val/257175_ALI_img.png
+val/257177_ALI_img.png
+val/257180_ALI_img.png
+val/257181_ALI_img.png
+val/257183_ALI_img.png
+val/257186_ALI_img.png
+val/257190_ALI_img.png
+val/257191_ALI_img.png
+val/257194_ALI_img.png
+val/257198_ALI_img.png
+val/257199_ALI_img.png
+val/257202_ALI_img.png
+val/257206_ALI_img.png
+val/257209_ALI_img.png
+val/257214_ALI_img.png
+val/257218_ALI_img.png
+val/257221_ALI_img.png
+val/257226_ALI_img.png
+val/257230_ALI_img.png
+val/257233_ALI_img.png
+val/257237_ALI_img.png
+val/257238_ALI_img.png
+val/257239_ALI_img.png
+val/257241_ALI_img.png
+val/257249_ALI_img.png
+val/257256_ALI_img.png
+val/257262_ALI_img.png
+val/257264_ALI_img.png
+val/257270_ALI_img.png
+val/257271_ALI_img.png
+val/257278_ALI_img.png
+val/257280_ALI_img.png
+val/257285_ALI_img.png
+val/257289_ALI_img.png
+val/257292_ALI_img.png
+val/257299_ALI_img.png
+val/257310_ALI_img.png
+val/257316_ALI_img.png
+val/257317_ALI_img.png
+val/257322_ALI_img.png
+val/257323_ALI_img.png
+val/257326_ALI_img.png
+val/257327_ALI_img.png
+val/257330_ALI_img.png
+val/257335_ALI_img.png
+val/257337_ALI_img.png
+val/257353_ALI_img.png
+val/257358_ALI_img.png
+val/257360_ALI_img.png
+val/257361_ALI_img.png
+val/257369_ALI_img.png
+val/257370_ALI_img.png
+val/257371_ALI_img.png
+val/257376_ALI_img.png
+val/257383_ALI_img.png
+val/257384_ALI_img.png
+val/257386_ALI_img.png
+val/257390_ALI_img.png
+val/257392_ALI_img.png
+val/257397_ALI_img.png
+val/257398_ALI_img.png
+val/257399_ALI_img.png
+val/257401_ALI_img.png
+val/257405_ALI_img.png
+val/257411_ALI_img.png
+val/257413_ALI_img.png
+val/257416_ALI_img.png
+val/257419_ALI_img.png
+val/257421_ALI_img.png
+val/257423_ALI_img.png
+val/257424_ALI_img.png
+val/257425_ALI_img.png
+val/257430_ALI_img.png
+val/257433_ALI_img.png
+val/257435_ALI_img.png
+val/257436_ALI_img.png
+val/257439_ALI_img.png
+val/257448_ALI_img.png
+val/257459_ALI_img.png
+val/257461_ALI_img.png
+val/257468_ALI_img.png
+val/257471_ALI_img.png
+val/257473_ALI_img.png
+val/257475_ALI_img.png
+val/257485_ALI_img.png
+val/257488_ALI_img.png
+val/257489_ALI_img.png
+val/257490_ALI_img.png
+val/257494_ALI_img.png
+val/257496_ALI_img.png
+val/257499_ALI_img.png
+val/257535_ALI_img.png
+val/257544_ALI_img.png
+val/257548_ALI_img.png
+val/257553_ALI_img.png
+val/257555_ALI_img.png
+val/257556_ALI_img.png
+val/257561_ALI_img.png
+val/257568_ALI_img.png
+val/257569_ALI_img.png
+val/257573_ALI_img.png
+val/257580_ALI_img.png
+val/257585_ALI_img.png
+val/257586_ALI_img.png
+val/257587_ALI_img.png
+val/257589_ALI_img.png
+val/257600_ALI_img.png
+val/257602_ALI_img.png
+val/257607_ALI_img.png
+val/257608_ALI_img.png
+val/257611_ALI_img.png
+val/257616_ALI_img.png
+val/257624_ALI_img.png
+val/257629_ALI_img.png
+val/257636_ALI_img.png
+val/257640_ALI_img.png
+val/257642_ALI_img.png
+val/257645_ALI_img.png
+val/257651_ALI_img.png
+val/257654_ALI_img.png
+val/257655_ALI_img.png
+val/257656_ALI_img.png
+val/257663_ALI_img.png
+val/257664_ALI_img.png
+val/257665_ALI_img.png
+val/257670_ALI_img.png
+val/257680_ALI_img.png
+val/257685_ALI_img.png
+val/257695_ALI_img.png
+val/257702_ALI_img.png
+val/257703_ALI_img.png
+val/257704_ALI_img.png
+val/257712_ALI_img.png
+val/257713_ALI_img.png
+val/257716_ALI_img.png
+val/257719_ALI_img.png
+val/257722_ALI_img.png
+val/257723_ALI_img.png
+val/257725_ALI_img.png
+val/257741_ALI_img.png
+val/257746_ALI_img.png
+val/257747_ALI_img.png
+val/257761_ALI_img.png
+val/257764_ALI_img.png
+val/257765_ALI_img.png
+val/257768_ALI_img.png
+val/257773_ALI_img.png
+val/257776_ALI_img.png
+val/257778_ALI_img.png
+val/257779_ALI_img.png
+val/257781_ALI_img.png
+val/257785_ALI_img.png
+val/257787_ALI_img.png
+val/257789_ALI_img.png
+val/257792_ALI_img.png
+val/257797_ALI_img.png
+val/257807_ALI_img.png
+val/257811_ALI_img.png
+val/257813_ALI_img.png
+val/257814_ALI_img.png
+val/257816_ALI_img.png
+val/257817_ALI_img.png
+val/257818_ALI_img.png
+val/257820_ALI_img.png
+val/257823_ALI_img.png
+val/257824_ALI_img.png
+val/257828_ALI_img.png
+val/257829_ALI_img.png
+val/257830_ALI_img.png
+val/257832_ALI_img.png
+val/257840_ALI_img.png
+val/257841_ALI_img.png
+val/257846_ALI_img.png
+val/257850_ALI_img.png
+val/257858_ALI_img.png
+val/257862_ALI_img.png
+val/257864_ALI_img.png
+val/257866_ALI_img.png
+val/257869_ALI_img.png
+val/257870_ALI_img.png
+val/257880_ALI_img.png
+val/257883_ALI_img.png
+val/257886_ALI_img.png
+val/257887_ALI_img.png
+val/257893_ALI_img.png
+val/257896_ALI_img.png
+val/257899_ALI_img.png
+val/257901_ALI_img.png
+val/257904_ALI_img.png
+val/257910_ALI_img.png
+val/257914_ALI_img.png
+val/257915_ALI_img.png
+val/257917_ALI_img.png
+val/257928_ALI_img.png
+val/257933_ALI_img.png
+val/257945_ALI_img.png
+val/257950_ALI_img.png
+val/257954_ALI_img.png
+val/257955_ALI_img.png
+val/257956_ALI_img.png
+val/257957_ALI_img.png
+val/257961_ALI_img.png
+val/257963_ALI_img.png
+val/257967_ALI_img.png
+val/257977_ALI_img.png
+val/257984_ALI_img.png
+val/257985_ALI_img.png
+val/257986_ALI_img.png
+val/257990_ALI_img.png
+val/257993_ALI_img.png
+val/257998_ALI_img.png
+val/258000_ALI_img.png
+val/258006_ALI_img.png
+val/258010_ALI_img.png
+val/258014_ALI_img.png
+val/258019_ALI_img.png
+val/258027_ALI_img.png
+val/258030_ALI_img.png
+val/258033_ALI_img.png
+val/258036_ALI_img.png
+val/258038_ALI_img.png
+val/258049_ALI_img.png
+val/258056_ALI_img.png
+val/258057_ALI_img.png
+val/258062_ALI_img.png
+val/258066_ALI_img.png
+val/258067_ALI_img.png
+val/258068_ALI_img.png
+val/258071_ALI_img.png
+val/258076_ALI_img.png
+val/258080_ALI_img.png
+val/258081_ALI_img.png
+val/258085_ALI_img.png
+val/258089_ALI_img.png
+val/258098_ALI_img.png
+val/258100_ALI_img.png
+val/258101_ALI_img.png
+val/258104_ALI_img.png
+val/258106_ALI_img.png
+val/258111_ALI_img.png
+val/258112_ALI_img.png
+val/258115_ALI_img.png
+val/258116_ALI_img.png
+val/258129_ALI_img.png
+val/258136_ALI_img.png
+val/258137_ALI_img.png
+val/258138_ALI_img.png
+val/258139_ALI_img.png
+val/258142_ALI_img.png
+val/258148_ALI_img.png
+val/258150_ALI_img.png
+val/258151_ALI_img.png
+val/258153_ALI_img.png
+val/258155_ALI_img.png
+val/258156_ALI_img.png
+val/258157_ALI_img.png
+val/258158_ALI_img.png
+val/258159_ALI_img.png
+val/258168_ALI_img.png
+val/258170_ALI_img.png
+val/258178_ALI_img.png
+val/258187_ALI_img.png
+val/258192_ALI_img.png
+val/258199_ALI_img.png
+val/258202_ALI_img.png
+val/258206_ALI_img.png
+val/258208_ALI_img.png
+val/258210_ALI_img.png
+val/258213_ALI_img.png
+val/258214_ALI_img.png
+val/258226_ALI_img.png
+val/258230_ALI_img.png
+val/258233_ALI_img.png
+val/258234_ALI_img.png
+val/258237_ALI_img.png
+val/258243_ALI_img.png
+val/258245_ALI_img.png
+val/258247_ALI_img.png
+val/258251_ALI_img.png
+val/258253_ALI_img.png
+val/258255_ALI_img.png
+val/258260_ALI_img.png
+val/258261_ALI_img.png
+val/258263_ALI_img.png
+val/258272_ALI_img.png
+val/258277_ALI_img.png
+val/258281_ALI_img.png
+val/258282_ALI_img.png
+val/258287_ALI_img.png
+val/258290_ALI_img.png
+val/258291_ALI_img.png
+val/258303_ALI_img.png
+val/258307_ALI_img.png
+val/258308_ALI_img.png
+val/258320_ALI_img.png
+val/258321_ALI_img.png
+val/258323_ALI_img.png
+val/258330_ALI_img.png
+val/258339_ALI_img.png
+val/258346_ALI_img.png
+val/258347_ALI_img.png
+val/258348_ALI_img.png
+val/258349_ALI_img.png
+val/258350_ALI_img.png
+val/258363_ALI_img.png
+val/258366_ALI_img.png
+val/258371_ALI_img.png
+val/258375_ALI_img.png
+val/258376_ALI_img.png
+val/258380_ALI_img.png
+val/258386_ALI_img.png
+val/258387_ALI_img.png
+val/258392_ALI_img.png
+val/258395_ALI_img.png
+val/258398_ALI_img.png
+val/258402_ALI_img.png
+val/258404_ALI_img.png
+val/258410_ALI_img.png
+val/258417_ALI_img.png
+val/258420_ALI_img.png
+val/258424_ALI_img.png
+val/258426_ALI_img.png
+val/258437_ALI_img.png
+val/258438_ALI_img.png
+val/258440_ALI_img.png
+val/258445_ALI_img.png
+val/258447_ALI_img.png
+val/258453_ALI_img.png
+val/258454_ALI_img.png
+val/258457_ALI_img.png
+val/258465_ALI_img.png
+val/258466_ALI_img.png
+val/258474_ALI_img.png
+val/258475_ALI_img.png
+val/258476_ALI_img.png
+val/258484_ALI_img.png
+val/258488_ALI_img.png
+val/258490_ALI_img.png
+val/258493_ALI_img.png
+val/258495_ALI_img.png
+val/258501_ALI_img.png
+val/258506_ALI_img.png
+val/258507_ALI_img.png
+val/258508_ALI_img.png
+val/258513_ALI_img.png
+val/258519_ALI_img.png
+val/258521_ALI_img.png
+val/258522_ALI_img.png
+val/258527_ALI_img.png
+val/258533_ALI_img.png
+val/258536_ALI_img.png
+val/258537_ALI_img.png
+val/258548_ALI_img.png
+val/258554_ALI_img.png
+val/258555_ALI_img.png
+val/258560_ALI_img.png
+val/258569_ALI_img.png
+val/258577_ALI_img.png
+val/258581_ALI_img.png
+val/258583_ALI_img.png
+val/258593_ALI_img.png
+val/258609_ALI_img.png
+val/258610_ALI_img.png
+val/258613_ALI_img.png
+val/258622_ALI_img.png
+val/258634_ALI_img.png
+val/258641_ALI_img.png
+val/258647_ALI_img.png
+val/258656_ALI_img.png
+val/258657_ALI_img.png
+val/258659_ALI_img.png
+val/258663_ALI_img.png
+val/258666_ALI_img.png
+val/258668_ALI_img.png
+val/258669_ALI_img.png
+val/258673_ALI_img.png
+val/258678_ALI_img.png
+val/258680_ALI_img.png
+val/258682_ALI_img.png
+val/258684_ALI_img.png
+val/258690_ALI_img.png
+val/258696_ALI_img.png
+val/258701_ALI_img.png
+val/258702_ALI_img.png
+val/258703_ALI_img.png
+val/258704_ALI_img.png
+val/258711_ALI_img.png
+val/258714_ALI_img.png
+val/258716_ALI_img.png
+val/258720_ALI_img.png
+val/258732_ALI_img.png
+val/258733_ALI_img.png
+val/258739_ALI_img.png
+val/258746_ALI_img.png
+val/258751_ALI_img.png
+val/258752_ALI_img.png
+val/258760_ALI_img.png
+val/258767_ALI_img.png
+val/258769_ALI_img.png
+val/258775_ALI_img.png
+val/258786_ALI_img.png
+val/258787_ALI_img.png
+val/258790_ALI_img.png
+val/258792_ALI_img.png
+val/258795_ALI_img.png
+val/258800_ALI_img.png
+val/258801_ALI_img.png
+val/258802_ALI_img.png
+val/258805_ALI_img.png
+val/258809_ALI_img.png
+val/258811_ALI_img.png
+val/258812_ALI_img.png
+val/258815_ALI_img.png
+val/258828_ALI_img.png
+val/258831_ALI_img.png
+val/258832_ALI_img.png
+val/258839_ALI_img.png
+val/258848_ALI_img.png
+val/258849_ALI_img.png
+val/258850_ALI_img.png
+val/258851_ALI_img.png
+val/258853_ALI_img.png
+val/258854_ALI_img.png
+val/258857_ALI_img.png
+val/258859_ALI_img.png
+val/258861_ALI_img.png
+val/258872_ALI_img.png
+val/258878_ALI_img.png
+val/258884_ALI_img.png
+val/258886_ALI_img.png
+val/258887_ALI_img.png
+val/258897_ALI_img.png
+val/258901_ALI_img.png
+val/258906_ALI_img.png
+val/258913_ALI_img.png
+val/258916_ALI_img.png
+val/258930_ALI_img.png
+val/258933_ALI_img.png
+val/258934_ALI_img.png
+val/258935_ALI_img.png
+val/258941_ALI_img.png
+val/258942_ALI_img.png
+val/258947_ALI_img.png
+val/258953_ALI_img.png
+val/258958_ALI_img.png
+val/258962_ALI_img.png
+val/258964_ALI_img.png
+val/258969_ALI_img.png
+val/258973_ALI_img.png
+val/258975_ALI_img.png
+val/258978_ALI_img.png
+val/258980_ALI_img.png
+val/258981_ALI_img.png
+val/258982_ALI_img.png
+val/258984_ALI_img.png
+val/258992_ALI_img.png
+val/258997_ALI_img.png
+val/259000_ALI_img.png
+val/259002_ALI_img.png
+val/259005_ALI_img.png
+val/259006_ALI_img.png
+val/259009_ALI_img.png
+val/259014_ALI_img.png
+val/259015_ALI_img.png
+val/259020_ALI_img.png
+val/259023_ALI_img.png
+val/259025_ALI_img.png
+val/259036_ALI_img.png
+val/259038_ALI_img.png
+val/259040_ALI_img.png
+val/259046_ALI_img.png
+val/259053_ALI_img.png
+val/259055_ALI_img.png
+val/259067_ALI_img.png
+val/259068_ALI_img.png
+val/259075_ALI_img.png
+val/259078_ALI_img.png
+val/259081_ALI_img.png
+val/259086_ALI_img.png
+val/259092_ALI_img.png
+val/259095_ALI_img.png
+val/259097_ALI_img.png
+val/259101_ALI_img.png
+val/259102_ALI_img.png
+val/259111_ALI_img.png
+val/259112_ALI_img.png
+val/259113_ALI_img.png
+val/259124_DT_img.png
+val/259127_ALI_img.png
+val/259128_ALI_img.png
+val/259129_ALI_img.png
+val/259133_ALI_img.png
+val/259134_ALI_img.png
+val/259149_ALI_img.png
+val/259159_ALI_img.png
+val/259160_ALI_img.png
+val/259166_ALI_img.png
+val/259168_ALI_img.png
+val/259169_ALI_img.png
+val/259173_ALI_img.png
+val/259174_ALI_img.png
+val/259175_ALI_img.png
+val/259177_ALI_img.png
+val/259178_ALI_img.png
+val/259183_ALI_img.png
+val/259185_ALI_img.png
+val/259186_ALI_img.png
+val/259190_ALI_img.png
+val/259194_ALI_img.png
+val/259197_ALI_img.png
+val/259201_ALI_img.png
+val/259204_ALI_img.png
+val/259210_ALI_img.png
+val/259212_ALI_img.png
+val/259220_ALI_img.png
+val/259222_ALI_img.png
+val/259225_ALI_img.png
+val/259230_ALI_img.png
+val/259231_ALI_img.png
+val/259239_ALI_img.png
+val/259240_ALI_img.png
+val/259241_ALI_img.png
+val/259243_ALI_img.png
+val/259250_ALI_img.png
+val/259263_ALI_img.png
+val/259268_ALI_img.png
+val/259271_ALI_img.png
+val/259276_ALI_img.png
+val/259277_ALI_img.png
+val/259282_ALI_img.png
+val/259292_ALI_img.png
+val/259294_ALI_img.png
+val/259297_ALI_img.png
+val/259298_ALI_img.png
+val/259299_ALI_img.png
+val/259300_ALI_img.png
+val/259301_ALI_img.png
+val/259305_ALI_img.png
+val/259309_ALI_img.png
+val/259312_ALI_img.png
+val/259313_ALI_img.png
+val/259315_ALI_img.png
+val/259318_ALI_img.png
+val/259324_ALI_img.png
+val/259328_ALI_img.png
+val/259332_ALI_img.png
+val/259335_ALI_img.png
+val/259346_ALI_img.png
+val/259351_ALI_img.png
+val/259352_ALI_img.png
+val/259354_ALI_img.png
+val/259355_ALI_img.png
+val/259357_ALI_img.png
+val/259361_ALI_img.png
+val/259364_ALI_img.png
+val/259367_ALI_img.png
+val/259371_ALI_img.png
+val/259372_ALI_img.png
+val/259377_ALI_img.png
+val/259379_ALI_img.png
+val/259383_ALI_img.png
+val/259384_ALI_img.png
+val/259388_ALI_img.png
+val/259392_ALI_img.png
+val/259393_ALI_img.png
+val/259394_ALI_img.png
+val/259396_ALI_img.png
+val/259397_ALI_img.png
+val/259400_ALI_img.png
+val/259401_ALI_img.png
+val/259405_ALI_img.png
+val/259411_ALI_img.png
+val/259413_ALI_img.png
+val/259414_ALI_img.png
+val/259417_ALI_img.png
+val/259419_ALI_img.png
+val/259429_ALI_img.png
+val/259436_ALI_img.png
+val/259438_ALI_img.png
+val/259440_ALI_img.png
+val/259442_ALI_img.png
+val/259444_ALI_img.png
+val/259446_ALI_img.png
+val/259450_ALI_img.png
+val/259452_ALI_img.png
+val/259453_ALI_img.png
+val/259455_ALI_img.png
+val/259456_ALI_img.png
+val/259468_ALI_img.png
+val/259471_ALI_img.png
+val/259475_ALI_img.png
+val/259477_ALI_img.png
+val/259478_ALI_img.png
+val/259482_ALI_img.png
+val/259483_ALI_img.png
+val/259486_ALI_img.png
+val/259487_ALI_img.png
+val/259488_ALI_img.png
+val/259489_ALI_img.png
+val/259492_DT_img.png
+val/259496_ALI_img.png
+val/259500_ALI_img.png
+val/259501_ALI_img.png
+val/259504_ALI_img.png
+val/259508_ALI_img.png
+val/259509_ALI_img.png
+val/259511_ALI_img.png
+val/259513_ALI_img.png
+val/259514_ALI_img.png
+val/259517_ALI_img.png
+val/259523_ALI_img.png
+val/259528_ALI_img.png
+val/259532_ALI_img.png
+val/259535_ALI_img.png
+val/259537_ALI_img.png
+val/259558_ALI_img.png
+val/259567_ALI_img.png
+val/259570_ALI_img.png
+val/259571_ALI_img.png
+val/259574_ALI_img.png
+val/259575_ALI_img.png
+val/259578_ALI_img.png
+val/259581_ALI_img.png
+val/259582_ALI_img.png
+val/259588_ALI_img.png
+val/259592_ALI_img.png
+val/259593_ALI_img.png
+val/259594_ALI_img.png
+val/259597_ALI_img.png
+val/259602_ALI_img.png
+val/259610_ALI_img.png
+val/259612_ALI_img.png
+val/259616_ALI_img.png
+val/259617_ALI_img.png
+val/259619_ALI_img.png
+val/259621_ALI_img.png
+val/259623_ALI_img.png
+val/259630_ALI_img.png
+val/259640_ALI_img.png
+val/259644_ALI_img.png
+val/259650_ALI_img.png
+val/259658_ALI_img.png
+val/259669_ALI_img.png
+val/259674_ALI_img.png
+val/259681_ALI_img.png
+val/259690_ALI_img.png
+val/259693_ALI_img.png
+val/259695_ALI_img.png
+val/259697_ALI_img.png
+val/259701_ALI_img.png
+val/259703_ALI_img.png
+val/259704_ALI_img.png
+val/259705_ALI_img.png
+val/259712_ALI_img.png
+val/259718_ALI_img.png
+val/259721_ALI_img.png
+val/259727_ALI_img.png
+val/259733_ALI_img.png
+val/259735_ALI_img.png
+val/259736_ALI_img.png
+val/259738_ALI_img.png
+val/259740_ALI_img.png
+val/259743_ALI_img.png
+val/259750_ALI_img.png
+val/259757_ALI_img.png
+val/259761_ALI_img.png
+val/259765_ALI_img.png
+val/259777_ALI_img.png
+val/259778_ALI_img.png
+val/259785_ALI_img.png
+val/259789_ALI_img.png
+val/259796_ALI_img.png
+val/259800_ALI_img.png
+val/259810_ALI_img.png
+val/259818_ALI_img.png
+val/259821_ALI_img.png
+val/259825_ALI_img.png
+val/259826_ALI_img.png
+val/259831_ALI_img.png
+val/259840_ALI_img.png
+val/259852_ALI_img.png
+val/259858_ALI_img.png
+val/259861_ALI_img.png
+val/259864_ALI_img.png
+val/259873_ALI_img.png
+val/259883_ALI_img.png
+val/259895_ALI_img.png
+val/259903_ALI_img.png
+val/259904_ALI_img.png
+val/259917_ALI_img.png
+val/259919_ALI_img.png
+val/259922_ALI_img.png
+val/259925_ALI_img.png
+val/259926_ALI_img.png
+val/259929_ALI_img.png
+val/259932_ALI_img.png
+val/259933_ALI_img.png
+val/259937_ALI_img.png
+val/259948_ALI_img.png
+val/259952_ALI_img.png
+val/259960_ALI_img.png
+val/259961_ALI_img.png
+val/259963_ALI_img.png
+val/259964_ALI_img.png
+val/259967_ALI_img.png
+val/259973_ALI_img.png
+val/259975_ALI_img.png
+val/259976_ALI_img.png
+val/259978_ALI_img.png
+val/259981_ALI_img.png
+val/259982_ALI_img.png
+val/259987_ALI_img.png
+val/259990_ALI_img.png
+val/259991_ALI_img.png
+val/260000_ALI_img.png
+val/260004_ALI_img.png
+val/260007_ALI_img.png
+val/260024_ALI_img.png
+val/260025_ALI_img.png
+val/260026_ALI_img.png
+val/260028_ALI_img.png
+val/260029_ALI_img.png
+val/260033_ALI_img.png
+val/260038_ALI_img.png
+val/260040_ALI_img.png
+val/260045_ALI_img.png
+val/260046_ALI_img.png
+val/260051_ALI_img.png
+val/260052_ALI_img.png
+val/260058_ALI_img.png
+val/260059_ALI_img.png
+val/260072_ALI_img.png
+val/260074_ALI_img.png
+val/260080_ALI_img.png
+val/260082_ALI_img.png
+val/260084_ALI_img.png
+val/260087_ALI_img.png
+val/260090_ALI_img.png
+val/260100_ALI_img.png
+val/260102_ALI_img.png
+val/260103_ALI_img.png
+val/260110_ALI_img.png
+val/260114_ALI_img.png
+val/260117_ALI_img.png
+val/260124_ALI_img.png
+val/260126_ALI_img.png
+val/260127_ALI_img.png
+val/260131_ALI_img.png
+val/260137_ALI_img.png
+val/260140_ALI_img.png
+val/260144_ALI_img.png
+val/260147_ALI_img.png
+val/260151_ALI_img.png
+val/260153_ALI_img.png
+val/260157_ALI_img.png
+val/260169_ALI_img.png
+val/260176_ALI_img.png
+val/260183_ALI_img.png
+val/260193_ALI_img.png
+val/260194_ALI_img.png
+val/260199_ALI_img.png
+val/260200_ALI_img.png
+val/260208_ALI_img.png
+val/260212_ALI_img.png
+val/260216_ALI_img.png
+val/260217_ALI_img.png
+val/260218_ALI_img.png
+val/260224_ALI_img.png
+val/260231_ALI_img.png
+val/260237_ALI_img.png
+val/260242_ALI_img.png
+val/260248_ALI_img.png
+val/260250_ALI_img.png
+val/260252_ALI_img.png
+val/260255_ALI_img.png
+val/260256_ALI_img.png
+val/260261_ALI_img.png
+val/260262_ALI_img.png
+val/260282_ALI_img.png
+val/260285_ALI_img.png
+val/260286_ALI_img.png
+val/260293_ALI_img.png
+val/260295_ALI_img.png
+val/260299_ALI_img.png
+val/260300_ALI_img.png
+val/260302_ALI_img.png
+val/260303_ALI_img.png
+val/260304_ALI_img.png
+val/260305_ALI_img.png
+val/260307_ALI_img.png
+val/260309_ALI_img.png
+val/260312_ALI_img.png
+val/260315_ALI_img.png
+val/260318_ALI_img.png
+val/260323_ALI_img.png
+val/260329_ALI_img.png
+val/260333_ALI_img.png
+val/260334_ALI_img.png
+val/260338_ALI_img.png
+val/260342_ALI_img.png
+val/260347_ALI_img.png
+val/260349_ALI_img.png
+val/260352_ALI_img.png
+val/260361_ALI_img.png
+val/260366_ALI_img.png
+val/260368_ALI_img.png
+val/260370_ALI_img.png
+val/260372_ALI_img.png
+val/260374_ALI_img.png
+val/260380_ALI_img.png
+val/260385_ALI_img.png
+val/260387_ALI_img.png
+val/260388_ALI_img.png
+val/260391_ALI_img.png
+val/260397_ALI_img.png
+val/260398_ALI_img.png
+val/260399_ALI_img.png
+val/260400_ALI_img.png
+val/260402_ALI_img.png
+val/260407_ALI_img.png
+val/260414_ALI_img.png
+val/260415_ALI_img.png
+val/260417_ALI_img.png
+val/260423_ALI_img.png
+val/260427_ALI_img.png
+val/260431_ALI_img.png
+val/260440_ALI_img.png
+val/260444_ALI_img.png
+val/260446_ALI_img.png
+val/260447_ALI_img.png
+val/260449_ALI_img.png
+val/260451_ALI_img.png
+val/260453_ALI_img.png
+val/260455_ALI_img.png
+val/260460_ALI_img.png
+val/260472_ALI_img.png
+val/260481_ALI_img.png
+val/260486_ALI_img.png
+val/260488_ALI_img.png
+val/260496_ALI_img.png
+val/260500_ALI_img.png
+val/260501_ALI_img.png
+val/260506_ALI_img.png
+val/260509_ALI_img.png
+val/260514_ALI_img.png
+val/260518_ALI_img.png
+val/260519_ALI_img.png
+val/260523_ALI_img.png
+val/260527_ALI_img.png
+val/260534_ALI_img.png
+val/260537_ALI_img.png
+val/260538_ALI_img.png
+val/260539_ALI_img.png
+val/260540_ALI_img.png
+val/260541_ALI_img.png
+val/260547_ALI_img.png
+val/260555_ALI_img.png
+val/260556_ALI_img.png
+val/260564_ALI_img.png
+val/260567_ALI_img.png
+val/260569_ALI_img.png
+val/260573_ALI_img.png
+val/260578_ALI_img.png
+val/260579_ALI_img.png
+val/260580_ALI_img.png
+val/260582_ALI_img.png
+val/260586_ALI_img.png
+val/260589_ALI_img.png
+val/260592_ALI_img.png
+val/260597_ALI_img.png
+val/260599_ALI_img.png
+val/260601_ALI_img.png
+val/260602_ALI_img.png
+val/260607_ALI_img.png
+val/260608_ALI_img.png
+val/260612_ALI_img.png
+val/260615_ALI_img.png
+val/260617_ALI_img.png
+val/260618_ALI_img.png
+val/260636_ALI_img.png
+val/260637_ALI_img.png
+val/260643_ALI_img.png
+val/260652_ALI_img.png
+val/260655_ALI_img.png
+val/260658_ALI_img.png
+val/260660_ALI_img.png
+val/260661_ALI_img.png
+val/260662_ALI_img.png
+val/260664_ALI_img.png
+val/260679_ALI_img.png
+val/260681_ALI_img.png
+val/260685_ALI_img.png
+val/260686_ALI_img.png
+val/260692_ALI_img.png
+val/260693_ALI_img.png
+val/260696_ALI_img.png
+val/260702_ALI_img.png
+val/260709_ALI_img.png
+val/260710_ALI_img.png
+val/260711_ALI_img.png
+val/260712_ALI_img.png
+val/260713_ALI_img.png
+val/260716_ALI_img.png
+val/260722_ALI_img.png
+val/260725_ALI_img.png
+val/260729_ALI_img.png
+val/260732_ALI_img.png
+val/260733_ALI_img.png
+val/260736_ALI_img.png
+val/260739_ALI_img.png
+val/260746_ALI_img.png
+val/260748_ALI_img.png
+val/260752_ALI_img.png
+val/260754_ALI_img.png
+val/260755_ALI_img.png
+val/260767_ALI_img.png
+val/260771_ALI_img.png
+val/260787_ALI_img.png
+val/260788_ALI_img.png
+val/260794_ALI_img.png
+val/260795_ALI_img.png
+val/260802_ALI_img.png
+val/260805_ALI_img.png
+val/260809_ALI_img.png
+val/260810_ALI_img.png
+val/260814_ALI_img.png
+val/260816_ALI_img.png
+val/260822_ALI_img.png
+val/260825_ALI_img.png
+val/260829_ALI_img.png
+val/260837_ALI_img.png
+val/260841_ALI_img.png
+val/260846_ALI_img.png
+val/260850_ALI_img.png
+val/260852_ALI_img.png
+val/260855_ALI_img.png
+val/260856_ALI_img.png
+val/260859_ALI_img.png
+val/260871_ALI_img.png
+val/260877_ALI_img.png
+val/260879_ALI_img.png
+val/260887_ALI_img.png
+val/260890_ALI_img.png
+val/260901_ALI_img.png
+val/260903_ALI_img.png
+val/260908_ALI_img.png
+val/260911_ALI_img.png
+val/260912_ALI_img.png
+val/260915_ALI_img.png
+val/260918_ALI_img.png
+val/260919_ALI_img.png
+val/260923_ALI_img.png
+val/260931_ALI_img.png
+val/260932_ALI_img.png
+val/260934_ALI_img.png
+val/260939_ALI_img.png
+val/260940_ALI_img.png
+val/260945_ALI_img.png
+val/260947_ALI_img.png
+val/260950_ALI_img.png
+val/260952_ALI_img.png
+val/260971_ALI_img.png
+val/260977_ALI_img.png
+val/260983_ALI_img.png
+val/260985_ALI_img.png
+val/261003_ALI_img.png
+val/261004_ALI_img.png
+val/261005_ALI_img.png
+val/261007_ALI_img.png
+val/261012_ALI_img.png
+val/261014_ALI_img.png
+val/261023_ALI_img.png
+val/261026_ALI_img.png
+val/261031_ALI_img.png
+val/261033_ALI_img.png
+val/261034_ALI_img.png
+val/261042_ALI_img.png
+val/261045_ALI_img.png
+val/261046_ALI_img.png
+val/261049_ALI_img.png
+val/261052_ALI_img.png
+val/261053_ALI_img.png
+val/261055_ALI_img.png
+val/261063_ALI_img.png
+val/261065_ALI_img.png
+val/261070_ALI_img.png
+val/261075_ALI_img.png
+val/261078_ALI_img.png
+val/261081_ALI_img.png
+val/261092_ALI_img.png
+val/261094_ALI_img.png
+val/261095_ALI_img.png
+val/261103_ALI_img.png
+val/261113_ALI_img.png
+val/261115_ALI_img.png
+val/261117_ALI_img.png
+val/261121_ALI_img.png
+val/261125_ALI_img.png
+val/261128_ALI_img.png
+val/261136_ALI_img.png
+val/261148_DT_img.png
+val/261151_ALI_img.png
+val/261152_ALI_img.png
+val/261161_ALI_img.png
+val/261164_ALI_img.png
+val/261165_ALI_img.png
+val/261173_ALI_img.png
+val/261178_ALI_img.png
+val/261181_ALI_img.png
+val/261182_ALI_img.png
+val/261185_ALI_img.png
+val/261186_ALI_img.png
+val/261189_ALI_img.png
+val/261191_ALI_img.png
+val/261195_ALI_img.png
+val/261197_ALI_img.png
+val/261198_ALI_img.png
+val/261199_ALI_img.png
+val/261207_ALI_img.png
+val/261208_ALI_img.png
+val/261212_ALI_img.png
+val/261215_ALI_img.png
+val/261224_ALI_img.png
+val/261238_ALI_img.png
+val/261249_ALI_img.png
+val/261252_ALI_img.png
+val/261254_ALI_img.png
+val/261262_ALI_img.png
+val/261266_ALI_img.png
+val/261268_ALI_img.png
+val/261272_ALI_img.png
+val/261291_ALI_img.png
+val/261292_ALI_img.png
+val/261296_ALI_img.png
+val/261301_ALI_img.png
+val/261303_ALI_img.png
+val/261312_ALI_img.png
+val/261313_ALI_img.png
+val/261315_ALI_img.png
+val/261322_ALI_img.png
+val/261327_ALI_img.png
+val/261329_ALI_img.png
+val/261338_ALI_img.png
+val/261339_ALI_img.png
+val/261341_ALI_img.png
+val/261342_ALI_img.png
+val/261347_ALI_img.png
+val/261348_ALI_img.png
+val/261354_ALI_img.png
+val/261356_ALI_img.png
+val/261358_ALI_img.png
+val/261361_ALI_img.png
+val/261363_ALI_img.png
+val/261365_ALI_img.png
+val/261367_ALI_img.png
+val/261372_ALI_img.png
+val/261374_ALI_img.png
+val/261381_ALI_img.png
+val/261382_ALI_img.png
+val/261405_ALI_img.png
+val/261409_ALI_img.png
+val/261412_ALI_img.png
+val/261419_ALI_img.png
+val/261424_ALI_img.png
+val/261435_ALI_img.png
+val/261436_ALI_img.png
+val/261440_ALI_img.png
+val/261446_ALI_img.png
+val/261449_ALI_img.png
+val/261450_ALI_img.png
+val/261463_ALI_img.png
+val/261468_ALI_img.png
+val/261470_ALI_img.png
+val/261475_ALI_img.png
+val/261478_ALI_img.png
+val/261482_ALI_img.png
+val/261486_ALI_img.png
+val/261490_ALI_img.png
+val/261492_ALI_img.png
+val/261493_ALI_img.png
+val/261498_ALI_img.png
+val/261501_ALI_img.png
+val/261502_ALI_img.png
+val/261512_ALI_img.png
+val/261518_ALI_img.png
+val/261526_ALI_img.png
+val/261533_ALI_img.png
+val/261534_ALI_img.png
+val/261535_ALI_img.png
+val/261542_ALI_img.png
+val/261550_ALI_img.png
+val/261551_ALI_img.png
+val/261552_ALI_img.png
+val/261553_ALI_img.png
+val/261560_ALI_img.png
+val/261564_ALI_img.png
+val/261566_ALI_img.png
+val/261568_ALI_img.png
+val/261575_ALI_img.png
+val/261590_ALI_img.png
+val/261594_ALI_img.png
+val/261598_ALI_img.png
+val/261599_ALI_img.png
+val/261601_ALI_img.png
+val/261603_ALI_img.png
+val/261609_ALI_img.png
+val/261611_ALI_img.png
+val/261615_ALI_img.png
+val/261622_ALI_img.png
+val/261623_ALI_img.png
+val/261627_ALI_img.png
+val/261629_ALI_img.png
+val/261632_ALI_img.png
+val/261644_ALI_img.png
+val/261647_ALI_img.png
+val/261648_ALI_img.png
+val/261658_ALI_img.png
+val/261661_ALI_img.png
+val/261667_ALI_img.png
+val/261670_ALI_img.png
+val/261678_ALI_img.png
+val/261683_ALI_img.png
+val/261689_ALI_img.png
+val/261693_ALI_img.png
+val/261696_ALI_img.png
+val/261699_ALI_img.png
+val/261700_ALI_img.png
+val/261703_ALI_img.png
+val/261709_ALI_img.png
+val/261713_ALI_img.png
+val/261720_ALI_img.png
+val/261723_DT_img.png
+val/261726_ALI_img.png
+val/261727_ALI_img.png
+val/261729_ALI_img.png
+val/261733_ALI_img.png
+val/261743_ALI_img.png
+val/261748_ALI_img.png
+val/261750_ALI_img.png
+val/261751_ALI_img.png
+val/261752_ALI_img.png
+val/261754_ALI_img.png
+val/261756_ALI_img.png
+val/261762_ALI_img.png
+val/261764_ALI_img.png
+val/261780_ALI_img.png
+val/261782_ALI_img.png
+val/261784_ALI_img.png
+val/261785_ALI_img.png
+val/261795_ALI_img.png
+val/261796_ALI_img.png
+val/261798_ALI_img.png
+val/261799_ALI_img.png
+val/261802_ALI_img.png
+val/261807_ALI_img.png
+val/261808_ALI_img.png
+val/261810_ALI_img.png
+val/261812_ALI_img.png
+val/261813_ALI_img.png
+val/261818_ALI_img.png
+val/261821_ALI_img.png
+val/261825_ALI_img.png
+val/261831_ALI_img.png
+val/261833_ALI_img.png
+val/261834_ALI_img.png
+val/261842_ALI_img.png
+val/261845_ALI_img.png
+val/261849_ALI_img.png
+val/261855_ALI_img.png
+val/261856_ALI_img.png
+val/261857_ALI_img.png
+val/261870_ALI_img.png
+val/261874_ALI_img.png
+val/261879_ALI_img.png
+val/261880_ALI_img.png
+val/261884_ALI_img.png
+val/261885_ALI_img.png
+val/261887_ALI_img.png
+val/261891_ALI_img.png
+val/261892_ALI_img.png
+val/261893_ALI_img.png
+val/261905_ALI_img.png
+val/261908_ALI_img.png
+val/261911_ALI_img.png
+val/261915_ALI_img.png
+val/261919_ALI_img.png
+val/261926_ALI_img.png
+val/261933_ALI_img.png
+val/261940_ALI_img.png
+val/261942_ALI_img.png
+val/261945_ALI_img.png
+val/261946_ALI_img.png
+val/261948_ALI_img.png
+val/261949_ALI_img.png
+val/261950_ALI_img.png
+val/261954_ALI_img.png
+val/261955_ALI_img.png
+val/261956_ALI_img.png
+val/261957_ALI_img.png
+val/261961_ALI_img.png
+val/261969_ALI_img.png
+val/261974_ALI_img.png
+val/261977_ALI_img.png
+val/261988_ALI_img.png
+val/261993_ALI_img.png
+val/261995_ALI_img.png
+val/261996_ALI_img.png
+val/262000_ALI_img.png
+val/262001_ALI_img.png
+val/262002_ALI_img.png
+val/262005_ALI_img.png
+val/262007_ALI_img.png
+val/262010_ALI_img.png
+val/262012_ALI_img.png
+val/262017_ALI_img.png
+val/262020_ALI_img.png
+val/262023_ALI_img.png
+val/262025_ALI_img.png
+val/262028_ALI_img.png
+val/262029_ALI_img.png
+val/262034_ALI_img.png
+val/262038_ALI_img.png
+val/262041_ALI_img.png
+val/262042_ALI_img.png
+val/262046_ALI_img.png
+val/262049_ALI_img.png
+val/262051_ALI_img.png
+val/262063_ALI_img.png
+val/262064_ALI_img.png
+val/262065_ALI_img.png
+val/262068_ALI_img.png
+val/262070_ALI_img.png
+val/262070_DT_img.png
+val/262076_ALI_img.png
+val/262083_ALI_img.png
+val/262090_ALI_img.png
+val/262091_ALI_img.png
+val/262093_ALI_img.png
+val/262096_ALI_img.png
+val/262097_ALI_img.png
+val/262100_ALI_img.png
+val/262103_ALI_img.png
+val/262104_ALI_img.png
+val/262112_ALI_img.png
+val/262117_ALI_img.png
+val/262122_ALI_img.png
+val/262133_ALI_img.png
+val/262134_ALI_img.png
+val/262136_ALI_img.png
+val/262146_ALI_img.png
+val/262150_ALI_img.png
+val/262153_ALI_img.png
+val/262157_ALI_img.png
+val/262159_ALI_img.png
+val/262163_ALI_img.png
+val/262164_ALI_img.png
+val/262167_ALI_img.png
+val/262170_ALI_img.png
+val/262176_ALI_img.png
+val/262177_ALI_img.png
+val/262178_ALI_img.png
+val/262180_ALI_img.png
+val/262182_ALI_img.png
+val/262195_ALI_img.png
+val/262201_ALI_img.png
+val/262204_ALI_img.png
+val/262208_ALI_img.png
+val/262211_ALI_img.png
+val/262212_ALI_img.png
+val/262215_ALI_img.png
+val/262216_ALI_img.png
+val/262229_ALI_img.png
+val/262231_ALI_img.png
+val/262238_ALI_img.png
+val/262242_ALI_img.png
+val/262244_ALI_img.png
+val/262251_ALI_img.png
+val/262253_ALI_img.png
+val/262261_ALI_img.png
+val/262273_ALI_img.png
+val/262290_ALI_img.png
+val/262294_ALI_img.png
+val/262295_ALI_img.png
+val/262299_ALI_img.png
+val/262302_ALI_img.png
+val/262305_ALI_img.png
+val/262308_ALI_img.png
+val/262309_ALI_img.png
+val/262311_ALI_img.png
+val/262313_ALI_img.png
+val/262323_ALI_img.png
+val/262329_ALI_img.png
+val/262334_ALI_img.png
+val/262339_ALI_img.png
+val/262345_ALI_img.png
+val/262346_ALI_img.png
+val/262349_ALI_img.png
+val/262350_ALI_img.png
+val/262352_ALI_img.png
+val/262358_ALI_img.png
+val/262359_ALI_img.png
+val/262369_ALI_img.png
+val/262380_ALI_img.png
+val/262389_ALI_img.png
+val/262391_ALI_img.png
+val/262394_ALI_img.png
+val/262401_ALI_img.png
+val/262402_ALI_img.png
+val/262410_ALI_img.png
+val/262414_ALI_img.png
+val/262417_ALI_img.png
+val/262420_ALI_img.png
+val/262431_ALI_img.png
+val/262439_ALI_img.png
+val/262440_ALI_img.png
+val/262442_ALI_img.png
+val/262448_ALI_img.png
+val/262450_ALI_img.png
+val/262452_ALI_img.png
+val/262454_ALI_img.png
+val/262456_ALI_img.png
+val/262458_ALI_img.png
+val/262459_ALI_img.png
+val/262460_ALI_img.png
+val/262470_ALI_img.png
+val/262475_ALI_img.png
+val/262478_ALI_img.png
+val/262480_ALI_img.png
+val/262485_ALI_img.png
+val/262494_ALI_img.png
+val/262496_ALI_img.png
+val/262503_ALI_img.png
+val/262507_ALI_img.png
+val/262513_ALI_img.png
+val/262515_ALI_img.png
+val/262520_ALI_img.png
+val/262522_ALI_img.png
+val/262531_ALI_img.png
+val/262535_ALI_img.png
+val/262540_ALI_img.png
+val/262541_ALI_img.png
+val/262542_ALI_img.png
+val/262543_ALI_img.png
+val/262550_ALI_img.png
+val/262553_ALI_img.png
+val/262561_ALI_img.png
+val/262562_ALI_img.png
+val/262565_ALI_img.png
+val/262567_ALI_img.png
+val/262568_ALI_img.png
+val/262574_ALI_img.png
+val/262575_ALI_img.png
+val/262584_ALI_img.png
+val/262587_ALI_img.png
+val/262591_ALI_img.png
+val/262597_ALI_img.png
+val/262598_ALI_img.png
+val/262603_ALI_img.png
+val/262605_ALI_img.png
+val/262609_ALI_img.png
+val/262615_ALI_img.png
+val/262618_ALI_img.png
+val/262626_ALI_img.png
+val/262632_ALI_img.png
+val/262634_ALI_img.png
+val/262638_ALI_img.png
+val/262639_ALI_img.png
+val/262640_ALI_img.png
+val/262642_ALI_img.png
+val/262646_ALI_img.png
+val/262647_ALI_img.png
+val/262648_ALI_img.png
+val/262650_ALI_img.png
+val/262654_ALI_img.png
+val/262655_ALI_img.png
+val/262656_ALI_img.png
+val/262662_ALI_img.png
+val/262673_ALI_img.png
+val/262682_ALI_img.png
+val/262687_ALI_img.png
+val/262692_ALI_img.png
+val/262699_ALI_img.png
+val/262706_ALI_img.png
+val/262711_ALI_img.png
+val/262716_ALI_img.png
+val/262718_ALI_img.png
+val/262720_ALI_img.png
+val/262721_ALI_img.png
+val/262723_ALI_img.png
+val/262727_ALI_img.png
+val/262739_ALI_img.png
+val/262744_ALI_img.png
+val/262755_ALI_img.png
+val/262764_ALI_img.png
+val/262771_ALI_img.png
+val/262777_ALI_img.png
+val/262781_ALI_img.png
+val/262782_ALI_img.png
+val/262783_ALI_img.png
+val/262785_ALI_img.png
+val/262787_ALI_img.png
+val/262789_ALI_img.png
+val/262800_ALI_img.png
+val/262803_ALI_img.png
+val/262804_ALI_img.png
+val/262808_ALI_img.png
+val/262815_ALI_img.png
+val/262816_ALI_img.png
+val/262818_ALI_img.png
+val/262819_ALI_img.png
+val/262835_ALI_img.png
+val/262838_ALI_img.png
+val/262841_ALI_img.png
+val/262842_ALI_img.png
+val/262843_ALI_img.png
+val/262846_ALI_img.png
+val/262848_ALI_img.png
+val/262850_ALI_img.png
+val/262855_ALI_img.png
+val/262857_ALI_img.png
+val/262859_ALI_img.png
+val/262861_ALI_img.png
+val/262869_ALI_img.png
+val/262872_ALI_img.png
+val/262873_ALI_img.png
+val/262874_ALI_img.png
+val/262876_ALI_img.png
+val/262882_ALI_img.png
+val/262884_ALI_img.png
+val/262887_ALI_img.png
+val/262889_ALI_img.png
+val/262891_ALI_img.png
+val/262892_ALI_img.png
+val/262896_ALI_img.png
+val/262899_ALI_img.png
+val/262902_ALI_img.png
+val/262905_ALI_img.png
+val/262910_ALI_img.png
+val/262912_ALI_img.png
+val/262916_ALI_img.png
+val/262924_ALI_img.png
+val/262928_ALI_img.png
+val/262931_ALI_img.png
+val/262933_ALI_img.png
+val/262934_ALI_img.png
+val/262936_ALI_img.png
+val/262937_ALI_img.png
+val/262938_ALI_img.png
+val/262939_ALI_img.png
+val/262941_ALI_img.png
+val/262946_ALI_img.png
+val/262947_ALI_img.png
+val/262948_ALI_img.png
+val/262960_ALI_img.png
+val/262972_ALI_img.png
+val/262984_ALI_img.png
+val/262986_ALI_img.png
+val/262987_ALI_img.png
+val/262989_ALI_img.png
+val/263003_ALI_img.png
+val/263015_ALI_img.png
+val/263019_ALI_img.png
+val/263021_ALI_img.png
+val/263028_ALI_img.png
+val/263029_ALI_img.png
+val/263030_ALI_img.png
+val/263036_ALI_img.png
+val/263048_ALI_img.png
+val/263053_ALI_img.png
+val/263055_ALI_img.png
+val/263057_ALI_img.png
+val/263067_ALI_img.png
+val/263071_ALI_img.png
+val/263073_ALI_img.png
+val/263075_ALI_img.png
+val/263081_ALI_img.png
+val/263087_ALI_img.png
+val/263088_ALI_img.png
+val/263093_ALI_img.png
+val/263099_ALI_img.png
+val/263101_ALI_img.png
+val/263106_ALI_img.png
+val/263108_ALI_img.png
+val/263110_ALI_img.png
+val/263110_DT_img.png
+val/263116_ALI_img.png
+val/263118_ALI_img.png
+val/263134_ALI_img.png
+val/263137_ALI_img.png
+val/263154_ALI_img.png
+val/263156_ALI_img.png
+val/263157_ALI_img.png
+val/263159_ALI_img.png
+val/263161_ALI_img.png
+val/263163_ALI_img.png
+val/263167_ALI_img.png
+val/263168_ALI_img.png
+val/263171_ALI_img.png
+val/263172_ALI_img.png
+val/263176_ALI_img.png
+val/263177_ALI_img.png
+val/263184_ALI_img.png
+val/263186_ALI_img.png
+val/263187_ALI_img.png
+val/263190_ALI_img.png
+val/263197_ALI_img.png
+val/263201_ALI_img.png
+val/263204_ALI_img.png
+val/263211_ALI_img.png
+val/263217_ALI_img.png
+val/263221_ALI_img.png
+val/263225_ALI_img.png
+val/263227_ALI_img.png
+val/263228_ALI_img.png
+val/263232_ALI_img.png
+val/263233_ALI_img.png
+val/263236_ALI_img.png
+val/263237_ALI_img.png
+val/263239_ALI_img.png
+val/263257_ALI_img.png
+val/263258_ALI_img.png
+val/263261_ALI_img.png
+val/263269_ALI_img.png
+val/263270_DT_img.png
+val/263277_ALI_img.png
+val/263285_ALI_img.png
+val/263292_ALI_img.png
+val/263295_ALI_img.png
+val/263296_ALI_img.png
+val/263298_ALI_img.png
+val/263301_ALI_img.png
+val/263306_ALI_img.png
+val/263310_ALI_img.png
+val/263316_ALI_img.png
+val/263317_ALI_img.png
+val/263319_ALI_img.png
+val/263321_ALI_img.png
+val/263323_ALI_img.png
+val/263324_ALI_img.png
+val/263325_ALI_img.png
+val/263328_ALI_img.png
+val/263330_ALI_img.png
+val/263333_ALI_img.png
+val/263334_ALI_img.png
+val/263344_ALI_img.png
+val/263347_ALI_img.png
+val/263354_ALI_img.png
+val/263355_ALI_img.png
+val/263358_ALI_img.png
+val/263360_ALI_img.png
+val/263367_ALI_img.png
+val/263373_ALI_img.png
+val/263381_ALI_img.png
+val/263384_ALI_img.png
+val/263386_ALI_img.png
+val/263391_ALI_img.png
+val/263401_ALI_img.png
+val/263419_ALI_img.png
+val/263421_ALI_img.png
+val/263423_ALI_img.png
+val/263426_ALI_img.png
+val/263427_ALI_img.png
+val/263432_ALI_img.png
+val/263434_ALI_img.png
+val/263437_ALI_img.png
+val/263440_ALI_img.png
+val/263442_ALI_img.png
+val/263444_ALI_img.png
+val/263446_ALI_img.png
+val/263452_ALI_img.png
+val/263453_ALI_img.png
+val/263454_ALI_img.png
+val/263456_ALI_img.png
+val/263474_ALI_img.png
+val/263475_ALI_img.png
+val/263485_ALI_img.png
+val/263496_ALI_img.png
+val/263513_ALI_img.png
+val/263522_ALI_img.png
+val/263525_ALI_img.png
+val/263528_ALI_img.png
+val/263533_ALI_img.png
+val/263537_ALI_img.png
+val/263539_ALI_img.png
+val/263543_ALI_img.png
+val/263544_ALI_img.png
+val/263548_ALI_img.png
+val/263564_ALI_img.png
+val/263565_ALI_img.png
+val/263574_ALI_img.png
+val/263579_ALI_img.png
+val/263583_ALI_img.png
+val/263599_DT_img.png
+val/263602_ALI_img.png
+val/263603_ALI_img.png
+val/263606_ALI_img.png
+val/263607_ALI_img.png
+val/263608_ALI_img.png
+val/263612_ALI_img.png
+val/263613_ALI_img.png
+val/263614_ALI_img.png
+val/263616_ALI_img.png
+val/263620_ALI_img.png
+val/263622_ALI_img.png
+val/263626_ALI_img.png
+val/263631_ALI_img.png
+val/263632_ALI_img.png
+val/263640_ALI_img.png
+val/263642_ALI_img.png
+val/263643_ALI_img.png
+val/263646_ALI_img.png
+val/263647_ALI_img.png
+val/263648_ALI_img.png
+val/263656_ALI_img.png
+val/263658_ALI_img.png
+val/263660_ALI_img.png
+val/263661_ALI_img.png
+val/263662_ALI_img.png
+val/263665_ALI_img.png
+val/263666_ALI_img.png
+val/263669_ALI_img.png
+val/263671_ALI_img.png
+val/263673_ALI_img.png
+val/263676_ALI_img.png
+val/263693_ALI_img.png
+val/263695_ALI_img.png
+val/263704_ALI_img.png
+val/263714_ALI_img.png
+val/263718_ALI_img.png
+val/263721_ALI_img.png
+val/263723_ALI_img.png
+val/263724_ALI_img.png
+val/263727_ALI_img.png
+val/263729_ALI_img.png
+val/263730_ALI_img.png
+val/263731_ALI_img.png
+val/263734_ALI_img.png
+val/263736_ALI_img.png
+val/263737_ALI_img.png
+val/263745_ALI_img.png
+val/263749_ALI_img.png
+val/263751_ALI_img.png
+val/263770_ALI_img.png
+val/263774_ALI_img.png
+val/263775_ALI_img.png
+val/263777_ALI_img.png
+val/263780_ALI_img.png
+val/263782_ALI_img.png
+val/263789_ALI_img.png
+val/263791_ALI_img.png
+val/263794_ALI_img.png
+val/263800_ALI_img.png
+val/263804_ALI_img.png
+val/263811_ALI_img.png
+val/263814_ALI_img.png
+val/263817_ALI_img.png
+val/263820_ALI_img.png
+val/263824_ALI_img.png
+val/263827_ALI_img.png
+val/263834_ALI_img.png
+val/263835_ALI_img.png
+val/263852_ALI_img.png
+val/263854_ALI_img.png
+val/263855_ALI_img.png
+val/263860_ALI_img.png
+val/263861_ALI_img.png
+val/263862_ALI_img.png
+val/263865_ALI_img.png
+val/263868_ALI_img.png
+val/263873_ALI_img.png
+val/263874_ALI_img.png
+val/263876_ALI_img.png
+val/263889_ALI_img.png
+val/263897_ALI_img.png
+val/263898_ALI_img.png
+val/263899_ALI_img.png
+val/263906_ALI_img.png
+val/263913_ALI_img.png
+val/263917_ALI_img.png
+val/263921_ALI_img.png
+val/263926_ALI_img.png
+val/263929_ALI_img.png
+val/263934_ALI_img.png
+val/263943_ALI_img.png
+val/263951_ALI_img.png
+val/263954_ALI_img.png
+val/263958_ALI_img.png
+val/263968_ALI_img.png
+val/263969_ALI_img.png
+val/263970_ALI_img.png
+val/263971_ALI_img.png
+val/263974_ALI_img.png
+val/263976_ALI_img.png
+val/263979_ALI_img.png
+val/263982_ALI_img.png
+val/263983_ALI_img.png
+val/263984_ALI_img.png
+val/263988_ALI_img.png
+val/263990_ALI_img.png
+val/263992_ALI_img.png
+val/263996_ALI_img.png
+val/263998_ALI_img.png
+val/264003_ALI_img.png
+val/264005_ALI_img.png
+val/264011_ALI_img.png
+val/264018_ALI_img.png
+val/264020_ALI_img.png
+val/264022_ALI_img.png
+val/264034_ALI_img.png
+val/264038_ALI_img.png
+val/264043_ALI_img.png
+val/264044_ALI_img.png
+val/264050_ALI_img.png
+val/264053_ALI_img.png
+val/264054_ALI_img.png
+val/264055_ALI_img.png
+val/264057_ALI_img.png
+val/264065_ALI_img.png
+val/264067_ALI_img.png
+val/264068_ALI_img.png
+val/264073_ALI_img.png
+val/264074_ALI_img.png
+val/264082_ALI_img.png
+val/264084_ALI_img.png
+val/264085_ALI_img.png
+val/264087_ALI_img.png
+val/264090_ALI_img.png
+val/264096_ALI_img.png
+val/264099_ALI_img.png
+val/264105_ALI_img.png
+val/264110_ALI_img.png
+val/264114_ALI_img.png
+val/264115_ALI_img.png
+val/264117_ALI_img.png
+val/264118_ALI_img.png
+val/264122_ALI_img.png
+val/264123_ALI_img.png
+val/264125_ALI_img.png
+val/264128_ALI_img.png
+val/264133_ALI_img.png
+val/264136_ALI_img.png
+val/264137_ALI_img.png
+val/264142_ALI_img.png
+val/264144_ALI_img.png
+val/264146_ALI_img.png
+val/264151_ALI_img.png
+val/264155_ALI_img.png
+val/264156_ALI_img.png
+val/264167_ALI_img.png
+val/264169_ALI_img.png
+val/264179_ALI_img.png
+val/264183_ALI_img.png
+val/264184_ALI_img.png
+val/264185_ALI_img.png
+val/264186_ALI_img.png
+val/264193_ALI_img.png
+val/264194_ALI_img.png
+val/264202_ALI_img.png
+val/264204_ALI_img.png
+val/264211_ALI_img.png
+val/264217_ALI_img.png
+val/264220_ALI_img.png
+val/264221_ALI_img.png
+val/264224_ALI_img.png
+val/264227_ALI_img.png
+val/264229_ALI_img.png
+val/264252_ALI_img.png
+val/264253_ALI_img.png
+val/264254_ALI_img.png
+val/264255_ALI_img.png
+val/264256_ALI_img.png
+val/264258_ALI_img.png
+val/264259_ALI_img.png
+val/264262_ALI_img.png
+val/264263_ALI_img.png
+val/264266_ALI_img.png
+val/264269_ALI_img.png
+val/264271_ALI_img.png
+val/264274_ALI_img.png
+val/264277_ALI_img.png
+val/264278_ALI_img.png
+val/264280_ALI_img.png
+val/264285_ALI_img.png
+val/264286_ALI_img.png
+val/264287_ALI_img.png
+val/264294_ALI_img.png
+val/264295_ALI_img.png
+val/264299_ALI_img.png
+val/264301_ALI_img.png
+val/264305_ALI_img.png
+val/264307_ALI_img.png
+val/264311_ALI_img.png
+val/264314_ALI_img.png
+val/264317_ALI_img.png
+val/264318_ALI_img.png
+val/264321_ALI_img.png
+val/264323_ALI_img.png
+val/264327_ALI_img.png
+val/264330_ALI_img.png
+val/264332_ALI_img.png
+val/264335_ALI_img.png
+val/264338_ALI_img.png
+val/264342_ALI_img.png
+val/264343_ALI_img.png
+val/264345_ALI_img.png
+val/264351_ALI_img.png
+val/264352_ALI_img.png
+val/264353_ALI_img.png
+val/264354_ALI_img.png
+val/264364_ALI_img.png
+val/264366_ALI_img.png
+val/264371_ALI_img.png
+val/264372_ALI_img.png
+val/264373_ALI_img.png
+val/264375_ALI_img.png
+val/264376_ALI_img.png
+val/264378_ALI_img.png
+val/264382_ALI_img.png
+val/264383_ALI_img.png
+val/264387_ALI_img.png
+val/264390_ALI_img.png
+val/264391_ALI_img.png
+val/264399_ALI_img.png
+val/264400_ALI_img.png
+val/264408_ALI_img.png
+val/264412_ALI_img.png
+val/264414_ALI_img.png
+val/264415_ALI_img.png
+val/264417_ALI_img.png
+val/264419_ALI_img.png
+val/264424_ALI_img.png
+val/264426_ALI_img.png
+val/264427_ALI_img.png
+val/264430_ALI_img.png
+val/264435_ALI_img.png
+val/264437_ALI_img.png
+val/264438_ALI_img.png
+val/264439_ALI_img.png
+val/264441_ALI_img.png
+val/264443_ALI_img.png
+val/264444_ALI_img.png
+val/264445_ALI_img.png
+val/264446_ALI_img.png
+val/264448_ALI_img.png
+val/264451_ALI_img.png
+val/264453_ALI_img.png
+val/264454_ALI_img.png
+val/264457_ALI_img.png
+val/264458_ALI_img.png
+val/264460_ALI_img.png
+val/264463_ALI_img.png
+val/264464_ALI_img.png
+val/264468_ALI_img.png
+val/264477_ALI_img.png
+val/264480_ALI_img.png
+val/264486_ALI_img.png
+val/264488_ALI_img.png
+val/264489_ALI_img.png
+val/264496_ALI_img.png
+val/264499_ALI_img.png
+val/264501_ALI_img.png
+val/264506_ALI_img.png
+val/264507_ALI_img.png
+val/264509_ALI_img.png
+val/264513_ALI_img.png
+val/264515_ALI_img.png
+val/264516_ALI_img.png
+val/264523_ALI_img.png
+val/264529_ALI_img.png
+val/264532_ALI_img.png
+val/264537_ALI_img.png
+val/264546_ALI_img.png
+val/264552_ALI_img.png
+val/264553_ALI_img.png
+val/264561_ALI_img.png
+val/264563_ALI_img.png
+val/264565_ALI_img.png
+val/264567_ALI_img.png
+val/264572_ALI_img.png
+val/264573_ALI_img.png
+val/264579_ALI_img.png
+val/264586_ALI_img.png
+val/264587_ALI_img.png
+val/264604_ALI_img.png
+val/264606_ALI_img.png
+val/264607_ALI_img.png
+val/264608_ALI_img.png
+val/264609_ALI_img.png
+val/264616_ALI_img.png
+val/264621_ALI_img.png
+val/264622_ALI_img.png
+val/264623_ALI_img.png
+val/264631_ALI_img.png
+val/264633_ALI_img.png
+val/264638_ALI_img.png
+val/264639_ALI_img.png
+val/264646_ALI_img.png
+val/264651_ALI_img.png
+val/264656_ALI_img.png
+val/264659_ALI_img.png
+val/264661_ALI_img.png
+val/264663_ALI_img.png
+val/264664_ALI_img.png
+val/264665_ALI_img.png
+val/264667_ALI_img.png
+val/264668_ALI_img.png
+val/264669_ALI_img.png
+val/264674_ALI_img.png
+val/264682_ALI_img.png
+val/264690_ALI_img.png
+val/264700_ALI_img.png
+val/264709_ALI_img.png
+val/264711_ALI_img.png
+val/264718_ALI_img.png
+val/264719_ALI_img.png
+val/264721_ALI_img.png
+val/264730_ALI_img.png
+val/264734_ALI_img.png
+val/264736_ALI_img.png
+val/264739_ALI_img.png
+val/264746_ALI_img.png
+val/264758_ALI_img.png
+val/264765_ALI_img.png
+val/264769_ALI_img.png
+val/264772_ALI_img.png
+val/264774_ALI_img.png
+val/264779_ALI_img.png
+val/264781_ALI_img.png
+val/264787_ALI_img.png
+val/264788_ALI_img.png
+val/264789_ALI_img.png
+val/264792_ALI_img.png
+val/264797_ALI_img.png
+val/264799_ALI_img.png
+val/264801_ALI_img.png
+val/264803_ALI_img.png
+val/264804_ALI_img.png
+val/264813_ALI_img.png
+val/264814_ALI_img.png
+val/264817_ALI_img.png
+val/264818_ALI_img.png
+val/264825_ALI_img.png
+val/264826_ALI_img.png
+val/264841_ALI_img.png
+val/264845_ALI_img.png
+val/264849_ALI_img.png
+val/264861_ALI_img.png
+val/264862_ALI_img.png
+val/264863_ALI_img.png
+val/264868_ALI_img.png
+val/264880_ALI_img.png
+val/264885_ALI_img.png
+val/264887_ALI_img.png
+val/264892_ALI_img.png
+val/264898_ALI_img.png
+val/264901_ALI_img.png
+val/264913_ALI_img.png
+val/264914_ALI_img.png
+val/264915_ALI_img.png
+val/264925_ALI_img.png
+val/264927_ALI_img.png
+val/264928_ALI_img.png
+val/264930_ALI_img.png
+val/264931_ALI_img.png
+val/264932_ALI_img.png
+val/264933_ALI_img.png
+val/264939_ALI_img.png
+val/264955_ALI_img.png
+val/264957_ALI_img.png
+val/264958_ALI_img.png
+val/264968_ALI_img.png
+val/264969_ALI_img.png
+val/264976_ALI_img.png
+val/264977_ALI_img.png
+val/264985_ALI_img.png
+val/264986_ALI_img.png
+val/264988_ALI_img.png
+val/264989_ALI_img.png
+val/264997_ALI_img.png
+val/265001_ALI_img.png
+val/265002_ALI_img.png
+val/265004_ALI_img.png
+val/265006_ALI_img.png
+val/265011_ALI_img.png
+val/265016_ALI_img.png
+val/265022_ALI_img.png
+val/265023_ALI_img.png
+val/265025_ALI_img.png
+val/265030_ALI_img.png
+val/265033_ALI_img.png
+val/265034_ALI_img.png
+val/265035_ALI_img.png
+val/265039_ALI_img.png
+val/265040_ALI_img.png
+val/265041_ALI_img.png
+val/265045_ALI_img.png
+val/265048_ALI_img.png
+val/265049_ALI_img.png
+val/265050_ALI_img.png
+val/265057_ALI_img.png
+val/265067_ALI_img.png
+val/265070_ALI_img.png
+val/265072_ALI_img.png
+val/265075_ALI_img.png
+val/265076_ALI_img.png
+val/265086_ALI_img.png
+val/265093_ALI_img.png
+val/265094_ALI_img.png
+val/265099_ALI_img.png
+val/265101_ALI_img.png
+val/265106_ALI_img.png
+val/265107_ALI_img.png
+val/265108_ALI_img.png
+val/265122_ALI_img.png
+val/265124_ALI_img.png
+val/265126_ALI_img.png
+val/265127_ALI_img.png
+val/265133_ALI_img.png
+val/265135_ALI_img.png
+val/265136_ALI_img.png
+val/265141_ALI_img.png
+val/265144_ALI_img.png
+val/265145_ALI_img.png
+val/265147_ALI_img.png
+val/265148_ALI_img.png
+val/265160_ALI_img.png
+val/265167_ALI_img.png
+val/265179_ALI_img.png
+val/265180_ALI_img.png
+val/265188_ALI_img.png
+val/265198_ALI_img.png
+val/265202_ALI_img.png
+val/265205_ALI_img.png
+val/265206_ALI_img.png
+val/265207_ALI_img.png
+val/265209_ALI_img.png
+val/265211_ALI_img.png
+val/265214_ALI_img.png
+val/265215_ALI_img.png
+val/265218_ALI_img.png
+val/265219_ALI_img.png
+val/265221_ALI_img.png
+val/265225_ALI_img.png
+val/265231_ALI_img.png
+val/265233_ALI_img.png
+val/265238_ALI_img.png
+val/265243_ALI_img.png
+val/265247_ALI_img.png
+val/265251_ALI_img.png
+val/265254_ALI_img.png
+val/265255_ALI_img.png
+val/265262_ALI_img.png
+val/265264_ALI_img.png
+val/265265_ALI_img.png
+val/265266_ALI_img.png
+val/265267_ALI_img.png
+val/265270_ALI_img.png
+val/265277_ALI_img.png
+val/265283_ALI_img.png
+val/265286_ALI_img.png
+val/265287_ALI_img.png
+val/265289_ALI_img.png
+val/265295_ALI_img.png
+val/265296_ALI_img.png
+val/265298_ALI_img.png
+val/265301_ALI_img.png
+val/265305_ALI_img.png
+val/265308_ALI_img.png
+val/265315_ALI_img.png
+val/265317_ALI_img.png
+val/265319_ALI_img.png
+val/265326_ALI_img.png
+val/265331_ALI_img.png
+val/265333_ALI_img.png
+val/265336_ALI_img.png
+val/265337_ALI_img.png
+val/265343_ALI_img.png
+val/265345_ALI_img.png
+val/265351_ALI_img.png
+val/265353_ALI_img.png
+val/265358_ALI_img.png
+val/265360_ALI_img.png
+val/265369_ALI_img.png
+val/265370_ALI_img.png
+val/265371_ALI_img.png
+val/265373_ALI_img.png
+val/265376_ALI_img.png
+val/265377_ALI_img.png
+val/265379_ALI_img.png
+val/265398_ALI_img.png
+val/265401_ALI_img.png
+val/265402_ALI_img.png
+val/265409_ALI_img.png
+val/265410_ALI_img.png
+val/265412_ALI_img.png
+val/265414_ALI_img.png
+val/265415_ALI_img.png
+val/265420_ALI_img.png
+val/265423_ALI_img.png
+val/265424_ALI_img.png
+val/265425_ALI_img.png
+val/265426_ALI_img.png
+val/265432_ALI_img.png
+val/265438_ALI_img.png
+val/265445_ALI_img.png
+val/265450_DT_img.png
+val/265454_ALI_img.png
+val/265480_ALI_img.png
+val/265484_ALI_img.png
+val/265487_ALI_img.png
+val/265488_ALI_img.png
+val/265495_ALI_img.png
+val/265495_DT_img.png
+val/265514_ALI_img.png
+val/265515_ALI_img.png
+val/265517_ALI_img.png
+val/265521_ALI_img.png
+val/265528_ALI_img.png
+val/265530_ALI_img.png
+val/265532_ALI_img.png
+val/265540_ALI_img.png
+val/265541_ALI_img.png
+val/265542_ALI_img.png
+val/265544_ALI_img.png
+val/265545_ALI_img.png
+val/265547_ALI_img.png
+val/265549_ALI_img.png
+val/265550_ALI_img.png
+val/265552_ALI_img.png
+val/265553_ALI_img.png
+val/265560_ALI_img.png
+val/265563_ALI_img.png
+val/265569_ALI_img.png
+val/265571_ALI_img.png
+val/265572_ALI_img.png
+val/265575_ALI_img.png
+val/265577_ALI_img.png
+val/265580_ALI_img.png
+val/265584_ALI_img.png
+val/265585_ALI_img.png
+val/265588_ALI_img.png
+val/265600_ALI_img.png
+val/265603_ALI_img.png
+val/265608_ALI_img.png
+val/265611_ALI_img.png
+val/265620_ALI_img.png
+val/265622_ALI_img.png
+val/265625_ALI_img.png
+val/265627_ALI_img.png
+val/265632_ALI_img.png
+val/265634_ALI_img.png
+val/265636_ALI_img.png
+val/265639_ALI_img.png
+val/265642_ALI_img.png
+val/265647_ALI_img.png
+val/265651_ALI_img.png
+val/265655_ALI_img.png
+val/265670_ALI_img.png
+val/265679_ALI_img.png
+val/265683_ALI_img.png
+val/265686_ALI_img.png
+val/265687_ALI_img.png
+val/265688_ALI_img.png
+val/265691_ALI_img.png
+val/265697_ALI_img.png
+val/265705_ALI_img.png
+val/265707_ALI_img.png
+val/265708_ALI_img.png
+val/265709_ALI_img.png
+val/265713_ALI_img.png
+val/265715_ALI_img.png
+val/265716_ALI_img.png
+val/265717_ALI_img.png
+val/265718_ALI_img.png
+val/265724_ALI_img.png
+val/265725_ALI_img.png
+val/265726_ALI_img.png
+val/265727_ALI_img.png
+val/265730_ALI_img.png
+val/265744_ALI_img.png
+val/265748_ALI_img.png
+val/265754_ALI_img.png
+val/265755_ALI_img.png
+val/265757_ALI_img.png
+val/265762_ALI_img.png
+val/265767_ALI_img.png
+val/265774_ALI_img.png
+val/265777_ALI_img.png
+val/265778_ALI_img.png
+val/265779_ALI_img.png
+val/265782_ALI_img.png
+val/265783_ALI_img.png
+val/265789_ALI_img.png
+val/265790_ALI_img.png
+val/265795_ALI_img.png
+val/265800_ALI_img.png
+val/265802_ALI_img.png
+val/265803_ALI_img.png
+val/265805_ALI_img.png
+val/265813_ALI_img.png
+val/265821_ALI_img.png
+val/265822_ALI_img.png
+val/265824_ALI_img.png
+val/265826_ALI_img.png
+val/265832_ALI_img.png
+val/265836_ALI_img.png
+val/265837_ALI_img.png
+val/265838_ALI_img.png
+val/265846_ALI_img.png
+val/265848_ALI_img.png
+val/265854_ALI_img.png
+val/265862_ALI_img.png
+val/265863_ALI_img.png
+val/265869_ALI_img.png
+val/265870_ALI_img.png
+val/265872_ALI_img.png
+val/265878_ALI_img.png
+val/265895_ALI_img.png
+val/265902_ALI_img.png
+val/265903_ALI_img.png
+val/265909_ALI_img.png
+val/265912_ALI_img.png
+val/265917_ALI_img.png
+val/265924_ALI_img.png
+val/265925_ALI_img.png
+val/265928_ALI_img.png
+val/265930_ALI_img.png
+val/265938_ALI_img.png
+val/265950_ALI_img.png
+val/265955_ALI_img.png
+val/265962_ALI_img.png
+val/265963_ALI_img.png
+val/265971_ALI_img.png
+val/265973_ALI_img.png
+val/265981_ALI_img.png
+val/265987_ALI_img.png
+val/265988_ALI_img.png
+val/265994_ALI_img.png
+val/266002_ALI_img.png
+val/266013_ALI_img.png
+val/266015_ALI_img.png
+val/266016_ALI_img.png
+val/266018_ALI_img.png
+val/266020_ALI_img.png
+val/266029_DT_img.png
+val/266031_ALI_img.png
+val/266036_ALI_img.png
+val/266039_ALI_img.png
+val/266045_ALI_img.png
+val/266046_ALI_img.png
+val/266050_ALI_img.png
+val/266054_ALI_img.png
+val/266063_ALI_img.png
+val/266068_ALI_img.png
+val/266073_ALI_img.png
+val/266085_ALI_img.png
+val/266091_ALI_img.png
+val/266094_ALI_img.png
+val/266107_ALI_img.png
+val/266111_ALI_img.png
+val/266126_ALI_img.png
+val/266136_ALI_img.png
+val/266139_ALI_img.png
+val/266143_ALI_img.png
+val/266148_ALI_img.png
+val/266153_ALI_img.png
+val/266160_ALI_img.png
+val/266163_ALI_img.png
+val/266165_ALI_img.png
+val/266166_ALI_img.png
+val/266173_ALI_img.png
+val/266183_ALI_img.png
+val/266185_ALI_img.png
+val/266190_ALI_img.png
+val/266192_ALI_img.png
+val/266196_ALI_img.png
+val/266199_ALI_img.png
+val/266208_ALI_img.png
+val/266211_ALI_img.png
+val/266214_ALI_img.png
+val/266215_ALI_img.png
+val/266216_ALI_img.png
+val/266220_ALI_img.png
+val/266222_ALI_img.png
+val/266225_ALI_img.png
+val/266230_ALI_img.png
+val/266231_ALI_img.png
+val/266233_ALI_img.png
+val/266234_ALI_img.png
+val/266238_ALI_img.png
+val/266239_ALI_img.png
+val/266240_ALI_img.png
+val/266243_ALI_img.png
+val/266251_ALI_img.png
+val/266252_ALI_img.png
+val/266257_ALI_img.png
+val/266258_ALI_img.png
+val/266265_ALI_img.png
+val/266267_ALI_img.png
+val/266269_ALI_img.png
+val/266275_ALI_img.png
+val/266277_ALI_img.png
+val/266281_ALI_img.png
+val/266286_ALI_img.png
+val/266288_ALI_img.png
+val/266295_ALI_img.png
+val/266296_ALI_img.png
+val/266297_ALI_img.png
+val/266298_ALI_img.png
+val/266300_ALI_img.png
+val/266304_ALI_img.png
+val/266305_ALI_img.png
+val/266309_ALI_img.png
+val/266311_ALI_img.png
+val/266325_ALI_img.png
+val/266329_ALI_img.png
+val/266337_ALI_img.png
+val/266340_ALI_img.png
+val/266348_ALI_img.png
+val/266349_ALI_img.png
+val/266350_ALI_img.png
+val/266355_ALI_img.png
+val/266376_ALI_img.png
+val/266379_ALI_img.png
+val/266381_ALI_img.png
+val/266388_ALI_img.png
+val/266392_ALI_img.png
+val/266393_ALI_img.png
+val/266414_ALI_img.png
+val/266417_ALI_img.png
+val/266436_ALI_img.png
+val/266440_ALI_img.png
+val/266444_ALI_img.png
+val/266447_ALI_img.png
+val/266448_ALI_img.png
+val/266454_ALI_img.png
+val/266456_ALI_img.png
+val/266459_ALI_img.png
+val/266460_ALI_img.png
+val/266463_ALI_img.png
+val/266467_ALI_img.png
+val/266470_ALI_img.png
+val/266478_ALI_img.png
+val/266486_ALI_img.png
+val/266489_ALI_img.png
+val/266492_ALI_img.png
+val/266497_ALI_img.png
+val/266503_ALI_img.png
+val/266504_ALI_img.png
+val/266505_ALI_img.png
+val/266507_ALI_img.png
+val/266515_ALI_img.png
+val/266527_ALI_img.png
+val/266537_ALI_img.png
+val/266538_ALI_img.png
+val/266547_ALI_img.png
+val/266548_ALI_img.png
+val/266565_ALI_img.png
+val/266570_ALI_img.png
+val/266576_ALI_img.png
+val/266577_ALI_img.png
+val/266580_ALI_img.png
+val/266588_ALI_img.png
+val/266594_ALI_img.png
+val/266596_ALI_img.png
+val/266597_ALI_img.png
+val/266602_ALI_img.png
+val/266607_ALI_img.png
+val/266609_ALI_img.png
+val/266610_ALI_img.png
+val/266611_ALI_img.png
+val/266613_ALI_img.png
+val/266615_ALI_img.png
+val/266620_ALI_img.png
+val/266625_ALI_img.png
+val/266628_ALI_img.png
+val/266629_ALI_img.png
+val/266632_ALI_img.png
+val/266635_ALI_img.png
+val/266636_ALI_img.png
+val/266641_ALI_img.png
+val/266643_ALI_img.png
+val/266648_ALI_img.png
+val/266654_ALI_img.png
+val/266667_ALI_img.png
+val/266668_ALI_img.png
+val/266669_ALI_img.png
+val/266670_ALI_img.png
+val/266671_ALI_img.png
+val/266686_ALI_img.png
+val/266688_ALI_img.png
+val/266691_ALI_img.png
+val/266697_ALI_img.png
+val/266702_ALI_img.png
+val/266704_ALI_img.png
+val/266714_ALI_img.png
+val/266716_ALI_img.png
+val/266729_ALI_img.png
+val/266734_ALI_img.png
+val/266761_ALI_img.png
+val/266766_ALI_img.png
+val/266774_ALI_img.png
+val/266780_ALI_img.png
+val/266782_ALI_img.png
+val/266792_ALI_img.png
+val/266794_ALI_img.png
+val/266800_ALI_img.png
+val/266810_ALI_img.png
+val/266813_ALI_img.png
+val/266821_ALI_img.png
+val/266835_ALI_img.png
+val/266836_ALI_img.png
+val/266837_ALI_img.png
+val/266841_ALI_img.png
+val/266852_ALI_img.png
+val/266856_ALI_img.png
+val/266859_ALI_img.png
+val/266860_ALI_img.png
+val/266862_ALI_img.png
+val/266864_ALI_img.png
+val/266865_ALI_img.png
+val/266877_ALI_img.png
+val/266878_ALI_img.png
+val/266881_ALI_img.png
+val/266884_ALI_img.png
+val/266885_ALI_img.png
+val/266896_ALI_img.png
+val/266904_ALI_img.png
+val/266907_ALI_img.png
+val/266919_ALI_img.png
+val/266920_ALI_img.png
+val/266922_ALI_img.png
+val/266926_ALI_img.png
+val/266927_ALI_img.png
+val/266933_ALI_img.png
+val/266946_ALI_img.png
+val/266949_ALI_img.png
+val/266958_ALI_img.png
+val/266959_ALI_img.png
+val/266963_ALI_img.png
+val/266964_ALI_img.png
+val/266965_ALI_img.png
+val/266970_ALI_img.png
+val/266976_ALI_img.png
+val/266979_ALI_img.png
+val/266980_ALI_img.png
+val/266988_ALI_img.png
+val/266991_ALI_img.png
+val/266995_ALI_img.png
+val/266996_ALI_img.png
+val/267000_ALI_img.png
+val/267004_ALI_img.png
+val/267008_ALI_img.png
+val/267009_ALI_img.png
+val/267030_ALI_img.png
+val/267032_ALI_img.png
+val/267045_ALI_img.png
+val/267093_ALI_img.png
+val/267117_ALI_img.png
+val/267122_ALI_img.png
+val/267133_ALI_img.png
+val/267136_ALI_img.png
+val/267138_ALI_img.png
+val/267140_ALI_img.png
+val/267146_ALI_img.png
+val/267148_ALI_img.png
+val/267157_ALI_img.png
+val/267158_ALI_img.png
+val/267166_ALI_img.png
+val/267175_ALI_img.png
+val/267177_ALI_img.png
+val/267178_ALI_img.png
+val/267180_ALI_img.png
+val/267186_ALI_img.png
+val/267190_ALI_img.png
+val/267191_ALI_img.png
+val/267193_ALI_img.png
+val/267194_ALI_img.png
+val/267195_ALI_img.png
+val/267197_ALI_img.png
+val/267206_ALI_img.png
+val/267208_ALI_img.png
+val/267210_ALI_img.png
+val/267224_ALI_img.png
+val/267226_ALI_img.png
+val/267227_ALI_img.png
+val/267228_ALI_img.png
+val/267237_ALI_img.png
+val/267239_ALI_img.png
+val/267241_ALI_img.png
+val/267246_ALI_img.png
+val/267265_ALI_img.png
+val/267268_ALI_img.png
+val/267277_ALI_img.png
+val/267282_ALI_img.png
+val/267283_ALI_img.png
+val/267286_ALI_img.png
+val/267288_ALI_img.png
+val/267293_ALI_img.png
+val/267311_ALI_img.png
+val/267316_ALI_img.png
+val/267320_ALI_img.png
+val/267323_ALI_img.png
+val/267331_ALI_img.png
+val/267333_ALI_img.png
+val/267335_ALI_img.png
+val/267336_ALI_img.png
+val/267340_ALI_img.png
+val/267345_ALI_img.png
+val/267349_ALI_img.png
+val/267355_ALI_img.png
+val/267362_ALI_img.png
+val/267371_ALI_img.png
+val/267377_ALI_img.png
+val/267382_ALI_img.png
+val/267402_ALI_img.png
+val/267404_ALI_img.png
+val/267407_ALI_img.png
+val/267414_ALI_img.png
+val/267415_ALI_img.png
+val/267421_ALI_img.png
+val/267423_ALI_img.png
+val/267424_ALI_img.png
+val/267426_ALI_img.png
+val/267428_ALI_img.png
+val/267431_ALI_img.png
+val/267433_ALI_img.png
+val/267439_ALI_img.png
+val/267441_ALI_img.png
+val/267443_ALI_img.png
+val/267457_ALI_img.png
+val/267463_ALI_img.png
+val/267469_ALI_img.png
+val/267474_ALI_img.png
+val/267475_ALI_img.png
+val/267480_ALI_img.png
+val/267488_ALI_img.png
+val/267490_ALI_img.png
+val/267492_ALI_img.png
+val/267498_ALI_img.png
+val/267500_ALI_img.png
+val/267501_ALI_img.png
+val/267504_ALI_img.png
+val/267508_ALI_img.png
+val/267509_ALI_img.png
+val/267513_ALI_img.png
+val/267516_ALI_img.png
+val/267518_ALI_img.png
+val/267520_ALI_img.png
+val/267522_ALI_img.png
+val/267527_ALI_img.png
+val/267536_ALI_img.png
+val/267545_ALI_img.png
+val/267547_ALI_img.png
+val/267548_ALI_img.png
+val/267550_ALI_img.png
+val/267551_ALI_img.png
+val/267553_ALI_img.png
+val/267558_ALI_img.png
+val/267566_ALI_img.png
+val/267580_ALI_img.png
+val/267585_ALI_img.png
+val/267587_ALI_img.png
+val/267588_ALI_img.png
+val/267599_ALI_img.png
+val/267601_ALI_img.png
+val/267603_ALI_img.png
+val/267622_ALI_img.png
+val/267626_ALI_img.png
+val/267629_ALI_img.png
+val/267630_ALI_img.png
+val/267633_ALI_img.png
+val/267634_ALI_img.png
+val/267637_ALI_img.png
+val/267645_ALI_img.png
+val/267649_ALI_img.png
+val/267651_ALI_img.png
+val/267668_ALI_img.png
+val/267669_ALI_img.png
+val/267672_ALI_img.png
+val/267686_ALI_img.png
+val/267695_ALI_img.png
+val/267699_ALI_img.png
+val/267700_ALI_img.png
+val/267707_ALI_img.png
+val/267719_ALI_img.png
+val/267723_ALI_img.png
+val/267729_ALI_img.png
+val/267734_ALI_img.png
+val/267736_ALI_img.png
+val/267743_ALI_img.png
+val/267754_ALI_img.png
+val/267762_ALI_img.png
+val/267763_ALI_img.png
+val/267764_ALI_img.png
+val/267769_ALI_img.png
+val/267771_ALI_img.png
+val/267775_ALI_img.png
+val/267781_ALI_img.png
+val/267783_ALI_img.png
+val/267784_ALI_img.png
+val/267790_ALI_img.png
+val/267796_ALI_img.png
+val/267803_ALI_img.png
+val/267807_ALI_img.png
+val/267809_ALI_img.png
+val/267811_ALI_img.png
+val/267814_ALI_img.png
+val/267817_ALI_img.png
+val/267828_ALI_img.png
+val/267831_ALI_img.png
+val/267833_ALI_img.png
+val/267838_ALI_img.png
+val/267860_ALI_img.png
+val/267868_ALI_img.png
+val/267871_ALI_img.png
+val/267874_ALI_img.png
+val/267881_ALI_img.png
+val/267887_ALI_img.png
+val/267888_ALI_img.png
+val/267890_ALI_img.png
+val/267892_ALI_img.png
+val/267894_ALI_img.png
+val/267896_ALI_img.png
+val/267899_ALI_img.png
+val/267910_ALI_img.png
+val/267912_ALI_img.png
+val/267915_ALI_img.png
+val/267920_ALI_img.png
+val/267938_ALI_img.png
+val/267939_ALI_img.png
+val/267947_ALI_img.png
+val/267956_ALI_img.png
+val/267961_ALI_img.png
+val/267962_ALI_img.png
+val/267963_ALI_img.png
+val/267969_ALI_img.png
+val/267981_ALI_img.png
+val/267986_ALI_img.png
+val/267991_ALI_img.png
+val/267998_ALI_img.png
+val/268002_ALI_img.png
+val/268010_ALI_img.png
+val/268014_ALI_img.png
+val/268026_ALI_img.png
+val/268042_ALI_img.png
+val/268045_ALI_img.png
+val/268046_ALI_img.png
+val/268050_ALI_img.png
+val/268056_ALI_img.png
+val/268062_ALI_img.png
+val/268064_ALI_img.png
+val/268067_ALI_img.png
+val/268068_ALI_img.png
+val/268072_ALI_img.png
+val/268075_ALI_img.png
+val/268076_ALI_img.png
+val/268079_ALI_img.png
+val/268081_ALI_img.png
+val/268082_ALI_img.png
+val/268083_ALI_img.png
+val/268084_ALI_img.png
+val/268093_ALI_img.png
+val/268094_ALI_img.png
+val/268101_ALI_img.png
+val/268104_ALI_img.png
+val/268106_ALI_img.png
+val/268107_ALI_img.png
+val/268110_ALI_img.png
+val/268111_ALI_img.png
+val/268122_ALI_img.png
+val/268125_ALI_img.png
+val/268133_ALI_img.png
+val/268141_ALI_img.png
+val/268144_ALI_img.png
+val/268145_ALI_img.png
+val/268147_ALI_img.png
+val/268149_ALI_img.png
+val/268162_ALI_img.png
+val/268165_ALI_img.png
+val/268166_ALI_img.png
+val/268173_ALI_img.png
+val/268183_ALI_img.png
+val/268184_ALI_img.png
+val/268190_ALI_img.png
+val/268194_ALI_img.png
+val/268196_ALI_img.png
+val/268206_ALI_img.png
+val/268208_ALI_img.png
+val/268222_ALI_img.png
+val/268225_ALI_img.png
+val/268238_ALI_img.png
+val/268245_ALI_img.png
+val/268247_ALI_img.png
+val/268251_ALI_img.png
+val/268255_ALI_img.png
+val/268262_ALI_img.png
+val/268263_ALI_img.png
+val/268267_ALI_img.png
+val/268270_ALI_img.png
+val/268271_ALI_img.png
+val/268279_ALI_img.png
+val/268282_ALI_img.png
+val/268285_ALI_img.png
+val/268290_ALI_img.png
+val/268291_ALI_img.png
+val/268295_ALI_img.png
+val/268299_ALI_img.png
+val/268300_ALI_img.png
+val/268302_ALI_img.png
+val/268315_ALI_img.png
+val/268317_ALI_img.png
+val/268325_ALI_img.png
+val/268326_ALI_img.png
+val/268327_ALI_img.png
+val/268330_ALI_img.png
+val/268336_ALI_img.png
+val/268348_ALI_img.png
+val/268352_ALI_img.png
+val/268353_ALI_img.png
+val/268378_ALI_img.png
+val/268382_ALI_img.png
+val/268385_ALI_img.png
+val/268386_ALI_img.png
+val/268387_ALI_img.png
+val/268393_ALI_img.png
+val/268398_ALI_img.png
+val/268399_ALI_img.png
+val/268414_ALI_img.png
+val/268421_ALI_img.png
+val/268423_ALI_img.png
+val/268424_ALI_img.png
+val/268429_ALI_img.png
+val/268430_ALI_img.png
+val/268433_ALI_img.png
+val/268437_ALI_img.png
+val/268440_ALI_img.png
+val/268446_ALI_img.png
+val/268447_ALI_img.png
+val/268450_ALI_img.png
+val/268453_ALI_img.png
+val/268472_ALI_img.png
+val/268473_ALI_img.png
+val/268478_ALI_img.png
+val/268481_ALI_img.png
+val/268483_ALI_img.png
+val/268484_ALI_img.png
+val/268486_ALI_img.png
+val/268489_ALI_img.png
+val/268493_ALI_img.png
+val/268498_ALI_img.png
+val/268500_ALI_img.png
+val/268502_ALI_img.png
+val/268503_ALI_img.png
+val/268504_ALI_img.png
+val/268512_ALI_img.png
+val/268516_ALI_img.png
+val/268519_ALI_img.png
+val/268530_ALI_img.png
+val/268533_ALI_img.png
+val/268534_ALI_img.png
+val/268546_ALI_img.png
+val/268550_ALI_img.png
+val/268552_ALI_img.png
+val/268557_ALI_img.png
+val/268572_ALI_img.png
+val/268584_ALI_img.png
+val/268596_ALI_img.png
+val/268601_ALI_img.png
+val/268620_ALI_img.png
+val/268633_ALI_img.png
+val/268639_ALI_img.png
+val/268642_ALI_img.png
+val/268650_ALI_img.png
+val/268662_ALI_img.png
+val/268665_ALI_img.png
+val/268674_ALI_img.png
+val/268679_ALI_img.png
+val/268680_ALI_img.png
+val/268682_ALI_img.png
+val/268684_ALI_img.png
+val/268694_ALI_img.png
+val/268696_ALI_img.png
+val/268697_ALI_img.png
+val/268699_ALI_img.png
+val/268702_ALI_img.png
+val/268706_ALI_img.png
+val/268714_ALI_img.png
+val/268721_ALI_img.png
+val/268724_ALI_img.png
+val/268735_ALI_img.png
+val/268750_ALI_img.png
+val/268758_ALI_img.png
+val/268766_ALI_img.png
+val/268769_ALI_img.png
+val/268770_ALI_img.png
+val/268789_ALI_img.png
+val/268790_ALI_img.png
+val/268793_ALI_img.png
+val/268799_ALI_img.png
+val/268805_ALI_img.png
+val/268806_ALI_img.png
+val/268810_ALI_img.png
+val/268811_ALI_img.png
+val/268813_ALI_img.png
+val/268821_ALI_img.png
+val/268826_ALI_img.png
+val/268829_ALI_img.png
+val/268845_ALI_img.png
+val/268848_ALI_img.png
+val/268855_ALI_img.png
+val/268858_ALI_img.png
+val/268861_ALI_img.png
+val/268879_ALI_img.png
+val/268880_ALI_img.png
+val/268881_ALI_img.png
+val/268882_ALI_img.png
+val/268887_ALI_img.png
+val/268893_ALI_img.png
+val/268896_ALI_img.png
+val/268901_ALI_img.png
+val/268907_ALI_img.png
+val/268924_ALI_img.png
+val/268926_ALI_img.png
+val/268933_ALI_img.png
+val/268936_ALI_img.png
+val/268943_ALI_img.png
+val/268953_ALI_img.png
+val/268954_ALI_img.png
+val/268955_ALI_img.png
+val/268957_ALI_img.png
+val/268958_ALI_img.png
+val/268959_ALI_img.png
+val/268963_ALI_img.png
+val/268965_ALI_img.png
+val/268968_ALI_img.png
+val/268970_ALI_img.png
+val/268972_ALI_img.png
+val/268974_ALI_img.png
+val/268975_ALI_img.png
+val/268978_ALI_img.png
+val/268981_ALI_img.png
+val/268991_ALI_img.png
+val/268993_ALI_img.png
+val/268996_ALI_img.png
+val/269003_ALI_img.png
+val/269008_ALI_img.png
+val/269010_ALI_img.png
+val/269012_ALI_img.png
+val/269022_ALI_img.png
+val/269029_ALI_img.png
+val/269034_ALI_img.png
+val/269035_ALI_img.png
+val/269049_ALI_img.png
+val/269056_ALI_img.png
+val/269057_ALI_img.png
+val/269069_ALI_img.png
+val/269070_ALI_img.png
+val/269086_ALI_img.png
+val/269092_ALI_img.png
+val/269094_ALI_img.png
+val/269107_ALI_img.png
+val/269108_ALI_img.png
+val/269124_ALI_img.png
+val/269133_ALI_img.png
+val/269136_ALI_img.png
+val/269143_ALI_img.png
+val/269146_ALI_img.png
+val/269150_ALI_img.png
+val/269153_ALI_img.png
+val/269162_ALI_img.png
+val/269166_ALI_img.png
+val/269176_ALI_img.png
+val/269177_ALI_img.png
+val/269181_ALI_img.png
+val/269186_ALI_img.png
+val/269202_ALI_img.png
+val/269209_ALI_img.png
+val/269210_ALI_img.png
+val/269214_ALI_img.png
+val/269229_ALI_img.png
+val/269232_ALI_img.png
+val/269234_ALI_img.png
+val/269235_ALI_img.png
+val/269240_ALI_img.png
+val/269245_ALI_img.png
+val/269250_ALI_img.png
+val/269253_ALI_img.png
+val/269259_ALI_img.png
+val/269260_ALI_img.png
+val/269268_ALI_img.png
+val/269269_ALI_img.png
+val/269272_ALI_img.png
+val/269273_ALI_img.png
+val/269278_ALI_img.png
+val/269286_ALI_img.png
+val/269297_ALI_img.png
+val/269314_ALI_img.png
+val/269333_ALI_img.png
+val/269341_ALI_img.png
+val/269348_ALI_img.png
+val/269350_ALI_img.png
+val/269354_ALI_img.png
+val/269355_ALI_img.png
+val/269378_ALI_img.png
+val/269385_ALI_img.png
+val/269387_ALI_img.png
+val/269392_ALI_img.png
+val/269398_ALI_img.png
+val/269420_ALI_img.png
+val/269424_ALI_img.png
+val/269435_ALI_img.png
+val/269436_ALI_img.png
+val/269437_ALI_img.png
+val/269444_ALI_img.png
+val/269447_ALI_img.png
+val/269449_ALI_img.png
+val/269450_ALI_img.png
+val/269454_ALI_img.png
+val/269459_ALI_img.png
+val/269460_ALI_img.png
+val/269499_ALI_img.png
+val/269502_ALI_img.png
+val/269515_ALI_img.png
+val/269518_ALI_img.png
+val/269527_ALI_img.png
+val/269530_ALI_img.png
+val/269531_ALI_img.png
+val/269533_ALI_img.png
+val/269535_ALI_img.png
+val/269541_ALI_img.png
+val/269546_ALI_img.png
+val/269550_ALI_img.png
+val/269552_ALI_img.png
+val/269553_ALI_img.png
+val/269559_ALI_img.png
+val/269562_ALI_img.png
+val/269563_ALI_img.png
+val/269567_ALI_img.png
+val/269573_ALI_img.png
+val/269575_ALI_img.png
+val/269576_ALI_img.png
+val/269577_ALI_img.png
+val/269581_ALI_img.png
+val/269591_ALI_img.png
+val/269595_ALI_img.png
+val/269599_ALI_img.png
+val/269602_ALI_img.png
+val/269604_ALI_img.png
+val/269607_ALI_img.png
+val/269608_ALI_img.png
+val/269621_ALI_img.png
+val/269625_ALI_img.png
+val/269629_ALI_img.png
+val/269637_ALI_img.png
+val/269638_ALI_img.png
+val/269642_ALI_img.png
+val/269650_ALI_img.png
+val/269651_ALI_img.png
+val/269652_ALI_img.png
+val/269657_ALI_img.png
+val/269659_ALI_img.png
+val/269660_ALI_img.png
+val/269682_ALI_img.png
+val/269689_ALI_img.png
+val/269701_ALI_img.png
+val/269705_ALI_img.png
+val/269707_ALI_img.png
+val/269727_ALI_img.png
+val/269730_ALI_img.png
+val/269744_ALI_img.png
+val/269748_ALI_img.png
+val/269752_ALI_img.png
+val/269754_ALI_img.png
+val/269763_ALI_img.png
+val/269764_ALI_img.png
+val/269766_ALI_img.png
+val/269767_ALI_img.png
+val/269775_ALI_img.png
+val/269777_ALI_img.png
+val/269779_ALI_img.png
+val/269780_ALI_img.png
+val/269793_ALI_img.png
+val/269794_ALI_img.png
+val/269799_ALI_img.png
+val/269800_ALI_img.png
+val/269801_ALI_img.png
+val/269813_ALI_img.png
+val/269816_ALI_img.png
+val/269825_ALI_img.png
+val/269826_ALI_img.png
+val/269831_ALI_img.png
+val/269838_ALI_img.png
+val/269842_ALI_img.png
+val/269851_ALI_img.png
+val/269854_ALI_img.png
+val/269855_ALI_img.png
+val/269857_ALI_img.png
+val/269864_ALI_img.png
+val/269866_ALI_img.png
+val/269869_ALI_img.png
+val/269874_ALI_img.png
+val/269876_ALI_img.png
+val/269879_ALI_img.png
+val/269881_ALI_img.png
+val/269885_ALI_img.png
+val/269891_ALI_img.png
+val/269892_ALI_img.png
+val/269893_ALI_img.png
+val/269894_ALI_img.png
+val/269897_ALI_img.png
+val/269899_ALI_img.png
+val/269903_ALI_img.png
+val/269909_ALI_img.png
+val/269911_ALI_img.png
+val/269914_ALI_img.png
+val/269916_ALI_img.png
+val/269919_ALI_img.png
+val/269930_ALI_img.png
+val/269934_ALI_img.png
+val/269936_ALI_img.png
+val/269940_ALI_img.png
+val/269957_ALI_img.png
+val/269963_ALI_img.png
+val/269966_ALI_img.png
+val/269969_ALI_img.png
+val/269976_ALI_img.png
+val/269980_ALI_img.png
+val/269989_ALI_img.png
+val/269993_ALI_img.png
+val/269994_ALI_img.png
+val/269998_ALI_img.png
+val/270000_ALI_img.png
+val/270001_ALI_img.png
+val/270006_ALI_img.png
+val/270013_ALI_img.png
+val/270015_ALI_img.png
+val/270018_ALI_img.png
+val/270020_ALI_img.png
+val/270021_ALI_img.png
+val/270025_ALI_img.png
+val/270026_ALI_img.png
+val/270043_ALI_img.png
+val/270052_ALI_img.png
+val/270053_ALI_img.png
+val/270054_ALI_img.png
+val/270056_ALI_img.png
+val/270062_ALI_img.png
+val/270066_ALI_img.png
+val/270067_ALI_img.png
+val/270074_ALI_img.png
+val/270078_ALI_img.png
+val/270079_ALI_img.png
+val/270082_ALI_img.png
+val/270085_ALI_img.png
+val/270087_ALI_img.png
+val/270088_ALI_img.png
+val/270092_ALI_img.png
+val/270099_ALI_img.png
+val/270100_ALI_img.png
+val/270101_ALI_img.png
+val/270103_ALI_img.png
+val/270104_ALI_img.png
+val/270110_ALI_img.png
+val/270112_ALI_img.png
+val/270113_ALI_img.png
+val/270116_ALI_img.png
+val/270124_ALI_img.png
+val/270132_ALI_img.png
+val/270135_ALI_img.png
+val/270144_ALI_img.png
+val/270154_ALI_img.png
+val/270155_ALI_img.png
+val/270161_ALI_img.png
+val/270162_ALI_img.png
+val/270176_ALI_img.png
+val/270178_ALI_img.png
+val/270199_ALI_img.png
+val/270204_ALI_img.png
+val/270233_ALI_img.png
+val/270730_ALI_img.png
+val/270972_ALI_img.png
+val/271077_ALI_img.png
+val/271275_ALI_img.png
+val/271333_ALI_img.png
+val/271867_ALI_img.png
+val/272602_ALI_img.png
+val/273419_ALI_img.png
+val/274002_ALI_img.png
+val/274860_ALI_img.png
+val/275901_ALI_img.png
+val/276571_ALI_img.png
+val/277831_ALI_img.png
+val/277967_ALI_img.png
+val/278835_ALI_img.png
+val/279242_ALI_img.png
+val/279283_ALI_img.png
+val/279347_ALI_img.png
+val/279544_ALI_img.png
+val/282086_ALI_img.png
+val/282105_ALI_img.png
+val/282185_ALI_img.png
+val/282390_ALI_img.png
+val/283177_ALI_img.png
+val/284880_ALI_img.png
+val/285331_ALI_img.png
+val/285480_ALI_img.png
+val/285677_ALI_img.png
+val/285863_ALI_img.png
+val/286181_ALI_img.png
+val/286199_ALI_img.png
+val/286377_ALI_img.png
+val/288267_ALI_img.png
+val/288607_ALI_img.png
+val/289101_ALI_img.png
+val/289145_ALI_img.png
+val/289363_ALI_img.png
+val/289419_ALI_img.png
+val/289874_ALI_img.png
+val/289938_ALI_img.png
+val/290891_ALI_img.png
+val/291366_ALI_img.png
+val/291388_ALI_img.png
+val/291611_ALI_img.png
+val/291703_ALI_img.png
+val/292739_ALI_img.png
+val/292887_ALI_img.png
+val/293165_ALI_img.png
+val/293392_ALI_img.png
+val/293789_ALI_img.png
+val/294561_ALI_img.png
+val/295985_ALI_img.png
+val/296350_ALI_img.png
+val/296721_ALI_img.png
+val/297546_ALI_img.png
+val/297612_ALI_img.png
+val/297754_ALI_img.png
+val/297771_ALI_img.png
+val/297917_ALI_img.png
+val/298353_ALI_img.png
+val/73717_DT_img.png
+val/73771_DT_img.png
+val/75799_DT_img.png
+val/78120_DT_img.png
+val/79685_DT_img.png
+val/80847_DT_img.png
+val/83994_DT_img.png
+val/84262_DT_img.png
+val/84335_DT_img.png
+val/87932_DT_img.png
+val/90896_DT_img.png
+val/92174_DT_img.png
+val/93302_DT_img.png
+val/93871_DT_img.png
+val/94887_DT_img.png
+val/95307_DT_img.png
+val/97627_DT_img.png
+val/98901_DT_img.png
+val/99353_DT_img.png
+val/99660_DT_img.png
\ No newline at end of file
diff --git a/Lotus/evaluation/dataset_normal/scannet/__init__.py b/Lotus/evaluation/dataset_normal/scannet/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..4cba79d9fa7ceafce42fb89ec39a41ff3ab921b3
--- /dev/null
+++ b/Lotus/evaluation/dataset_normal/scannet/__init__.py
@@ -0,0 +1,48 @@
+""" Get samples from ScanNet (https://github.com/ScanNet/ScanNet)
+ NOTE: GT surface normals and data split are from FrameNet (ICCV 2019) - https://github.com/hjwdzh/FrameNet
+"""
+import os
+import cv2
+import numpy as np
+
+from evaluation.dataset_normal import Sample
+
+
+def get_sample(base_data_dir, sample_path, info):
+ # e.g. sample_path = "scene0532_00/000000_img.png"
+ scene_name = sample_path.split('/')[0]
+ img_name, img_ext = sample_path.split('/')[1].split('_img')
+
+ dataset_path = os.path.join(base_data_dir, 'dsine_eval', 'scannet')
+ img_path = '%s/%s' % (dataset_path, sample_path)
+ normal_path = img_path.replace('_img'+img_ext, '_normal.png')
+ intrins_path = img_path.replace('_img'+img_ext, '_intrins.npy')
+ assert os.path.exists(img_path)
+ assert os.path.exists(normal_path)
+ assert os.path.exists(intrins_path)
+
+ # read image (H, W, 3)
+ img = cv2.cvtColor(cv2.imread(img_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ img = img.astype(np.float32) / 255.0
+
+ # read normal (H, W, 3)
+ normal = cv2.cvtColor(cv2.imread(normal_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ normal_mask = np.sum(normal, axis=2, keepdims=True) > 0
+ normal = (normal.astype(np.float32) / 255.0) * 2.0 - 1.0
+
+ # read intrins (3, 3)
+ intrins = np.load(intrins_path)
+
+ sample = Sample(
+ img=img,
+ normal=normal,
+ normal_mask=normal_mask,
+ intrins=intrins,
+
+ dataset_name='scannet',
+ scene_name=scene_name,
+ img_name=img_name,
+ info=info
+ )
+
+ return sample
diff --git a/Lotus/evaluation/dataset_normal/scannet/split/test.txt b/Lotus/evaluation/dataset_normal/scannet/split/test.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0c71d9f0e52ddef397d1158075b20b613caca50c
--- /dev/null
+++ b/Lotus/evaluation/dataset_normal/scannet/split/test.txt
@@ -0,0 +1,300 @@
+scene0532_00/000000_img.png
+scene0220_02/000450_img.png
+scene0061_00/000420_img.png
+scene0656_03/000490_img.png
+scene0525_01/000960_img.png
+scene0310_01/000630_img.png
+scene0628_00/000100_img.png
+scene0481_01/000900_img.png
+scene0608_02/001690_img.png
+scene0415_00/000750_img.png
+scene0603_00/001590_img.png
+scene0740_00/000510_img.png
+scene0740_00/002510_img.png
+scene0177_00/000550_img.png
+scene0395_01/000160_img.png
+scene0395_01/002160_img.png
+scene0343_00/000210_img.png
+scene0241_00/000970_img.png
+scene0717_00/000010_img.png
+scene0362_00/000890_img.png
+scene0457_02/000070_img.png
+scene0296_00/000040_img.png
+scene0157_00/000300_img.png
+scene0502_02/001130_img.png
+scene0101_01/000410_img.png
+scene0610_02/000730_img.png
+scene0610_02/002780_img.png
+scene0416_00/000950_img.png
+scene0685_02/000840_img.png
+scene0685_02/003050_img.png
+scene0662_01/001810_img.png
+scene0670_01/000840_img.png
+scene0670_01/002840_img.png
+scene0012_01/000160_img.png
+scene0012_01/002160_img.png
+scene0320_03/000790_img.png
+scene0780_00/000450_img.png
+scene0575_01/000510_img.png
+scene0575_01/002510_img.png
+scene0168_01/000100_img.png
+scene0335_02/000980_img.png
+scene0691_00/000400_img.png
+scene0778_00/001230_img.png
+scene0019_01/000490_img.png
+scene0554_00/001960_img.png
+scene0114_00/000260_img.png
+scene0457_01/000350_img.png
+scene0548_01/000150_img.png
+scene0548_01/002150_img.png
+scene0378_00/000610_img.png
+scene0505_00/000710_img.png
+scene0505_00/002710_img.png
+scene0695_01/001200_img.png
+scene0424_02/001060_img.png
+scene0627_00/001470_img.png
+scene0279_00/001200_img.png
+scene0291_01/001280_img.png
+scene0768_00/000330_img.png
+scene0768_00/002330_img.png
+scene0696_01/000340_img.png
+scene0145_00/000420_img.png
+scene0185_00/000370_img.png
+scene0185_00/002370_img.png
+scene0806_00/001070_img.png
+scene0261_03/000410_img.png
+scene0068_00/000570_img.png
+scene0804_00/000510_img.png
+scene0221_01/000490_img.png
+scene0630_03/000880_img.png
+scene0617_00/001270_img.png
+scene0206_02/001640_img.png
+scene0582_02/000590_img.png
+scene0031_01/000100_img.png
+scene0031_01/002100_img.png
+scene0505_04/001100_img.png
+scene0092_01/000600_img.png
+scene0542_00/000570_img.png
+scene0525_02/000480_img.png
+scene0756_00/000870_img.png
+scene0756_00/002870_img.png
+scene0061_01/001360_img.png
+scene0588_01/000940_img.png
+scene0256_02/000610_img.png
+scene0300_00/001430_img.png
+scene0451_05/001110_img.png
+scene0397_01/001390_img.png
+scene0372_00/000250_img.png
+scene0372_00/002280_img.png
+scene0647_01/000790_img.png
+scene0474_01/001600_img.png
+scene0404_00/000360_img.png
+scene0404_00/002360_img.png
+scene0702_01/000010_img.png
+scene0114_02/001420_img.png
+scene0460_00/000820_img.png
+scene0151_01/000390_img.png
+scene0151_01/002390_img.png
+scene0078_02/000520_img.png
+scene0772_00/001530_img.png
+scene0705_01/000490_img.png
+scene0408_01/000590_img.png
+scene0538_00/001430_img.png
+scene0651_00/000080_img.png
+scene0210_01/001040_img.png
+scene0002_00/000240_img.png
+scene0002_00/002240_img.png
+scene0002_00/004240_img.png
+scene0347_00/001040_img.png
+scene0072_02/000210_img.png
+scene0371_00/000410_img.png
+scene0211_00/001120_img.png
+scene0514_01/000050_img.png
+scene0473_01/000910_img.png
+scene0362_02/001970_img.png
+scene0024_02/001180_img.png
+scene0673_00/000280_img.png
+scene0176_00/000030_img.png
+scene0073_00/000400_img.png
+scene0186_01/000230_img.png
+scene0236_00/000490_img.png
+scene0210_00/000780_img.png
+scene0325_01/000920_img.png
+scene0044_01/000170_img.png
+scene0197_00/001300_img.png
+scene0472_02/001190_img.png
+scene0611_01/000010_img.png
+scene0758_00/000710_img.png
+scene0650_00/000870_img.png
+scene0728_00/000160_img.png
+scene0217_00/000450_img.png
+scene0335_01/000070_img.png
+scene0335_01/002070_img.png
+scene0504_00/001230_img.png
+scene0669_01/000780_img.png
+scene0143_01/000760_img.png
+scene0320_01/000460_img.png
+scene0645_01/000340_img.png
+scene0645_01/002340_img.png
+scene0645_01/004340_img.png
+scene0248_01/000300_img.png
+scene0416_04/000580_img.png
+scene0416_04/002580_img.png
+scene0534_00/000780_img.png
+scene0489_02/001010_img.png
+scene0379_00/000500_img.png
+scene0500_01/000480_img.png
+scene0561_01/000850_img.png
+scene0580_00/001200_img.png
+scene0580_00/003200_img.png
+scene0552_01/000430_img.png
+scene0744_00/000020_img.png
+scene0744_00/002020_img.png
+scene0044_00/001030_img.png
+scene0301_02/000140_img.png
+scene0422_00/000940_img.png
+scene0655_01/000700_img.png
+scene0803_00/001770_img.png
+scene0629_02/000530_img.png
+scene0609_01/000030_img.png
+scene0623_01/000930_img.png
+scene0596_00/000660_img.png
+scene0150_01/000150_img.png
+scene0501_02/001770_img.png
+scene0560_00/000420_img.png
+scene0406_02/000220_img.png
+scene0587_02/001010_img.png
+scene0540_00/000730_img.png
+scene0074_01/001390_img.png
+scene0620_01/000200_img.png
+scene0486_00/000320_img.png
+scene0486_00/002320_img.png
+scene0600_02/001350_img.png
+scene0085_00/001800_img.png
+scene0084_00/000560_img.png
+scene0319_00/000580_img.png
+scene0400_01/000890_img.png
+scene0548_02/000020_img.png
+scene0548_02/002110_img.png
+scene0244_01/000360_img.png
+scene0785_00/000630_img.png
+scene0785_00/002630_img.png
+scene0479_02/000530_img.png
+scene0121_00/000310_img.png
+scene0107_00/000410_img.png
+scene0328_00/000040_img.png
+scene0196_00/000350_img.png
+scene0404_01/000720_img.png
+scene0404_01/002720_img.png
+scene0081_02/000710_img.png
+scene0666_00/000360_img.png
+scene0367_00/000330_img.png
+scene0340_01/000460_img.png
+scene0300_01/000980_img.png
+scene0275_00/001230_img.png
+scene0036_00/000440_img.png
+scene0520_01/001350_img.png
+scene0113_01/000000_img.png
+scene0541_01/000020_img.png
+scene0034_01/001070_img.png
+scene0030_01/000160_img.png
+scene0438_00/000510_img.png
+scene0679_00/001210_img.png
+scene0546_00/000400_img.png
+scene0223_00/000600_img.png
+scene0403_00/001570_img.png
+scene0001_01/001170_img.png
+scene0014_00/001880_img.png
+scene0673_02/001480_img.png
+scene0794_00/000000_img.png
+scene0209_02/000210_img.png
+scene0801_00/000180_img.png
+scene0086_00/000800_img.png
+scene0501_00/001370_img.png
+scene0412_01/000070_img.png
+scene0339_00/000730_img.png
+scene0724_00/000500_img.png
+scene0654_01/001080_img.png
+scene0081_01/000460_img.png
+scene0576_02/001030_img.png
+scene0589_01/001010_img.png
+scene0428_00/001470_img.png
+scene0199_00/000110_img.png
+scene0513_00/000440_img.png
+scene0512_00/000110_img.png
+scene0508_00/000840_img.png
+scene0009_02/000360_img.png
+scene0303_00/001250_img.png
+scene0533_01/001240_img.png
+scene0445_01/000640_img.png
+scene0392_00/001870_img.png
+scene0111_01/001560_img.png
+scene0192_02/000620_img.png
+scene0396_00/000170_img.png
+scene0376_02/000320_img.png
+scene0100_01/000880_img.png
+scene0578_01/000920_img.png
+scene0765_00/000400_img.png
+scene0784_00/000420_img.png
+scene0784_00/002430_img.png
+scene0784_00/004430_img.png
+scene0065_02/000740_img.png
+scene0207_02/000040_img.png
+scene0207_02/002040_img.png
+scene0440_01/000500_img.png
+scene0220_01/000450_img.png
+scene0713_00/000000_img.png
+scene0713_00/002000_img.png
+scene0697_02/000070_img.png
+scene0697_02/002070_img.png
+scene0286_03/001170_img.png
+scene0393_02/000810_img.png
+scene0370_02/000080_img.png
+scene0370_02/002080_img.png
+scene0452_02/000950_img.png
+scene0226_00/001270_img.png
+scene0474_03/001610_img.png
+scene0304_00/000600_img.png
+scene0250_01/000820_img.png
+scene0250_01/002820_img.png
+scene0419_02/001480_img.png
+scene0548_00/000000_img.png
+scene0548_00/002050_img.png
+scene0568_00/000150_img.png
+scene0324_00/000080_img.png
+scene0567_00/000070_img.png
+scene0567_00/002070_img.png
+scene0659_01/001460_img.png
+scene0540_02/000120_img.png
+scene0488_01/000680_img.png
+scene0146_01/000260_img.png
+scene0580_01/001130_img.png
+scene0580_01/003130_img.png
+scene0421_02/001320_img.png
+scene0657_00/000090_img.png
+scene0588_02/001380_img.png
+scene0471_02/000570_img.png
+scene0186_00/000260_img.png
+scene0186_00/002260_img.png
+scene0065_01/000800_img.png
+scene0456_01/000710_img.png
+scene0524_01/001680_img.png
+scene0062_00/000690_img.png
+scene0134_01/000780_img.png
+scene0294_00/000280_img.png
+scene0294_00/002280_img.png
+scene0452_01/001090_img.png
+scene0142_00/000770_img.png
+scene0135_00/000330_img.png
+scene0279_02/000780_img.png
+scene0698_01/000390_img.png
+scene0520_00/000820_img.png
+scene0448_01/000850_img.png
+scene0276_00/000320_img.png
+scene0731_00/000220_img.png
+scene0599_01/001090_img.png
+scene0631_02/000210_img.png
+scene0748_00/000890_img.png
+scene0170_02/000190_img.png
+scene0215_01/000400_img.png
+scene0178_00/001330_img.png
\ No newline at end of file
diff --git a/Lotus/evaluation/dataset_normal/sintel/__init__.py b/Lotus/evaluation/dataset_normal/sintel/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..f3837103cb41e38ce7c1f12544174e88883f3ec5
--- /dev/null
+++ b/Lotus/evaluation/dataset_normal/sintel/__init__.py
@@ -0,0 +1,49 @@
+""" Get samples from Sintel (http://sintel.is.tue.mpg.de/)
+ NOTE: We computed the GT surface normals by doing discontinuity-aware plane fitting
+"""
+import os
+import cv2
+import numpy as np
+os.environ["OPENCV_IO_ENABLE_OPENEXR"]="1"
+
+from evaluation.dataset_normal import Sample
+
+
+
+def get_sample(base_data_dir, sample_path, info):
+ # e.g. sample_path = "alley_1/frame_0001_img.png"
+ scene_name = sample_path.split('/')[0]
+ img_name, img_ext = sample_path.split('/')[1].split('_img')
+
+ dataset_path = os.path.join(base_data_dir, 'dsine_eval', 'sintel')
+ img_path = '%s/%s' % (dataset_path, sample_path)
+ normal_path = img_path.replace('_img'+img_ext, '_normal.exr')
+ intrins_path = img_path.replace('_img'+img_ext, '_intrins.npy')
+ assert os.path.exists(img_path)
+ assert os.path.exists(normal_path)
+ assert os.path.exists(intrins_path)
+
+ # read image (H, W, 3)
+ img = cv2.cvtColor(cv2.imread(img_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ img = img.astype(np.float32) / 255.0
+
+ # read normal (H, W, 3)
+ normal = cv2.cvtColor(cv2.imread(normal_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ normal_mask = np.linalg.norm(normal, axis=2, keepdims=True) > 0.5
+
+ # read intrins (3, 3)
+ intrins = np.load(intrins_path)
+
+ sample = Sample(
+ img=img,
+ normal=normal,
+ normal_mask=normal_mask,
+ intrins=intrins,
+
+ dataset_name='sintel',
+ scene_name=scene_name,
+ img_name=img_name,
+ info=info
+ )
+
+ return sample
\ No newline at end of file
diff --git a/Lotus/evaluation/dataset_normal/sintel/split/sintel.txt b/Lotus/evaluation/dataset_normal/sintel/split/sintel.txt
new file mode 100644
index 0000000000000000000000000000000000000000..03dd29dca88d2be4b36b3177ee5608a627c22840
--- /dev/null
+++ b/Lotus/evaluation/dataset_normal/sintel/split/sintel.txt
@@ -0,0 +1,1064 @@
+alley_1/frame_0001_img.png
+alley_1/frame_0002_img.png
+alley_1/frame_0003_img.png
+alley_1/frame_0004_img.png
+alley_1/frame_0005_img.png
+alley_1/frame_0006_img.png
+alley_1/frame_0007_img.png
+alley_1/frame_0008_img.png
+alley_1/frame_0009_img.png
+alley_1/frame_0010_img.png
+alley_1/frame_0011_img.png
+alley_1/frame_0012_img.png
+alley_1/frame_0013_img.png
+alley_1/frame_0014_img.png
+alley_1/frame_0015_img.png
+alley_1/frame_0016_img.png
+alley_1/frame_0017_img.png
+alley_1/frame_0018_img.png
+alley_1/frame_0019_img.png
+alley_1/frame_0020_img.png
+alley_1/frame_0021_img.png
+alley_1/frame_0022_img.png
+alley_1/frame_0023_img.png
+alley_1/frame_0024_img.png
+alley_1/frame_0025_img.png
+alley_1/frame_0026_img.png
+alley_1/frame_0027_img.png
+alley_1/frame_0028_img.png
+alley_1/frame_0029_img.png
+alley_1/frame_0030_img.png
+alley_1/frame_0031_img.png
+alley_1/frame_0032_img.png
+alley_1/frame_0033_img.png
+alley_1/frame_0034_img.png
+alley_1/frame_0035_img.png
+alley_1/frame_0036_img.png
+alley_1/frame_0037_img.png
+alley_1/frame_0038_img.png
+alley_1/frame_0039_img.png
+alley_1/frame_0040_img.png
+alley_1/frame_0041_img.png
+alley_1/frame_0042_img.png
+alley_1/frame_0043_img.png
+alley_1/frame_0044_img.png
+alley_1/frame_0045_img.png
+alley_1/frame_0046_img.png
+alley_1/frame_0047_img.png
+alley_1/frame_0048_img.png
+alley_1/frame_0049_img.png
+alley_1/frame_0050_img.png
+alley_2/frame_0001_img.png
+alley_2/frame_0002_img.png
+alley_2/frame_0003_img.png
+alley_2/frame_0004_img.png
+alley_2/frame_0005_img.png
+alley_2/frame_0006_img.png
+alley_2/frame_0007_img.png
+alley_2/frame_0008_img.png
+alley_2/frame_0009_img.png
+alley_2/frame_0010_img.png
+alley_2/frame_0011_img.png
+alley_2/frame_0012_img.png
+alley_2/frame_0013_img.png
+alley_2/frame_0014_img.png
+alley_2/frame_0015_img.png
+alley_2/frame_0016_img.png
+alley_2/frame_0017_img.png
+alley_2/frame_0018_img.png
+alley_2/frame_0019_img.png
+alley_2/frame_0020_img.png
+alley_2/frame_0021_img.png
+alley_2/frame_0022_img.png
+alley_2/frame_0023_img.png
+alley_2/frame_0024_img.png
+alley_2/frame_0025_img.png
+alley_2/frame_0026_img.png
+alley_2/frame_0027_img.png
+alley_2/frame_0028_img.png
+alley_2/frame_0029_img.png
+alley_2/frame_0030_img.png
+alley_2/frame_0031_img.png
+alley_2/frame_0032_img.png
+alley_2/frame_0033_img.png
+alley_2/frame_0034_img.png
+alley_2/frame_0035_img.png
+alley_2/frame_0036_img.png
+alley_2/frame_0037_img.png
+alley_2/frame_0038_img.png
+alley_2/frame_0039_img.png
+alley_2/frame_0040_img.png
+alley_2/frame_0041_img.png
+alley_2/frame_0042_img.png
+alley_2/frame_0043_img.png
+alley_2/frame_0044_img.png
+alley_2/frame_0045_img.png
+alley_2/frame_0046_img.png
+alley_2/frame_0047_img.png
+alley_2/frame_0048_img.png
+alley_2/frame_0049_img.png
+alley_2/frame_0050_img.png
+ambush_2/frame_0001_img.png
+ambush_2/frame_0002_img.png
+ambush_2/frame_0003_img.png
+ambush_2/frame_0004_img.png
+ambush_2/frame_0005_img.png
+ambush_2/frame_0006_img.png
+ambush_2/frame_0007_img.png
+ambush_2/frame_0008_img.png
+ambush_2/frame_0009_img.png
+ambush_2/frame_0010_img.png
+ambush_2/frame_0011_img.png
+ambush_2/frame_0012_img.png
+ambush_2/frame_0013_img.png
+ambush_2/frame_0014_img.png
+ambush_2/frame_0015_img.png
+ambush_2/frame_0016_img.png
+ambush_2/frame_0017_img.png
+ambush_2/frame_0018_img.png
+ambush_2/frame_0019_img.png
+ambush_2/frame_0020_img.png
+ambush_2/frame_0021_img.png
+ambush_4/frame_0001_img.png
+ambush_4/frame_0002_img.png
+ambush_4/frame_0003_img.png
+ambush_4/frame_0004_img.png
+ambush_4/frame_0005_img.png
+ambush_4/frame_0006_img.png
+ambush_4/frame_0007_img.png
+ambush_4/frame_0008_img.png
+ambush_4/frame_0009_img.png
+ambush_4/frame_0010_img.png
+ambush_4/frame_0011_img.png
+ambush_4/frame_0012_img.png
+ambush_4/frame_0013_img.png
+ambush_4/frame_0014_img.png
+ambush_4/frame_0015_img.png
+ambush_4/frame_0016_img.png
+ambush_4/frame_0017_img.png
+ambush_4/frame_0018_img.png
+ambush_4/frame_0019_img.png
+ambush_4/frame_0020_img.png
+ambush_4/frame_0021_img.png
+ambush_4/frame_0022_img.png
+ambush_4/frame_0023_img.png
+ambush_4/frame_0024_img.png
+ambush_4/frame_0025_img.png
+ambush_4/frame_0026_img.png
+ambush_4/frame_0027_img.png
+ambush_4/frame_0028_img.png
+ambush_4/frame_0029_img.png
+ambush_4/frame_0030_img.png
+ambush_4/frame_0031_img.png
+ambush_4/frame_0032_img.png
+ambush_4/frame_0033_img.png
+ambush_5/frame_0001_img.png
+ambush_5/frame_0002_img.png
+ambush_5/frame_0003_img.png
+ambush_5/frame_0004_img.png
+ambush_5/frame_0005_img.png
+ambush_5/frame_0006_img.png
+ambush_5/frame_0007_img.png
+ambush_5/frame_0008_img.png
+ambush_5/frame_0009_img.png
+ambush_5/frame_0010_img.png
+ambush_5/frame_0011_img.png
+ambush_5/frame_0012_img.png
+ambush_5/frame_0013_img.png
+ambush_5/frame_0014_img.png
+ambush_5/frame_0015_img.png
+ambush_5/frame_0016_img.png
+ambush_5/frame_0017_img.png
+ambush_5/frame_0018_img.png
+ambush_5/frame_0019_img.png
+ambush_5/frame_0020_img.png
+ambush_5/frame_0021_img.png
+ambush_5/frame_0022_img.png
+ambush_5/frame_0023_img.png
+ambush_5/frame_0024_img.png
+ambush_5/frame_0025_img.png
+ambush_5/frame_0026_img.png
+ambush_5/frame_0027_img.png
+ambush_5/frame_0028_img.png
+ambush_5/frame_0029_img.png
+ambush_5/frame_0030_img.png
+ambush_5/frame_0031_img.png
+ambush_5/frame_0032_img.png
+ambush_5/frame_0033_img.png
+ambush_5/frame_0034_img.png
+ambush_5/frame_0035_img.png
+ambush_5/frame_0036_img.png
+ambush_5/frame_0037_img.png
+ambush_5/frame_0038_img.png
+ambush_5/frame_0039_img.png
+ambush_5/frame_0040_img.png
+ambush_5/frame_0041_img.png
+ambush_5/frame_0042_img.png
+ambush_5/frame_0043_img.png
+ambush_5/frame_0044_img.png
+ambush_5/frame_0045_img.png
+ambush_5/frame_0046_img.png
+ambush_5/frame_0047_img.png
+ambush_5/frame_0048_img.png
+ambush_5/frame_0049_img.png
+ambush_5/frame_0050_img.png
+ambush_6/frame_0001_img.png
+ambush_6/frame_0002_img.png
+ambush_6/frame_0003_img.png
+ambush_6/frame_0004_img.png
+ambush_6/frame_0005_img.png
+ambush_6/frame_0006_img.png
+ambush_6/frame_0007_img.png
+ambush_6/frame_0008_img.png
+ambush_6/frame_0009_img.png
+ambush_6/frame_0010_img.png
+ambush_6/frame_0011_img.png
+ambush_6/frame_0012_img.png
+ambush_6/frame_0013_img.png
+ambush_6/frame_0014_img.png
+ambush_6/frame_0015_img.png
+ambush_6/frame_0016_img.png
+ambush_6/frame_0017_img.png
+ambush_6/frame_0018_img.png
+ambush_6/frame_0019_img.png
+ambush_6/frame_0020_img.png
+ambush_7/frame_0001_img.png
+ambush_7/frame_0002_img.png
+ambush_7/frame_0003_img.png
+ambush_7/frame_0004_img.png
+ambush_7/frame_0005_img.png
+ambush_7/frame_0006_img.png
+ambush_7/frame_0007_img.png
+ambush_7/frame_0008_img.png
+ambush_7/frame_0009_img.png
+ambush_7/frame_0010_img.png
+ambush_7/frame_0011_img.png
+ambush_7/frame_0012_img.png
+ambush_7/frame_0013_img.png
+ambush_7/frame_0014_img.png
+ambush_7/frame_0015_img.png
+ambush_7/frame_0016_img.png
+ambush_7/frame_0017_img.png
+ambush_7/frame_0018_img.png
+ambush_7/frame_0019_img.png
+ambush_7/frame_0020_img.png
+ambush_7/frame_0021_img.png
+ambush_7/frame_0022_img.png
+ambush_7/frame_0023_img.png
+ambush_7/frame_0024_img.png
+ambush_7/frame_0025_img.png
+ambush_7/frame_0026_img.png
+ambush_7/frame_0027_img.png
+ambush_7/frame_0028_img.png
+ambush_7/frame_0029_img.png
+ambush_7/frame_0030_img.png
+ambush_7/frame_0031_img.png
+ambush_7/frame_0032_img.png
+ambush_7/frame_0033_img.png
+ambush_7/frame_0034_img.png
+ambush_7/frame_0035_img.png
+ambush_7/frame_0036_img.png
+ambush_7/frame_0037_img.png
+ambush_7/frame_0038_img.png
+ambush_7/frame_0039_img.png
+ambush_7/frame_0040_img.png
+ambush_7/frame_0041_img.png
+ambush_7/frame_0042_img.png
+ambush_7/frame_0043_img.png
+ambush_7/frame_0044_img.png
+ambush_7/frame_0045_img.png
+ambush_7/frame_0046_img.png
+ambush_7/frame_0047_img.png
+ambush_7/frame_0048_img.png
+ambush_7/frame_0049_img.png
+ambush_7/frame_0050_img.png
+bamboo_1/frame_0001_img.png
+bamboo_1/frame_0002_img.png
+bamboo_1/frame_0003_img.png
+bamboo_1/frame_0004_img.png
+bamboo_1/frame_0005_img.png
+bamboo_1/frame_0006_img.png
+bamboo_1/frame_0007_img.png
+bamboo_1/frame_0008_img.png
+bamboo_1/frame_0009_img.png
+bamboo_1/frame_0010_img.png
+bamboo_1/frame_0011_img.png
+bamboo_1/frame_0012_img.png
+bamboo_1/frame_0013_img.png
+bamboo_1/frame_0014_img.png
+bamboo_1/frame_0015_img.png
+bamboo_1/frame_0016_img.png
+bamboo_1/frame_0017_img.png
+bamboo_1/frame_0018_img.png
+bamboo_1/frame_0019_img.png
+bamboo_1/frame_0020_img.png
+bamboo_1/frame_0021_img.png
+bamboo_1/frame_0022_img.png
+bamboo_1/frame_0023_img.png
+bamboo_1/frame_0024_img.png
+bamboo_1/frame_0025_img.png
+bamboo_1/frame_0026_img.png
+bamboo_1/frame_0027_img.png
+bamboo_1/frame_0028_img.png
+bamboo_1/frame_0029_img.png
+bamboo_1/frame_0030_img.png
+bamboo_1/frame_0031_img.png
+bamboo_1/frame_0032_img.png
+bamboo_1/frame_0033_img.png
+bamboo_1/frame_0034_img.png
+bamboo_1/frame_0035_img.png
+bamboo_1/frame_0036_img.png
+bamboo_1/frame_0037_img.png
+bamboo_1/frame_0038_img.png
+bamboo_1/frame_0039_img.png
+bamboo_1/frame_0040_img.png
+bamboo_1/frame_0041_img.png
+bamboo_1/frame_0042_img.png
+bamboo_1/frame_0043_img.png
+bamboo_1/frame_0044_img.png
+bamboo_1/frame_0045_img.png
+bamboo_1/frame_0046_img.png
+bamboo_1/frame_0047_img.png
+bamboo_1/frame_0048_img.png
+bamboo_1/frame_0049_img.png
+bamboo_1/frame_0050_img.png
+bamboo_2/frame_0001_img.png
+bamboo_2/frame_0002_img.png
+bamboo_2/frame_0003_img.png
+bamboo_2/frame_0004_img.png
+bamboo_2/frame_0005_img.png
+bamboo_2/frame_0006_img.png
+bamboo_2/frame_0007_img.png
+bamboo_2/frame_0008_img.png
+bamboo_2/frame_0009_img.png
+bamboo_2/frame_0010_img.png
+bamboo_2/frame_0011_img.png
+bamboo_2/frame_0012_img.png
+bamboo_2/frame_0013_img.png
+bamboo_2/frame_0014_img.png
+bamboo_2/frame_0015_img.png
+bamboo_2/frame_0016_img.png
+bamboo_2/frame_0017_img.png
+bamboo_2/frame_0018_img.png
+bamboo_2/frame_0019_img.png
+bamboo_2/frame_0020_img.png
+bamboo_2/frame_0021_img.png
+bamboo_2/frame_0022_img.png
+bamboo_2/frame_0023_img.png
+bamboo_2/frame_0024_img.png
+bamboo_2/frame_0025_img.png
+bamboo_2/frame_0026_img.png
+bamboo_2/frame_0027_img.png
+bamboo_2/frame_0028_img.png
+bamboo_2/frame_0029_img.png
+bamboo_2/frame_0030_img.png
+bamboo_2/frame_0031_img.png
+bamboo_2/frame_0032_img.png
+bamboo_2/frame_0033_img.png
+bamboo_2/frame_0034_img.png
+bamboo_2/frame_0035_img.png
+bamboo_2/frame_0036_img.png
+bamboo_2/frame_0037_img.png
+bamboo_2/frame_0038_img.png
+bamboo_2/frame_0039_img.png
+bamboo_2/frame_0040_img.png
+bamboo_2/frame_0041_img.png
+bamboo_2/frame_0042_img.png
+bamboo_2/frame_0043_img.png
+bamboo_2/frame_0044_img.png
+bamboo_2/frame_0045_img.png
+bamboo_2/frame_0046_img.png
+bamboo_2/frame_0047_img.png
+bamboo_2/frame_0048_img.png
+bamboo_2/frame_0049_img.png
+bamboo_2/frame_0050_img.png
+bandage_1/frame_0001_img.png
+bandage_1/frame_0002_img.png
+bandage_1/frame_0003_img.png
+bandage_1/frame_0004_img.png
+bandage_1/frame_0005_img.png
+bandage_1/frame_0006_img.png
+bandage_1/frame_0007_img.png
+bandage_1/frame_0008_img.png
+bandage_1/frame_0009_img.png
+bandage_1/frame_0010_img.png
+bandage_1/frame_0011_img.png
+bandage_1/frame_0012_img.png
+bandage_1/frame_0013_img.png
+bandage_1/frame_0014_img.png
+bandage_1/frame_0015_img.png
+bandage_1/frame_0016_img.png
+bandage_1/frame_0017_img.png
+bandage_1/frame_0018_img.png
+bandage_1/frame_0019_img.png
+bandage_1/frame_0020_img.png
+bandage_1/frame_0021_img.png
+bandage_1/frame_0022_img.png
+bandage_1/frame_0023_img.png
+bandage_1/frame_0024_img.png
+bandage_1/frame_0025_img.png
+bandage_1/frame_0026_img.png
+bandage_1/frame_0027_img.png
+bandage_1/frame_0028_img.png
+bandage_1/frame_0029_img.png
+bandage_1/frame_0030_img.png
+bandage_1/frame_0031_img.png
+bandage_1/frame_0032_img.png
+bandage_1/frame_0033_img.png
+bandage_1/frame_0034_img.png
+bandage_1/frame_0035_img.png
+bandage_1/frame_0036_img.png
+bandage_1/frame_0037_img.png
+bandage_1/frame_0038_img.png
+bandage_1/frame_0039_img.png
+bandage_1/frame_0040_img.png
+bandage_1/frame_0041_img.png
+bandage_1/frame_0042_img.png
+bandage_1/frame_0043_img.png
+bandage_1/frame_0044_img.png
+bandage_1/frame_0045_img.png
+bandage_1/frame_0046_img.png
+bandage_1/frame_0047_img.png
+bandage_1/frame_0048_img.png
+bandage_1/frame_0049_img.png
+bandage_1/frame_0050_img.png
+bandage_2/frame_0001_img.png
+bandage_2/frame_0002_img.png
+bandage_2/frame_0003_img.png
+bandage_2/frame_0004_img.png
+bandage_2/frame_0005_img.png
+bandage_2/frame_0006_img.png
+bandage_2/frame_0007_img.png
+bandage_2/frame_0008_img.png
+bandage_2/frame_0009_img.png
+bandage_2/frame_0010_img.png
+bandage_2/frame_0011_img.png
+bandage_2/frame_0012_img.png
+bandage_2/frame_0013_img.png
+bandage_2/frame_0014_img.png
+bandage_2/frame_0015_img.png
+bandage_2/frame_0016_img.png
+bandage_2/frame_0017_img.png
+bandage_2/frame_0018_img.png
+bandage_2/frame_0019_img.png
+bandage_2/frame_0020_img.png
+bandage_2/frame_0021_img.png
+bandage_2/frame_0022_img.png
+bandage_2/frame_0023_img.png
+bandage_2/frame_0024_img.png
+bandage_2/frame_0025_img.png
+bandage_2/frame_0026_img.png
+bandage_2/frame_0027_img.png
+bandage_2/frame_0028_img.png
+bandage_2/frame_0029_img.png
+bandage_2/frame_0030_img.png
+bandage_2/frame_0031_img.png
+bandage_2/frame_0032_img.png
+bandage_2/frame_0033_img.png
+bandage_2/frame_0034_img.png
+bandage_2/frame_0035_img.png
+bandage_2/frame_0036_img.png
+bandage_2/frame_0037_img.png
+bandage_2/frame_0038_img.png
+bandage_2/frame_0039_img.png
+bandage_2/frame_0040_img.png
+bandage_2/frame_0041_img.png
+bandage_2/frame_0042_img.png
+bandage_2/frame_0043_img.png
+bandage_2/frame_0044_img.png
+bandage_2/frame_0045_img.png
+bandage_2/frame_0046_img.png
+bandage_2/frame_0047_img.png
+bandage_2/frame_0048_img.png
+bandage_2/frame_0049_img.png
+bandage_2/frame_0050_img.png
+cave_2/frame_0001_img.png
+cave_2/frame_0002_img.png
+cave_2/frame_0003_img.png
+cave_2/frame_0004_img.png
+cave_2/frame_0005_img.png
+cave_2/frame_0006_img.png
+cave_2/frame_0007_img.png
+cave_2/frame_0008_img.png
+cave_2/frame_0009_img.png
+cave_2/frame_0010_img.png
+cave_2/frame_0011_img.png
+cave_2/frame_0012_img.png
+cave_2/frame_0013_img.png
+cave_2/frame_0014_img.png
+cave_2/frame_0015_img.png
+cave_2/frame_0016_img.png
+cave_2/frame_0017_img.png
+cave_2/frame_0018_img.png
+cave_2/frame_0019_img.png
+cave_2/frame_0020_img.png
+cave_2/frame_0021_img.png
+cave_2/frame_0022_img.png
+cave_2/frame_0023_img.png
+cave_2/frame_0024_img.png
+cave_2/frame_0025_img.png
+cave_2/frame_0026_img.png
+cave_2/frame_0027_img.png
+cave_2/frame_0028_img.png
+cave_2/frame_0029_img.png
+cave_2/frame_0030_img.png
+cave_2/frame_0031_img.png
+cave_2/frame_0032_img.png
+cave_2/frame_0033_img.png
+cave_2/frame_0034_img.png
+cave_2/frame_0035_img.png
+cave_2/frame_0036_img.png
+cave_2/frame_0037_img.png
+cave_2/frame_0038_img.png
+cave_2/frame_0039_img.png
+cave_2/frame_0040_img.png
+cave_2/frame_0041_img.png
+cave_2/frame_0042_img.png
+cave_2/frame_0043_img.png
+cave_2/frame_0044_img.png
+cave_2/frame_0045_img.png
+cave_2/frame_0046_img.png
+cave_2/frame_0047_img.png
+cave_2/frame_0048_img.png
+cave_2/frame_0049_img.png
+cave_2/frame_0050_img.png
+cave_4/frame_0001_img.png
+cave_4/frame_0002_img.png
+cave_4/frame_0003_img.png
+cave_4/frame_0004_img.png
+cave_4/frame_0005_img.png
+cave_4/frame_0006_img.png
+cave_4/frame_0007_img.png
+cave_4/frame_0008_img.png
+cave_4/frame_0009_img.png
+cave_4/frame_0010_img.png
+cave_4/frame_0011_img.png
+cave_4/frame_0012_img.png
+cave_4/frame_0013_img.png
+cave_4/frame_0014_img.png
+cave_4/frame_0015_img.png
+cave_4/frame_0016_img.png
+cave_4/frame_0017_img.png
+cave_4/frame_0018_img.png
+cave_4/frame_0019_img.png
+cave_4/frame_0020_img.png
+cave_4/frame_0021_img.png
+cave_4/frame_0022_img.png
+cave_4/frame_0023_img.png
+cave_4/frame_0024_img.png
+cave_4/frame_0025_img.png
+cave_4/frame_0026_img.png
+cave_4/frame_0027_img.png
+cave_4/frame_0028_img.png
+cave_4/frame_0029_img.png
+cave_4/frame_0030_img.png
+cave_4/frame_0031_img.png
+cave_4/frame_0032_img.png
+cave_4/frame_0033_img.png
+cave_4/frame_0034_img.png
+cave_4/frame_0035_img.png
+cave_4/frame_0036_img.png
+cave_4/frame_0037_img.png
+cave_4/frame_0038_img.png
+cave_4/frame_0039_img.png
+cave_4/frame_0040_img.png
+cave_4/frame_0041_img.png
+cave_4/frame_0042_img.png
+cave_4/frame_0043_img.png
+cave_4/frame_0044_img.png
+cave_4/frame_0045_img.png
+cave_4/frame_0046_img.png
+cave_4/frame_0047_img.png
+cave_4/frame_0048_img.png
+cave_4/frame_0049_img.png
+cave_4/frame_0050_img.png
+market_2/frame_0001_img.png
+market_2/frame_0002_img.png
+market_2/frame_0003_img.png
+market_2/frame_0004_img.png
+market_2/frame_0005_img.png
+market_2/frame_0006_img.png
+market_2/frame_0007_img.png
+market_2/frame_0008_img.png
+market_2/frame_0009_img.png
+market_2/frame_0010_img.png
+market_2/frame_0011_img.png
+market_2/frame_0012_img.png
+market_2/frame_0013_img.png
+market_2/frame_0014_img.png
+market_2/frame_0015_img.png
+market_2/frame_0016_img.png
+market_2/frame_0017_img.png
+market_2/frame_0018_img.png
+market_2/frame_0019_img.png
+market_2/frame_0020_img.png
+market_2/frame_0021_img.png
+market_2/frame_0022_img.png
+market_2/frame_0023_img.png
+market_2/frame_0024_img.png
+market_2/frame_0025_img.png
+market_2/frame_0026_img.png
+market_2/frame_0027_img.png
+market_2/frame_0028_img.png
+market_2/frame_0029_img.png
+market_2/frame_0030_img.png
+market_2/frame_0031_img.png
+market_2/frame_0032_img.png
+market_2/frame_0033_img.png
+market_2/frame_0034_img.png
+market_2/frame_0035_img.png
+market_2/frame_0036_img.png
+market_2/frame_0037_img.png
+market_2/frame_0038_img.png
+market_2/frame_0039_img.png
+market_2/frame_0040_img.png
+market_2/frame_0041_img.png
+market_2/frame_0042_img.png
+market_2/frame_0043_img.png
+market_2/frame_0044_img.png
+market_2/frame_0045_img.png
+market_2/frame_0046_img.png
+market_2/frame_0047_img.png
+market_2/frame_0048_img.png
+market_2/frame_0049_img.png
+market_2/frame_0050_img.png
+market_5/frame_0001_img.png
+market_5/frame_0002_img.png
+market_5/frame_0003_img.png
+market_5/frame_0004_img.png
+market_5/frame_0005_img.png
+market_5/frame_0006_img.png
+market_5/frame_0007_img.png
+market_5/frame_0008_img.png
+market_5/frame_0009_img.png
+market_5/frame_0010_img.png
+market_5/frame_0011_img.png
+market_5/frame_0012_img.png
+market_5/frame_0013_img.png
+market_5/frame_0014_img.png
+market_5/frame_0015_img.png
+market_5/frame_0016_img.png
+market_5/frame_0017_img.png
+market_5/frame_0018_img.png
+market_5/frame_0019_img.png
+market_5/frame_0020_img.png
+market_5/frame_0021_img.png
+market_5/frame_0022_img.png
+market_5/frame_0023_img.png
+market_5/frame_0024_img.png
+market_5/frame_0025_img.png
+market_5/frame_0026_img.png
+market_5/frame_0027_img.png
+market_5/frame_0028_img.png
+market_5/frame_0029_img.png
+market_5/frame_0030_img.png
+market_5/frame_0031_img.png
+market_5/frame_0032_img.png
+market_5/frame_0033_img.png
+market_5/frame_0034_img.png
+market_5/frame_0035_img.png
+market_5/frame_0036_img.png
+market_5/frame_0037_img.png
+market_5/frame_0038_img.png
+market_5/frame_0039_img.png
+market_5/frame_0040_img.png
+market_5/frame_0041_img.png
+market_5/frame_0042_img.png
+market_5/frame_0043_img.png
+market_5/frame_0044_img.png
+market_5/frame_0045_img.png
+market_5/frame_0046_img.png
+market_5/frame_0047_img.png
+market_5/frame_0048_img.png
+market_5/frame_0049_img.png
+market_5/frame_0050_img.png
+market_6/frame_0001_img.png
+market_6/frame_0002_img.png
+market_6/frame_0003_img.png
+market_6/frame_0004_img.png
+market_6/frame_0005_img.png
+market_6/frame_0006_img.png
+market_6/frame_0007_img.png
+market_6/frame_0008_img.png
+market_6/frame_0009_img.png
+market_6/frame_0010_img.png
+market_6/frame_0011_img.png
+market_6/frame_0012_img.png
+market_6/frame_0013_img.png
+market_6/frame_0014_img.png
+market_6/frame_0015_img.png
+market_6/frame_0016_img.png
+market_6/frame_0017_img.png
+market_6/frame_0018_img.png
+market_6/frame_0019_img.png
+market_6/frame_0020_img.png
+market_6/frame_0021_img.png
+market_6/frame_0022_img.png
+market_6/frame_0023_img.png
+market_6/frame_0024_img.png
+market_6/frame_0025_img.png
+market_6/frame_0026_img.png
+market_6/frame_0027_img.png
+market_6/frame_0028_img.png
+market_6/frame_0029_img.png
+market_6/frame_0030_img.png
+market_6/frame_0031_img.png
+market_6/frame_0032_img.png
+market_6/frame_0033_img.png
+market_6/frame_0034_img.png
+market_6/frame_0035_img.png
+market_6/frame_0036_img.png
+market_6/frame_0037_img.png
+market_6/frame_0038_img.png
+market_6/frame_0039_img.png
+market_6/frame_0040_img.png
+mountain_1/frame_0001_img.png
+mountain_1/frame_0002_img.png
+mountain_1/frame_0003_img.png
+mountain_1/frame_0004_img.png
+mountain_1/frame_0005_img.png
+mountain_1/frame_0006_img.png
+mountain_1/frame_0007_img.png
+mountain_1/frame_0008_img.png
+mountain_1/frame_0009_img.png
+mountain_1/frame_0010_img.png
+mountain_1/frame_0011_img.png
+mountain_1/frame_0012_img.png
+mountain_1/frame_0013_img.png
+mountain_1/frame_0014_img.png
+mountain_1/frame_0015_img.png
+mountain_1/frame_0016_img.png
+mountain_1/frame_0017_img.png
+mountain_1/frame_0018_img.png
+mountain_1/frame_0019_img.png
+mountain_1/frame_0020_img.png
+mountain_1/frame_0021_img.png
+mountain_1/frame_0022_img.png
+mountain_1/frame_0023_img.png
+mountain_1/frame_0024_img.png
+mountain_1/frame_0025_img.png
+mountain_1/frame_0026_img.png
+mountain_1/frame_0027_img.png
+mountain_1/frame_0028_img.png
+mountain_1/frame_0029_img.png
+mountain_1/frame_0030_img.png
+mountain_1/frame_0031_img.png
+mountain_1/frame_0032_img.png
+mountain_1/frame_0033_img.png
+mountain_1/frame_0034_img.png
+mountain_1/frame_0035_img.png
+mountain_1/frame_0036_img.png
+mountain_1/frame_0037_img.png
+mountain_1/frame_0038_img.png
+mountain_1/frame_0039_img.png
+mountain_1/frame_0040_img.png
+mountain_1/frame_0041_img.png
+mountain_1/frame_0042_img.png
+mountain_1/frame_0043_img.png
+mountain_1/frame_0044_img.png
+mountain_1/frame_0045_img.png
+mountain_1/frame_0046_img.png
+mountain_1/frame_0047_img.png
+mountain_1/frame_0048_img.png
+mountain_1/frame_0049_img.png
+mountain_1/frame_0050_img.png
+shaman_2/frame_0001_img.png
+shaman_2/frame_0002_img.png
+shaman_2/frame_0003_img.png
+shaman_2/frame_0004_img.png
+shaman_2/frame_0005_img.png
+shaman_2/frame_0006_img.png
+shaman_2/frame_0007_img.png
+shaman_2/frame_0008_img.png
+shaman_2/frame_0009_img.png
+shaman_2/frame_0010_img.png
+shaman_2/frame_0011_img.png
+shaman_2/frame_0012_img.png
+shaman_2/frame_0013_img.png
+shaman_2/frame_0014_img.png
+shaman_2/frame_0015_img.png
+shaman_2/frame_0016_img.png
+shaman_2/frame_0017_img.png
+shaman_2/frame_0018_img.png
+shaman_2/frame_0019_img.png
+shaman_2/frame_0020_img.png
+shaman_2/frame_0021_img.png
+shaman_2/frame_0022_img.png
+shaman_2/frame_0023_img.png
+shaman_2/frame_0024_img.png
+shaman_2/frame_0025_img.png
+shaman_2/frame_0026_img.png
+shaman_2/frame_0027_img.png
+shaman_2/frame_0028_img.png
+shaman_2/frame_0029_img.png
+shaman_2/frame_0030_img.png
+shaman_2/frame_0031_img.png
+shaman_2/frame_0032_img.png
+shaman_2/frame_0033_img.png
+shaman_2/frame_0034_img.png
+shaman_2/frame_0035_img.png
+shaman_2/frame_0036_img.png
+shaman_2/frame_0037_img.png
+shaman_2/frame_0038_img.png
+shaman_2/frame_0039_img.png
+shaman_2/frame_0040_img.png
+shaman_2/frame_0041_img.png
+shaman_2/frame_0042_img.png
+shaman_2/frame_0043_img.png
+shaman_2/frame_0044_img.png
+shaman_2/frame_0045_img.png
+shaman_2/frame_0046_img.png
+shaman_2/frame_0047_img.png
+shaman_2/frame_0048_img.png
+shaman_2/frame_0049_img.png
+shaman_2/frame_0050_img.png
+shaman_3/frame_0001_img.png
+shaman_3/frame_0002_img.png
+shaman_3/frame_0003_img.png
+shaman_3/frame_0004_img.png
+shaman_3/frame_0005_img.png
+shaman_3/frame_0006_img.png
+shaman_3/frame_0007_img.png
+shaman_3/frame_0008_img.png
+shaman_3/frame_0009_img.png
+shaman_3/frame_0010_img.png
+shaman_3/frame_0011_img.png
+shaman_3/frame_0012_img.png
+shaman_3/frame_0013_img.png
+shaman_3/frame_0014_img.png
+shaman_3/frame_0015_img.png
+shaman_3/frame_0016_img.png
+shaman_3/frame_0017_img.png
+shaman_3/frame_0018_img.png
+shaman_3/frame_0019_img.png
+shaman_3/frame_0020_img.png
+shaman_3/frame_0021_img.png
+shaman_3/frame_0022_img.png
+shaman_3/frame_0023_img.png
+shaman_3/frame_0024_img.png
+shaman_3/frame_0025_img.png
+shaman_3/frame_0026_img.png
+shaman_3/frame_0027_img.png
+shaman_3/frame_0028_img.png
+shaman_3/frame_0029_img.png
+shaman_3/frame_0030_img.png
+shaman_3/frame_0031_img.png
+shaman_3/frame_0032_img.png
+shaman_3/frame_0033_img.png
+shaman_3/frame_0034_img.png
+shaman_3/frame_0035_img.png
+shaman_3/frame_0036_img.png
+shaman_3/frame_0037_img.png
+shaman_3/frame_0038_img.png
+shaman_3/frame_0039_img.png
+shaman_3/frame_0040_img.png
+shaman_3/frame_0041_img.png
+shaman_3/frame_0042_img.png
+shaman_3/frame_0043_img.png
+shaman_3/frame_0044_img.png
+shaman_3/frame_0045_img.png
+shaman_3/frame_0046_img.png
+shaman_3/frame_0047_img.png
+shaman_3/frame_0048_img.png
+shaman_3/frame_0049_img.png
+shaman_3/frame_0050_img.png
+sleeping_1/frame_0001_img.png
+sleeping_1/frame_0002_img.png
+sleeping_1/frame_0003_img.png
+sleeping_1/frame_0004_img.png
+sleeping_1/frame_0005_img.png
+sleeping_1/frame_0006_img.png
+sleeping_1/frame_0007_img.png
+sleeping_1/frame_0008_img.png
+sleeping_1/frame_0009_img.png
+sleeping_1/frame_0010_img.png
+sleeping_1/frame_0011_img.png
+sleeping_1/frame_0012_img.png
+sleeping_1/frame_0013_img.png
+sleeping_1/frame_0014_img.png
+sleeping_1/frame_0015_img.png
+sleeping_1/frame_0016_img.png
+sleeping_1/frame_0017_img.png
+sleeping_1/frame_0018_img.png
+sleeping_1/frame_0019_img.png
+sleeping_1/frame_0020_img.png
+sleeping_1/frame_0021_img.png
+sleeping_1/frame_0022_img.png
+sleeping_1/frame_0023_img.png
+sleeping_1/frame_0024_img.png
+sleeping_1/frame_0025_img.png
+sleeping_1/frame_0026_img.png
+sleeping_1/frame_0027_img.png
+sleeping_1/frame_0028_img.png
+sleeping_1/frame_0029_img.png
+sleeping_1/frame_0030_img.png
+sleeping_1/frame_0031_img.png
+sleeping_1/frame_0032_img.png
+sleeping_1/frame_0033_img.png
+sleeping_1/frame_0034_img.png
+sleeping_1/frame_0035_img.png
+sleeping_1/frame_0036_img.png
+sleeping_1/frame_0037_img.png
+sleeping_1/frame_0038_img.png
+sleeping_1/frame_0039_img.png
+sleeping_1/frame_0040_img.png
+sleeping_1/frame_0041_img.png
+sleeping_1/frame_0042_img.png
+sleeping_1/frame_0043_img.png
+sleeping_1/frame_0044_img.png
+sleeping_1/frame_0045_img.png
+sleeping_1/frame_0046_img.png
+sleeping_1/frame_0047_img.png
+sleeping_1/frame_0048_img.png
+sleeping_1/frame_0049_img.png
+sleeping_1/frame_0050_img.png
+sleeping_2/frame_0001_img.png
+sleeping_2/frame_0002_img.png
+sleeping_2/frame_0003_img.png
+sleeping_2/frame_0004_img.png
+sleeping_2/frame_0005_img.png
+sleeping_2/frame_0006_img.png
+sleeping_2/frame_0007_img.png
+sleeping_2/frame_0008_img.png
+sleeping_2/frame_0009_img.png
+sleeping_2/frame_0010_img.png
+sleeping_2/frame_0011_img.png
+sleeping_2/frame_0012_img.png
+sleeping_2/frame_0013_img.png
+sleeping_2/frame_0014_img.png
+sleeping_2/frame_0015_img.png
+sleeping_2/frame_0016_img.png
+sleeping_2/frame_0017_img.png
+sleeping_2/frame_0018_img.png
+sleeping_2/frame_0019_img.png
+sleeping_2/frame_0020_img.png
+sleeping_2/frame_0021_img.png
+sleeping_2/frame_0022_img.png
+sleeping_2/frame_0023_img.png
+sleeping_2/frame_0024_img.png
+sleeping_2/frame_0025_img.png
+sleeping_2/frame_0026_img.png
+sleeping_2/frame_0027_img.png
+sleeping_2/frame_0028_img.png
+sleeping_2/frame_0029_img.png
+sleeping_2/frame_0030_img.png
+sleeping_2/frame_0031_img.png
+sleeping_2/frame_0032_img.png
+sleeping_2/frame_0033_img.png
+sleeping_2/frame_0034_img.png
+sleeping_2/frame_0035_img.png
+sleeping_2/frame_0036_img.png
+sleeping_2/frame_0037_img.png
+sleeping_2/frame_0038_img.png
+sleeping_2/frame_0039_img.png
+sleeping_2/frame_0040_img.png
+sleeping_2/frame_0041_img.png
+sleeping_2/frame_0042_img.png
+sleeping_2/frame_0043_img.png
+sleeping_2/frame_0044_img.png
+sleeping_2/frame_0045_img.png
+sleeping_2/frame_0046_img.png
+sleeping_2/frame_0047_img.png
+sleeping_2/frame_0048_img.png
+sleeping_2/frame_0049_img.png
+sleeping_2/frame_0050_img.png
+temple_2/frame_0001_img.png
+temple_2/frame_0002_img.png
+temple_2/frame_0003_img.png
+temple_2/frame_0004_img.png
+temple_2/frame_0005_img.png
+temple_2/frame_0006_img.png
+temple_2/frame_0007_img.png
+temple_2/frame_0008_img.png
+temple_2/frame_0009_img.png
+temple_2/frame_0010_img.png
+temple_2/frame_0011_img.png
+temple_2/frame_0012_img.png
+temple_2/frame_0013_img.png
+temple_2/frame_0014_img.png
+temple_2/frame_0015_img.png
+temple_2/frame_0016_img.png
+temple_2/frame_0017_img.png
+temple_2/frame_0018_img.png
+temple_2/frame_0019_img.png
+temple_2/frame_0020_img.png
+temple_2/frame_0021_img.png
+temple_2/frame_0022_img.png
+temple_2/frame_0023_img.png
+temple_2/frame_0024_img.png
+temple_2/frame_0025_img.png
+temple_2/frame_0026_img.png
+temple_2/frame_0027_img.png
+temple_2/frame_0028_img.png
+temple_2/frame_0029_img.png
+temple_2/frame_0030_img.png
+temple_2/frame_0031_img.png
+temple_2/frame_0032_img.png
+temple_2/frame_0033_img.png
+temple_2/frame_0034_img.png
+temple_2/frame_0035_img.png
+temple_2/frame_0036_img.png
+temple_2/frame_0037_img.png
+temple_2/frame_0038_img.png
+temple_2/frame_0039_img.png
+temple_2/frame_0040_img.png
+temple_2/frame_0041_img.png
+temple_2/frame_0042_img.png
+temple_2/frame_0043_img.png
+temple_2/frame_0044_img.png
+temple_2/frame_0045_img.png
+temple_2/frame_0046_img.png
+temple_2/frame_0047_img.png
+temple_2/frame_0048_img.png
+temple_2/frame_0049_img.png
+temple_2/frame_0050_img.png
+temple_3/frame_0001_img.png
+temple_3/frame_0002_img.png
+temple_3/frame_0003_img.png
+temple_3/frame_0004_img.png
+temple_3/frame_0005_img.png
+temple_3/frame_0006_img.png
+temple_3/frame_0007_img.png
+temple_3/frame_0008_img.png
+temple_3/frame_0009_img.png
+temple_3/frame_0010_img.png
+temple_3/frame_0011_img.png
+temple_3/frame_0012_img.png
+temple_3/frame_0013_img.png
+temple_3/frame_0014_img.png
+temple_3/frame_0015_img.png
+temple_3/frame_0016_img.png
+temple_3/frame_0017_img.png
+temple_3/frame_0018_img.png
+temple_3/frame_0019_img.png
+temple_3/frame_0020_img.png
+temple_3/frame_0021_img.png
+temple_3/frame_0022_img.png
+temple_3/frame_0023_img.png
+temple_3/frame_0024_img.png
+temple_3/frame_0025_img.png
+temple_3/frame_0026_img.png
+temple_3/frame_0027_img.png
+temple_3/frame_0028_img.png
+temple_3/frame_0029_img.png
+temple_3/frame_0030_img.png
+temple_3/frame_0031_img.png
+temple_3/frame_0032_img.png
+temple_3/frame_0033_img.png
+temple_3/frame_0034_img.png
+temple_3/frame_0035_img.png
+temple_3/frame_0036_img.png
+temple_3/frame_0037_img.png
+temple_3/frame_0038_img.png
+temple_3/frame_0039_img.png
+temple_3/frame_0040_img.png
+temple_3/frame_0041_img.png
+temple_3/frame_0042_img.png
+temple_3/frame_0043_img.png
+temple_3/frame_0044_img.png
+temple_3/frame_0045_img.png
+temple_3/frame_0046_img.png
+temple_3/frame_0047_img.png
+temple_3/frame_0048_img.png
+temple_3/frame_0049_img.png
+temple_3/frame_0050_img.png
\ No newline at end of file
diff --git a/Lotus/evaluation/evaluation.py b/Lotus/evaluation/evaluation.py
new file mode 100644
index 0000000000000000000000000000000000000000..48a403199eadd205b34cabd2e49a68d1d4ade7ae
--- /dev/null
+++ b/Lotus/evaluation/evaluation.py
@@ -0,0 +1,377 @@
+
+import argparse
+import logging
+import os
+
+import numpy as np
+import torch
+from omegaconf import OmegaConf
+from tabulate import tabulate
+from torch.utils.data import DataLoader
+from torchvision.transforms.functional import pil_to_tensor, resize, InterpolationMode
+from tqdm.auto import tqdm
+import cv2
+
+from .dataset_depth import (
+ BaseDepthDataset,
+ DatasetMode,
+ get_dataset,
+ get_pred_name,
+)
+from .dataset_normal.normal_dataloader import *
+from .util import metric
+from .util.alignment import (
+ align_depth_least_square,
+ depth2disparity,
+ disparity2depth,
+)
+from .util.metric import MetricTracker
+from .util import normal_utils
+
+from utils.image_utils import concatenate_images, colorize_depth_map, resize_max_res
+import utils.visualize as vis_utils
+
+eval_metrics = [
+ "abs_relative_difference",
+ "squared_relative_difference",
+ "rmse_linear",
+ "rmse_log",
+ "log10",
+ "delta1_acc",
+ "delta2_acc",
+ "delta3_acc",
+ "i_rmse",
+ "silog_rmse",
+ # "pixel_mean",
+ # "pixel_var"
+]
+
+# Referred to Marigold
+def evaluation_depth(output_dir, dataset_config, base_data_dir, eval_mode, pred_suffix="",
+ alignment="least_square", alignment_max_res=None, prediction_dir=None,
+ gen_prediction=None, pipeline=None, save_pred=False, save_pred_vis=False,
+ processing_res=None,
+ ):
+ '''
+ if eval_mode == "load_prediction": assert prediction_dir is not None
+ elif eval_mode == "generate_prediction": assert gen_prediction is not None and pipeline is not None
+ '''
+ os.makedirs(output_dir, exist_ok=True)
+
+ # -------------------- Device --------------------
+ cuda_avail = torch.cuda.is_available()
+ device = torch.device("cuda" if cuda_avail else "cpu")
+ logging.info(f"Device: {device}")
+
+ # -------------------- Data --------------------
+ cfg_data = OmegaConf.load(dataset_config)
+
+ processing_res = processing_res or cfg_data.get('processing_res',None)
+ logger.info(f"processing_res: {processing_res}")
+
+ alignment_max_res = cfg_data.get('alignment_max_res', None)
+
+ dataset: BaseDepthDataset = get_dataset(
+ cfg_data, base_data_dir=base_data_dir, mode=DatasetMode.EVAL
+ )
+
+ dataloader = DataLoader(dataset, batch_size=1, num_workers=8, pin_memory=True)
+
+ # -------------------- Eval metrics --------------------
+ metric_funcs = [getattr(metric, _met) for _met in eval_metrics]
+
+ metric_tracker = MetricTracker(*[m.__name__ for m in metric_funcs])
+ metric_tracker.reset()
+
+ # -------------------- Per-sample metric file head --------------------
+ per_sample_filename = os.path.join(output_dir, "per_sample_metrics.csv")
+ # write title
+ with open(per_sample_filename, "w+") as f:
+ f.write("filename,")
+ f.write(",".join([m.__name__ for m in metric_funcs]))
+ f.write("\n")
+
+ if save_pred_vis:
+ save_vis_path = os.path.join(output_dir, "vis")
+ os.makedirs(save_vis_path, exist_ok=True)
+
+ # -------------------- Evaluate --------------------
+ for data in tqdm(dataloader, desc=f"Evaluating {cfg_data.name}"):
+ # GT data
+ depth_raw_ts = data["depth_raw_linear"].squeeze()
+ valid_mask_ts = data["valid_mask_raw"].squeeze()
+ rgb_name = data["rgb_relative_path"][0]
+
+ depth_raw = depth_raw_ts.numpy()
+ valid_mask = valid_mask_ts.numpy()
+
+ depth_raw_ts = depth_raw_ts.to(device)
+ valid_mask_ts = valid_mask_ts.to(device)
+
+ # Get predictions
+ rgb_basename = os.path.basename(rgb_name)
+ pred_basename = get_pred_name(
+ rgb_basename, dataset.name_mode, suffix=pred_suffix
+ )
+ pred_name = os.path.join(os.path.dirname(rgb_name), pred_basename)
+ if eval_mode == "load_prediction":
+ pred_path = os.path.join(prediction_dir, pred_name)
+ depth_pred = np.load(pred_path)
+ if not os.path.exists(pred_path):
+ logging.warn(f"Can't find prediction: {pred_path}")
+ continue
+
+ elif eval_mode == "generate_prediction":
+ # resize to processing_res
+ input_size = data["rgb_int"].shape
+ if processing_res is not None:
+ input_rgb = resize_max_res(
+ data["rgb_int"],
+ max_edge_resolution=processing_res,
+ # resample_method=resample_method,
+ )
+ else:
+ input_rgb = data["rgb_int"]
+ depth_pred = gen_prediction(input_rgb, pipeline)
+ # resize to original res
+ if processing_res is not None:
+ depth_pred = torch.tensor(depth_pred).unsqueeze(0).unsqueeze(0)
+ # depth_pred = resize(depth_pred, input_size[-2:], InterpolationMode.NEAREST, antialias=True, )
+ depth_pred = resize(depth_pred, input_size[-2:], antialias=True, )
+ depth_pred = depth_pred.squeeze().numpy()
+
+
+ if save_pred:
+ # save_npy
+ npy_dir = os.path.join(prediction_dir, 'pred_npy', cfg_data.name)
+ scene_dir = os.path.join(npy_dir, os.path.dirname(rgb_name))
+ if not os.path.exists(scene_dir):
+ os.makedirs(scene_dir)
+ pred_basename = get_pred_name(
+ rgb_basename, dataset.name_mode, suffix=".npy"
+ )
+ save_to = os.path.join(scene_dir, pred_basename)
+ if os.path.exists(save_to):
+ logging.warning(f"Existing file: '{save_to}' will be overwritten")
+ np.save(save_to, depth_pred)
+
+ # save_color
+ color_dir = os.path.join(prediction_dir, 'pred_color', cfg_data.name)
+ scene_dir = os.path.join(color_dir, os.path.dirname(rgb_name))
+ if not os.path.exists(scene_dir):
+ os.makedirs(scene_dir)
+ pred_basename = get_pred_name(
+ rgb_basename, dataset.name_mode, suffix=".png"
+ )
+ save_to = os.path.join(scene_dir, pred_basename)
+ if os.path.exists(save_to):
+ logging.warning(f"Existing file: '{save_to}' will be overwritten")
+ depth_colored = colorize_depth_map(depth_pred)
+ depth_colored.save(save_to)
+
+
+
+ # Align with GT using least square
+ if "least_square" == alignment:
+ depth_pred, scale, shift = align_depth_least_square(
+ gt_arr=depth_raw,
+ pred_arr=depth_pred,
+ valid_mask_arr=valid_mask,
+ return_scale_shift=True,
+ max_resolution=alignment_max_res,
+ )
+ elif "least_square_disparity" == alignment:
+ # convert GT depth -> GT disparity
+ gt_disparity, gt_non_neg_mask = depth2disparity(
+ depth=depth_raw, return_mask=True
+ )
+ # LS alignment in disparity space
+ pred_non_neg_mask = depth_pred > 0
+ valid_nonnegative_mask = valid_mask & gt_non_neg_mask & pred_non_neg_mask
+
+ disparity_pred, scale, shift = align_depth_least_square(
+ gt_arr=gt_disparity,
+ pred_arr=depth_pred,
+ valid_mask_arr=valid_nonnegative_mask,
+ return_scale_shift=True,
+ max_resolution=alignment_max_res,
+ )
+ # convert to depth
+ disparity_pred = np.clip(
+ disparity_pred, a_min=1e-3, a_max=None
+ ) # avoid 0 disparity
+ depth_pred = disparity2depth(disparity_pred)
+
+ # Clip to dataset min max
+ depth_pred = np.clip(
+ depth_pred, a_min=dataset.min_depth, a_max=dataset.max_depth
+ )
+
+ # clip to d > 0 for evaluation
+ depth_pred = np.clip(depth_pred, a_min=1e-6, a_max=None)
+
+ # Evaluate (using CUDA if available)
+ sample_metric = []
+ depth_pred_ts = torch.from_numpy(depth_pred).to(device)
+ if save_pred_vis:
+ depth_pred_vis = colorize_depth_map(depth_pred_ts.cpu())
+ save_path = os.path.join(save_vis_path, f"{pred_name.replace('/', '_')}.png")
+ depth_pred_vis.save(save_path)
+
+ for met_func in metric_funcs:
+ _metric_name = met_func.__name__
+ _metric = met_func(depth_pred_ts, depth_raw_ts, valid_mask_ts).item()
+ sample_metric.append(_metric.__str__())
+ metric_tracker.update(_metric_name, _metric)
+
+ # Save per-sample metric
+ with open(per_sample_filename, "a+") as f:
+ f.write(pred_name + ",")
+ f.write(",".join(sample_metric))
+ f.write("\n")
+
+ # -------------------- Save metrics to file --------------------
+ eval_text = f"Evaluation metrics:\n\
+ of predictions: {prediction_dir}\n\
+ on dataset: {dataset.disp_name}\n\
+ with samples in: {dataset.filename_ls_path}\n"
+
+ eval_text += f"min_depth = {dataset.min_depth}\n"
+ eval_text += f"max_depth = {dataset.max_depth}\n"
+
+ eval_text += tabulate(
+ [metric_tracker.result().keys(), metric_tracker.result().values()]
+ )
+
+ metrics_filename = "eval_metrics"
+ if alignment:
+ metrics_filename += f"-{alignment}"
+ metrics_filename += ".txt"
+
+ _save_to = os.path.join(output_dir, metrics_filename)
+ with open(_save_to, "w+") as f:
+ f.write(eval_text)
+ logging.info(f"Evaluation metrics saved to {_save_to}")
+
+ return metric_tracker
+
+# Referred to DSINE
+def evaluation_normal(eval_dir, base_data_dir, dataset_split_path, eval_mode="generate_prediction",
+ gen_prediction=None, pipeline=None, prediction_dir=None, processing_res=None,
+ eval_datasets=[('nyuv2', 'test'), ('scannet', 'test'), ('ibims', 'ibims'), ('sintel', 'sintel')],
+ save_pred_vis=False
+ ):
+ '''
+ if eval_mode == "load_prediction": assert prediction_dir is not None
+ elif eval_mode == "generate_prediction": assert gen_prediction is not None and pipeline is not None
+ '''
+ os.makedirs(eval_dir, exist_ok=True)
+ logging.info(f"processing_res: {processing_res}")
+
+ device = torch.device('cuda')
+ metric_results = {}
+ for dataset_name, split in eval_datasets:
+ loader = TestLoader(base_data_dir, dataset_split_path, dataset_name_test=dataset_name, test_split=split)
+ test_loader = loader.data
+
+ results_dir = None
+ total_normal_errors = None
+
+ output_dir = os.path.join(eval_dir, dataset_name)
+ os.makedirs(output_dir, exist_ok=True)
+
+ if save_pred_vis:
+ results_dir = os.path.join(output_dir, "vis")
+ os.makedirs(results_dir, exist_ok=True)
+ print(f"Saving visualizations to {results_dir}")
+
+ for data_dict in tqdm(test_loader):
+ #↓↓↓↓
+ #NOTE: forward pass
+ img = data_dict['img'].to(device)
+ scene_names = data_dict['scene_name']
+ img_names = data_dict['img_name']
+ intrins = data_dict['intrins'].to(device)
+
+ # pad input
+ _, _, orig_H, orig_W = img.shape
+ lrtb = normal_utils.get_padding(orig_H, orig_W)
+ img, intrins = normal_utils.pad_input(img, intrins, lrtb)
+
+ # forward pass
+ # pred_list = model(img, intrins=intrins, mode='test')
+ # norm_out = pred_list[-1] # [1, 3, h, w]
+ if eval_mode == "load_prediction":
+ pred_path = os.path.join(prediction_dir, dataset_name, f'{scene_names[0]}_{img_names[0]}_norm.png')
+ norm_out = cv2.cvtColor(cv2.imread(pred_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
+ norm_out = (norm_out.astype(np.float32) / 255.0) * 2.0 - 1.0 # np.array([h,w,3])
+ norm_out = torch.tensor(norm_out).permute(2,0,1).unsqueeze(0).to(device) # torch.tensor([1, 3, h, w])
+
+ elif eval_mode == "generate_prediction":
+ # resize to processing_res
+ if processing_res is not None:
+ input_size = img.shape
+ img = resize_max_res(
+ img, max_edge_resolution=processing_res,
+ # resample_method=resample_method,
+ )
+ norm_out = gen_prediction(img, pipeline) # [1, 3, h, w]
+
+ # resize to original res
+ if processing_res is not None:
+ norm_out = resize(norm_out, input_size[-2:], antialias=True, )
+
+ # crop the padded part
+ norm_out = norm_out[:, :, lrtb[2]:lrtb[2]+orig_H, lrtb[0]:lrtb[0]+orig_W]
+
+ pred_norm, pred_kappa = norm_out[:, :3, :, :], norm_out[:, 3:, :, :]
+ pred_kappa = None if pred_kappa.size(1) == 0 else pred_kappa
+ #↑↑↑↑
+
+ if 'normal' in data_dict.keys():
+ gt_norm = data_dict['normal'].to(device)
+ gt_norm_mask = data_dict['normal_mask'].to(device)
+ # # resize gt_norm to original size
+ # pred_norm = resize(pred_norm, (gt_norm.shape[-2], gt_norm.shape[-1]), antialias=True)
+ # # import torchvision; torchvision.utils.save_image(pred_norm, 'pred_norm.png')
+ # # import torchvision; torchvision.utils.save_image(gt_norm, 'gt_norm.png')
+ # # import torchvision; torchvision.utils.save_image(gt_norm_mask.float(), 'gt_norm_mask.png')
+ # # breakpoint()
+
+ pred_error = normal_utils.compute_normal_error(pred_norm, gt_norm)
+ if total_normal_errors is None:
+ total_normal_errors = pred_error[gt_norm_mask]
+ else:
+ total_normal_errors = torch.cat((total_normal_errors, pred_error[gt_norm_mask]), dim=0)
+
+ if results_dir is not None:
+ prefixs = ['%s_%s' % (i,j) for (i,j) in zip(scene_names, img_names)]
+ vis_utils.visualize_normal(results_dir, prefixs, img, pred_norm, pred_kappa,
+ gt_norm, gt_norm_mask, pred_error)
+
+ metrics = None
+ if total_normal_errors is not None:
+ metrics = normal_utils.compute_normal_metrics(total_normal_errors)
+ print("Dataset: ", dataset_name)
+ print("mean median rmse 5 7.5 11.25 22.5 30")
+ print("%.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f" % (
+ metrics['mean'], metrics['median'], metrics['rmse'],
+ metrics['a1'], metrics['a2'], metrics['a3'], metrics['a4'], metrics['a5']))
+
+ metric_results[dataset_name] = metrics
+ # -------------------- Save metrics to file --------------------
+ eval_text = f"Evaluation metrics:\n\
+ on dataset: {dataset_name}\n\
+ with samples in: {loader.test_samples.split_path}\n"
+
+ eval_text += tabulate(
+ [metrics.keys(), metrics.values()]
+ )
+
+ _save_to = os.path.join(output_dir, "eval_metrics.txt")
+ with open(_save_to, "w+") as f:
+ f.write(eval_text)
+ logging.info(f"Evaluation metrics saved to {_save_to}")
+
+
+ return metric_results
\ No newline at end of file
diff --git a/Lotus/evaluation/util/alignment.py b/Lotus/evaluation/util/alignment.py
new file mode 100644
index 0000000000000000000000000000000000000000..df91f6b7edf0fee6447395cc83e24cbe486cb6c1
--- /dev/null
+++ b/Lotus/evaluation/util/alignment.py
@@ -0,0 +1,73 @@
+# Author: Bingxin Ke
+# Last modified: 2024-01-11
+
+import numpy as np
+import torch
+
+
+def align_depth_least_square(
+ gt_arr: np.ndarray,
+ pred_arr: np.ndarray,
+ valid_mask_arr: np.ndarray,
+ return_scale_shift=True,
+ max_resolution=None,
+):
+ ori_shape = pred_arr.shape # input shape
+
+ gt = gt_arr.squeeze() # [H, W]
+ pred = pred_arr.squeeze()
+ valid_mask = valid_mask_arr.squeeze()
+
+ # Downsample
+ if max_resolution is not None:
+ scale_factor = np.min(max_resolution / np.array(ori_shape[-2:]))
+ if scale_factor < 1:
+ downscaler = torch.nn.Upsample(scale_factor=scale_factor, mode="nearest")
+ gt = downscaler(torch.as_tensor(gt).unsqueeze(0)).numpy()
+ pred = downscaler(torch.as_tensor(pred).unsqueeze(0)).numpy()
+ valid_mask = (
+ downscaler(torch.as_tensor(valid_mask).unsqueeze(0).float())
+ .bool()
+ .numpy()
+ )
+
+ assert (
+ gt.shape == pred.shape == valid_mask.shape
+ ), f"{gt.shape}, {pred.shape}, {valid_mask.shape}"
+
+ gt_masked = gt[valid_mask].reshape((-1, 1))
+ pred_masked = pred[valid_mask].reshape((-1, 1))
+
+ # numpy solver
+ _ones = np.ones_like(pred_masked)
+ A = np.concatenate([pred_masked, _ones], axis=-1)
+ X = np.linalg.lstsq(A, gt_masked, rcond=None)[0]
+ scale, shift = X
+
+ aligned_pred = pred_arr * scale + shift
+
+ # restore dimensions
+ aligned_pred = aligned_pred.reshape(ori_shape)
+
+ if return_scale_shift:
+ return aligned_pred, scale, shift
+ else:
+ return aligned_pred
+
+
+# ******************** disparity space ********************
+def depth2disparity(depth, return_mask=False):
+ if isinstance(depth, torch.Tensor):
+ disparity = torch.zeros_like(depth)
+ elif isinstance(depth, np.ndarray):
+ disparity = np.zeros_like(depth)
+ non_negtive_mask = depth > 0
+ disparity[non_negtive_mask] = 1.0 / depth[non_negtive_mask]
+ if return_mask:
+ return disparity, non_negtive_mask
+ else:
+ return disparity
+
+
+def disparity2depth(disparity, **kwargs):
+ return depth2disparity(disparity, **kwargs)
diff --git a/Lotus/evaluation/util/depth_transform.py b/Lotus/evaluation/util/depth_transform.py
new file mode 100644
index 0000000000000000000000000000000000000000..6062f59d1b796c678a4f493cee5d997f02fe577a
--- /dev/null
+++ b/Lotus/evaluation/util/depth_transform.py
@@ -0,0 +1,98 @@
+# Author: Bingxin Ke
+# Last modified: 2024-02-08
+
+import torch
+
+
+def get_depth_normalizer(cfg_normalizer):
+ if cfg_normalizer is None:
+
+ def identical(x):
+ return x
+
+ depth_transform = identical
+
+ elif "near_far_metric" == cfg_normalizer.type:
+ depth_transform = NearFarMetricNormalizer(
+ norm_min=cfg_normalizer.norm_min,
+ norm_max=cfg_normalizer.norm_max,
+ min_max_quantile=cfg_normalizer.min_max_quantile,
+ clip=cfg_normalizer.clip,
+ )
+ else:
+ raise NotImplementedError
+ return depth_transform
+
+
+class DepthNormalizerBase:
+ is_relative = None
+ far_plane_at_max = None
+
+ def __init__(
+ self,
+ norm_min=-1.0,
+ norm_max=1.0,
+ ) -> None:
+ self.norm_min = norm_min
+ self.norm_max = norm_max
+ raise NotImplementedError
+
+ def __call__(self, depth, valid_mask=None, clip=None):
+ raise NotImplementedError
+
+ def denormalize(self, depth_norm, **kwargs):
+ # For metric depth: convert prediction back to metric depth
+ # For relative depth: convert prediction to [0, 1]
+ raise NotImplementedError
+
+
+class NearFarMetricNormalizer(DepthNormalizerBase):
+ """
+ depth in [0, d_max] -> [-1, 1]
+ """
+
+ is_relative = True
+ far_plane_at_max = True
+
+ def __init__(
+ self, norm_min=-1.0, norm_max=1.0, min_max_quantile=0.02, clip=True
+ ) -> None:
+ self.norm_min = norm_min
+ self.norm_max = norm_max
+ self.norm_range = self.norm_max - self.norm_min
+ self.min_quantile = min_max_quantile
+ self.max_quantile = 1.0 - self.min_quantile
+ self.clip = clip
+
+ def __call__(self, depth_linear, valid_mask=None, clip=None):
+ clip = clip if clip is not None else self.clip
+
+ if valid_mask is None:
+ valid_mask = torch.ones_like(depth_linear).bool()
+ valid_mask = valid_mask & (depth_linear > 0)
+
+ # Take quantiles as min and max
+ _min, _max = torch.quantile(
+ depth_linear[valid_mask],
+ torch.tensor([self.min_quantile, self.max_quantile]),
+ )
+
+ # scale and shift
+ depth_norm_linear = (depth_linear - _min) / (
+ _max - _min
+ ) * self.norm_range + self.norm_min
+
+ if clip:
+ depth_norm_linear = torch.clip(
+ depth_norm_linear, self.norm_min, self.norm_max
+ )
+
+ return depth_norm_linear
+
+ def scale_back(self, depth_norm):
+ # scale to [0, 1]
+ depth_linear = (depth_norm - self.norm_min) / self.norm_range
+ return depth_linear
+
+ def denormalize(self, depth_norm, **kwargs):
+ return self.scale_back(depth_norm=depth_norm)
diff --git a/Lotus/evaluation/util/metric.py b/Lotus/evaluation/util/metric.py
new file mode 100644
index 0000000000000000000000000000000000000000..d9bd37b12407e887607702cb57411ab04c9d5654
--- /dev/null
+++ b/Lotus/evaluation/util/metric.py
@@ -0,0 +1,193 @@
+# Author: Bingxin Ke
+# Last modified: 2024-02-15
+
+
+import pandas as pd
+import torch
+
+
+# Adapted from: https://github.com/victoresque/pytorch-template/blob/master/utils/util.py
+class MetricTracker:
+ def __init__(self, *keys, writer=None):
+ self.writer = writer
+ self._data = pd.DataFrame(index=keys, columns=["total", "counts", "average"])
+ self.reset()
+
+ def reset(self):
+ for col in self._data.columns:
+ self._data[col].values[:] = 0
+
+ def update(self, key, value, n=1):
+ if self.writer is not None:
+ self.writer.add_scalar(key, value)
+ self._data.loc[key, "total"] += value * n
+ self._data.loc[key, "counts"] += n
+ self._data.loc[key, "average"] = self._data.total[key] / self._data.counts[key]
+
+ def avg(self, key):
+ return self._data.average[key]
+
+ def result(self):
+ return dict(self._data.average)
+
+def pixel_mean(pred, gt, valid_mask):
+ if valid_mask is not None:
+ masked_pred = pred * valid_mask
+ masked_gt = gt * valid_mask
+
+ valid_pixel_count = torch.sum(valid_mask, dim=(0,1))
+
+ pred_mean = torch.sum(masked_pred, dim=(0,1)) / valid_pixel_count
+ gt_mean = torch.sum(masked_gt, dim=(0,1)) / valid_pixel_count
+ else:
+ pred_mean = torch.mean(pred, dim=(0,1))
+ gt_mean = torch.mean(gt, dim=(0,1))
+
+ mean_difference = torch.abs(pred_mean - gt_mean)
+ return mean_difference
+
+def pixel_var(pred, gt, valid_mask):
+ if valid_mask is not None:
+ masked_pred = pred * valid_mask
+ masked_gt = gt * valid_mask
+
+ valid_pixel_count = torch.sum(valid_mask, dim=(0,1))
+
+ pred_mean = torch.sum(masked_pred, dim=(0,1)) / valid_pixel_count
+ gt_mean = torch.sum(masked_gt, dim=(0,1)) / valid_pixel_count
+
+ pred_var = torch.sum(valid_mask * (pred - pred_mean)**2, dim=(0,1)) / valid_pixel_count
+ gt_var = torch.sum(valid_mask * (gt - gt_mean)**2, dim=(0,1)) / valid_pixel_count
+ else:
+ pred_var = torch.var(pred, dim=(0,1))
+ gt_var = torch.var(gt, dim=(0,1))
+
+ var_difference = torch.abs(pred_var - gt_var)
+
+ return var_difference
+
+def abs_relative_difference(output, target, valid_mask=None):
+ actual_output = output
+ actual_target = target
+ abs_relative_diff = torch.abs(actual_output - actual_target) / actual_target
+ if valid_mask is not None:
+ abs_relative_diff[~valid_mask] = 0
+ n = valid_mask.sum((-1, -2))
+ else:
+ n = output.shape[-1] * output.shape[-2]
+ abs_relative_diff = torch.sum(abs_relative_diff, (-1, -2)) / n
+ return abs_relative_diff.mean()
+
+
+def squared_relative_difference(output, target, valid_mask=None):
+ actual_output = output
+ actual_target = target
+ square_relative_diff = (
+ torch.pow(torch.abs(actual_output - actual_target), 2) / actual_target
+ )
+ if valid_mask is not None:
+ square_relative_diff[~valid_mask] = 0
+ n = valid_mask.sum((-1, -2))
+ else:
+ n = output.shape[-1] * output.shape[-2]
+ square_relative_diff = torch.sum(square_relative_diff, (-1, -2)) / n
+ return square_relative_diff.mean()
+
+
+def rmse_linear(output, target, valid_mask=None):
+ actual_output = output
+ actual_target = target
+ diff = actual_output - actual_target
+ if valid_mask is not None:
+ diff[~valid_mask] = 0
+ n = valid_mask.sum((-1, -2))
+ else:
+ n = output.shape[-1] * output.shape[-2]
+ diff2 = torch.pow(diff, 2)
+ mse = torch.sum(diff2, (-1, -2)) / n
+ rmse = torch.sqrt(mse)
+ return rmse.mean()
+
+
+def rmse_log(output, target, valid_mask=None):
+ diff = torch.log(output) - torch.log(target)
+ if valid_mask is not None:
+ diff[~valid_mask] = 0
+ n = valid_mask.sum((-1, -2))
+ else:
+ n = output.shape[-1] * output.shape[-2]
+ diff2 = torch.pow(diff, 2)
+ mse = torch.sum(diff2, (-1, -2)) / n # [B]
+ rmse = torch.sqrt(mse)
+ return rmse.mean()
+
+
+def log10(output, target, valid_mask=None):
+ if valid_mask is not None:
+ diff = torch.abs(
+ torch.log10(output[valid_mask]) - torch.log10(target[valid_mask])
+ )
+ else:
+ diff = torch.abs(torch.log10(output) - torch.log10(target))
+ return diff.mean()
+
+
+# adapt from: https://github.com/imran3180/depth-map-prediction/blob/master/main.py
+def threshold_percentage(output, target, threshold_val, valid_mask=None):
+ d1 = output / target
+ d2 = target / output
+ max_d1_d2 = torch.max(d1, d2)
+ zero = torch.zeros(*output.shape)
+ one = torch.ones(*output.shape)
+ bit_mat = torch.where(max_d1_d2.cpu() < threshold_val, one, zero)
+ if valid_mask is not None:
+ bit_mat[~valid_mask] = 0
+ n = valid_mask.sum((-1, -2))
+ else:
+ n = output.shape[-1] * output.shape[-2]
+ count_mat = torch.sum(bit_mat, (-1, -2))
+ threshold_mat = count_mat / n.cpu()
+ return threshold_mat.mean()
+
+
+def delta1_acc(pred, gt, valid_mask):
+ return threshold_percentage(pred, gt, 1.25, valid_mask)
+
+
+def delta2_acc(pred, gt, valid_mask):
+ return threshold_percentage(pred, gt, 1.25**2, valid_mask)
+
+
+def delta3_acc(pred, gt, valid_mask):
+ return threshold_percentage(pred, gt, 1.25**3, valid_mask)
+
+
+def i_rmse(output, target, valid_mask=None):
+ output_inv = 1.0 / output
+ target_inv = 1.0 / target
+ diff = output_inv - target_inv
+ if valid_mask is not None:
+ diff[~valid_mask] = 0
+ n = valid_mask.sum((-1, -2))
+ else:
+ n = output.shape[-1] * output.shape[-2]
+ diff2 = torch.pow(diff, 2)
+ mse = torch.sum(diff2, (-1, -2)) / n # [B]
+ rmse = torch.sqrt(mse)
+ return rmse.mean()
+
+
+def silog_rmse(depth_pred, depth_gt, valid_mask=None):
+ diff = torch.log(depth_pred) - torch.log(depth_gt)
+ if valid_mask is not None:
+ diff[~valid_mask] = 0
+ n = valid_mask.sum((-1, -2))
+ else:
+ n = depth_gt.shape[-2] * depth_gt.shape[-1]
+
+ diff2 = torch.pow(diff, 2)
+
+ first_term = torch.sum(diff2, (-1, -2)) / n
+ second_term = torch.pow(torch.sum(diff, (-1, -2)), 2) / (n**2)
+ loss = torch.sqrt(torch.mean(first_term - second_term)) * 100
+ return loss
diff --git a/Lotus/evaluation/util/normal_utils.py b/Lotus/evaluation/util/normal_utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..14b192b4d3c970c76070a2d18e00da841a228dab
--- /dev/null
+++ b/Lotus/evaluation/util/normal_utils.py
@@ -0,0 +1,78 @@
+import os
+import numpy as np
+import torch
+import torch.nn.functional as F
+import torch.distributed as dist
+
+
+def get_padding(orig_H, orig_W):
+ """ returns how the input of shape (orig_H, orig_W) should be padded
+ this ensures that both H and W are divisible by 32
+ """
+ if orig_W % 32 == 0:
+ l = 0
+ r = 0
+ else:
+ new_W = 32 * ((orig_W // 32) + 1)
+ l = (new_W - orig_W) // 2
+ r = (new_W - orig_W) - l
+
+ if orig_H % 32 == 0:
+ t = 0
+ b = 0
+ else:
+ new_H = 32 * ((orig_H // 32) + 1)
+ t = (new_H - orig_H) // 2
+ b = (new_H - orig_H) - t
+ return l, r, t, b
+
+def pad_input(img, intrins, lrtb=(0,0,0,0)):
+ """ pad input image
+ img should be a torch tensor of shape (B, 3, H, W)
+ intrins should be a torch tensor of shape (B, 3, 3)
+ """
+ l, r, t, b = lrtb
+ if l+r+t+b != 0:
+ pad_value_R = (0 - 0.485) / 0.229
+ pad_value_G = (0 - 0.456) / 0.224
+ pad_value_B = (0 - 0.406) / 0.225
+
+ img_R = F.pad(img[:,0:1,:,:], (l, r, t, b), mode="constant", value=pad_value_R)
+ img_G = F.pad(img[:,1:2,:,:], (l, r, t, b), mode="constant", value=pad_value_G)
+ img_B = F.pad(img[:,2:3,:,:], (l, r, t, b), mode="constant", value=pad_value_B)
+
+ img = torch.cat([img_R, img_G, img_B], dim=1)
+
+ if intrins is not None:
+ intrins[:, 0, 2] += l
+ intrins[:, 1, 2] += t
+ return img, intrins
+
+def compute_normal_error(pred_norm, gt_norm):
+ """ compute per-pixel surface normal error in degrees
+ NOTE: pred_norm and gt_norm should be torch tensors of shape (B, 3, ...)
+ """
+ pred_error = torch.cosine_similarity(pred_norm, gt_norm, dim=1)
+ pred_error = torch.clamp(pred_error, min=-1.0, max=1.0)
+ pred_error = torch.acos(pred_error) * 180.0 / np.pi
+ pred_error = pred_error.unsqueeze(1) # (B, 1, ...)
+ return pred_error
+
+def compute_normal_metrics(total_normal_errors):
+ """ compute surface normal metrics (used for benchmarking)
+ NOTE: total_normal_errors should be a 1D torch tensor of errors in degrees
+ """
+ total_normal_errors = total_normal_errors.detach().cpu().numpy()
+ num_pixels = total_normal_errors.shape[0]
+
+ metrics = {
+ 'mean': np.average(total_normal_errors),
+ 'median': np.median(total_normal_errors),
+ 'rmse': np.sqrt(np.sum(total_normal_errors * total_normal_errors) / num_pixels),
+ 'a1': 100.0 * (np.sum(total_normal_errors < 5) / num_pixels),
+ 'a2': 100.0 * (np.sum(total_normal_errors < 7.5) / num_pixels),
+ 'a3': 100.0 * (np.sum(total_normal_errors < 11.25) / num_pixels),
+ 'a4': 100.0 * (np.sum(total_normal_errors < 22.5) / num_pixels),
+ 'a5': 100.0 * (np.sum(total_normal_errors < 30) / num_pixels)
+ }
+ return metrics
\ No newline at end of file
diff --git a/Lotus/evaluation/util/seed_all.py b/Lotus/evaluation/util/seed_all.py
new file mode 100644
index 0000000000000000000000000000000000000000..95795654e36d3fbc14e876dff50f348a1f5a9c0a
--- /dev/null
+++ b/Lotus/evaluation/util/seed_all.py
@@ -0,0 +1,33 @@
+# Copyright 2023 Bingxin Ke, ETH Zurich. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# --------------------------------------------------------------------------
+# If you find this code useful, we kindly ask you to cite our paper in your work.
+# Please find bibtex at: https://github.com/prs-eth/Marigold#-citation
+# More information about the method can be found at https://marigoldmonodepth.github.io
+# --------------------------------------------------------------------------
+
+
+import numpy as np
+import random
+import torch
+
+
+def seed_all(seed: int = 0):
+ """
+ Set random seeds of all components.
+ """
+ random.seed(seed)
+ np.random.seed(seed)
+ torch.manual_seed(seed)
+ torch.cuda.manual_seed_all(seed)
diff --git a/Lotus/infer.py b/Lotus/infer.py
new file mode 100644
index 0000000000000000000000000000000000000000..569cd8c709121b21e10f58170385660c84ad4aa9
--- /dev/null
+++ b/Lotus/infer.py
@@ -0,0 +1,225 @@
+import logging
+import os
+import argparse
+from pathlib import Path
+from PIL import Image
+from contextlib import nullcontext
+
+import numpy as np
+import torch
+from tqdm.auto import tqdm
+from diffusers.utils import check_min_version
+
+from pipeline import LotusGPipeline, LotusDPipeline
+from utils.image_utils import colorize_depth_map
+from utils.seed_all import seed_all
+
+check_min_version('0.28.0.dev0')
+
+def parse_args():
+ '''Set the Args'''
+ parser = argparse.ArgumentParser(
+ description="Run Lotus..."
+ )
+ # model settings
+ parser.add_argument(
+ "--pretrained_model_name_or_path",
+ type=str,
+ default=None,
+ help="pretrained model path from hugging face or local dir",
+ )
+ parser.add_argument(
+ "--prediction_type",
+ type=str,
+ default="sample",
+ help="The used prediction_type. ",
+ )
+ parser.add_argument(
+ "--timestep",
+ type=int,
+ default=999,
+ )
+ parser.add_argument(
+ "--mode",
+ type=str,
+ default="regression", # "generation"
+ help="Whether to use the generation or regression pipeline."
+ )
+ parser.add_argument(
+ "--task_name",
+ type=str,
+ default="depth", # "normal"
+ )
+ parser.add_argument(
+ "--disparity",
+ action="store_true",
+ )
+ parser.add_argument(
+ "--enable_xformers_memory_efficient_attention", action="store_true", help="Whether or not to use xformers."
+ )
+
+ # inference settings
+ parser.add_argument("--seed", type=int, default=None, help="Random seed.")
+ parser.add_argument(
+ "--output_dir", type=str, required=True, help="Output directory."
+ )
+ parser.add_argument(
+ "--input_dir", type=str, required=True, help="Input directory."
+ )
+ parser.add_argument(
+ "--half_precision",
+ action="store_true",
+ help="Run with half-precision (16-bit float), might lead to suboptimal result.",
+ )
+ parser.add_argument(
+ "--processing_res",
+ type=int,
+ default=None,
+ help="Maximum resolution of processing. 0 for using input image resolution. Default: 768.",
+ )
+ parser.add_argument(
+ "--output_processing_res",
+ action="store_true",
+ help="When input is resized, out put depth at resized operating resolution. Default: False.",
+ )
+ parser.add_argument(
+ "--resample_method",
+ choices=["bilinear", "bicubic", "nearest"],
+ default="bilinear",
+ help="Resampling method used to resize images and depth predictions. This can be one of `bilinear`, `bicubic` or `nearest`. Default: `bilinear`",
+ )
+
+ args = parser.parse_args()
+
+ return args
+
+
+def main():
+ logging.basicConfig(level=logging.INFO)
+ logging.info(f"Run inference...")
+
+ args = parse_args()
+
+ # -------------------- Preparation --------------------
+ # Random seed
+ if args.seed is not None:
+ seed_all(args.seed)
+
+ # Output directories
+ os.makedirs(args.output_dir, exist_ok=True)
+ logging.info(f"Output dir = {args.output_dir}")
+
+ output_dir_color = os.path.join(args.output_dir, f'{args.task_name}_vis')
+ output_dir_npy = os.path.join(args.output_dir, f'{args.task_name}')
+ if not os.path.exists(output_dir_color): os.makedirs(output_dir_color)
+ if not os.path.exists(output_dir_npy): os.makedirs(output_dir_npy)
+
+ # half_precision
+ if args.half_precision:
+ dtype = torch.float16
+ logging.info(f"Running with half precision ({dtype}).")
+ else:
+ dtype = torch.float32
+
+ # processing_res
+ processing_res = args.processing_res
+ match_input_res = not args.output_processing_res
+ if 0 == processing_res and match_input_res is False:
+ logging.warning(
+ "Processing at native resolution without resizing output might NOT lead to exactly the same resolution, due to the padding and pooling properties of conv layers."
+ )
+ resample_method = args.resample_method
+
+ # -------------------- Device --------------------
+ if torch.cuda.is_available():
+ device = torch.device("cuda")
+ else:
+ device = torch.device("cpu")
+ logging.warning("CUDA is not available. Running on CPU will be slow.")
+ logging.info(f"Device = {device}")
+
+ # -------------------- Data --------------------
+ root_dir = Path(args.input_dir)
+ test_images = list(root_dir.rglob('*.png')) + list(root_dir.rglob('*.jpg'))
+ test_images = sorted(test_images)
+ print('==> There are', len(test_images), 'images for validation.')
+ # -------------------- Model --------------------
+
+ if args.mode == 'generation':
+ pipeline = LotusGPipeline.from_pretrained(
+ args.pretrained_model_name_or_path,
+ torch_dtype=dtype,
+ )
+ elif args.mode == 'regression':
+ pipeline = LotusDPipeline.from_pretrained(
+ args.pretrained_model_name_or_path,
+ torch_dtype=dtype,
+ )
+ else:
+ raise ValueError(f'Invalid mode: {args.mode}')
+ logging.info(f"Successfully loading pipeline from {args.pretrained_model_name_or_path}.")
+ logging.info(f"processing_res = {processing_res or pipeline.default_processing_resolution}")
+
+ pipeline = pipeline.to(device)
+ pipeline.set_progress_bar_config(disable=True)
+
+ if args.enable_xformers_memory_efficient_attention:
+ pipeline.enable_xformers_memory_efficient_attention()
+
+ if args.seed is None:
+ generator = None
+ else:
+ generator = torch.Generator(device=device).manual_seed(args.seed)
+
+ # -------------------- Inference and saving --------------------
+ with torch.no_grad():
+ for i in tqdm(range(len(test_images))):
+ if torch.backends.mps.is_available():
+ autocast_ctx = nullcontext()
+ else:
+ autocast_ctx = torch.autocast(pipeline.device.type)
+ with autocast_ctx:
+ # Preprocess validation image
+ test_image = Image.open(test_images[i]).convert('RGB')
+ test_image = np.array(test_image).astype(np.float32)
+ test_image = torch.tensor(test_image).permute(2,0,1).unsqueeze(0)
+ test_image = test_image / 127.5 - 1.0
+ test_image = test_image.to(device)
+
+ task_emb = torch.tensor([1, 0]).float().unsqueeze(0).repeat(1, 1).to(device)
+ task_emb = torch.cat([torch.sin(task_emb), torch.cos(task_emb)], dim=-1).repeat(1, 1)
+
+ # Run
+ pred = pipeline(
+ rgb_in=test_image,
+ prompt='',
+ num_inference_steps=1,
+ generator=generator,
+ # guidance_scale=0,
+ output_type='np',
+ timesteps=[args.timestep],
+ task_emb=task_emb,
+ processing_res=processing_res,
+ match_input_res=match_input_res,
+ resample_method=resample_method,
+ ).images[0]
+
+ # Post-process the prediction
+ save_file_name = os.path.basename(test_images[i])[:-4]
+ if args.task_name == 'depth':
+ output_npy = pred.mean(axis=-1)
+ output_color = colorize_depth_map(output_npy, reverse_color=args.disparity)
+ else:
+ output_npy = pred
+ output_color = Image.fromarray((output_npy * 255).astype(np.uint8))
+
+ output_color.save(os.path.join(output_dir_color, f'{save_file_name}.png'))
+ np.save(os.path.join(output_dir_npy, f'{save_file_name}.npy'), output_npy)
+
+ torch.cuda.empty_cache()
+
+ print('==> Inference is done. \n==> Results saved to:', args.output_dir)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/Lotus/infer.sh b/Lotus/infer.sh
new file mode 100644
index 0000000000000000000000000000000000000000..a5360a8eb41ab4ff7505485e39e1742d506fcbfc
--- /dev/null
+++ b/Lotus/infer.sh
@@ -0,0 +1,27 @@
+
+export CUDA=0
+
+export CHECKPOINT_DIR="jingheya/lotus-depth-g-v2-0-disparity"
+export OUTPUT_DIR="output/Depth_G_Infer"
+export TASK_NAME="depth"
+
+# export CHECKPOINT_DIR="jingheya/lotus-normal-g-v1-0"
+# export OUTPUT_DIR="output/Normal_G_Infer"
+# export TASK_NAME="normal"
+
+# export MODE="regression"
+export MODE="generation"
+
+export TEST_IMAGES="assets/in-the-wild_example"
+
+CUDA_VISIBLE_DEVICES=$CUDA python infer.py \
+ --pretrained_model_name_or_path=$CHECKPOINT_DIR \
+ --prediction_type="sample" \
+ --seed=42 \
+ --half_precision \
+ --input_dir=$TEST_IMAGES \
+ --task_name=$TASK_NAME \
+ --mode=$MODE \
+ --output_dir=$OUTPUT_DIR \
+ --disparity
+ # --processing_res=0 # Defualt: 768. To obtain more fine-grained results, you can set `--processing_res=0` (original resolution) or a higher resolution.
\ No newline at end of file
diff --git a/Lotus/pipeline.py b/Lotus/pipeline.py
new file mode 100644
index 0000000000000000000000000000000000000000..b132e1af6987ecba6ecc557c30c35c2b5d750a50
--- /dev/null
+++ b/Lotus/pipeline.py
@@ -0,0 +1,1360 @@
+
+import inspect
+from typing import Any, Callable, Dict, List, Optional, Union
+
+import torch
+import torch.nn.functional as F
+from packaging import version
+from transformers import CLIPImageProcessor, CLIPTextModel, CLIPTokenizer, CLIPVisionModelWithProjection
+import tensorboard
+from utils.image_utils import resize_max_res, get_tv_resample_method, resize_back, get_pil_resample_method
+from torchvision.transforms.functional import resize
+from torchvision.transforms import InterpolationMode
+
+from diffusers.configuration_utils import FrozenDict
+from diffusers.image_processor import PipelineImageInput, VaeImageProcessor
+from diffusers.loaders import FromSingleFileMixin, IPAdapterMixin, LoraLoaderMixin, TextualInversionLoaderMixin
+from diffusers.models import AutoencoderKL, ImageProjection, UNet2DConditionModel
+from diffusers.models.lora import adjust_lora_scale_text_encoder
+from diffusers.schedulers import KarrasDiffusionSchedulers
+from diffusers.utils import (
+ USE_PEFT_BACKEND,
+ deprecate,
+ logging,
+ replace_example_docstring,
+ scale_lora_layers,
+ unscale_lora_layers,
+)
+from diffusers.utils.torch_utils import randn_tensor
+from diffusers.pipelines.pipeline_utils import DiffusionPipeline, StableDiffusionMixin
+from diffusers.pipelines.stable_diffusion.pipeline_output import StableDiffusionPipelineOutput
+from diffusers.pipelines.stable_diffusion.safety_checker import StableDiffusionSafetyChecker
+from diffusers import StableDiffusionPipeline
+
+logger = logging.get_logger(__name__) # pylint: disable=invalid-name
+
+
+def rescale_noise_cfg(noise_cfg, noise_pred_text, guidance_rescale=0.0):
+ """
+ Rescale `noise_cfg` according to `guidance_rescale`. Based on findings of [Common Diffusion Noise Schedules and
+ Sample Steps are Flawed](https://arxiv.org/pdf/2305.08891.pdf). See Section 3.4
+ """
+ std_text = noise_pred_text.std(dim=list(range(1, noise_pred_text.ndim)), keepdim=True)
+ std_cfg = noise_cfg.std(dim=list(range(1, noise_cfg.ndim)), keepdim=True)
+ # rescale the results from guidance (fixes overexposure)
+ noise_pred_rescaled = noise_cfg * (std_text / std_cfg)
+ # mix with the original results from guidance by factor guidance_rescale to avoid "plain looking" images
+ noise_cfg = guidance_rescale * noise_pred_rescaled + (1 - guidance_rescale) * noise_cfg
+ return noise_cfg
+
+
+def retrieve_timesteps(
+ scheduler,
+ num_inference_steps: Optional[int] = None,
+ device: Optional[Union[str, torch.device]] = None,
+ timesteps: Optional[List[int]] = None,
+ **kwargs,
+):
+ """
+ Calls the scheduler's `set_timesteps` method and retrieves timesteps from the scheduler after the call. Handles
+ custom timesteps. Any kwargs will be supplied to `scheduler.set_timesteps`.
+
+ Args:
+ scheduler (`SchedulerMixin`):
+ The scheduler to get timesteps from.
+ num_inference_steps (`int`):
+ The number of diffusion steps used when generating samples with a pre-trained model. If used, `timesteps`
+ must be `None`.
+ device (`str` or `torch.device`, *optional*):
+ The device to which the timesteps should be moved to. If `None`, the timesteps are not moved.
+ timesteps (`List[int]`, *optional*):
+ Custom timesteps used to support arbitrary spacing between timesteps. If `None`, then the default
+ timestep spacing strategy of the scheduler is used. If `timesteps` is passed, `num_inference_steps`
+ must be `None`.
+
+ Returns:
+ `Tuple[torch.Tensor, int]`: A tuple where the first element is the timestep schedule from the scheduler and the
+ second element is the number of inference steps.
+ """
+ if timesteps is not None:
+ accepts_timesteps = "timesteps" in set(inspect.signature(scheduler.set_timesteps).parameters.keys())
+ if not accepts_timesteps:
+ raise ValueError(
+ f"The current scheduler class {scheduler.__class__}'s `set_timesteps` does not support custom"
+ f" timestep schedules. Please check whether you are using the correct scheduler."
+ )
+ scheduler.set_timesteps(timesteps=timesteps, device=device, **kwargs)
+ timesteps = scheduler.timesteps
+ num_inference_steps = len(timesteps)
+ else:
+ scheduler.set_timesteps(num_inference_steps, device=device, **kwargs)
+ timesteps = scheduler.timesteps
+ return timesteps, num_inference_steps
+
+
+class DirectDiffusionPipeline(
+ DiffusionPipeline,
+ StableDiffusionMixin,
+ TextualInversionLoaderMixin,
+ LoraLoaderMixin,
+ IPAdapterMixin,
+ FromSingleFileMixin,
+):
+ r"""
+ Pipeline for text-to-image generation using Stable Diffusion.
+
+ This model inherits from [`DiffusionPipeline`]. Check the superclass documentation for the generic methods
+ implemented for all pipelines (downloading, saving, running on a particular device, etc.).
+
+ The pipeline also inherits the following loading methods:
+ - [`~loaders.TextualInversionLoaderMixin.load_textual_inversion`] for loading textual inversion embeddings
+ - [`~loaders.LoraLoaderMixin.load_lora_weights`] for loading LoRA weights
+ - [`~loaders.LoraLoaderMixin.save_lora_weights`] for saving LoRA weights
+ - [`~loaders.FromSingleFileMixin.from_single_file`] for loading `.ckpt` files
+ - [`~loaders.IPAdapterMixin.load_ip_adapter`] for loading IP Adapters
+
+ Args:
+ vae ([`AutoencoderKL`]):
+ Variational Auto-Encoder (VAE) model to encode and decode images to and from latent representations.
+ text_encoder ([`~transformers.CLIPTextModel`]):
+ Frozen text-encoder ([clip-vit-large-patch14](https://huggingface.co/openai/clip-vit-large-patch14)).
+ tokenizer ([`~transformers.CLIPTokenizer`]):
+ A `CLIPTokenizer` to tokenize text.
+ unet ([`UNet2DConditionModel`]):
+ A `UNet2DConditionModel` to denoise the encoded image latents.
+ scheduler ([`SchedulerMixin`]):
+ A scheduler to be used in combination with `unet` to denoise the encoded image latents. Can be one of
+ [`DDIMScheduler`], [`LMSDiscreteScheduler`], or [`PNDMScheduler`].
+ safety_checker ([`StableDiffusionSafetyChecker`]):
+ Classification module that estimates whether generated images could be considered offensive or harmful.
+ Please refer to the [model card](https://huggingface.co/runwayml/stable-diffusion-v1-5) for more details
+ about a model's potential harms.
+ feature_extractor ([`~transformers.CLIPImageProcessor`]):
+ A `CLIPImageProcessor` to extract features from generated images; used as inputs to the `safety_checker`.
+ """
+
+ model_cpu_offload_seq = "text_encoder->image_encoder->unet->vae"
+ _optional_components = ["safety_checker", "feature_extractor", "image_encoder"]
+ _exclude_from_cpu_offload = ["safety_checker"]
+ _callback_tensor_inputs = ["latents", "prompt_embeds", "negative_prompt_embeds"]
+
+ def __init__(
+ self,
+ vae: AutoencoderKL,
+ text_encoder: CLIPTextModel,
+ tokenizer: CLIPTokenizer,
+ unet: UNet2DConditionModel,
+ scheduler: KarrasDiffusionSchedulers,
+ safety_checker: StableDiffusionSafetyChecker,
+ feature_extractor: CLIPImageProcessor,
+ image_encoder: CLIPVisionModelWithProjection = None,
+ requires_safety_checker: bool = True,
+ ):
+ super().__init__()
+
+ if hasattr(scheduler.config, "steps_offset") and scheduler.config.steps_offset != 1:
+ deprecation_message = (
+ f"The configuration file of this scheduler: {scheduler} is outdated. `steps_offset`"
+ f" should be set to 1 instead of {scheduler.config.steps_offset}. Please make sure "
+ "to update the config accordingly as leaving `steps_offset` might led to incorrect results"
+ " in future versions. If you have downloaded this checkpoint from the Hugging Face Hub,"
+ " it would be very nice if you could open a Pull request for the `scheduler/scheduler_config.json`"
+ " file"
+ )
+ deprecate("steps_offset!=1", "1.0.0", deprecation_message, standard_warn=False)
+ new_config = dict(scheduler.config)
+ new_config["steps_offset"] = 1
+ scheduler._internal_dict = FrozenDict(new_config)
+
+ if hasattr(scheduler.config, "clip_sample") and scheduler.config.clip_sample is True:
+ deprecation_message = (
+ f"The configuration file of this scheduler: {scheduler} has not set the configuration `clip_sample`."
+ " `clip_sample` should be set to False in the configuration file. Please make sure to update the"
+ " config accordingly as not setting `clip_sample` in the config might lead to incorrect results in"
+ " future versions. If you have downloaded this checkpoint from the Hugging Face Hub, it would be very"
+ " nice if you could open a Pull request for the `scheduler/scheduler_config.json` file"
+ )
+ deprecate("clip_sample not set", "1.0.0", deprecation_message, standard_warn=False)
+ new_config = dict(scheduler.config)
+ new_config["clip_sample"] = False
+ scheduler._internal_dict = FrozenDict(new_config)
+
+ if safety_checker is None and requires_safety_checker:
+ logger.warning(
+ f"You have disabled the safety checker for {self.__class__} by passing `safety_checker=None`. Ensure"
+ " that you abide to the conditions of the Stable Diffusion license and do not expose unfiltered"
+ " results in services or applications open to the public. Both the diffusers team and Hugging Face"
+ " strongly recommend to keep the safety filter enabled in all public facing circumstances, disabling"
+ " it only for use-cases that involve analyzing network behavior or auditing its results. For more"
+ " information, please have a look at https://github.com/huggingface/diffusers/pull/254 ."
+ )
+
+ if safety_checker is not None and feature_extractor is None:
+ raise ValueError(
+ "Make sure to define a feature extractor when loading {self.__class__} if you want to use the safety"
+ " checker. If you do not want to use the safety checker, you can pass `'safety_checker=None'` instead."
+ )
+
+ is_unet_version_less_0_9_0 = hasattr(unet.config, "_diffusers_version") and version.parse(
+ version.parse(unet.config._diffusers_version).base_version
+ ) < version.parse("0.9.0.dev0")
+ is_unet_sample_size_less_64 = hasattr(unet.config, "sample_size") and unet.config.sample_size < 64
+ if is_unet_version_less_0_9_0 and is_unet_sample_size_less_64:
+ deprecation_message = (
+ "The configuration file of the unet has set the default `sample_size` to smaller than"
+ " 64 which seems highly unlikely. If your checkpoint is a fine-tuned version of any of the"
+ " following: \n- CompVis/stable-diffusion-v1-4 \n- CompVis/stable-diffusion-v1-3 \n-"
+ " CompVis/stable-diffusion-v1-2 \n- CompVis/stable-diffusion-v1-1 \n- runwayml/stable-diffusion-v1-5"
+ " \n- runwayml/stable-diffusion-inpainting \n you should change 'sample_size' to 64 in the"
+ " configuration file. Please make sure to update the config accordingly as leaving `sample_size=32`"
+ " in the config might lead to incorrect results in future versions. If you have downloaded this"
+ " checkpoint from the Hugging Face Hub, it would be very nice if you could open a Pull request for"
+ " the `unet/config.json` file"
+ )
+ deprecate("sample_size<64", "1.0.0", deprecation_message, standard_warn=False)
+ new_config = dict(unet.config)
+ new_config["sample_size"] = 64
+ unet._internal_dict = FrozenDict(new_config)
+
+ self.register_modules(
+ vae=vae,
+ text_encoder=text_encoder,
+ tokenizer=tokenizer,
+ unet=unet,
+ scheduler=scheduler,
+ safety_checker=safety_checker,
+ feature_extractor=feature_extractor,
+ image_encoder=image_encoder,
+ )
+ self.vae_scale_factor = 2 ** (len(self.vae.config.block_out_channels) - 1)
+ self.image_processor = VaeImageProcessor(vae_scale_factor=self.vae_scale_factor)
+ self.register_to_config(requires_safety_checker=requires_safety_checker)
+
+ def _encode_prompt(
+ self,
+ prompt,
+ device,
+ num_images_per_prompt,
+ do_classifier_free_guidance,
+ negative_prompt=None,
+ prompt_embeds: Optional[torch.FloatTensor] = None,
+ negative_prompt_embeds: Optional[torch.FloatTensor] = None,
+ lora_scale: Optional[float] = None,
+ **kwargs,
+ ):
+ deprecation_message = "`_encode_prompt()` is deprecated and it will be removed in a future version. Use `encode_prompt()` instead. Also, be aware that the output format changed from a concatenated tensor to a tuple."
+ deprecate("_encode_prompt()", "1.0.0", deprecation_message, standard_warn=False)
+
+ prompt_embeds_tuple = self.encode_prompt(
+ prompt=prompt,
+ device=device,
+ num_images_per_prompt=num_images_per_prompt,
+ do_classifier_free_guidance=do_classifier_free_guidance,
+ negative_prompt=negative_prompt,
+ prompt_embeds=prompt_embeds,
+ negative_prompt_embeds=negative_prompt_embeds,
+ lora_scale=lora_scale,
+ **kwargs,
+ )
+
+ # concatenate for backwards comp
+ prompt_embeds = torch.cat([prompt_embeds_tuple[1], prompt_embeds_tuple[0]])
+
+ return prompt_embeds
+
+ def encode_prompt(
+ self,
+ prompt,
+ device,
+ num_images_per_prompt,
+ do_classifier_free_guidance,
+ negative_prompt=None,
+ padding_type="do_not_pad",
+ prompt_embeds: Optional[torch.FloatTensor] = None,
+ negative_prompt_embeds: Optional[torch.FloatTensor] = None,
+ lora_scale: Optional[float] = None,
+ clip_skip: Optional[int] = None,
+ ):
+ r"""
+ Encodes the prompt into text encoder hidden states.
+
+ Args:
+ prompt (`str` or `List[str]`, *optional*):
+ prompt to be encoded
+ device: (`torch.device`):
+ torch device
+ num_images_per_prompt (`int`):
+ number of images that should be generated per prompt
+ do_classifier_free_guidance (`bool`):
+ whether to use classifier free guidance or not
+ negative_prompt (`str` or `List[str]`, *optional*):
+ The prompt or prompts not to guide the image generation. If not defined, one has to pass
+ `negative_prompt_embeds` instead. Ignored when not using guidance (i.e., ignored if `guidance_scale` is
+ less than `1`).
+ prompt_embeds (`torch.FloatTensor`, *optional*):
+ Pre-generated text embeddings. Can be used to easily tweak text inputs, *e.g.* prompt weighting. If not
+ provided, text embeddings will be generated from `prompt` input argument.
+ negative_prompt_embeds (`torch.FloatTensor`, *optional*):
+ Pre-generated negative text embeddings. Can be used to easily tweak text inputs, *e.g.* prompt
+ weighting. If not provided, negative_prompt_embeds will be generated from `negative_prompt` input
+ argument.
+ lora_scale (`float`, *optional*):
+ A LoRA scale that will be applied to all LoRA layers of the text encoder if LoRA layers are loaded.
+ clip_skip (`int`, *optional*):
+ Number of layers to be skipped from CLIP while computing the prompt embeddings. A value of 1 means that
+ the output of the pre-final layer will be used for computing the prompt embeddings.
+ """
+ # set lora scale so that monkey patched LoRA
+ # function of text encoder can correctly access it
+ if lora_scale is not None and isinstance(self, LoraLoaderMixin):
+ self._lora_scale = lora_scale
+
+ # dynamically adjust the LoRA scale
+ if not USE_PEFT_BACKEND:
+ adjust_lora_scale_text_encoder(self.text_encoder, lora_scale)
+ else:
+ scale_lora_layers(self.text_encoder, lora_scale)
+
+ if prompt is not None and isinstance(prompt, str):
+ batch_size = 1
+ elif prompt is not None and isinstance(prompt, list):
+ batch_size = len(prompt)
+ else:
+ batch_size = prompt_embeds.shape[0]
+
+ if prompt_embeds is None:
+ # textual inversion: process multi-vector tokens if necessary
+ if isinstance(self, TextualInversionLoaderMixin):
+ prompt = self.maybe_convert_prompt(prompt, self.tokenizer)
+
+ text_inputs = self.tokenizer(
+ prompt,
+ padding=padding_type,
+ max_length=self.tokenizer.model_max_length,
+ truncation=True,
+ return_tensors="pt",
+ )
+ text_input_ids = text_inputs.input_ids
+ untruncated_ids = self.tokenizer(prompt, padding="longest", return_tensors="pt").input_ids
+
+ if untruncated_ids.shape[-1] >= text_input_ids.shape[-1] and not torch.equal(
+ text_input_ids, untruncated_ids
+ ):
+ removed_text = self.tokenizer.batch_decode(
+ untruncated_ids[:, self.tokenizer.model_max_length - 1 : -1]
+ )
+ logger.warning(
+ "The following part of your input was truncated because CLIP can only handle sequences up to"
+ f" {self.tokenizer.model_max_length} tokens: {removed_text}"
+ )
+
+ if hasattr(self.text_encoder.config, "use_attention_mask") and self.text_encoder.config.use_attention_mask:
+ attention_mask = text_inputs.attention_mask.to(device)
+ else:
+ attention_mask = None
+
+ if clip_skip is None:
+ prompt_embeds = self.text_encoder(text_input_ids.to(device), attention_mask=attention_mask)
+ prompt_embeds = prompt_embeds[0]
+ else:
+ prompt_embeds = self.text_encoder(
+ text_input_ids.to(device), attention_mask=attention_mask, output_hidden_states=True
+ )
+ # Access the `hidden_states` first, that contains a tuple of
+ # all the hidden states from the encoder layers. Then index into
+ # the tuple to access the hidden states from the desired layer.
+ prompt_embeds = prompt_embeds[-1][-(clip_skip + 1)]
+ # We also need to apply the final LayerNorm here to not mess with the
+ # representations. The `last_hidden_states` that we typically use for
+ # obtaining the final prompt representations passes through the LayerNorm
+ # layer.
+ prompt_embeds = self.text_encoder.text_model.final_layer_norm(prompt_embeds)
+
+ if self.text_encoder is not None:
+ prompt_embeds_dtype = self.text_encoder.dtype
+ elif self.unet is not None:
+ prompt_embeds_dtype = self.unet.dtype
+ else:
+ prompt_embeds_dtype = prompt_embeds.dtype
+
+ prompt_embeds = prompt_embeds.to(dtype=prompt_embeds_dtype, device=device)
+
+ bs_embed, seq_len, _ = prompt_embeds.shape
+ # duplicate text embeddings for each generation per prompt, using mps friendly method
+ prompt_embeds = prompt_embeds.repeat(1, num_images_per_prompt, 1)
+ prompt_embeds = prompt_embeds.view(bs_embed * num_images_per_prompt, seq_len, -1)
+
+ # get unconditional embeddings for classifier free guidance
+ if do_classifier_free_guidance and negative_prompt_embeds is None:
+ uncond_tokens: List[str]
+ if negative_prompt is None:
+ uncond_tokens = [""] * batch_size
+ elif prompt is not None and type(prompt) is not type(negative_prompt):
+ raise TypeError(
+ f"`negative_prompt` should be the same type to `prompt`, but got {type(negative_prompt)} !="
+ f" {type(prompt)}."
+ )
+ elif isinstance(negative_prompt, str):
+ uncond_tokens = [negative_prompt]
+ elif batch_size != len(negative_prompt):
+ raise ValueError(
+ f"`negative_prompt`: {negative_prompt} has batch size {len(negative_prompt)}, but `prompt`:"
+ f" {prompt} has batch size {batch_size}. Please make sure that passed `negative_prompt` matches"
+ " the batch size of `prompt`."
+ )
+ else:
+ uncond_tokens = negative_prompt
+
+ # textual inversion: process multi-vector tokens if necessary
+ if isinstance(self, TextualInversionLoaderMixin):
+ uncond_tokens = self.maybe_convert_prompt(uncond_tokens, self.tokenizer)
+
+ max_length = prompt_embeds.shape[1]
+ uncond_input = self.tokenizer(
+ uncond_tokens,
+ padding="max_length",
+ max_length=max_length,
+ truncation=True,
+ return_tensors="pt",
+ )
+
+ if hasattr(self.text_encoder.config, "use_attention_mask") and self.text_encoder.config.use_attention_mask:
+ attention_mask = uncond_input.attention_mask.to(device)
+ else:
+ attention_mask = None
+
+ negative_prompt_embeds = self.text_encoder(
+ uncond_input.input_ids.to(device),
+ attention_mask=attention_mask,
+ )
+ negative_prompt_embeds = negative_prompt_embeds[0]
+
+ if do_classifier_free_guidance:
+ # duplicate unconditional embeddings for each generation per prompt, using mps friendly method
+ seq_len = negative_prompt_embeds.shape[1]
+
+ negative_prompt_embeds = negative_prompt_embeds.to(dtype=prompt_embeds_dtype, device=device)
+
+ negative_prompt_embeds = negative_prompt_embeds.repeat(1, num_images_per_prompt, 1)
+ negative_prompt_embeds = negative_prompt_embeds.view(batch_size * num_images_per_prompt, seq_len, -1)
+
+ if isinstance(self, LoraLoaderMixin) and USE_PEFT_BACKEND:
+ # Retrieve the original scale by scaling back the LoRA layers
+ unscale_lora_layers(self.text_encoder, lora_scale)
+
+ return prompt_embeds, negative_prompt_embeds
+
+ def encode_image(self, image, device, num_images_per_prompt, output_hidden_states=None):
+ dtype = next(self.image_encoder.parameters()).dtype
+
+ if not isinstance(image, torch.Tensor):
+ image = self.feature_extractor(image, return_tensors="pt").pixel_values
+
+ image = image.to(device=device, dtype=dtype)
+ if output_hidden_states:
+ image_enc_hidden_states = self.image_encoder(image, output_hidden_states=True).hidden_states[-2]
+ image_enc_hidden_states = image_enc_hidden_states.repeat_interleave(num_images_per_prompt, dim=0)
+ uncond_image_enc_hidden_states = self.image_encoder(
+ torch.zeros_like(image), output_hidden_states=True
+ ).hidden_states[-2]
+ uncond_image_enc_hidden_states = uncond_image_enc_hidden_states.repeat_interleave(
+ num_images_per_prompt, dim=0
+ )
+ return image_enc_hidden_states, uncond_image_enc_hidden_states
+ else:
+ image_embeds = self.image_encoder(image).image_embeds
+ image_embeds = image_embeds.repeat_interleave(num_images_per_prompt, dim=0)
+ uncond_image_embeds = torch.zeros_like(image_embeds)
+
+ return image_embeds, uncond_image_embeds
+
+ def prepare_ip_adapter_image_embeds(
+ self, ip_adapter_image, ip_adapter_image_embeds, device, num_images_per_prompt, do_classifier_free_guidance
+ ):
+ if ip_adapter_image_embeds is None:
+ if not isinstance(ip_adapter_image, list):
+ ip_adapter_image = [ip_adapter_image]
+
+ if len(ip_adapter_image) != len(self.unet.encoder_hid_proj.image_projection_layers):
+ raise ValueError(
+ f"`ip_adapter_image` must have same length as the number of IP Adapters. Got {len(ip_adapter_image)} images and {len(self.unet.encoder_hid_proj.image_projection_layers)} IP Adapters."
+ )
+
+ image_embeds = []
+ for single_ip_adapter_image, image_proj_layer in zip(
+ ip_adapter_image, self.unet.encoder_hid_proj.image_projection_layers
+ ):
+ output_hidden_state = not isinstance(image_proj_layer, ImageProjection)
+ single_image_embeds, single_negative_image_embeds = self.encode_image(
+ single_ip_adapter_image, device, 1, output_hidden_state
+ )
+ single_image_embeds = torch.stack([single_image_embeds] * num_images_per_prompt, dim=0)
+ single_negative_image_embeds = torch.stack(
+ [single_negative_image_embeds] * num_images_per_prompt, dim=0
+ )
+
+ if do_classifier_free_guidance:
+ single_image_embeds = torch.cat([single_negative_image_embeds, single_image_embeds])
+ single_image_embeds = single_image_embeds.to(device)
+
+ image_embeds.append(single_image_embeds)
+ else:
+ repeat_dims = [1]
+ image_embeds = []
+ for single_image_embeds in ip_adapter_image_embeds:
+ if do_classifier_free_guidance:
+ single_negative_image_embeds, single_image_embeds = single_image_embeds.chunk(2)
+ single_image_embeds = single_image_embeds.repeat(
+ num_images_per_prompt, *(repeat_dims * len(single_image_embeds.shape[1:]))
+ )
+ single_negative_image_embeds = single_negative_image_embeds.repeat(
+ num_images_per_prompt, *(repeat_dims * len(single_negative_image_embeds.shape[1:]))
+ )
+ single_image_embeds = torch.cat([single_negative_image_embeds, single_image_embeds])
+ else:
+ single_image_embeds = single_image_embeds.repeat(
+ num_images_per_prompt, *(repeat_dims * len(single_image_embeds.shape[1:]))
+ )
+ image_embeds.append(single_image_embeds)
+
+ return image_embeds
+
+ def run_safety_checker(self, image, device, dtype):
+ if self.safety_checker is None:
+ has_nsfw_concept = None
+ else:
+ if torch.is_tensor(image):
+ feature_extractor_input = self.image_processor.postprocess(image, output_type="pil")
+ else:
+ feature_extractor_input = self.image_processor.numpy_to_pil(image)
+ safety_checker_input = self.feature_extractor(feature_extractor_input, return_tensors="pt").to(device)
+ image, has_nsfw_concept = self.safety_checker(
+ images=image, clip_input=safety_checker_input.pixel_values.to(dtype)
+ )
+ return image, has_nsfw_concept
+
+ def decode_latents(self, latents):
+ deprecation_message = "The decode_latents method is deprecated and will be removed in 1.0.0. Please use VaeImageProcessor.postprocess(...) instead"
+ deprecate("decode_latents", "1.0.0", deprecation_message, standard_warn=False)
+
+ latents = 1 / self.vae.config.scaling_factor * latents
+ image = self.vae.decode(latents, return_dict=False)[0]
+ image = (image / 2 + 0.5).clamp(0, 1)
+ # we always cast to float32 as this does not cause significant overhead and is compatible with bfloat16
+ image = image.cpu().permute(0, 2, 3, 1).float().numpy()
+ return image
+
+ def prepare_extra_step_kwargs(self, generator, eta):
+ # prepare extra kwargs for the scheduler step, since not all schedulers have the same signature
+ # eta (η) is only used with the DDIMScheduler, it will be ignored for other schedulers.
+ # eta corresponds to η in DDIM paper: https://arxiv.org/abs/2010.02502
+ # and should be between [0, 1]
+
+ accepts_eta = "eta" in set(inspect.signature(self.scheduler.step).parameters.keys())
+ extra_step_kwargs = {}
+ if accepts_eta:
+ extra_step_kwargs["eta"] = eta
+
+ # check if the scheduler accepts generator
+ accepts_generator = "generator" in set(inspect.signature(self.scheduler.step).parameters.keys())
+ if accepts_generator:
+ extra_step_kwargs["generator"] = generator
+ return extra_step_kwargs
+
+ def check_inputs(
+ self,
+ prompt,
+ height,
+ width,
+ callback_steps,
+ negative_prompt=None,
+ prompt_embeds=None,
+ negative_prompt_embeds=None,
+ ip_adapter_image=None,
+ ip_adapter_image_embeds=None,
+ callback_on_step_end_tensor_inputs=None,
+ ):
+ if height % 8 != 0 or width % 8 != 0:
+ raise ValueError(f"`height` and `width` have to be divisible by 8 but are {height} and {width}.")
+
+ if callback_steps is not None and (not isinstance(callback_steps, int) or callback_steps <= 0):
+ raise ValueError(
+ f"`callback_steps` has to be a positive integer but is {callback_steps} of type"
+ f" {type(callback_steps)}."
+ )
+ if callback_on_step_end_tensor_inputs is not None and not all(
+ k in self._callback_tensor_inputs for k in callback_on_step_end_tensor_inputs
+ ):
+ raise ValueError(
+ f"`callback_on_step_end_tensor_inputs` has to be in {self._callback_tensor_inputs}, but found {[k for k in callback_on_step_end_tensor_inputs if k not in self._callback_tensor_inputs]}"
+ )
+
+ if prompt is not None and prompt_embeds is not None:
+ raise ValueError(
+ f"Cannot forward both `prompt`: {prompt} and `prompt_embeds`: {prompt_embeds}. Please make sure to"
+ " only forward one of the two."
+ )
+ elif prompt is None and prompt_embeds is None:
+ raise ValueError(
+ "Provide either `prompt` or `prompt_embeds`. Cannot leave both `prompt` and `prompt_embeds` undefined."
+ )
+ elif prompt is not None and (not isinstance(prompt, str) and not isinstance(prompt, list)):
+ raise ValueError(f"`prompt` has to be of type `str` or `list` but is {type(prompt)}")
+
+ if negative_prompt is not None and negative_prompt_embeds is not None:
+ raise ValueError(
+ f"Cannot forward both `negative_prompt`: {negative_prompt} and `negative_prompt_embeds`:"
+ f" {negative_prompt_embeds}. Please make sure to only forward one of the two."
+ )
+
+ if prompt_embeds is not None and negative_prompt_embeds is not None:
+ if prompt_embeds.shape != negative_prompt_embeds.shape:
+ raise ValueError(
+ "`prompt_embeds` and `negative_prompt_embeds` must have the same shape when passed directly, but"
+ f" got: `prompt_embeds` {prompt_embeds.shape} != `negative_prompt_embeds`"
+ f" {negative_prompt_embeds.shape}."
+ )
+
+ if ip_adapter_image is not None and ip_adapter_image_embeds is not None:
+ raise ValueError(
+ "Provide either `ip_adapter_image` or `ip_adapter_image_embeds`. Cannot leave both `ip_adapter_image` and `ip_adapter_image_embeds` defined."
+ )
+
+ if ip_adapter_image_embeds is not None:
+ if not isinstance(ip_adapter_image_embeds, list):
+ raise ValueError(
+ f"`ip_adapter_image_embeds` has to be of type `list` but is {type(ip_adapter_image_embeds)}"
+ )
+ elif ip_adapter_image_embeds[0].ndim not in [3, 4]:
+ raise ValueError(
+ f"`ip_adapter_image_embeds` has to be a list of 3D or 4D tensors but is {ip_adapter_image_embeds[0].ndim}D"
+ )
+
+ def prepare_latents(self, batch_size, num_channels_latents, height, width, dtype, device, generator, latents=None):
+ shape = (
+ batch_size,
+ num_channels_latents,
+ int(height) // self.vae_scale_factor,
+ int(width) // self.vae_scale_factor,
+ )
+ if isinstance(generator, list) and len(generator) != batch_size:
+ raise ValueError(
+ f"You have passed a list of generators of length {len(generator)}, but requested an effective batch"
+ f" size of {batch_size}. Make sure the batch size matches the length of the generators."
+ )
+
+ if latents is None:
+ latents = randn_tensor(shape, generator=generator, device=device, dtype=dtype)
+ else:
+ latents = latents.to(device)
+
+ # scale the initial noise by the standard deviation required by the scheduler
+ latents = latents * self.scheduler.init_noise_sigma
+ return latents
+
+ # Copied from diffusers.pipelines.latent_consistency_models.pipeline_latent_consistency_text2img.LatentConsistencyModelPipeline.get_guidance_scale_embedding
+ def get_guidance_scale_embedding(
+ self, w: torch.Tensor, embedding_dim: int = 512, dtype: torch.dtype = torch.float32
+ ) -> torch.FloatTensor:
+ """
+ See https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298
+
+ Args:
+ w (`torch.Tensor`):
+ Generate embedding vectors with a specified guidance scale to subsequently enrich timestep embeddings.
+ embedding_dim (`int`, *optional*, defaults to 512):
+ Dimension of the embeddings to generate.
+ dtype (`torch.dtype`, *optional*, defaults to `torch.float32`):
+ Data type of the generated embeddings.
+
+ Returns:
+ `torch.FloatTensor`: Embedding vectors with shape `(len(w), embedding_dim)`.
+ """
+ assert len(w.shape) == 1
+ w = w * 1000.0
+
+ half_dim = embedding_dim // 2
+ emb = torch.log(torch.tensor(10000.0)) / (half_dim - 1)
+ emb = torch.exp(torch.arange(half_dim, dtype=dtype) * -emb)
+ emb = w.to(dtype)[:, None] * emb[None, :]
+ emb = torch.cat([torch.sin(emb), torch.cos(emb)], dim=1)
+ if embedding_dim % 2 == 1: # zero pad
+ emb = torch.nn.functional.pad(emb, (0, 1))
+ assert emb.shape == (w.shape[0], embedding_dim)
+ return emb
+
+ @property
+ def guidance_scale(self):
+ return self._guidance_scale
+
+ @property
+ def guidance_rescale(self):
+ return self._guidance_rescale
+
+ @property
+ def clip_skip(self):
+ return self._clip_skip
+
+ # here `guidance_scale` is defined analog to the guidance weight `w` of equation (2)
+ # of the Imagen paper: https://arxiv.org/pdf/2205.11487.pdf . `guidance_scale = 1`
+ # corresponds to doing no classifier free guidance.
+ @property
+ def do_classifier_free_guidance(self):
+ return self._guidance_scale > 1 and self.unet.config.time_cond_proj_dim is None
+
+ @property
+ def cross_attention_kwargs(self):
+ return self._cross_attention_kwargs
+
+ @property
+ def num_timesteps(self):
+ return self._num_timesteps
+
+ @property
+ def interrupt(self):
+ return self._interrupt
+
+ @torch.no_grad()
+ def __call__(
+ self,
+ rgb_in: Optional[torch.FloatTensor] = None,
+ prompt: Union[str, List[str]] = None,
+ height: Optional[int] = None,
+ width: Optional[int] = None,
+ num_inference_steps: int = 50,
+ timesteps: List[int] = None,
+ guidance_scale: float = 7.5,
+ negative_prompt: Optional[Union[str, List[str]]] = None,
+ num_images_per_prompt: Optional[int] = 1,
+ eta: float = 0.0,
+ generator: Optional[Union[torch.Generator, List[torch.Generator]]] = None,
+ latents: Optional[torch.FloatTensor] = None,
+ prompt_embeds: Optional[torch.FloatTensor] = None,
+ negative_prompt_embeds: Optional[torch.FloatTensor] = None,
+ ip_adapter_image: Optional[PipelineImageInput] = None,
+ ip_adapter_image_embeds: Optional[List[torch.FloatTensor]] = None,
+ output_type: Optional[str] = "pil",
+ return_dict: bool = True,
+ cross_attention_kwargs: Optional[Dict[str, Any]] = None,
+ guidance_rescale: float = 0.0,
+ clip_skip: Optional[int] = None,
+ callback_on_step_end: Optional[Callable[[int, int, Dict], None]] = None,
+ callback_on_step_end_tensor_inputs: List[str] = ["latents"],
+ return_intermediate_timestep_idx: Optional[int] = None,
+ **kwargs,
+ ):
+ r"""
+ The call function to the pipeline for generation.
+
+ Args:
+
+ The prompt or prompts to guide image generation. If not defined, you need to pass `prompt_embeds`.
+ height (`int`, *optional*, defaults to `self.unet.config.sample_size * self.vae_scale_factor`):
+ The height in pixels of the generated image.
+ width (`int`, *optional*, defaults to `self.unet.config.sample_size * self.vae_scale_factor`):
+ The width in pixels of the generated image.
+ num_inference_steps (`int`, *optional*, defaults to 50):
+ The number of denoising steps. More denoising steps usually lead to a higher quality image at the
+ expense of slower inference.
+ timesteps (`List[int]`, *optional*):
+ Custom timesteps to use for the denoising process with schedulers which support a `timesteps` argument
+ in their `set_timesteps` method. If not defined, the default behavior when `num_inference_steps` is
+ passed will be used. Must be in descending order.
+ guidance_scale (`float`, *optional*, defaults to 7.5):
+ A higher guidance scale value encourages the model to generate images closely linked to the text
+ `prompt` at the expense of lower image quality. Guidance scale is enabled when `guidance_scale > 1`.
+ negative_prompt (`str` or `List[str]`, *optional*):
+ The prompt or prompts to guide what to not include in image generation. If not defined, you need to
+ pass `negative_prompt_embeds` instead. Ignored when not using guidance (`guidance_scale < 1`).
+ num_images_per_prompt (`int`, *optional*, defaults to 1):
+ The number of images to generate per prompt.
+ eta (`float`, *optional*, defaults to 0.0):
+ Corresponds to parameter eta (η) from the [DDIM](https://arxiv.org/abs/2010.02502) paper. Only applies
+ to the [`~schedulers.DDIMScheduler`], and is ignored in other schedulers.
+ generator (`torch.Generator` or `List[torch.Generator]`, *optional*):
+ A [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) to make
+ generation deterministic.
+ latents (`torch.FloatTensor`, *optional*):
+ Pre-generated noisy latents sampled from a Gaussian distribution, to be used as inputs for image
+ generation. Can be used to tweak the same generation with different prompts. If not provided, a latents
+ tensor is generated by sampling using the supplied random `generator`.
+ prompt_embeds (`torch.FloatTensor`, *optional*):
+ Pre-generated text embeddings. Can be used to easily tweak text inputs (prompt weighting). If not
+ provided, text embeddings are generated from the `prompt` input argument.
+ negative_prompt_embeds (`torch.FloatTensor`, *optional*):
+ Pre-generated negative text embeddings. Can be used to easily tweak text inputs (prompt weighting). If
+ not provided, `negative_prompt_embeds` are generated from the `negative_prompt` input argument.
+ ip_adapter_image: (`PipelineImageInput`, *optional*): Optional image input to work with IP Adapters.
+ ip_adapter_image_embeds (`List[torch.FloatTensor]`, *optional*):
+ Pre-generated image embeddings for IP-Adapter. It should be a list of length same as number of
+ IP-adapters. Each element should be a tensor of shape `(batch_size, num_images, emb_dim)`. It should
+ contain the negative image embedding if `do_classifier_free_guidance` is set to `True`. If not
+ provided, embeddings are computed from the `ip_adapter_image` input argument.
+ output_type (`str`, *optional*, defaults to `"pil"`):
+ The output format of the generated image. Choose between `PIL.Image` or `np.array`.
+ return_dict (`bool`, *optional*, defaults to `True`):
+ Whether or not to return a [`~pipelines.stable_diffusion.StableDiffusionPipelineOutput`] instead of a
+ plain tuple.
+ cross_attention_kwargs (`dict`, *optional*):
+ A kwargs dictionary that if specified is passed along to the [`AttentionProcessor`] as defined in
+ [`self.processor`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).
+ guidance_rescale (`float`, *optional*, defaults to 0.0):
+ Guidance rescale factor from [Common Diffusion Noise Schedules and Sample Steps are
+ Flawed](https://arxiv.org/pdf/2305.08891.pdf). Guidance rescale factor should fix overexposure when
+ using zero terminal SNR.
+ clip_skip (`int`, *optional*):
+ Number of layers to be skipped from CLIP while computing the prompt embeddings. A value of 1 means that
+ the output of the pre-final layer will be used for computing the prompt embeddings.
+ callback_on_step_end (`Callable`, *optional*):
+ A function that calls at the end of each denoising steps during the inference. The function is called
+ with the following arguments: `callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int,
+ callback_kwargs: Dict)`. `callback_kwargs` will include a list of all tensors as specified by
+ `callback_on_step_end_tensor_inputs`.
+ callback_on_step_end_tensor_inputs (`List`, *optional*):
+ The list of tensor inputs for the `callback_on_step_end` function. The tensors specified in the list
+ will be passed as `callback_kwargs` argument. You will only be able to include variables listed in the
+ `._callback_tensor_inputs` attribute of your pipeline class.
+
+ Examples:
+
+ Returns:
+ [`~pipelines.stable_diffusion.StableDiffusionPipelineOutput`] or `tuple`:
+ If `return_dict` is `True`, [`~pipelines.stable_diffusion.StableDiffusionPipelineOutput`] is returned,
+ otherwise a `tuple` is returned where the first element is a list with the generated images and the
+ second element is a list of `bool`s indicating whether the corresponding generated image contains
+ "not-safe-for-work" (nsfw) content.
+ """
+
+ callback = kwargs.pop("callback", None)
+ callback_steps = kwargs.pop("callback_steps", None)
+
+ if callback is not None:
+ deprecate(
+ "callback",
+ "1.0.0",
+ "Passing `callback` as an input argument to `__call__` is deprecated, consider using `callback_on_step_end`",
+ )
+ if callback_steps is not None:
+ deprecate(
+ "callback_steps",
+ "1.0.0",
+ "Passing `callback_steps` as an input argument to `__call__` is deprecated, consider using `callback_on_step_end`",
+ )
+
+ # 0. Default height and width to unet
+ height, width = rgb_in.shape[2:]
+
+ # to deal with lora scaling and other possible forward hooks
+
+ # # 1. Check inputs. Raise error if not correct
+
+ self._guidance_scale = guidance_scale
+ self._guidance_rescale = guidance_rescale
+ self._clip_skip = clip_skip
+ self._cross_attention_kwargs = cross_attention_kwargs
+ self._interrupt = False
+
+ # 2. Define call parameters
+ batch_size = rgb_in.shape[0]
+
+ device = self._execution_device
+
+ # 3. Encode input prompt
+ lora_scale = (
+ self.cross_attention_kwargs.get("scale", None) if self.cross_attention_kwargs is not None else None
+ )
+
+ prompt_embeds, negative_prompt_embeds = self.encode_prompt(
+ prompt,
+ device,
+ num_images_per_prompt,
+ self.do_classifier_free_guidance,
+ negative_prompt,
+ prompt_embeds=prompt_embeds,
+ negative_prompt_embeds=negative_prompt_embeds,
+ lora_scale=lora_scale,
+ clip_skip=self.clip_skip,
+ )
+
+ # For classifier free guidance, we need to do two forward passes.
+ # Here we concatenate the unconditional and text embeddings into a single batch
+ # to avoid doing two forward passes
+ if self.do_classifier_free_guidance:
+ prompt_embeds = torch.cat([negative_prompt_embeds, prompt_embeds])
+
+ if ip_adapter_image is not None or ip_adapter_image_embeds is not None:
+ image_embeds = self.prepare_ip_adapter_image_embeds(
+ ip_adapter_image,
+ ip_adapter_image_embeds,
+ device,
+ batch_size * num_images_per_prompt,
+ self.do_classifier_free_guidance,
+ )
+
+ # 4. Prepare timesteps
+ timesteps, num_inference_steps = retrieve_timesteps(self.scheduler, num_inference_steps, device, timesteps)
+
+ # 5. Prepare latent variables
+ num_channels_latents = self.unet.config.in_channels // 2
+ latents = self.prepare_latents(
+ batch_size * num_images_per_prompt,
+ num_channels_latents,
+ height,
+ width,
+ prompt_embeds.dtype,
+ device,
+ generator,
+ latents,
+ )
+
+ rgb_latents = self.vae.encode(rgb_in.to(device)).latent_dist.sample()
+ rgb_latents = rgb_latents * self.vae.config.scaling_factor
+
+ # 6. Prepare extra step kwargs. TODO: Logic should ideally just be moved out of the pipeline
+ extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta)
+
+ # 6.1 Add image embeds for IP-Adapter
+ added_cond_kwargs = (
+ {"image_embeds": image_embeds}
+ if (ip_adapter_image is not None or ip_adapter_image_embeds is not None)
+ else None
+ )
+
+ # 6.2 Optionally get Guidance Scale Embedding
+ timestep_cond = None
+ if self.unet.config.time_cond_proj_dim is not None:
+ guidance_scale_tensor = torch.tensor(self.guidance_scale - 1).repeat(batch_size * num_images_per_prompt)
+ timestep_cond = self.get_guidance_scale_embedding(
+ guidance_scale_tensor, embedding_dim=self.unet.config.time_cond_proj_dim
+ ).to(device=device, dtype=latents.dtype)
+
+ # 7. Denoising loop
+ num_warmup_steps = len(timesteps) - num_inference_steps * self.scheduler.order
+ self._num_timesteps = len(timesteps)
+ with self.progress_bar(total=num_inference_steps) as progress_bar:
+ for i, t in enumerate(timesteps):
+ if self.interrupt:
+ continue
+
+ # expand the latents if we are doing classifier free guidance
+ latent_model_input = torch.cat([latents] * 2) if self.do_classifier_free_guidance else latents
+ latent_model_input = self.scheduler.scale_model_input(latent_model_input, t)
+
+ latent_model_input = torch.cat(
+ [rgb_latents, latent_model_input], dim=1
+ )
+
+ # predict the noise residual
+ noise_pred = self.unet(
+ latent_model_input,
+ t,
+ encoder_hidden_states=prompt_embeds,
+ timestep_cond=timestep_cond,
+ cross_attention_kwargs=self.cross_attention_kwargs,
+ added_cond_kwargs=added_cond_kwargs,
+ return_dict=False,
+ )[0]
+
+ # perform guidance
+ if self.do_classifier_free_guidance:
+ noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)
+ noise_pred = noise_pred_uncond + self.guidance_scale * (noise_pred_text - noise_pred_uncond)
+
+ if self.do_classifier_free_guidance and self.guidance_rescale > 0.0:
+ # Based on 3.4. in https://arxiv.org/pdf/2305.08891.pdf
+ noise_pred = rescale_noise_cfg(noise_pred, noise_pred_text, guidance_rescale=self.guidance_rescale)
+
+ # compute the previous noisy sample x_t -> x_t-1
+ pred_latents = self.scheduler.step(noise_pred, t, latents, **extra_step_kwargs, return_dict=True)
+ latents = pred_latents[0]
+
+ if callback_on_step_end is not None:
+ callback_kwargs = {}
+ for k in callback_on_step_end_tensor_inputs:
+ callback_kwargs[k] = locals()[k]
+ callback_outputs = callback_on_step_end(self, i, t, callback_kwargs)
+
+ latents = callback_outputs.pop("latents", latents)
+ prompt_embeds = callback_outputs.pop("prompt_embeds", prompt_embeds)
+ negative_prompt_embeds = callback_outputs.pop("negative_prompt_embeds", negative_prompt_embeds)
+
+ # call the callback, if provided
+ if i == len(timesteps) - 1 or ((i + 1) > num_warmup_steps and (i + 1) % self.scheduler.order == 0):
+ progress_bar.update()
+ if callback is not None and i % callback_steps == 0:
+ step_idx = i // getattr(self.scheduler, "order", 1)
+ callback(step_idx, t, latents)
+
+ if return_intermediate_timestep_idx == i:
+ latents = pred_latents[1]
+ break
+
+ if not output_type == "latent":
+ image = self.vae.decode(latents / self.vae.config.scaling_factor, return_dict=False, generator=generator)[
+ 0
+ ]
+ image, has_nsfw_concept = self.run_safety_checker(image, device, prompt_embeds.dtype)
+ else:
+ image = latents
+ has_nsfw_concept = None
+
+ if has_nsfw_concept is None:
+ do_denormalize = [True] * image.shape[0]
+ else:
+ do_denormalize = [not has_nsfw for has_nsfw in has_nsfw_concept]
+
+ image = self.image_processor.postprocess(image, output_type=output_type, do_denormalize=do_denormalize)
+
+ # Offload all models
+ self.maybe_free_model_hooks()
+
+ if not return_dict:
+ return (image, has_nsfw_concept)
+
+ return StableDiffusionPipelineOutput(images=image, nsfw_content_detected=has_nsfw_concept)
+
+class LotusDPipeline(DirectDiffusionPipeline):
+ default_processing_resolution = 768
+ @torch.no_grad()
+ def __call__(
+ self,
+ rgb_in: Optional[torch.FloatTensor] = None,
+ task_emb: Optional[torch.FloatTensor] = None,
+ prompt: Union[str, List[str]] = None,
+ timesteps: List[int] = None,
+ generator: Optional[Union[torch.Generator, List[torch.Generator]]] = None,
+ prompt_embeds: Optional[torch.FloatTensor] = None,
+ output_type: Optional[str] = "pil",
+ return_dict: bool = True,
+ cross_attention_kwargs: Optional[Dict[str, Any]] = None,
+ processing_res: Optional[int] = None,
+ match_input_res: bool = True,
+ resample_method: str = "bilinear",
+ **kwargs,
+ ):
+ r"""
+ The call function to the pipeline for generation.
+
+ Args:
+ rgb_input (`torch.FloatTensor`):
+ Input RGB tensor, range [-1, 1].
+ task_emb (`torch.FloatTensor`)
+ Task switcher for reconstruction or dense prediction (depth or normal).
+ prompt (`str` or `List[str]`, *optional*):
+ The prompt or prompts to guide image generation. If not defined, you need to pass `prompt_embeds`.
+ timesteps (`List[int]`, *optional*):
+ Custom timesteps to use for the denoising process with schedulers which support a `timesteps` argument
+ in their `set_timesteps` method. If not defined, the default behavior when `num_inference_steps` is
+ passed will be used. Must be in descending order.
+ generator (`torch.Generator` or `List[torch.Generator]`, *optional*):
+ A [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) to make
+ generation deterministic.
+ prompt_embeds (`torch.FloatTensor`, *optional*):
+ Pre-generated text embeddings. Can be used to easily tweak text inputs (prompt weighting). If not
+ provided, text embeddings are generated from the `prompt` input argument.
+ output_type (`str`, *optional*, defaults to `"pil"`):
+ The output format of the generated image. Choose between `PIL.Image` or `np.array`.
+ return_dict (`bool`, *optional*, defaults to `True`):
+ Whether or not to return a [`~pipelines.stable_diffusion.StableDiffusionPipelineOutput`] instead of a
+ plain tuple.
+ cross_attention_kwargs (`dict`, *optional*):
+ A kwargs dictionary that if specified is passed along to the [`AttentionProcessor`] as defined in
+ [`self.processor`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).
+ processing_res (`int`, *optional*, defaults to `None`):
+ Effective processing resolution. When set to `0`, processes at the original image resolution. This
+ produces crisper predictions, but may also lead to the overall loss of global context. The default
+ value `None` resolves to the optimal value from the model config.
+ match_input_res (`bool`, *optional*, defaults to `True`):
+ Resize depth prediction to match input resolution.
+ Only valid if `processing_res` > 0.
+ resample_method: (`str`, *optional*, defaults to `bilinear`):
+ Resampling method used to resize images and depth predictions. This can be one of `bilinear`, `bicubic` or `nearest`, defaults to: `bilinear`.
+ Examples:
+
+ Returns:
+ [`~pipelines.stable_diffusion.StableDiffusionPipelineOutput`] or `tuple`:
+ If `return_dict` is `True`, [`~pipelines.stable_diffusion.StableDiffusionPipelineOutput`] is returned,
+ otherwise a `tuple` is returned where the first element is a list with the generated images and the
+ second element is a list of `bool`s indicating whether the corresponding generated image contains
+ "not-safe-for-work" (nsfw) content.
+ """
+
+
+
+ # 1. Define call parameters
+ self._cross_attention_kwargs = cross_attention_kwargs
+
+ if processing_res is None:
+ processing_res = self.default_processing_resolution
+
+ assert processing_res >= 0
+
+ # 0. Image processing
+ input_size = rgb_in.shape
+ assert (
+ 4 == rgb_in.dim() and 3 == input_size[-3]
+ ), f"Wrong input shape {input_size}, expected [1, rgb, H, W]"
+ # Resize image
+ resample_method: InterpolationMode = get_tv_resample_method(resample_method)
+ if processing_res > 0:
+ rgb_in = resize_max_res(
+ rgb_in,
+ max_edge_resolution=processing_res,
+ resample_method=resample_method,
+ )
+
+ device = self._execution_device
+
+ # 2. Encode input prompt
+ prompt_embeds, _ = self.encode_prompt(
+ prompt,
+ device,
+ num_images_per_prompt=1,
+ do_classifier_free_guidance=None,
+ prompt_embeds=prompt_embeds,
+ )
+
+ # 3. Prepare timesteps
+ timesteps = torch.tensor(timesteps, device=device).long()
+
+ # 4. Prepare latent variables
+ rgb_latents = self.vae.encode(rgb_in.to(device)).latent_dist.sample()
+ rgb_latents = rgb_latents * self.vae.config.scaling_factor
+
+ # 5. Denoising
+ t = timesteps[0]
+ latent_model_input = rgb_latents
+
+ pred = self.unet(
+ latent_model_input,
+ t,
+ encoder_hidden_states=prompt_embeds,
+ cross_attention_kwargs=self.cross_attention_kwargs,
+ return_dict=False,
+ class_labels=task_emb,
+ )[0]
+
+ if not output_type == "latent":
+ image = self.vae.decode(pred / self.vae.config.scaling_factor, return_dict=False, generator=generator)[
+ 0
+ ]
+ image, has_nsfw_concept = self.run_safety_checker(image, device, prompt_embeds.dtype)
+ else:
+ image = pred
+ has_nsfw_concept = None
+
+ if has_nsfw_concept is None:
+ do_denormalize = [True] * image.shape[0]
+ else:
+ do_denormalize = [not has_nsfw for has_nsfw in has_nsfw_concept]
+
+ image = self.image_processor.postprocess(image, output_type=output_type, do_denormalize=do_denormalize)
+
+ # Offload all models
+ self.maybe_free_model_hooks()
+
+ # 8. Resize "image" back to original resolution
+ if match_input_res:
+ resample_method = get_pil_resample_method("nearest") if output_type == "pil" else get_tv_resample_method("nearest")
+ image = resize_back(image, input_size[-2:], resample_method)
+
+ if not return_dict:
+ return (image, has_nsfw_concept)
+
+ return StableDiffusionPipelineOutput(images=image, nsfw_content_detected=has_nsfw_concept)
+
+class LotusGPipeline(DirectDiffusionPipeline):
+ default_processing_resolution = 768
+ @torch.no_grad()
+ def __call__(
+ self,
+ rgb_in: Optional[torch.FloatTensor] = None, # Modification 240430
+ task_emb: Optional[torch.FloatTensor] = None,
+ prompt: Union[str, List[str]] = None,
+ num_inference_steps: int = 50,
+ timesteps: List[int] = None,
+ eta: float = 0.0,
+ generator: Optional[Union[torch.Generator, List[torch.Generator]]] = None,
+ latents: Optional[torch.FloatTensor] = None,
+ prompt_embeds: Optional[torch.FloatTensor] = None,
+ output_type: Optional[str] = "pil",
+ return_dict: bool = True,
+ cross_attention_kwargs: Optional[Dict[str, Any]] = None,
+ processing_res: Optional[int] = None,
+ match_input_res: bool = True,
+ resample_method: str = "bilinear",
+ **kwargs,
+ ):
+ r"""
+ The call function to the pipeline for generation.
+
+ Args:
+ rgb_input (`torch.FloatTensor`):
+ Input RGB tensor, range [-1, 1].
+ task_emb (`torch.FloatTensor`)
+ The task switcher to transfer the model outout domain between prediction and reconstruction.
+ prompt (`str` or `List[str]`, *optional*):
+ The prompt or prompts to guide image generation. If not defined, you need to pass `prompt_embeds`.
+ num_inference_steps (`int`, *optional*, defaults to 50):
+ The number of denoising steps. More denoising steps usually lead to a higher quality image at the
+ expense of slower inference.
+ timesteps (`List[int]`, *optional*):
+ Custom timesteps to use for the denoising process with schedulers which support a `timesteps` argument
+ in their `set_timesteps` method. If not defined, the default behavior when `num_inference_steps` is
+ passed will be used. Must be in descending order.
+ eta (`float`, *optional*, defaults to 0.0):
+ Corresponds to parameter eta (η) from the [DDIM](https://arxiv.org/abs/2010.02502) paper. Only applies
+ to the [`~schedulers.DDIMScheduler`], and is ignored in other schedulers.
+ generator (`torch.Generator` or `List[torch.Generator]`, *optional*):
+ A [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) to make
+ generation deterministic.
+ latents (`torch.FloatTensor`, *optional*):
+ Pre-generated noisy latents sampled from a Gaussian distribution, to be used as inputs for image
+ generation. Can be used to tweak the same generation with different prompts. If not provided, a latents
+ tensor is generated by sampling using the supplied random `generator`.
+ prompt_embeds (`torch.FloatTensor`, *optional*):
+ Pre-generated text embeddings. Can be used to easily tweak text inputs (prompt weighting). If not
+ provided, text embeddings are generated from the `prompt` input argument.
+ output_type (`str`, *optional*, defaults to `"pil"`):
+ The output format of the generated image. Choose between `PIL.Image` or `np.array`.
+ return_dict (`bool`, *optional*, defaults to `True`):
+ Whether or not to return a [`~pipelines.stable_diffusion.StableDiffusionPipelineOutput`] instead of a
+ plain tuple.
+ cross_attention_kwargs (`dict`, *optional*):
+ A kwargs dictionary that if specified is passed along to the [`AttentionProcessor`] as defined in
+ [`self.processor`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).
+ processing_res (`int`, *optional*, defaults to `None`):
+ Effective processing resolution. When set to `0`, processes at the original image resolution. This
+ produces crisper predictions, but may also lead to the overall loss of global context. The default
+ value `None` resolves to the optimal value from the model config.
+ match_input_res (`bool`, *optional*, defaults to `True`):
+ Resize depth prediction to match input resolution.
+ Only valid if `processing_res` > 0.
+ resample_method: (`str`, *optional*, defaults to `bilinear`):
+ Resampling method used to resize images and depth predictions. This can be one of `bilinear`, `bicubic` or `nearest`, defaults to: `bilinear`.
+ Examples:
+
+ Returns:
+ [`~pipelines.stable_diffusion.StableDiffusionPipelineOutput`] or `tuple`:
+ If `return_dict` is `True`, [`~pipelines.stable_diffusion.StableDiffusionPipelineOutput`] is returned,
+ otherwise a `tuple` is returned where the first element is a list with the generated images and the
+ second element is a list of `bool`s indicating whether the corresponding generated image contains
+ "not-safe-for-work" (nsfw) content.
+ """
+
+ self._cross_attention_kwargs = cross_attention_kwargs
+ if processing_res is None:
+ processing_res = self.default_processing_resolution
+
+ assert processing_res >= 0
+
+ # 0. Image processing
+ input_size = rgb_in.shape
+ assert (
+ 4 == rgb_in.dim() and 3 == input_size[-3]
+ ), f"Wrong input shape {input_size}, expected [1, rgb, H, W]"
+ # Resize image
+ resample_method: InterpolationMode = get_tv_resample_method(resample_method)
+ if processing_res > 0:
+ rgb_in = resize_max_res(
+ rgb_in,
+ max_edge_resolution=processing_res,
+ resample_method=resample_method,
+ )
+
+ # 1. Default height and width to unet
+ height, width = rgb_in.shape[2:]
+
+ # 2. Define call parameters
+ batch_size = rgb_in.shape[0]
+ device = self._execution_device
+
+ # 3. Encode input prompt
+ prompt_embeds, _ = self.encode_prompt(
+ prompt,
+ device,
+ num_images_per_prompt=1,
+ do_classifier_free_guidance=None,
+ prompt_embeds=prompt_embeds,
+ )
+
+ # 4. Prepare timesteps
+ timesteps = torch.tensor(timesteps, device=device).long()
+
+ # 5. Prepare latent variables
+ num_channels_latents = self.unet.config.in_channels // 2
+ latents = self.prepare_latents(
+ batch_size,
+ num_channels_latents,
+ height,
+ width,
+ prompt_embeds.dtype,
+ device,
+ generator,
+ latents,
+ )
+
+ rgb_latents = self.vae.encode(rgb_in.to(device)).latent_dist.sample()
+ rgb_latents = rgb_latents * self.vae.config.scaling_factor
+
+ # 6. Prepare extra step kwargs. TODO: Logic should ideally just be moved out of the pipeline
+ extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta)
+
+ # 7. Denoising loop
+ num_warmup_steps = len(timesteps) - num_inference_steps * self.scheduler.order
+ self._num_timesteps = len(timesteps)
+
+ with self.progress_bar(total=num_inference_steps) as progress_bar:
+ for i, t in enumerate(timesteps):
+ latent_model_input = self.scheduler.scale_model_input(latents, t)
+ latent_model_input = torch.cat(
+ [rgb_latents, latent_model_input], dim=1
+ )
+
+ x0_pred = self.unet(
+ latent_model_input,
+ t,
+ encoder_hidden_states=prompt_embeds,
+ cross_attention_kwargs=self.cross_attention_kwargs,
+ return_dict=False,
+ class_labels=task_emb,
+ )[0]
+
+ if len(timesteps) > 1:
+ # compute the previous noisy sample x_t -> x_t-1
+ latents = self.scheduler.step(x0_pred, t, latents, **extra_step_kwargs, return_dict=False)[0]
+ else:
+ latents = x0_pred
+
+ # call the callback, if provided
+ if i == len(timesteps) - 1 or ((i + 1) > num_warmup_steps and (i + 1) % self.scheduler.order == 0):
+ progress_bar.update()
+
+ if not output_type == "latent":
+ image = self.vae.decode(latents / self.vae.config.scaling_factor, return_dict=False, generator=generator)[
+ 0
+ ]
+ image, has_nsfw_concept = self.run_safety_checker(image, device, prompt_embeds.dtype)
+ else:
+ image = latents
+ has_nsfw_concept = None
+
+ if has_nsfw_concept is None:
+ do_denormalize = [True] * image.shape[0]
+ else:
+ do_denormalize = [not has_nsfw for has_nsfw in has_nsfw_concept]
+
+ image = self.image_processor.postprocess(image, output_type=output_type, do_denormalize=do_denormalize)
+
+ # Offload all models
+ self.maybe_free_model_hooks()
+
+ # 8. Resize "image" back to original resolution
+ if match_input_res:
+ resample_method = get_pil_resample_method("nearest") if output_type == "pil" else get_tv_resample_method("nearest")
+ image = resize_back(image, input_size[-2:], resample_method)
+
+ if not return_dict:
+ return (image, has_nsfw_concept, latents)
+
+ return StableDiffusionPipelineOutput(images=image, nsfw_content_detected=has_nsfw_concept)
diff --git a/Lotus/requirements.txt b/Lotus/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9bab183c4cc96e51ab1ae77614463afa4980fef0
--- /dev/null
+++ b/Lotus/requirements.txt
@@ -0,0 +1,26 @@
+accelerate==0.29.3
+datasets==2.19.0
+diffusers==0.28.0
+easydict==1.13
+ftfy==6.2.0
+geffnet==1.0.2
+gradio==4.44.0
+gradio-client==1.3.0
+gradio-imageslider==0.0.20
+h5py==3.11.0
+huggingface-hub==0.22.2
+imageio==2.34.2
+imageio-ffmpeg==0.5.1
+Jinja2==3.1.3
+matplotlib==3.8.4
+numpy==1.26.4
+omegaconf==2.3.0
+opencv-python==4.9.0.80
+peft==0.7.0
+spaces==0.28.3
+tabulate==0.9.0
+tensorboard==2.16.2
+torch==2.3.1 --index-url https://download.pytorch.org/whl/cu121
+torchvision==0.18.1 --index-url https://download.pytorch.org/whl/cu121
+torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu121
+transformers==4.40.1
\ No newline at end of file
diff --git a/Lotus/train_lotus_d.py b/Lotus/train_lotus_d.py
new file mode 100644
index 0000000000000000000000000000000000000000..285ff03f4f63f45818f9377e24812dbca980da50
--- /dev/null
+++ b/Lotus/train_lotus_d.py
@@ -0,0 +1,1150 @@
+#!/usr/bin/env python
+# coding=utf-8
+# Copyright 2024 The HuggingFace Inc. team. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import argparse
+import logging
+import math
+import os
+import random
+import shutil
+from contextlib import nullcontext
+from pathlib import Path
+from PIL import Image
+from glob import glob
+
+import accelerate
+import datasets
+import numpy as np
+import torch
+import torch.nn.functional as F
+import torch.utils.checkpoint
+import transformers
+from accelerate import Accelerator
+from accelerate.logging import get_logger
+from accelerate.state import AcceleratorState
+from accelerate.utils import ProjectConfiguration, set_seed
+from huggingface_hub import create_repo
+from packaging import version
+from tqdm.auto import tqdm
+from transformers import CLIPTextModel, CLIPTokenizer
+from transformers.utils import ContextManagers
+from datetime import timedelta
+from accelerate.utils import InitProcessGroupKwargs
+
+import diffusers
+from diffusers import AutoencoderKL, UNet2DConditionModel
+from diffusers.optimization import get_scheduler
+from diffusers.utils import check_min_version, deprecate
+from diffusers.utils.import_utils import is_xformers_available
+from diffusers.utils.torch_utils import is_compiled_module
+
+from pipeline import LotusDPipeline
+from utils.image_utils import concatenate_images, colorize_depth_map
+from utils.hypersim_dataset import get_hypersim_dataset_depth_normal
+from utils.vkitti_dataset import VKITTIDataset, VKITTITransform, collate_fn_vkitti
+
+from eval import evaluation_depth, evaluation_normal
+
+import tensorboard
+
+# Will error if the minimal version of diffusers is not installed. Remove at your own risks.
+check_min_version("0.28.0.dev0")
+
+logger = get_logger(__name__, log_level="INFO")
+
+TOP5_STEPS_DEPTH = []
+TOP5_STEPS_NORMAL = []
+
+def run_example_validation(pipeline, task, args, step, accelerator, generator):
+ validation_images = glob(os.path.join(args.validation_images, "*.jpg")) + glob(os.path.join(args.validation_images, "*.png"))
+ validation_images = sorted(validation_images)
+ print(validation_images)
+
+ pred_annos = []
+ input_images = []
+
+ if task == "depth":
+ for i in tqdm(range(len(validation_images))):
+ if torch.backends.mps.is_available():
+ autocast_ctx = nullcontext()
+ else:
+ autocast_ctx = torch.autocast(accelerator.device.type)
+
+ with autocast_ctx:
+ # Preprocess validation image
+ validation_image = Image.open(validation_images[i]).convert("RGB")
+ input_images.append(validation_image)
+ validation_image = np.array(validation_image).astype(np.float32)
+ validation_image = torch.tensor(validation_image).permute(2,0,1).unsqueeze(0)
+ validation_image = validation_image / 127.5 - 1.0
+ validation_image = validation_image.to(accelerator.device)
+
+ task_emb = torch.tensor([1, 0]).float().unsqueeze(0).repeat(1, 1).to(accelerator.device)
+ task_emb = torch.cat([torch.sin(task_emb), torch.cos(task_emb)], dim=-1).repeat(1, 1)
+
+ # Run
+ pred_depth = pipeline(
+ rgb_in=validation_image,
+ task_emb=task_emb,
+ prompt="",
+ timesteps=[args.timestep],
+ output_type='np',
+ generator=generator,
+ ).images[0]
+
+ # Post-process the prediction
+ pred_depth = pred_depth.mean(axis=-1)
+ is_reverse_color = "disparity" in args.norm_type
+ depth_color = colorize_depth_map(pred_depth, reverse_color=is_reverse_color)
+
+ pred_annos.append(depth_color)
+
+ elif task == "normal":
+ for i in range(len(validation_images)):
+ if torch.backends.mps.is_available():
+ autocast_ctx = nullcontext()
+ else:
+ autocast_ctx = torch.autocast(accelerator.device.type)
+
+ with autocast_ctx:
+ # Preprocess validation image
+ validation_image = Image.open(validation_images[i]).convert("RGB")
+ input_images.append(validation_image)
+ validation_image = np.array(validation_image).astype(np.float32)
+ validation_image = torch.tensor(validation_image).permute(2,0,1).unsqueeze(0)
+ validation_image = validation_image / 127.5 - 1.0
+ validation_image = validation_image.to(accelerator.device)
+
+ task_emb = torch.tensor([1, 0]).float().unsqueeze(0).repeat(1, 1).to(accelerator.device)
+ task_emb = torch.cat([torch.sin(task_emb), torch.cos(task_emb)], dim=-1).repeat(1, 1)
+
+ # Run
+ pred_normal = pipeline(
+ rgb_in=validation_image,
+ task_emb=task_emb,
+ prompt="",
+ timesteps=[args.timestep],
+ generator=generator,
+ ).images[0]
+
+ pred_annos.append(pred_normal)
+
+ else:
+ raise ValueError(f"Not Supported Task: {args.task_name}!")
+
+ # Save output
+ save_output = concatenate_images(input_images, pred_annos)
+ save_dir = os.path.join(args.output_dir,'images')
+ os.makedirs(save_dir, exist_ok=True)
+ save_output.save(os.path.join(save_dir, f'{step:05d}.jpg'))
+
+def run_evaluation(pipeline, task, args, step, accelerator):
+ # Define prediction functions
+ def gen_depth(rgb_in, pipe, prompt=""):
+ if torch.backends.mps.is_available():
+ autocast_ctx = nullcontext()
+ else:
+ autocast_ctx = torch.autocast(pipe.device.type)
+
+ with autocast_ctx:
+ rgb_input = rgb_in / 255.0 * 2.0 - 1.0 # [0, 255] -> [-1, 1]
+
+ task_emb = torch.tensor([1, 0]).float().unsqueeze(0).repeat(1, 1).to(pipe.device)
+ task_emb = torch.cat([torch.sin(task_emb), torch.cos(task_emb)], dim=-1).repeat(1, 1)
+
+ pred_depth = pipe(
+ rgb_in=rgb_input,
+ task_emb=task_emb,
+ prompt=prompt,
+ timesteps=[args.timestep],
+ output_type='np',
+ ).images[0]
+ pred_depth = pred_depth.mean(axis=-1) # [0,1]
+ return pred_depth
+
+ def gen_normal(img, pipe, prompt=""):
+ if torch.backends.mps.is_available():
+ autocast_ctx = nullcontext()
+ else:
+ autocast_ctx = torch.autocast(pipe.device.type)
+
+ with autocast_ctx:
+ task_emb = torch.tensor([1, 0]).float().unsqueeze(0).repeat(1, 1).to(pipe.device)
+ task_emb = torch.cat([torch.sin(task_emb), torch.cos(task_emb)], dim=-1).repeat(1, 1)
+
+ pred_normal = pipe(
+ rgb_in=img, # [-1,1]
+ task_emb=task_emb,
+ prompt=prompt,
+ timesteps=[args.timestep],
+ output_type='pt',
+ ).images[0] # [0,1], (3,h,w)
+ pred_normal = (pred_normal*2-1.0).unsqueeze(0) # [-1,1], (1,3,h,w)
+ return pred_normal
+
+ if step > 0:
+ if task == "depth":
+ test_data_dir = os.path.join(args.base_test_data_dir, task)
+ test_depth_dataset_configs = {
+ "nyuv2": "configs/data_nyu_test.yaml"
+ }
+ if args.FULL_EVALUATION:
+ print("==> Full Evaluation Mode!")
+ test_depth_dataset_configs = {
+ "nyuv2": "configs/data_nyu_test.yaml",
+ "kitti": "configs/data_kitti_eigen_test.yaml",
+ "scannet": "configs/data_scannet_val.yaml",
+ "eth3d": "configs/data_eth3d.yaml",
+ "diode": "configs/data_diode_all.yaml",
+ }
+ LEADER_DATASET = list(test_depth_dataset_configs.keys())[0]
+ for dataset_name, config_path in test_depth_dataset_configs.items():
+ eval_dir = os.path.join(args.output_dir, f'evaluation-{step:05d}', task, dataset_name)
+ test_dataset_config = os.path.join(test_data_dir, config_path)
+ alignment_type = "least_square_disparity" if "disparity" in args.norm_type else "least_square"
+ metric_tracker = evaluation_depth(eval_dir, test_dataset_config, test_data_dir, eval_mode="generate_prediction",
+ gen_prediction=gen_depth, pipeline=pipeline, save_pred_vis=args.save_pred_vis, alignment=alignment_type)
+ print(dataset_name,',', 'abs_relative_difference: ', metric_tracker.result()['abs_relative_difference'], 'delta1_acc: ', metric_tracker.result()['delta1_acc'])
+
+ if dataset_name == LEADER_DATASET:
+ TOP5_STEPS_DEPTH.append((metric_tracker.result()['abs_relative_difference'], f"step-{step}"))
+ TOP5_STEPS_DEPTH.sort(key=lambda x: x[0])
+ if len(TOP5_STEPS_DEPTH) > 5:
+ TOP5_STEPS_DEPTH.pop()
+
+ for tracker in accelerator.trackers:
+ if tracker.name == "tensorboard":
+ tracker.writer.add_scalar(f"depth_{dataset_name}/rel", metric_tracker.result()['abs_relative_difference'], step)
+ tracker.writer.add_scalar(f"depth_{dataset_name}/delta1", metric_tracker.result()['delta1_acc'], step)
+
+ top_five_cycles = [cycle_name for _, cycle_name in TOP5_STEPS_DEPTH]
+ print("Top Five:", top_five_cycles)
+
+ elif task == "normal":
+ test_data_dir = os.path.join(args.base_test_data_dir, task)
+ dataset_split_path = "evaluation/dataset_normal"
+ eval_datasets = [('nyuv2', 'test')]
+ if args.FULL_EVALUATION:
+ print("==> Full Evaluation Mode!")
+ eval_datasets = [('nyuv2', 'test'), ('scannet', 'test'), ('ibims', 'ibims'), ('sintel', 'sintel'), ('oasis','val')]
+ eval_dir = os.path.join(args.output_dir, f'evaluation-{step:05d}', task)
+ eval_metrics = evaluation_normal(eval_dir, test_data_dir, dataset_split_path, eval_mode="generate_prediction",
+ gen_prediction=gen_normal, pipeline=pipeline, eval_datasets=eval_datasets,
+ save_pred_vis=args.save_pred_vis)
+
+ LEADER_DATASET = eval_datasets[0][0]
+ mean_value = eval_metrics[LEADER_DATASET]['mean'] if eval_metrics[LEADER_DATASET]['mean'] == eval_metrics[LEADER_DATASET]['mean'] else float('inf')
+ TOP5_STEPS_NORMAL.append((mean_value, f"step-{step}"))
+ TOP5_STEPS_NORMAL.sort(key=lambda x: x[0])
+ if len(TOP5_STEPS_NORMAL) > 5:
+ TOP5_STEPS_NORMAL.pop()
+
+ top_five_cycles = [cycle_name for _, cycle_name in TOP5_STEPS_NORMAL]
+ print("Top Five:", top_five_cycles)
+
+ for dataset_name, metrics in eval_metrics.items():
+ for tracker in accelerator.trackers:
+ if tracker.name == "tensorboard":
+ tracker.writer.add_scalar(f"normal_{dataset_name}/mean", metrics['mean'], step)
+ tracker.writer.add_scalar(f"normal_{dataset_name}/11.25", metrics['a3'], step)
+
+ else:
+ raise ValueError(f"Not Supported Task: {args.task_name}!")
+
+def log_validation(vae, text_encoder, tokenizer, unet, args, accelerator, weight_dtype, step):
+ logger.info("Running validation for task: %s... " % args.task_name[0])
+ task = args.task_name[0]
+
+ # Load pipeline
+ pipeline = LotusDPipeline.from_pretrained(
+ args.pretrained_model_name_or_path,
+ vae=accelerator.unwrap_model(vae),
+ text_encoder=accelerator.unwrap_model(text_encoder),
+ tokenizer=tokenizer,
+ unet=accelerator.unwrap_model(unet),
+ safety_checker=None,
+ revision=args.revision,
+ variant=args.variant,
+ torch_dtype=weight_dtype,
+ )
+ pipeline = pipeline.to(accelerator.device)
+ pipeline.set_progress_bar_config(disable=True)
+
+ if args.enable_xformers_memory_efficient_attention:
+ pipeline.enable_xformers_memory_efficient_attention()
+
+ if args.seed is None:
+ generator = None
+ else:
+ generator = torch.Generator(device=accelerator.device).manual_seed(args.seed)
+
+ # Run example-validation
+ run_example_validation(pipeline, task, args, step, accelerator, generator)
+
+ # Run evaluation
+ run_evaluation(pipeline, task, args, step, accelerator)
+
+ del pipeline
+ torch.cuda.empty_cache()
+
+def parse_args():
+ parser = argparse.ArgumentParser(description="Simple example of a training script.")
+ parser.add_argument(
+ "--pretrained_model_name_or_path",
+ type=str,
+ default=None,
+ required=True,
+ help="Path to pretrained model or model identifier from huggingface.co/models.",
+ )
+ parser.add_argument(
+ "--revision",
+ type=str,
+ default=None,
+ required=False,
+ help="Revision of pretrained model identifier from huggingface.co/models.",
+ )
+ parser.add_argument(
+ "--variant",
+ type=str,
+ default=None,
+ help="Variant of the model files of the pretrained model identifier from huggingface.co/models, 'e.g.' fp16",
+ )
+ parser.add_argument(
+ "--train_data_dir_hypersim",
+ type=str,
+ default=None,
+ help=(
+ "A folder containing the training data of hypersim. "
+ ),
+ )
+ parser.add_argument(
+ "--train_data_dir_vkitti",
+ type=str,
+ default=None,
+ help=(
+ "A folder containing the training data of vkitti. "
+ ),
+ )
+ parser.add_argument(
+ "--max_train_samples",
+ type=int,
+ default=None,
+ help=(
+ "For debugging purposes or quicker training, truncate the number of training examples to this "
+ "value if set."
+ ),
+ )
+ parser.add_argument(
+ "--timestep",
+ type=int,
+ default=1,
+ help="The timestep for the training. "
+ )
+ parser.add_argument(
+ "--base_test_data_dir",
+ type=str,
+ default="datasets/eval/",
+ help="The base directory for the test data. "
+ )
+ parser.add_argument(
+ "--task_name",
+ type=str,
+ default=["depth","normal"],
+ nargs="+",
+ help="The task to train on. "
+ )
+ parser.add_argument(
+ "--validation_images",
+ type=str,
+ default=None,
+ help=("A set of images evaluated every `--validation_steps` and logged to `--report_to`."),
+ )
+ parser.add_argument(
+ "--output_dir",
+ type=str,
+ default="sd-model-finetuned",
+ help="The output directory where the model predictions and checkpoints will be written.",
+ )
+ parser.add_argument(
+ "--cache_dir",
+ type=str,
+ default=None,
+ help="The directory where the downloaded models and datasets will be stored.",
+ )
+ parser.add_argument("--seed", type=int, default=None, help="A seed for reproducible training.")
+ parser.add_argument(
+ "--resolution_hypersim",
+ type=int,
+ default=512,
+ help=(
+ "The resolution for input images, all the images in the train/validation dataset will be resized to this"
+ " resolution"
+ ),
+ )
+ parser.add_argument(
+ "--resolution_vkitti",
+ type=int,
+ default=512,
+ help=(
+ "The resolution for input images, all the images in the train/validation dataset will be resized to this"
+ " resolution"
+ ),
+ )
+ parser.add_argument(
+ "--prob_hypersim",
+ type=float,
+ default=0.9,
+ help="The probability of using hypersim data. "
+ )
+ parser.add_argument(
+ "--mix_dataset",
+ action="store_true",
+ help="Whether to mix the datasets. "
+ )
+ parser.add_argument(
+ "--norm_type",
+ type=str,
+ choices=['instnorm','truncnorm','perscene_norm','disparity','trunc_disparity'],
+ default='trunc_disparity',
+ help="The normalization type of the depth. "
+ )
+ parser.add_argument(
+ "--random_flip",
+ action="store_true",
+ help="whether to randomly flip images horizontally",
+ )
+ parser.add_argument(
+ "--align_cam_normal",
+ action="store_true",
+ )
+ parser.add_argument(
+ "--train_batch_size", type=int, default=16, help="Batch size (per device) for the training dataloader."
+ )
+ parser.add_argument("--num_train_epochs", type=int, default=100)
+ parser.add_argument(
+ "--max_train_steps",
+ type=int,
+ default=None,
+ help="Total number of training steps to perform. If provided, overrides num_train_epochs.",
+ )
+ parser.add_argument(
+ "--gradient_accumulation_steps",
+ type=int,
+ default=1,
+ help="Number of updates steps to accumulate before performing a backward/update pass.",
+ )
+ parser.add_argument(
+ "--gradient_checkpointing",
+ action="store_true",
+ help="Whether or not to use gradient checkpointing to save memory at the expense of slower backward pass.",
+ )
+ parser.add_argument(
+ "--learning_rate",
+ type=float,
+ default=1e-4,
+ help="Initial learning rate (after the potential warmup period) to use.",
+ )
+ parser.add_argument(
+ "--scale_lr",
+ action="store_true",
+ default=False,
+ help="Scale the learning rate by the number of GPUs, gradient accumulation steps, and batch size.",
+ )
+ parser.add_argument(
+ "--lr_scheduler",
+ type=str,
+ default="constant",
+ help=(
+ 'The scheduler type to use. Choose between ["linear", "cosine", "cosine_with_restarts", "polynomial",'
+ ' "constant", "constant_with_warmup"]'
+ ),
+ )
+ parser.add_argument(
+ "--lr_warmup_steps", type=int, default=500, help="Number of steps for the warmup in the lr scheduler."
+ )
+ parser.add_argument(
+ "--use_8bit_adam", action="store_true", help="Whether or not to use 8-bit Adam from bitsandbytes."
+ )
+ parser.add_argument(
+ "--allow_tf32",
+ action="store_true",
+ help=(
+ "Whether or not to allow TF32 on Ampere GPUs. Can be used to speed up training. For more information, see"
+ " https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices"
+ ),
+ )
+ parser.add_argument(
+ "--non_ema_revision",
+ type=str,
+ default=None,
+ required=False,
+ help=(
+ "Revision of pretrained non-ema model identifier. Must be a branch, tag or git identifier of the local or"
+ " remote repository specified with --pretrained_model_name_or_path."
+ ),
+ )
+ parser.add_argument(
+ "--dataloader_num_workers",
+ type=int,
+ default=0,
+ help=(
+ "Number of subprocesses to use for data loading. 0 means that the data will be loaded in the main process."
+ ),
+ )
+ parser.add_argument("--adam_beta1", type=float, default=0.9, help="The beta1 parameter for the Adam optimizer.")
+ parser.add_argument("--adam_beta2", type=float, default=0.999, help="The beta2 parameter for the Adam optimizer.")
+ parser.add_argument("--adam_weight_decay", type=float, default=1e-2, help="Weight decay to use.")
+ parser.add_argument("--adam_epsilon", type=float, default=1e-08, help="Epsilon value for the Adam optimizer")
+ parser.add_argument("--max_grad_norm", default=1.0, type=float, help="Max gradient norm.")
+ parser.add_argument("--push_to_hub", action="store_true", help="Whether or not to push the model to the Hub.")
+ parser.add_argument("--hub_token", type=str, default=None, help="The token to use to push to the Model Hub.")
+ parser.add_argument(
+ "--hub_model_id",
+ type=str,
+ default=None,
+ help="The name of the repository to keep in sync with the local `output_dir`.",
+ )
+ parser.add_argument(
+ "--logging_dir",
+ type=str,
+ default="logs",
+ help=(
+ "[TensorBoard](https://www.tensorflow.org/tensorboard) log directory. Will default to"
+ " *output_dir/runs/**CURRENT_DATETIME_HOSTNAME***."
+ ),
+ )
+ parser.add_argument(
+ "--mixed_precision",
+ type=str,
+ default=None,
+ choices=["no", "fp16", "bf16"],
+ help=(
+ "Whether to use mixed precision. Choose between fp16 and bf16 (bfloat16). Bf16 requires PyTorch >="
+ " 1.10.and an Nvidia Ampere GPU. Default to the value of accelerate config of the current system or the"
+ " flag passed with the `accelerate.launch` command. Use this argument to override the accelerate config."
+ ),
+ )
+ parser.add_argument(
+ "--report_to",
+ type=str,
+ default="tensorboard",
+ help=(
+ 'The integration to report the results and logs to. Supported platforms are `"tensorboard"`'
+ ' (default), `"wandb"` and `"comet_ml"`. Use `"all"` to report to all integrations.'
+ ),
+ )
+ parser.add_argument("--local_rank", type=int, default=-1, help="For distributed training: local_rank")
+ parser.add_argument(
+ "--checkpointing_steps",
+ type=int,
+ default=500,
+ help=(
+ "Save a checkpoint of the training state every X updates. These checkpoints are only suitable for resuming"
+ " training using `--resume_from_checkpoint`."
+ ),
+ )
+ parser.add_argument(
+ "--checkpoints_total_limit",
+ type=int,
+ default=None,
+ help=("Max number of checkpoints to store."),
+ )
+ parser.add_argument(
+ "--resume_from_checkpoint",
+ type=str,
+ default=None,
+ help=(
+ "Whether training should be resumed from a previous checkpoint. Use a path saved by"
+ ' `--checkpointing_steps`, or `"latest"` to automatically select the last available checkpoint.'
+ ),
+ )
+ parser.add_argument(
+ "--enable_xformers_memory_efficient_attention", action="store_true", help="Whether or not to use xformers."
+ )
+ parser.add_argument("--FULL_EVALUATION", action="store_true")
+ parser.add_argument("--save_pred_vis", action="store_true")
+ parser.add_argument(
+ "--truncnorm_min",
+ type=float,
+ default=0.02,
+ )
+ parser.add_argument(
+ "--validation_steps",
+ type=int,
+ default=500,
+ help="Run validation every X steps.",
+ )
+ parser.add_argument(
+ "--tracker_project_name",
+ type=str,
+ default="train_lotus_d",
+ help=(
+ "The `project_name` argument passed to Accelerator.init_trackers for"
+ " more information see https://huggingface.co/docs/accelerate/v0.17.0/en/package_reference/accelerator#accelerate.Accelerator"
+ ),
+ )
+
+ args = parser.parse_args()
+ env_local_rank = int(os.environ.get("LOCAL_RANK", -1))
+ if env_local_rank != -1 and env_local_rank != args.local_rank:
+ args.local_rank = env_local_rank
+
+ # Sanity checks
+ if args.train_data_dir_hypersim is None and args.train_data_dir_vkitti is None:
+ raise ValueError("Need either a dataset name or a training folder.")
+
+ # default to using the same revision for the non-ema model if not specified
+ if args.non_ema_revision is None:
+ args.non_ema_revision = args.revision
+
+ return args
+
+def main():
+ args = parse_args()
+
+ if args.report_to == "wandb" and args.hub_token is not None:
+ raise ValueError(
+ "You cannot use both --report_to=wandb and --hub_token due to a security risk of exposing your token."
+ " Please use `huggingface-cli login` to authenticate with the Hub."
+ )
+
+ if args.non_ema_revision is not None:
+ deprecate(
+ "non_ema_revision!=None",
+ "0.15.0",
+ message=(
+ "Downloading 'non_ema' weights from revision branches of the Hub is deprecated. Please make sure to"
+ " use `--variant=non_ema` instead."
+ ),
+ )
+ logging_dir = os.path.join(args.output_dir, args.logging_dir)
+
+ accelerator_project_config = ProjectConfiguration(project_dir=args.output_dir, logging_dir=logging_dir)
+
+ kwargs = InitProcessGroupKwargs(timeout=timedelta(seconds=36000))
+ accelerator = Accelerator(
+ gradient_accumulation_steps=args.gradient_accumulation_steps,
+ mixed_precision=args.mixed_precision,
+ log_with=args.report_to,
+ project_config=accelerator_project_config,
+ kwargs_handlers=[kwargs]
+ )
+
+ # Disable AMP for MPS.
+ if torch.backends.mps.is_available():
+ accelerator.native_amp = False
+
+ # Make one log on every process with the configuration for debugging.
+ logging.basicConfig(
+ format="%(asctime)s - %(levelname)s - %(name)s - %(message)s",
+ datefmt="%m/%d/%Y %H:%M:%S",
+ level=logging.INFO,
+ )
+ logger.info(accelerator.state, main_process_only=False)
+ if accelerator.is_local_main_process:
+ datasets.utils.logging.set_verbosity_warning()
+ transformers.utils.logging.set_verbosity_warning()
+ diffusers.utils.logging.set_verbosity_info()
+ else:
+ datasets.utils.logging.set_verbosity_error()
+ transformers.utils.logging.set_verbosity_error()
+ diffusers.utils.logging.set_verbosity_error()
+
+ # If passed along, set the training seed now.
+ if args.seed is not None:
+ set_seed(args.seed)
+
+ # Handle the repository creation
+ if accelerator.is_main_process:
+ if args.output_dir is not None:
+ os.makedirs(args.output_dir, exist_ok=True)
+
+ if args.push_to_hub:
+ repo_id = create_repo(
+ repo_id=args.hub_model_id or Path(args.output_dir).name, exist_ok=True, token=args.hub_token
+ ).repo_id
+
+ # Load tokenizer and models.
+ tokenizer = CLIPTokenizer.from_pretrained(
+ args.pretrained_model_name_or_path, subfolder="tokenizer", revision=args.revision
+ )
+
+ def deepspeed_zero_init_disabled_context_manager():
+ """
+ returns either a context list that includes one that will disable zero.Init or an empty context list
+ """
+ deepspeed_plugin = AcceleratorState().deepspeed_plugin if accelerate.state.is_initialized() else None
+ if deepspeed_plugin is None:
+ return []
+
+ return [deepspeed_plugin.zero3_init_context_manager(enable=False)]
+
+ # Currently Accelerate doesn't know how to handle multiple models under Deepspeed ZeRO stage 3.
+ # For this to work properly all models must be run through `accelerate.prepare`. But accelerate
+ # will try to assign the same optimizer with the same weights to all models during
+ # `deepspeed.initialize`, which of course doesn't work.
+ #
+ # For now the following workaround will partially support Deepspeed ZeRO-3, by excluding the 2
+ # frozen models from being partitioned during `zero.Init` which gets called during
+ # `from_pretrained` So CLIPTextModel and AutoencoderKL will not enjoy the parameter sharding
+ # across multiple gpus and only UNet2DConditionModel will get ZeRO sharded.
+ with ContextManagers(deepspeed_zero_init_disabled_context_manager()):
+ text_encoder = CLIPTextModel.from_pretrained(
+ args.pretrained_model_name_or_path, subfolder="text_encoder", revision=args.revision, variant=args.variant
+ )
+ vae = AutoencoderKL.from_pretrained(
+ args.pretrained_model_name_or_path, subfolder="vae", revision=args.revision, variant=args.variant
+ )
+
+ unet = UNet2DConditionModel.from_pretrained(
+ args.pretrained_model_name_or_path, subfolder="unet", revision=args.non_ema_revision,
+ class_embed_type="projection", projection_class_embeddings_input_dim=4, # Important! new projection layer will be initailized.
+ low_cpu_mem_usage=False, device_map=None,
+ )
+
+ # Freeze vae and text_encoder and set unet to trainable
+ vae.requires_grad_(False)
+ text_encoder.requires_grad_(False)
+ unet.train()
+
+ if args.enable_xformers_memory_efficient_attention:
+ if is_xformers_available():
+ import xformers
+
+ xformers_version = version.parse(xformers.__version__)
+ if xformers_version == version.parse("0.0.16"):
+ logger.warning(
+ "xFormers 0.0.16 cannot be used for training in some GPUs. If you observe problems during training, please update xFormers to at least 0.0.17. See https://huggingface.co/docs/diffusers/main/en/optimization/xformers for more details."
+ )
+ unet.enable_xformers_memory_efficient_attention()
+ else:
+ raise ValueError("xformers is not available. Make sure it is installed correctly")
+
+ # `accelerate` 0.16.0 will have better support for customized saving
+ if version.parse(accelerate.__version__) >= version.parse("0.16.0"):
+ # create custom saving & loading hooks so that `accelerator.save_state(...)` serializes in a nice format
+ def save_model_hook(models, weights, output_dir):
+ if accelerator.is_main_process:
+ for i, model in enumerate(models):
+ model.save_pretrained(os.path.join(output_dir, "unet"))
+
+ # make sure to pop weight so that corresponding model is not saved again
+ weights.pop()
+
+ def load_model_hook(models, input_dir):
+ for _ in range(len(models)):
+ # pop models so that they are not loaded again
+ model = models.pop()
+
+ # load diffusers style into model
+ load_model = UNet2DConditionModel.from_pretrained(
+ input_dir, subfolder="unet")
+ model.register_to_config(**load_model.config)
+
+ model.load_state_dict(load_model.state_dict())
+ del load_model
+
+ accelerator.register_save_state_pre_hook(save_model_hook)
+ accelerator.register_load_state_pre_hook(load_model_hook)
+
+ if args.gradient_checkpointing:
+ unet.enable_gradient_checkpointing()
+
+ # Enable TF32 for faster training on Ampere GPUs,
+ # cf https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices
+ if args.allow_tf32:
+ torch.backends.cuda.matmul.allow_tf32 = True
+
+ if args.scale_lr:
+ args.learning_rate = (
+ args.learning_rate * args.gradient_accumulation_steps * args.train_batch_size * accelerator.num_processes
+ )
+
+ # Initialize the optimizer
+ if args.use_8bit_adam:
+ try:
+ import bitsandbytes as bnb
+ except ImportError:
+ raise ImportError(
+ "Please install bitsandbytes to use 8-bit Adam. You can do so by running `pip install bitsandbytes`"
+ )
+
+ optimizer_cls = bnb.optim.AdamW8bit
+ else:
+ optimizer_cls = torch.optim.AdamW
+
+ optimizer = optimizer_cls(
+ unet.parameters(),
+ lr=args.learning_rate,
+ betas=(args.adam_beta1, args.adam_beta2),
+ weight_decay=args.adam_weight_decay,
+ eps=args.adam_epsilon,
+ )
+
+ # Get the datasets and dataloaders
+ # -------------------- Dataset1: Hypersim --------------------
+ train_hypersim_dataset, preprocess_train_hypersim, collate_fn_hypersim = get_hypersim_dataset_depth_normal(
+ args.train_data_dir_hypersim, args.resolution_hypersim, args.random_flip,
+ norm_type=args.norm_type, truncnorm_min=args.truncnorm_min, align_cam_normal=args.align_cam_normal
+ )
+ with accelerator.main_process_first():
+ if args.max_train_samples is not None:
+ train_hypersim_dataset = train_hypersim_dataset.shuffle(seed=args.seed).select(range(args.max_train_samples))
+ # Set the training transforms
+ train_dataset_hypersim = train_hypersim_dataset.with_transform(preprocess_train_hypersim)
+
+ train_dataloader_hypersim = torch.utils.data.DataLoader(
+ train_dataset_hypersim,
+ shuffle=True,
+ collate_fn=collate_fn_hypersim,
+ batch_size=args.train_batch_size,
+ num_workers=args.dataloader_num_workers,
+ pin_memory=True
+ )
+ # -------------------- Dataset2: VKITTI --------------------
+ transform_vkitti = VKITTITransform(random_flip=args.random_flip)
+ train_dataset_vkitti = VKITTIDataset(args.train_data_dir_vkitti, transform_vkitti, args.norm_type, truncnorm_min=args.truncnorm_min)
+ train_dataloader_vkitti = torch.utils.data.DataLoader(
+ train_dataset_vkitti,
+ shuffle=True,
+ collate_fn=collate_fn_vkitti,
+ batch_size=args.train_batch_size,
+ num_workers=args.dataloader_num_workers,
+ pin_memory=True
+ )
+
+ # Lr_scheduler and math around the number of training steps.
+ overrode_max_train_steps = False
+ num_update_steps_per_epoch = math.ceil(len(train_dataloader_hypersim) / args.gradient_accumulation_steps)
+ assert args.max_train_steps is not None or args.num_train_epochs is not None, "max_train_steps or num_train_epochs should be provided"
+ if args.max_train_steps is None:
+ args.max_train_steps = args.num_train_epochs * num_update_steps_per_epoch
+ overrode_max_train_steps = True
+
+ lr_scheduler = get_scheduler(
+ args.lr_scheduler,
+ optimizer=optimizer,
+ num_warmup_steps=args.lr_warmup_steps * accelerator.num_processes,
+ num_training_steps=args.max_train_steps * accelerator.num_processes,
+ )
+
+ # Prepare everything with our `accelerator`.
+ unet, optimizer, train_dataloader_hypersim, train_dataloader_vkitti, lr_scheduler = accelerator.prepare(
+ unet, optimizer, train_dataloader_hypersim, train_dataloader_vkitti, lr_scheduler
+ )
+
+ # For mixed precision training we cast all non-trainable weights (vae, non-lora text_encoder and non-lora unet) to half-precision
+ # as these weights are only used for inference, keeping weights in full precision is not required.
+ weight_dtype = torch.float32
+ if accelerator.mixed_precision == "fp16":
+ weight_dtype = torch.float16
+ args.mixed_precision = accelerator.mixed_precision
+ elif accelerator.mixed_precision == "bf16":
+ weight_dtype = torch.bfloat16
+ args.mixed_precision = accelerator.mixed_precision
+
+ # Move text_encode and vae to gpu and cast to weight_dtype
+ text_encoder.to(accelerator.device, dtype=weight_dtype)
+ vae.to(accelerator.device, dtype=weight_dtype)
+
+ # We need to recalculate our total training steps as the size of the training dataloader may have changed.
+ num_update_steps_per_epoch = math.ceil(len(train_dataloader_hypersim) / args.gradient_accumulation_steps)
+ if overrode_max_train_steps:
+ args.max_train_steps = args.num_train_epochs * num_update_steps_per_epoch
+ # Afterwards we recalculate our number of training epochs
+ args.num_train_epochs = math.ceil(args.max_train_steps / num_update_steps_per_epoch)
+
+ # We need to initialize the trackers we use, and also store our configuration.
+ # The trackers initializes automatically on the main process.
+ if accelerator.is_main_process:
+ tracker_config = dict(vars(args))
+ tracker_config.pop("task_name")
+ accelerator.init_trackers(args.tracker_project_name, tracker_config)
+
+ # Function for unwrapping if model was compiled with `torch.compile`.
+ def unwrap_model(model):
+ model = accelerator.unwrap_model(model)
+ model = model._orig_mod if is_compiled_module(model) else model
+ return model
+
+ # Train!
+ total_batch_size = args.train_batch_size * accelerator.num_processes * args.gradient_accumulation_steps
+
+ logger.info("***** Running training *****")
+ logger.info(f" Num examples Hypersim = {len(train_dataset_hypersim)}")
+ logger.info(f" Num examples VKITTI = {len(train_dataset_vkitti)}")
+ logger.info(f" Using mix datasets: {args.mix_dataset}")
+ logger.info(f" Dataset alternation probability of Hypersim = {args.prob_hypersim}")
+ logger.info(f" Num Epochs = {args.num_train_epochs}")
+ logger.info(f" Instantaneous batch size per device = {args.train_batch_size}")
+ logger.info(f" Total train batch size (w. parallel, distributed & accumulation) = {total_batch_size}")
+ logger.info(f" Gradient Accumulation steps = {args.gradient_accumulation_steps}")
+ logger.info(f" Total optimization steps = {args.max_train_steps}")
+ logger.info(f" Unet timestep = {args.timestep}")
+ logger.info(f" Task name: {args.task_name}")
+ logger.info(f" Is Full Evaluation?: {args.FULL_EVALUATION}")
+ logger.info(f" Output Workspace: {args.output_dir}")
+
+ global_step = 0
+ first_epoch = 0
+
+ # Potentially load in the weights and states from a previous save
+ if args.resume_from_checkpoint:
+ if args.resume_from_checkpoint != "latest":
+ path = os.path.basename(args.resume_from_checkpoint)
+ else:
+ # Get the most recent checkpoint
+ dirs = os.listdir(args.output_dir)
+ dirs = [d for d in dirs if d.startswith("checkpoint")]
+ dirs = sorted(dirs, key=lambda x: int(x.split("-")[1]))
+ path = dirs[-1] if len(dirs) > 0 else None
+
+ if path is None:
+ accelerator.print(
+ f"Checkpoint '{args.resume_from_checkpoint}' does not exist. Starting a new training run."
+ )
+ args.resume_from_checkpoint = None
+ initial_global_step = 0
+ else:
+ accelerator.print(f"Resuming from checkpoint {path}")
+ accelerator.load_state(os.path.join(args.output_dir, path))
+ global_step = int(path.split("-")[1])
+
+ initial_global_step = global_step
+ first_epoch = global_step // num_update_steps_per_epoch
+
+ else:
+ initial_global_step = 0
+
+ progress_bar = tqdm(
+ range(0, args.max_train_steps),
+ initial=initial_global_step,
+ desc="Steps",
+ # Only show the progress bar once on each machine.
+ disable=not accelerator.is_local_main_process,
+ )
+
+ if accelerator.is_main_process and args.validation_images is not None:
+ log_validation(
+ vae,
+ text_encoder,
+ tokenizer,
+ unet,
+ args,
+ accelerator,
+ weight_dtype,
+ global_step,
+ )
+
+ for epoch in range(first_epoch, args.num_train_epochs):
+ iter_hypersim = iter(train_dataloader_hypersim)
+ iter_vkitti = iter(train_dataloader_vkitti)
+
+ train_loss = 0.0
+ log_ann_loss = 0.0
+ log_rgb_loss = 0.0
+
+ for _ in range(len(train_dataloader_hypersim)):
+ if args.mix_dataset:
+ if random.random() < args.prob_hypersim:
+ batch = next(iter_hypersim)
+ else:
+ # Important note:
+ # In our training process, the Hypersim dataset is larger than the VKITTI dataset
+ # Therefore, when the smaller VKITTI dataset is exhausted, we need to restart iterating from the beginning
+ try:
+ batch = next(iter_vkitti)
+ except StopIteration:
+ iter_vkitti = iter(train_dataloader_vkitti)
+ batch = next(iter_vkitti)
+ else:
+ batch = next(iter_hypersim)
+
+ with accelerator.accumulate(unet):
+ # Convert images to latent space
+ rgb_latents = vae.encode(
+ torch.cat((batch["pixel_values"],batch["pixel_values"]), dim=0).to(weight_dtype)
+ ).latent_dist.sample()
+ rgb_latents = rgb_latents * vae.config.scaling_factor
+
+ # Convert target_annotations to latent space
+ assert len(args.task_name) == 1
+ if args.task_name[0] == "depth":
+ TAR_ANNO = "depth_values"
+ elif args.task_name[0] == "normal":
+ TAR_ANNO = "normal_values"
+ else:
+ raise ValueError(f"Do not support {args.task_name[0]} yet. ")
+
+ target_latents = vae.encode(
+ torch.cat((batch[TAR_ANNO],batch["pixel_values"]), dim=0).to(weight_dtype)
+ ).latent_dist.sample()
+ target_latents = target_latents * vae.config.scaling_factor
+
+ bsz = target_latents.shape[0]
+ bsz_per_task = int(bsz/2)
+
+ # Get the valid mask for the latent space
+ valid_mask_for_latent = batch.get("valid_mask_values", None)
+ if args.task_name[0] == "depth" and valid_mask_for_latent is not None:
+ sky_mask_for_latent = batch.get("sky_mask_values", None)
+ valid_mask_for_latent = valid_mask_for_latent + sky_mask_for_latent
+ if valid_mask_for_latent is not None:
+ valid_mask_for_latent = valid_mask_for_latent.bool()
+ invalid_mask = ~valid_mask_for_latent
+ valid_mask_down_anno = ~torch.max_pool2d(invalid_mask.float(), 8, 8).bool()
+ valid_mask_down_anno = valid_mask_down_anno.repeat((1, 4, 1, 1))
+ else:
+ valid_mask_down_anno = torch.ones_like(target_latents[:bsz_per_task]).to(target_latents.device).bool()
+
+ valid_mask_down_rgb = torch.ones_like(target_latents[bsz_per_task:]).to(target_latents.device).bool()
+
+ # Set timestep
+ timesteps = torch.tensor([args.timestep], device=target_latents.device).repeat(bsz)
+ timesteps = timesteps.long()
+
+ # Get the unet input
+ unet_input = rgb_latents
+
+ # Get the empty text embedding for conditioning
+ prompt = ""
+ text_inputs = tokenizer(
+ prompt,
+ padding="do_not_pad",
+ max_length=tokenizer.model_max_length,
+ truncation=True,
+ return_tensors="pt",
+ )
+ text_input_ids = text_inputs.input_ids.to(target_latents.device)
+ encoder_hidden_states = text_encoder(text_input_ids, return_dict=False)[0]
+ encoder_hidden_states = encoder_hidden_states.repeat(bsz, 1, 1)
+
+ # Get the target for loss
+ target = target_latents
+
+ # Get the task embedding
+ task_emb_anno = torch.tensor([1, 0]).float().unsqueeze(0).to(accelerator.device)
+ task_emb_anno = torch.cat([torch.sin(task_emb_anno), torch.cos(task_emb_anno)], dim=-1).repeat(bsz_per_task, 1)
+ task_emb_rgb = torch.tensor([0, 1]).float().unsqueeze(0).to(accelerator.device)
+ task_emb_rgb = torch.cat([torch.sin(task_emb_rgb), torch.cos(task_emb_rgb)], dim=-1).repeat(bsz_per_task, 1)
+ task_emb = torch.cat((task_emb_anno, task_emb_rgb), dim=0)
+
+ # Predict
+ model_pred = unet(unet_input, timesteps, encoder_hidden_states, return_dict=False,
+ class_labels=task_emb)[0]
+
+ # Compute loss
+ anno_loss = F.mse_loss(model_pred[:bsz_per_task][valid_mask_down_anno].float(), target[:bsz_per_task][valid_mask_down_anno].float(), reduction="mean")
+ rgb_loss = F.mse_loss(model_pred[bsz_per_task:][valid_mask_down_rgb].float(), target[bsz_per_task:][valid_mask_down_rgb].float(), reduction="mean")
+ loss = anno_loss + rgb_loss
+
+ # Gather loss
+ avg_anno_loss = accelerator.gather(anno_loss.repeat(args.train_batch_size)).mean()
+ log_ann_loss += avg_anno_loss.item() / args.gradient_accumulation_steps
+ avg_rgb_loss = accelerator.gather(rgb_loss.repeat(args.train_batch_size)).mean()
+ log_rgb_loss += avg_rgb_loss.item() / args.gradient_accumulation_steps
+ train_loss = log_ann_loss + log_rgb_loss
+
+ # Backpropagate
+ accelerator.backward(loss)
+ if accelerator.sync_gradients:
+ accelerator.clip_grad_norm_(unet.parameters(), args.max_grad_norm)
+ optimizer.step()
+ lr_scheduler.step()
+ optimizer.zero_grad()
+
+ logs = {"SL": loss.detach().item(),
+ "SL_A": anno_loss.detach().item(),
+ "SL_R": rgb_loss.detach().item(),
+ "lr": lr_scheduler.get_last_lr()[0]}
+ progress_bar.set_postfix(**logs)
+
+ # Checks if the accelerator has performed an optimization step behind the scenes
+ if accelerator.sync_gradients:
+ progress_bar.update(1)
+ global_step += 1
+ accelerator.log({"train_loss": train_loss,
+ "anno_loss": log_ann_loss,
+ "rgb_loss": log_rgb_loss},
+ step=global_step)
+ train_loss = 0.0
+ log_ann_loss = 0.0
+ log_rgb_loss = 0.0
+
+ checkpointing_steps = args.checkpointing_steps
+ validation_steps = args.validation_steps
+
+ if accelerator.is_main_process:
+ if global_step % checkpointing_steps == 0:
+ # _before_ saving state, check if this save would set us over the `checkpoints_total_limit`
+ if args.checkpoints_total_limit is not None:
+ checkpoints = os.listdir(args.output_dir)
+ checkpoints = [d for d in checkpoints if d.startswith("checkpoint")]
+ checkpoints = sorted(checkpoints, key=lambda x: int(x.split("-")[1]))
+
+ # before we save the new checkpoint, we need to have at _most_ `checkpoints_total_limit - 1` checkpoints
+ if len(checkpoints) >= args.checkpoints_total_limit:
+ num_to_remove = len(checkpoints) - args.checkpoints_total_limit + 1
+ removing_checkpoints = checkpoints[0:num_to_remove]
+
+ logger.info(
+ f"{len(checkpoints)} checkpoints already exist, removing {len(removing_checkpoints)} checkpoints"
+ )
+ logger.info(f"removing checkpoints: {', '.join(removing_checkpoints)}")
+
+ for removing_checkpoint in removing_checkpoints:
+ removing_checkpoint = os.path.join(args.output_dir, removing_checkpoint)
+ shutil.rmtree(removing_checkpoint)
+
+ save_path = os.path.join(args.output_dir, f"checkpoint-{global_step}")
+ accelerator.save_state(save_path)
+ logger.info(f"Saved state to {save_path}")
+
+ if args.validation_images is not None and global_step % validation_steps == 0:
+ log_validation(
+ vae,
+ text_encoder,
+ tokenizer,
+ unet,
+ args,
+ accelerator,
+ weight_dtype,
+ global_step,
+ )
+
+ if global_step >= args.max_train_steps:
+ break
+
+ # Create the pipeline using the trained modules and save it.
+ accelerator.wait_for_everyone()
+ if accelerator.is_main_process:
+ unet = unwrap_model(unet)
+
+ pipeline = LotusDPipeline.from_pretrained(
+ args.pretrained_model_name_or_path,
+ text_encoder=text_encoder,
+ vae=vae,
+ unet=unet,
+ revision=args.revision,
+ variant=args.variant,
+ )
+ pipeline.save_pretrained(args.output_dir)
+
+ accelerator.end_training()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/Lotus/train_lotus_g.py b/Lotus/train_lotus_g.py
new file mode 100644
index 0000000000000000000000000000000000000000..d96b8866375a1ba60e02aa5591555ad4bb05cfde
--- /dev/null
+++ b/Lotus/train_lotus_g.py
@@ -0,0 +1,1201 @@
+#!/usr/bin/env python
+# coding=utf-8
+# Copyright 2024 The HuggingFace Inc. team. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import argparse
+import logging
+import math
+import os
+import random
+import shutil
+from contextlib import nullcontext
+from pathlib import Path
+from PIL import Image
+from glob import glob
+from easydict import EasyDict
+
+import accelerate
+import datasets
+import numpy as np
+import torch
+import torch.nn.functional as F
+import torch.utils.checkpoint
+import torch.nn as nn
+import transformers
+from accelerate import Accelerator
+from accelerate.logging import get_logger
+from accelerate.state import AcceleratorState
+from accelerate.utils import ProjectConfiguration, set_seed
+from huggingface_hub import create_repo
+from packaging import version
+from tqdm.auto import tqdm
+from transformers import CLIPTextModel, CLIPTokenizer
+from transformers.utils import ContextManagers
+from datetime import timedelta
+from accelerate.utils import InitProcessGroupKwargs
+
+import diffusers
+from diffusers import AutoencoderKL, DDPMScheduler, UNet2DConditionModel, DDIMScheduler
+from diffusers.optimization import get_scheduler
+from diffusers.utils import check_min_version, deprecate
+from diffusers.utils.import_utils import is_xformers_available
+from diffusers.utils.torch_utils import is_compiled_module
+
+from pipeline import LotusGPipeline
+from utils.image_utils import concatenate_images, colorize_depth_map
+from utils.hypersim_dataset import get_hypersim_dataset_depth_normal
+from utils.vkitti_dataset import VKITTIDataset, VKITTITransform, collate_fn_vkitti
+
+from eval import evaluation_depth, evaluation_normal
+
+import tensorboard
+
+# Will error if the minimal version of diffusers is not installed. Remove at your own risks.
+check_min_version("0.28.0.dev0")
+
+logger = get_logger(__name__, log_level="INFO")
+
+TOP5_STEPS_DEPTH = []
+TOP5_STEPS_NORMAL = []
+
+def run_example_validation(pipeline, task, args, step, accelerator, generator):
+ validation_images = glob(os.path.join(args.validation_images, "*.jpg")) + glob(os.path.join(args.validation_images, "*.png"))
+ validation_images = sorted(validation_images)
+ print(validation_images)
+
+ pred_annos = []
+ input_images = []
+
+ if task == "depth":
+ for i in range(len(validation_images)):
+ if torch.backends.mps.is_available():
+ autocast_ctx = nullcontext()
+ else:
+ autocast_ctx = torch.autocast(accelerator.device.type)
+
+ with autocast_ctx:
+ # Preprocess validation image
+ validation_image = Image.open(validation_images[i]).convert("RGB")
+ input_images.append(validation_image)
+ validation_image = np.array(validation_image).astype(np.float32)
+ validation_image = torch.tensor(validation_image).permute(2,0,1).unsqueeze(0)
+ validation_image = validation_image / 127.5 - 1.0
+ validation_image = validation_image.to(accelerator.device)
+
+ task_emb = torch.tensor([1, 0]).float().unsqueeze(0).repeat(1, 1).to(accelerator.device)
+ task_emb = torch.cat([torch.sin(task_emb), torch.cos(task_emb)], dim=-1).repeat(1, 1)
+
+ # Run
+ pred_depth = pipeline(
+ rgb_in=validation_image,
+ task_emb=task_emb,
+ prompt="",
+ num_inference_steps=1,
+ timesteps=[args.timestep],
+ generator=generator,
+ output_type='np',
+ ).images[0]
+
+ # Post-process the prediction
+ pred_depth = pred_depth.mean(axis=-1)
+ is_reverse_color = "disparity" in args.norm_type
+ depth_color = colorize_depth_map(pred_depth, reverse_color=is_reverse_color)
+
+ pred_annos.append(depth_color)
+
+ elif task == "normal":
+ for i in range(len(validation_images)):
+ if torch.backends.mps.is_available():
+ autocast_ctx = nullcontext()
+ else:
+ autocast_ctx = torch.autocast(accelerator.device.type)
+
+ with autocast_ctx:
+ # Preprocess validation image
+ validation_image = Image.open(validation_images[i]).convert("RGB")
+ input_images.append(validation_image)
+ validation_image = np.array(validation_image).astype(np.float32)
+ validation_image = torch.tensor(validation_image).permute(2,0,1).unsqueeze(0)
+ validation_image = validation_image / 127.5 - 1.0
+ validation_image = validation_image.to(accelerator.device)
+
+ task_emb = torch.tensor([1, 0]).float().unsqueeze(0).repeat(1, 1).to(accelerator.device)
+ task_emb = torch.cat([torch.sin(task_emb), torch.cos(task_emb)], dim=-1).repeat(1, 1)
+
+ # Run
+ pred_normal = pipeline(
+ rgb_in=validation_image,
+ task_emb=task_emb,
+ prompt="",
+ num_inference_steps=1,
+ timesteps=[args.timestep],
+ generator=generator,
+ ).images[0]
+
+ pred_annos.append(pred_normal)
+
+ else:
+ raise ValueError(f"Not Supported Task: {args.task_name}!")
+
+ # Save output
+ save_output = concatenate_images(input_images, pred_annos)
+ save_dir = os.path.join(args.output_dir,'images')
+ os.makedirs(save_dir, exist_ok=True)
+ save_output.save(os.path.join(save_dir, f'{step:05d}.jpg'))
+
+def run_evaluation(pipeline, task, args, step, accelerator):
+ # Define prediction functions
+ def gen_depth(rgb_in, pipe, prompt="", num_inference_steps=1):
+ if torch.backends.mps.is_available():
+ autocast_ctx = nullcontext()
+ else:
+ autocast_ctx = torch.autocast(pipe.device.type)
+
+ with autocast_ctx:
+ rgb_input = rgb_in / 255.0 * 2.0 - 1.0 # [0, 255] -> [-1, 1]
+ task_emb = torch.tensor([1, 0]).float().unsqueeze(0).repeat(1, 1).to(pipe.device)
+ task_emb = torch.cat([torch.sin(task_emb), torch.cos(task_emb)], dim=-1).repeat(1, 1)
+ pred_depth = pipe(
+ rgb_in=rgb_input,
+ task_emb=task_emb,
+ prompt=prompt,
+ num_inference_steps=num_inference_steps,
+ timesteps=[args.timestep],
+ output_type='np',
+ ).images[0]
+ pred_depth = pred_depth.mean(axis=-1) # [0,1]
+ return pred_depth
+
+ def gen_normal(img, pipe, prompt="", num_inference_steps=1):
+ if torch.backends.mps.is_available():
+ autocast_ctx = nullcontext()
+ else:
+ autocast_ctx = torch.autocast(pipe.device.type)
+
+ with autocast_ctx:
+ task_emb = torch.tensor([1, 0]).float().unsqueeze(0).repeat(1, 1).to(pipe.device)
+ task_emb = torch.cat([torch.sin(task_emb), torch.cos(task_emb)], dim=-1).repeat(1, 1)
+
+ pred_normal = pipe(
+ rgb_in=img, # [-1,1]
+ task_emb=task_emb,
+ prompt=prompt,
+ num_inference_steps=num_inference_steps,
+ timesteps=[args.timestep],
+ output_type='pt',
+ ).images[0] # [0,1], (3,h,w)
+ pred_normal = (pred_normal*2-1.0).unsqueeze(0) # [-1,1], (1,3,h,w)
+ return pred_normal
+
+ if step > 0:
+ if task == "depth":
+ test_data_dir = os.path.join(args.base_test_data_dir, task)
+ test_depth_dataset_configs = {
+ "nyuv2": "configs/data_nyu_test.yaml",
+ }
+ if args.FULL_EVALUATION:
+ print("==> Full Evaluation Mode!")
+ test_depth_dataset_configs = {
+ "nyuv2": "configs/data_nyu_test.yaml",
+ "kitti": "configs/data_kitti_eigen_test.yaml",
+ "scannet": "configs/data_scannet_val.yaml",
+ "eth3d": "configs/data_eth3d.yaml",
+ "diode": "configs/data_diode_all.yaml",
+ }
+ LEADER_DATASET = list(test_depth_dataset_configs.keys())[0]
+ for dataset_name, config_path in test_depth_dataset_configs.items():
+ eval_dir = os.path.join(args.output_dir, f'evaluation-{step:05d}', task, dataset_name)
+ test_dataset_config = os.path.join(test_data_dir, config_path)
+ alignment_type = "least_square_disparity" if "disparity" in args.norm_type else "least_square"
+ metric_tracker = evaluation_depth(eval_dir, test_dataset_config, test_data_dir, eval_mode="generate_prediction",
+ gen_prediction=gen_depth, pipeline=pipeline, save_pred_vis=args.save_pred_vis, alignment=alignment_type)
+ print(dataset_name,',', 'abs_relative_difference: ', metric_tracker.result()['abs_relative_difference'], 'delta1_acc: ', metric_tracker.result()['delta1_acc'], 'delta2_acc: ', metric_tracker.result()['delta2_acc'])
+
+ if dataset_name == LEADER_DATASET:
+ TOP5_STEPS_DEPTH.append((metric_tracker.result()['abs_relative_difference'], f"step-{step}"))
+ TOP5_STEPS_DEPTH.sort(key=lambda x: x[0])
+ if len(TOP5_STEPS_DEPTH) > 5:
+ TOP5_STEPS_DEPTH.pop()
+
+ for tracker in accelerator.trackers:
+ if tracker.name == "tensorboard":
+ tracker.writer.add_scalar(f"depth_{dataset_name}/rel", metric_tracker.result()['abs_relative_difference'], step)
+ tracker.writer.add_scalar(f"depth_{dataset_name}/delta1", metric_tracker.result()['delta1_acc'], step)
+
+ top_five_cycles = [cycle_name for _, cycle_name in TOP5_STEPS_DEPTH]
+ print("Top Five:", top_five_cycles)
+
+ elif task == "normal":
+ test_data_dir = os.path.join(args.base_test_data_dir, task)
+ dataset_split_path = "eval/dataset_normal"
+ eval_datasets = [('nyuv2', 'test')]
+ if args.FULL_EVALUATION:
+ eval_datasets = [('nyuv2', 'test'), ('scannet', 'test'), ('ibims', 'ibims'), ('sintel', 'sintel'), ('oasis','val')]
+ eval_dir = os.path.join(args.output_dir, f'evaluation-{step:05d}', task)
+ eval_metrics = evaluation_normal(eval_dir, test_data_dir, dataset_split_path, eval_mode="generate_prediction",
+ gen_prediction=gen_normal, pipeline=pipeline, eval_datasets=eval_datasets,
+ save_pred_vis=args.save_pred_vis)
+
+ LEADER_DATASET = eval_datasets[0][0]
+ mean_value = eval_metrics[LEADER_DATASET]['mean'] if eval_metrics[LEADER_DATASET]['mean'] == eval_metrics[LEADER_DATASET]['mean'] else float('inf')
+ TOP5_STEPS_NORMAL.append((mean_value, f"step-{step}"))
+ TOP5_STEPS_NORMAL.sort(key=lambda x: x[0])
+ if len(TOP5_STEPS_NORMAL) > 5:
+ TOP5_STEPS_NORMAL.pop()
+
+ top_five_cycles = [cycle_name for _, cycle_name in TOP5_STEPS_NORMAL]
+ print("Top Five:", top_five_cycles)
+
+ for dataset_name, metrics in eval_metrics.items():
+ for tracker in accelerator.trackers:
+ if tracker.name == "tensorboard":
+ tracker.writer.add_scalar(f"normal_{dataset_name}/mean", metrics['mean'], step)
+ tracker.writer.add_scalar(f"normal_{dataset_name}/11.25", metrics['a3'], step)
+
+ else:
+ raise ValueError(f"Not Supported Task: {task}!")
+
+def log_validation(vae, text_encoder, tokenizer, unet, args, accelerator, weight_dtype, step):
+ logger.info("Running validation for task: %s... " % args.task_name[0])
+ task = args.task_name[0]
+
+ # Load pipeline
+ scheduler = DDIMScheduler.from_pretrained(args.pretrained_model_name_or_path, subfolder="scheduler")
+ scheduler.register_to_config(prediction_type=args.prediction_type)
+ pipeline = LotusGPipeline.from_pretrained(
+ args.pretrained_model_name_or_path,
+ scheduler=scheduler,
+ vae=accelerator.unwrap_model(vae),
+ text_encoder=accelerator.unwrap_model(text_encoder),
+ tokenizer=tokenizer,
+ unet=accelerator.unwrap_model(unet),
+ safety_checker=None,
+ revision=args.revision,
+ variant=args.variant,
+ torch_dtype=weight_dtype,
+ )
+ pipeline = pipeline.to(accelerator.device)
+ pipeline.set_progress_bar_config(disable=True)
+
+ if args.enable_xformers_memory_efficient_attention:
+ pipeline.enable_xformers_memory_efficient_attention()
+
+ if args.seed is None:
+ generator = None
+ else:
+ generator = torch.Generator(device=accelerator.device).manual_seed(args.seed)
+
+
+ # Run example-validation
+ run_example_validation(pipeline, task, args, step, accelerator, generator)
+
+ # Run evaluation
+ run_evaluation(pipeline, task, args, step, accelerator)
+
+ del pipeline
+ torch.cuda.empty_cache()
+
+def parse_args():
+ parser = argparse.ArgumentParser(description="Simple example of a training script.")
+ parser.add_argument(
+ "--input_perturbation", type=float, default=0, help="The scale of input perturbation. Recommended 0.1."
+ )
+ parser.add_argument(
+ "--pretrained_model_name_or_path",
+ type=str,
+ default=None,
+ required=True,
+ help="Path to pretrained model or model identifier from huggingface.co/models.",
+ )
+ parser.add_argument(
+ "--revision",
+ type=str,
+ default=None,
+ required=False,
+ help="Revision of pretrained model identifier from huggingface.co/models.",
+ )
+ parser.add_argument(
+ "--variant",
+ type=str,
+ default=None,
+ help="Variant of the model files of the pretrained model identifier from huggingface.co/models, 'e.g.' fp16",
+ )
+ parser.add_argument(
+ "--train_data_dir_hypersim",
+ type=str,
+ default=None,
+ help=(
+ "A folder containing the training data for hypersim"
+ ),
+ )
+ parser.add_argument(
+ "--train_data_dir_vkitti",
+ type=str,
+ default=None,
+ help=(
+ "A folder containing the training data for vkitti"
+ ),
+ )
+ parser.add_argument(
+ "--max_train_samples",
+ type=int,
+ default=None,
+ help=(
+ "For debugging purposes or quicker training, truncate the number of training examples to this "
+ "value if set."
+ ),
+ )
+ parser.add_argument(
+ "--base_test_data_dir",
+ type=str,
+ default="datasets/eval/"
+ )
+ parser.add_argument(
+ "--task_name",
+ type=str,
+ default=["depth","normal"],
+ nargs="+"
+ )
+ parser.add_argument(
+ "--validation_images",
+ type=str,
+ default=None,
+ help=("A set of images evaluated every `--validation_steps` and logged to `--report_to`."),
+ )
+ parser.add_argument(
+ "--output_dir",
+ type=str,
+ default="sd-model-finetuned",
+ help="The output directory where the model predictions and checkpoints will be written.",
+ )
+ parser.add_argument(
+ "--cache_dir",
+ type=str,
+ default=None,
+ help="The directory where the downloaded models and datasets will be stored.",
+ )
+ parser.add_argument("--seed", type=int, default=None, help="A seed for reproducible training.")
+ parser.add_argument(
+ "--resolution_hypersim",
+ type=int,
+ default=512,
+ help=(
+ "The resolution for input images, all the images in the train/validation dataset will be resized to this"
+ " resolution"
+ ),
+ )
+ parser.add_argument(
+ "--resolution_vkitti",
+ type=int,
+ default=512,
+ help=(
+ "The resolution for input images, all the images in the train/validation dataset will be resized to this"
+ " resolution"
+ ),
+ )
+ parser.add_argument(
+ "--prob_hypersim",
+ type=float,
+ default=0.9,
+ )
+ parser.add_argument(
+ "--mix_dataset",
+ action="store_true",
+ help='Whether to mix the training data from hypersim and vkitti'
+ )
+ parser.add_argument(
+ "--norm_type",
+ type=str,
+ choices=['instnorm','truncnorm','perscene_norm','disparity','trunc_disparity'],
+ default='trunc_disparity',
+ help='The normalization type for the depth prediction'
+ )
+ parser.add_argument(
+ "--random_flip",
+ action="store_true",
+ help="whether to randomly flip images horizontally",
+ )
+ parser.add_argument(
+ "--align_cam_normal",
+ action="store_true",
+ )
+ parser.add_argument(
+ "--train_batch_size", type=int, default=16, help="Batch size (per device) for the training dataloader."
+ )
+ parser.add_argument("--num_train_epochs", type=int, default=100)
+ parser.add_argument(
+ "--max_train_steps",
+ type=int,
+ default=None,
+ help="Total number of training steps to perform. If provided, overrides num_train_epochs.",
+ )
+ parser.add_argument(
+ "--truncnorm_min",
+ type=float,
+ default=0.02,
+ )
+ parser.add_argument(
+ "--timestep",
+ type=int,
+ default=1
+ )
+ parser.add_argument(
+ "--validation_steps",
+ type=int,
+ default=500,
+ help="Run validation every X steps.",
+ )
+ parser.add_argument(
+ "--gradient_accumulation_steps",
+ type=int,
+ default=1,
+ help="Number of updates steps to accumulate before performing a backward/update pass.",
+ )
+ parser.add_argument(
+ "--gradient_checkpointing",
+ action="store_true",
+ help="Whether or not to use gradient checkpointing to save memory at the expense of slower backward pass.",
+ )
+ parser.add_argument(
+ "--learning_rate",
+ type=float,
+ default=1e-4,
+ help="Initial learning rate (after the potential warmup period) to use.",
+ )
+ parser.add_argument(
+ "--scale_lr",
+ action="store_true",
+ default=False,
+ help="Scale the learning rate by the number of GPUs, gradient accumulation steps, and batch size.",
+ )
+ parser.add_argument(
+ "--lr_scheduler",
+ type=str,
+ default="constant",
+ help=(
+ 'The scheduler type to use. Choose between ["linear", "cosine", "cosine_with_restarts", "polynomial",'
+ ' "constant", "constant_with_warmup"]'
+ ),
+ )
+ parser.add_argument(
+ "--lr_warmup_steps", type=int, default=500, help="Number of steps for the warmup in the lr scheduler."
+ )
+ parser.add_argument(
+ "--use_8bit_adam", action="store_true", help="Whether or not to use 8-bit Adam from bitsandbytes."
+ )
+ parser.add_argument(
+ "--allow_tf32",
+ action="store_true",
+ help=(
+ "Whether or not to allow TF32 on Ampere GPUs. Can be used to speed up training. For more information, see"
+ " https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices"
+ ),
+ )
+ parser.add_argument(
+ "--non_ema_revision",
+ type=str,
+ default=None,
+ required=False,
+ help=(
+ "Revision of pretrained non-ema model identifier. Must be a branch, tag or git identifier of the local or"
+ " remote repository specified with --pretrained_model_name_or_path."
+ ),
+ )
+ parser.add_argument(
+ "--dataloader_num_workers",
+ type=int,
+ default=0,
+ help=(
+ "Number of subprocesses to use for data loading. 0 means that the data will be loaded in the main process."
+ ),
+ )
+ parser.add_argument("--adam_beta1", type=float, default=0.9, help="The beta1 parameter for the Adam optimizer.")
+ parser.add_argument("--adam_beta2", type=float, default=0.999, help="The beta2 parameter for the Adam optimizer.")
+ parser.add_argument("--adam_weight_decay", type=float, default=1e-2, help="Weight decay to use.")
+ parser.add_argument("--adam_epsilon", type=float, default=1e-08, help="Epsilon value for the Adam optimizer")
+ parser.add_argument("--max_grad_norm", default=1.0, type=float, help="Max gradient norm.")
+ parser.add_argument("--push_to_hub", action="store_true", help="Whether or not to push the model to the Hub.")
+ parser.add_argument("--hub_token", type=str, default=None, help="The token to use to push to the Model Hub.")
+ parser.add_argument(
+ "--prediction_type",
+ type=str,
+ default="sample",
+ help="The prediction_type that shall be used for training. ",
+ )
+ parser.add_argument(
+ "--hub_model_id",
+ type=str,
+ default=None,
+ help="The name of the repository to keep in sync with the local `output_dir`.",
+ )
+ parser.add_argument(
+ "--logging_dir",
+ type=str,
+ default="logs",
+ help=(
+ "[TensorBoard](https://www.tensorflow.org/tensorboard) log directory. Will default to"
+ " *output_dir/runs/**CURRENT_DATETIME_HOSTNAME***."
+ ),
+ )
+ parser.add_argument(
+ "--mixed_precision",
+ type=str,
+ default=None,
+ choices=["no", "fp16", "bf16"],
+ help=(
+ "Whether to use mixed precision. Choose between fp16 and bf16 (bfloat16). Bf16 requires PyTorch >="
+ " 1.10.and an Nvidia Ampere GPU. Default to the value of accelerate config of the current system or the"
+ " flag passed with the `accelerate.launch` command. Use this argument to override the accelerate config."
+ ),
+ )
+ parser.add_argument(
+ "--report_to",
+ type=str,
+ default="tensorboard",
+ help=(
+ 'The integration to report the results and logs to. Supported platforms are `"tensorboard"`'
+ ' (default), `"wandb"` and `"comet_ml"`. Use `"all"` to report to all integrations.'
+ ),
+ )
+ parser.add_argument("--local_rank", type=int, default=-1, help="For distributed training: local_rank")
+ parser.add_argument(
+ "--checkpointing_steps",
+ type=int,
+ default=500,
+ help=(
+ "Save a checkpoint of the training state every X updates. These checkpoints are only suitable for resuming"
+ " training using `--resume_from_checkpoint`."
+ ),
+ )
+ parser.add_argument(
+ "--checkpoints_total_limit",
+ type=int,
+ default=None,
+ help=("Max number of checkpoints to store."),
+ )
+ parser.add_argument(
+ "--resume_from_checkpoint",
+ type=str,
+ default=None,
+ help=(
+ "Whether training should be resumed from a previous checkpoint. Use a path saved by"
+ ' `--checkpointing_steps`, or `"latest"` to automatically select the last available checkpoint.'
+ ),
+ )
+ parser.add_argument(
+ "--enable_xformers_memory_efficient_attention", action="store_true", help="Whether or not to use xformers."
+ )
+ parser.add_argument("--noise_offset", type=float, default=0, help="The scale of noise offset.")
+ parser.add_argument("--FULL_EVALUATION", action="store_true")
+ parser.add_argument("--save_pred_vis", action="store_true")
+ parser.add_argument(
+ "--tracker_project_name",
+ type=str,
+ default="train_lotus_g",
+ help=(
+ "The `project_name` argument passed to Accelerator.init_trackers for"
+ " more information see https://huggingface.co/docs/accelerate/v0.17.0/en/package_reference/accelerator#accelerate.Accelerator"
+ ),
+ )
+
+ args = parser.parse_args()
+ env_local_rank = int(os.environ.get("LOCAL_RANK", -1))
+ if env_local_rank != -1 and env_local_rank != args.local_rank:
+ args.local_rank = env_local_rank
+
+ # Sanity checks
+ if args.train_data_dir_hypersim is None and args.train_data_dir_vkitti is None:
+ raise ValueError("Need either a dataset name or a training folder.")
+
+ # default to using the same revision for the non-ema model if not specified
+ if args.non_ema_revision is None:
+ args.non_ema_revision = args.revision
+
+ return args
+
+def main():
+ args = parse_args()
+
+ if args.report_to == "wandb" and args.hub_token is not None:
+ raise ValueError(
+ "You cannot use both --report_to=wandb and --hub_token due to a security risk of exposing your token."
+ " Please use `huggingface-cli login` to authenticate with the Hub."
+ )
+
+ if args.non_ema_revision is not None:
+ deprecate(
+ "non_ema_revision!=None",
+ "0.15.0",
+ message=(
+ "Downloading 'non_ema' weights from revision branches of the Hub is deprecated. Please make sure to"
+ " use `--variant=non_ema` instead."
+ ),
+ )
+ logging_dir = os.path.join(args.output_dir, args.logging_dir)
+
+ accelerator_project_config = ProjectConfiguration(project_dir=args.output_dir, logging_dir=logging_dir)
+
+ kwargs = InitProcessGroupKwargs(timeout=timedelta(seconds=36000))
+ accelerator = Accelerator(
+ gradient_accumulation_steps=args.gradient_accumulation_steps,
+ mixed_precision=args.mixed_precision,
+ log_with=args.report_to,
+ project_config=accelerator_project_config,
+ kwargs_handlers=[kwargs]
+ )
+
+ # Disable AMP for MPS.
+ if torch.backends.mps.is_available():
+ accelerator.native_amp = False
+
+ # Make one log on every process with the configuration for debugging.
+ logging.basicConfig(
+ format="%(asctime)s - %(levelname)s - %(name)s - %(message)s",
+ datefmt="%m/%d/%Y %H:%M:%S",
+ level=logging.INFO,
+ )
+ logger.info(accelerator.state, main_process_only=False)
+ if accelerator.is_local_main_process:
+ datasets.utils.logging.set_verbosity_warning()
+ transformers.utils.logging.set_verbosity_warning()
+ diffusers.utils.logging.set_verbosity_info()
+ else:
+ datasets.utils.logging.set_verbosity_error()
+ transformers.utils.logging.set_verbosity_error()
+ diffusers.utils.logging.set_verbosity_error()
+
+ # If passed along, set the training seed now.
+ if args.seed is not None:
+ set_seed(args.seed)
+
+ # Handle the repository creation
+ if accelerator.is_main_process:
+ if args.output_dir is not None:
+ os.makedirs(args.output_dir, exist_ok=True)
+
+ if args.push_to_hub:
+ repo_id = create_repo(
+ repo_id=args.hub_model_id or Path(args.output_dir).name, exist_ok=True, token=args.hub_token
+ ).repo_id
+
+ # Load scheduler, tokenizer and models.
+ noise_scheduler = DDPMScheduler.from_pretrained(args.pretrained_model_name_or_path, subfolder="scheduler")
+ noise_scheduler.register_to_config(prediction_type=args.prediction_type)
+ tokenizer = CLIPTokenizer.from_pretrained(
+ args.pretrained_model_name_or_path, subfolder="tokenizer", revision=args.revision
+ )
+
+ def deepspeed_zero_init_disabled_context_manager():
+ """
+ returns either a context list that includes one that will disable zero.Init or an empty context list
+ """
+ deepspeed_plugin = AcceleratorState().deepspeed_plugin if accelerate.state.is_initialized() else None
+ if deepspeed_plugin is None:
+ return []
+
+ return [deepspeed_plugin.zero3_init_context_manager(enable=False)]
+
+ # Currently Accelerate doesn't know how to handle multiple models under Deepspeed ZeRO stage 3.
+ # For this to work properly all models must be run through `accelerate.prepare`. But accelerate
+ # will try to assign the same optimizer with the same weights to all models during
+ # `deepspeed.initialize`, which of course doesn't work.
+ #
+ # For now the following workaround will partially support Deepspeed ZeRO-3, by excluding the 2
+ # frozen models from being partitioned during `zero.Init` which gets called during
+ # `from_pretrained` So CLIPTextModel and AutoencoderKL will not enjoy the parameter sharding
+ # across multiple gpus and only UNet2DConditionModel will get ZeRO sharded.
+ with ContextManagers(deepspeed_zero_init_disabled_context_manager()):
+ text_encoder = CLIPTextModel.from_pretrained(
+ args.pretrained_model_name_or_path, subfolder="text_encoder", revision=args.revision, variant=args.variant
+ )
+ vae = AutoencoderKL.from_pretrained(
+ args.pretrained_model_name_or_path, subfolder="vae", revision=args.revision, variant=args.variant
+ )
+
+ unet = UNet2DConditionModel.from_pretrained(
+ args.pretrained_model_name_or_path, subfolder="unet", revision=args.non_ema_revision,
+ class_embed_type="projection", projection_class_embeddings_input_dim=4,
+ low_cpu_mem_usage=False, device_map=None,
+ )
+
+ # Replace the first layer to accept 8 in_channels.
+ _weight = unet.conv_in.weight.clone()
+ _bias = unet.conv_in.bias.clone()
+ _weight = _weight.repeat(1, 2, 1, 1)
+ _weight *= 0.5
+ # unet.config.in_channels *= 2
+ config_dict = EasyDict(unet.config)
+ config_dict.in_channels *= 2
+ unet._internal_dict = config_dict
+
+ # new conv_in channel
+ _n_convin_out_channel = unet.conv_in.out_channels
+ _new_conv_in =nn.Conv2d(
+ 8, _n_convin_out_channel, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)
+ )
+ _new_conv_in.weight = nn.Parameter(_weight)
+ _new_conv_in.bias = nn.Parameter(_bias)
+ unet.conv_in = _new_conv_in
+
+ # Freeze vae and text_encoder and set unet to trainable
+ vae.requires_grad_(False)
+ text_encoder.requires_grad_(False)
+ unet.train()
+
+ if args.enable_xformers_memory_efficient_attention:
+ if is_xformers_available():
+ import xformers
+
+ xformers_version = version.parse(xformers.__version__)
+ if xformers_version == version.parse("0.0.16"):
+ logger.warning(
+ "xFormers 0.0.16 cannot be used for training in some GPUs. If you observe problems during training, please update xFormers to at least 0.0.17. See https://huggingface.co/docs/diffusers/main/en/optimization/xformers for more details."
+ )
+ unet.enable_xformers_memory_efficient_attention()
+ else:
+ raise ValueError("xformers is not available. Make sure it is installed correctly")
+
+ # `accelerate` 0.16.0 will have better support for customized saving
+ if version.parse(accelerate.__version__) >= version.parse("0.16.0"):
+ # create custom saving & loading hooks so that `accelerator.save_state(...)` serializes in a nice format
+ def save_model_hook(models, weights, output_dir):
+ if accelerator.is_main_process:
+ for i, model in enumerate(models):
+ model.save_pretrained(os.path.join(output_dir, "unet"))
+
+ # make sure to pop weight so that corresponding model is not saved again
+ weights.pop()
+
+ def load_model_hook(models, input_dir):
+ for _ in range(len(models)):
+ # pop models so that they are not loaded again
+ model = models.pop()
+
+ # load diffusers style into model
+ load_model = UNet2DConditionModel.from_pretrained(input_dir, subfolder="unet", in_channels=8)
+ model.register_to_config(**load_model.config)
+
+ model.load_state_dict(load_model.state_dict())
+ del load_model
+
+ accelerator.register_save_state_pre_hook(save_model_hook)
+ accelerator.register_load_state_pre_hook(load_model_hook)
+
+ if args.gradient_checkpointing:
+ unet.enable_gradient_checkpointing()
+
+ # Enable TF32 for faster training on Ampere GPUs,
+ # cf https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices
+ if args.allow_tf32:
+ torch.backends.cuda.matmul.allow_tf32 = True
+
+ if args.scale_lr:
+ args.learning_rate = (
+ args.learning_rate * args.gradient_accumulation_steps * args.train_batch_size * accelerator.num_processes
+ )
+
+ # Initialize the optimizer
+ if args.use_8bit_adam:
+ try:
+ import bitsandbytes as bnb
+ except ImportError:
+ raise ImportError(
+ "Please install bitsandbytes to use 8-bit Adam. You can do so by running `pip install bitsandbytes`"
+ )
+
+ optimizer_cls = bnb.optim.AdamW8bit
+ else:
+ optimizer_cls = torch.optim.AdamW
+
+ optimizer = optimizer_cls(
+ unet.parameters(),
+ lr=args.learning_rate,
+ betas=(args.adam_beta1, args.adam_beta2),
+ weight_decay=args.adam_weight_decay,
+ eps=args.adam_epsilon,
+ )
+
+ # Get the datasets and dataloaders.
+ # -------------------- Dataset1: Hypersim --------------------
+ train_hypersim_dataset, preprocess_train_hypersim, collate_fn_hypersim = get_hypersim_dataset_depth_normal(
+ args.train_data_dir_hypersim, args.resolution_hypersim, args.random_flip,
+ norm_type=args.norm_type, truncnorm_min=args.truncnorm_min, align_cam_normal=args.align_cam_normal
+ )
+ with accelerator.main_process_first():
+ if args.max_train_samples is not None:
+ train_hypersim_dataset = train_hypersim_dataset.shuffle(seed=args.seed).select(range(args.max_train_samples))
+ # Set the training transforms
+ train_dataset_hypersim = train_hypersim_dataset.with_transform(preprocess_train_hypersim)
+
+ train_dataloader_hypersim = torch.utils.data.DataLoader(
+ train_dataset_hypersim,
+ shuffle=True,
+ collate_fn=collate_fn_hypersim,
+ batch_size=args.train_batch_size,
+ num_workers=args.dataloader_num_workers,
+ pin_memory=True
+ )
+ # -------------------- Dataset2: VKITTI --------------------
+ transform_vkitti = VKITTITransform(random_flip=args.random_flip)
+ train_dataset_vkitti = VKITTIDataset(args.train_data_dir_vkitti, transform_vkitti, args.norm_type, truncnorm_min=args.truncnorm_min)
+ train_dataloader_vkitti = torch.utils.data.DataLoader(
+ train_dataset_vkitti,
+ shuffle=True,
+ collate_fn=collate_fn_vkitti,
+ batch_size=args.train_batch_size,
+ num_workers=args.dataloader_num_workers,
+ pin_memory=True
+ )
+
+ # Lr_scheduler and math around the number of training steps.
+ overrode_max_train_steps = False
+ num_update_steps_per_epoch = math.ceil(len(train_dataloader_hypersim) / args.gradient_accumulation_steps)
+ assert args.max_train_steps is not None or args.num_train_epochs is not None, "max_train_steps or num_train_epochs should be provided"
+ if args.max_train_steps is None:
+ args.max_train_steps = args.num_train_epochs * num_update_steps_per_epoch
+ overrode_max_train_steps = True
+
+ lr_scheduler = get_scheduler(
+ args.lr_scheduler,
+ optimizer=optimizer,
+ num_warmup_steps=args.lr_warmup_steps * accelerator.num_processes,
+ num_training_steps=args.max_train_steps * accelerator.num_processes,
+ )
+
+ # Prepare everything with our `accelerator`.
+ unet, optimizer, train_dataloader_hypersim, train_dataloader_vkitti, lr_scheduler = accelerator.prepare(
+ unet, optimizer, train_dataloader_hypersim, train_dataloader_vkitti, lr_scheduler
+ )
+
+ # For mixed precision training we cast all non-trainable weights (vae, non-lora text_encoder and non-lora unet) to half-precision
+ # as these weights are only used for inference, keeping weights in full precision is not required.
+ weight_dtype = torch.float32
+ if accelerator.mixed_precision == "fp16":
+ weight_dtype = torch.float16
+ args.mixed_precision = accelerator.mixed_precision
+ elif accelerator.mixed_precision == "bf16":
+ weight_dtype = torch.bfloat16
+ args.mixed_precision = accelerator.mixed_precision
+
+ # Move text_encode and vae to gpu and cast to weight_dtype
+ text_encoder.to(accelerator.device, dtype=weight_dtype)
+ vae.to(accelerator.device, dtype=weight_dtype)
+
+ # We need to recalculate our total training steps as the size of the training dataloader may have changed.
+ num_update_steps_per_epoch = math.ceil(len(train_dataloader_hypersim) / args.gradient_accumulation_steps)
+ if overrode_max_train_steps:
+ args.max_train_steps = args.num_train_epochs * num_update_steps_per_epoch
+ # Afterwards we recalculate our number of training epochs
+ args.num_train_epochs = math.ceil(args.max_train_steps / num_update_steps_per_epoch)
+
+ # We need to initialize the trackers we use, and also store our configuration.
+ # The trackers initializes automatically on the main process.
+ if accelerator.is_main_process:
+ tracker_config = dict(vars(args))
+ tracker_config.pop("task_name")
+ accelerator.init_trackers(args.tracker_project_name, tracker_config)
+
+ # Function for unwrapping if model was compiled with `torch.compile`.
+ def unwrap_model(model):
+ model = accelerator.unwrap_model(model)
+ model = model._orig_mod if is_compiled_module(model) else model
+ return model
+
+ # Train!
+ total_batch_size = args.train_batch_size * accelerator.num_processes * args.gradient_accumulation_steps
+
+ logger.info("***** Running training *****")
+ logger.info(f" Num examples Hypersim = {len(train_dataset_hypersim)}")
+ logger.info(f" Num examples VKITTI = {len(train_dataset_vkitti)}")
+ logger.info(f" Using mix datasets: {args.mix_dataset}")
+ logger.info(f" Dataset alternation probability of Hypersim = {args.prob_hypersim}")
+ logger.info(f" Num Epochs = {args.num_train_epochs}")
+ logger.info(f" Instantaneous batch size per device = {args.train_batch_size}")
+ logger.info(f" Total train batch size (w. parallel, distributed & accumulation) = {total_batch_size}")
+ logger.info(f" Gradient Accumulation steps = {args.gradient_accumulation_steps}")
+ logger.info(f" Total optimization steps = {args.max_train_steps}")
+ logger.info(f" Unet timestep = {args.timestep}")
+ logger.info(f" Task name: {args.task_name}")
+ logger.info(f" Is Full Evaluation?: {args.FULL_EVALUATION}")
+ logger.info(f"Output Workspace: {args.output_dir}")
+
+ global_step = 0
+ first_epoch = 0
+
+ # Potentially load in the weights and states from a previous save
+ if args.resume_from_checkpoint:
+ if args.resume_from_checkpoint != "latest":
+ path = os.path.basename(args.resume_from_checkpoint)
+ else:
+ # Get the most recent checkpoint
+ dirs = os.listdir(args.output_dir)
+ dirs = [d for d in dirs if d.startswith("checkpoint")]
+ dirs = sorted(dirs, key=lambda x: int(x.split("-")[1]))
+ path = dirs[-1] if len(dirs) > 0 else None
+
+ if path is None:
+ accelerator.print(
+ f"Checkpoint '{args.resume_from_checkpoint}' does not exist. Starting a new training run."
+ )
+ args.resume_from_checkpoint = None
+ initial_global_step = 0
+ else:
+ accelerator.print(f"Resuming from checkpoint {path}")
+ accelerator.load_state(os.path.join(args.output_dir, path))
+ global_step = int(path.split("-")[1])
+
+ initial_global_step = global_step
+ first_epoch = global_step // num_update_steps_per_epoch
+
+ else:
+ initial_global_step = 0
+
+ progress_bar = tqdm(
+ range(0, args.max_train_steps),
+ initial=initial_global_step,
+ desc="Steps",
+ # Only show the progress bar once on each machine.
+ disable=not accelerator.is_local_main_process,
+ )
+
+ if accelerator.is_main_process and args.validation_images is not None:
+ log_validation(
+ vae,
+ text_encoder,
+ tokenizer,
+ unet,
+ args,
+ accelerator,
+ weight_dtype,
+ global_step,
+ )
+
+ for epoch in range(first_epoch, args.num_train_epochs):
+ iter_hypersim = iter(train_dataloader_hypersim)
+ iter_vkitti = iter(train_dataloader_vkitti)
+
+ train_loss = 0.0
+ log_ann_loss = 0.0
+ log_rgb_loss = 0.0
+
+ for _ in range(len(train_dataloader_hypersim)):
+ if args.mix_dataset:
+ if random.random() < args.prob_hypersim:
+ batch = next(iter_hypersim)
+ else:
+ # Important note:
+ # In our training process, the Hypersim dataset is larger than the VKITTI dataset
+ # Therefore, when the smaller VKITTI dataset is exhausted, we need to restart iterating from the beginning
+ try:
+ batch = next(iter_vkitti)
+ except StopIteration:
+ iter_vkitti = iter(train_dataloader_vkitti)
+ batch = next(iter_vkitti)
+ else:
+ batch = next(iter_hypersim)
+
+ with accelerator.accumulate(unet):
+ # Convert images to latent space
+ rgb_latents = vae.encode(
+ torch.cat((batch["pixel_values"],batch["pixel_values"]), dim=0).to(weight_dtype)
+ ).latent_dist.sample()
+ rgb_latents = rgb_latents * vae.config.scaling_factor
+ # Convert target_annotations to latent space
+ assert len(args.task_name) == 1
+ if args.task_name[0] == "depth":
+ TAR_ANNO = "depth_values"
+ elif args.task_name[0] == "normal":
+ TAR_ANNO = "normal_values"
+ else:
+ raise ValueError(f"Do not support {args.task_name[0]} yet. ")
+ target_latents = vae.encode(
+ torch.cat((batch[TAR_ANNO],batch["pixel_values"]), dim=0).to(weight_dtype)
+ ).latent_dist.sample()
+ target_latents = target_latents * vae.config.scaling_factor
+
+ bsz = target_latents.shape[0]
+ bsz_per_task = int(bsz/2)
+
+ # Get the valid mask for the latent space
+ valid_mask_for_latent = batch.get("valid_mask_values", None)
+ if args.task_name[0] == "depth" and valid_mask_for_latent is not None:
+ sky_mask_for_latent = batch.get("sky_mask_values", None)
+ valid_mask_for_latent = valid_mask_for_latent + sky_mask_for_latent
+ if valid_mask_for_latent is not None:
+ valid_mask_for_latent = valid_mask_for_latent.bool()
+ invalid_mask = ~valid_mask_for_latent
+ valid_mask_down_anno = ~torch.max_pool2d(invalid_mask.float(), 8, 8).bool()
+ valid_mask_down_anno = valid_mask_down_anno.repeat((1, 4, 1, 1))
+ else:
+ valid_mask_down_anno = torch.ones_like(target_latents[:bsz_per_task]).to(target_latents.device).bool()
+
+ valid_mask_down_rgb = torch.ones_like(target_latents[bsz_per_task:]).to(target_latents.device).bool()
+
+ # Sample noise that we'll add to the latents
+ noise = torch.randn_like(target_latents)
+
+ if args.noise_offset:
+ # https://www.crosslabs.org//blog/diffusion-with-offset-noise
+ noise += args.noise_offset * torch.randn(
+ (target_latents.shape[0], target_latents.shape[1], 1, 1), device=target_latents.device
+ )
+ if args.input_perturbation:
+ new_noise = noise + args.input_perturbation * torch.randn_like(noise)
+
+ # Set timestep
+ timesteps = torch.tensor([args.timestep], device=target_latents.device).repeat(bsz)
+ timesteps = timesteps.long()
+
+ # Add noise to the latents according to the noise magnitude at each timestep
+ # (this is the forward diffusion process)
+ if args.input_perturbation:
+ noisy_latents = noise_scheduler.add_noise(target_latents, new_noise, timesteps)
+ else:
+ noisy_latents = noise_scheduler.add_noise(target_latents, noise, timesteps)
+
+ # Concatenate rgb and depth
+ unet_input = torch.cat(
+ [rgb_latents, noisy_latents], dim=1
+ )
+
+ # Get the empty text embedding for conditioning
+ prompt = ""
+ text_inputs = tokenizer(
+ prompt,
+ padding="do_not_pad",
+ max_length=tokenizer.model_max_length,
+ truncation=True,
+ return_tensors="pt",
+ )
+ text_input_ids = text_inputs.input_ids.to(target_latents.device)
+ encoder_hidden_states = text_encoder(text_input_ids, return_dict=False)[0]
+ encoder_hidden_states = encoder_hidden_states.repeat(bsz, 1, 1)
+
+ # Get the target for loss
+ target = target_latents
+
+ # Get the task embedding
+ task_emb_anno = torch.tensor([1, 0]).float().unsqueeze(0).to(accelerator.device)
+ task_emb_anno = torch.cat([torch.sin(task_emb_anno), torch.cos(task_emb_anno)], dim=-1).repeat(bsz_per_task, 1)
+ task_emb_rgb = torch.tensor([0, 1]).float().unsqueeze(0).to(accelerator.device)
+ task_emb_rgb = torch.cat([torch.sin(task_emb_rgb), torch.cos(task_emb_rgb)], dim=-1).repeat(bsz_per_task, 1)
+ task_emb = torch.cat((task_emb_anno, task_emb_rgb), dim=0)
+
+ # Predict
+ model_pred = unet(unet_input, timesteps, encoder_hidden_states, return_dict=False,
+ class_labels=task_emb)[0]
+
+ # Compute loss
+ anno_loss = F.mse_loss(model_pred[:bsz_per_task][valid_mask_down_anno].float(), target[:bsz_per_task][valid_mask_down_anno].float(), reduction="mean")
+ rgb_loss = F.mse_loss(model_pred[bsz_per_task:][valid_mask_down_rgb].float(), target[bsz_per_task:][valid_mask_down_rgb].float(), reduction="mean")
+ loss = anno_loss + rgb_loss
+
+ # Gather loss
+ avg_anno_loss = accelerator.gather(anno_loss.repeat(args.train_batch_size)).mean()
+ log_ann_loss += avg_anno_loss.item() / args.gradient_accumulation_steps
+ avg_rgb_loss = accelerator.gather(rgb_loss.repeat(args.train_batch_size)).mean()
+ log_rgb_loss += avg_rgb_loss.item() / args.gradient_accumulation_steps
+ train_loss = log_ann_loss + log_rgb_loss
+
+ # Backpropagate
+ accelerator.backward(loss)
+ if accelerator.sync_gradients:
+ accelerator.clip_grad_norm_(unet.parameters(), args.max_grad_norm)
+ optimizer.step()
+ lr_scheduler.step()
+ optimizer.zero_grad()
+
+ logs = {"SL": loss.detach().item(),
+ "SL_A": anno_loss.detach().item(),
+ "SL_R": rgb_loss.detach().item(),
+ "lr": lr_scheduler.get_last_lr()[0]}
+ progress_bar.set_postfix(**logs)
+
+ # Checks if the accelerator has performed an optimization step behind the scenes
+ if accelerator.sync_gradients:
+ progress_bar.update(1)
+ global_step += 1
+ accelerator.log({"train_loss": train_loss,
+ "anno_loss": log_ann_loss,
+ "rgb_loss": log_rgb_loss},
+ step=global_step)
+ train_loss = 0.0
+ log_ann_loss = 0.0
+ log_rgb_loss = 0.0
+
+ checkpointing_steps = args.checkpointing_steps
+ validation_steps = args.validation_steps
+
+ if accelerator.is_main_process:
+ if global_step % checkpointing_steps == 0:
+ # _before_ saving state, check if this save would set us over the `checkpoints_total_limit`
+ if args.checkpoints_total_limit is not None:
+ checkpoints = os.listdir(args.output_dir)
+ checkpoints = [d for d in checkpoints if d.startswith("checkpoint")]
+ checkpoints = sorted(checkpoints, key=lambda x: int(x.split("-")[1]))
+
+ # before we save the new checkpoint, we need to have at _most_ `checkpoints_total_limit - 1` checkpoints
+ if len(checkpoints) >= args.checkpoints_total_limit:
+ num_to_remove = len(checkpoints) - args.checkpoints_total_limit + 1
+ removing_checkpoints = checkpoints[0:num_to_remove]
+
+ logger.info(
+ f"{len(checkpoints)} checkpoints already exist, removing {len(removing_checkpoints)} checkpoints"
+ )
+ logger.info(f"removing checkpoints: {', '.join(removing_checkpoints)}")
+
+ for removing_checkpoint in removing_checkpoints:
+ removing_checkpoint = os.path.join(args.output_dir, removing_checkpoint)
+ shutil.rmtree(removing_checkpoint)
+
+ save_path = os.path.join(args.output_dir, f"checkpoint-{global_step}")
+ accelerator.save_state(save_path)
+ logger.info(f"Saved state to {save_path}")
+
+ if global_step % validation_steps == 0:
+ log_validation(
+ vae,
+ text_encoder,
+ tokenizer,
+ unet,
+ args,
+ accelerator,
+ weight_dtype,
+ global_step,
+ )
+
+ if global_step >= args.max_train_steps:
+ break
+
+ # Create the pipeline using the trained modules and save it.
+ accelerator.wait_for_everyone()
+ if accelerator.is_main_process:
+ unet = unwrap_model(unet)
+
+ pipeline = LotusGPipeline.from_pretrained(
+ args.pretrained_model_name_or_path,
+ text_encoder=text_encoder,
+ vae=vae,
+ unet=unet,
+ revision=args.revision,
+ variant=args.variant,
+ )
+ pipeline.save_pretrained(args.output_dir)
+
+ accelerator.end_training()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/Lotus/train_scripts/train_lotus_d_depth.sh b/Lotus/train_scripts/train_lotus_d_depth.sh
new file mode 100644
index 0000000000000000000000000000000000000000..483679018ff507489c525911572f929719de2444
--- /dev/null
+++ b/Lotus/train_scripts/train_lotus_d_depth.sh
@@ -0,0 +1,59 @@
+# export PYTHONPATH="$(dirname "$(dirname "$0")"):$PYTHONPATH"
+
+export MODEL_NAME="stabilityai/stable-diffusion-2-base"
+
+# training dataset
+export TRAIN_DATA_DIR_HYPERSIM=$PATH_TO_HYPERSIM_DATA
+export TRAIN_DATA_DIR_VKITTI=$PATH_TO_VKITTI_DATA
+export RES_HYPERSIM=576
+export RES_VKITTI=375
+export P_HYPERSIM=0.9
+export NORMTYPE="trunc_disparity"
+
+# training configs
+export BATCH_SIZE=16
+export CUDA=01234567
+export GAS=1
+export TOTAL_BSZ=$(($BATCH_SIZE * ${#CUDA} * $GAS))
+
+# model configs
+export TIMESTEP=999
+export TASK_NAME="depth"
+
+# eval
+export BASE_TEST_DATA_DIR="datasets/eval/"
+export VALIDATION_IMAGES="datasets/quick_validation/"
+export VAL_STEP=500
+
+# output dir
+export OUTPUT_DIR="output/train-lotus-d-${TASK_NAME}-bsz${TOTAL_BSZ}/"
+
+accelerate launch --config_file=accelerate_configs/$CUDA.yaml --mixed_precision="fp16" \
+ --main_process_port="13324" \
+ train_lotus_d.py \
+ --pretrained_model_name_or_path=$MODEL_NAME \
+ --train_data_dir_hypersim=$TRAIN_DATA_DIR_HYPERSIM \
+ --resolution_hypersim=$RES_HYPERSIM \
+ --train_data_dir_vkitti=$TRAIN_DATA_DIR_VKITTI \
+ --resolution_vkitti=$RES_VKITTI \
+ --prob_hypersim=$P_HYPERSIM \
+ --mix_dataset \
+ --random_flip \
+ --norm_type=$NORMTYPE \
+ --dataloader_num_workers=0 \
+ --train_batch_size=$BATCH_SIZE \
+ --gradient_accumulation_steps=$GAS \
+ --gradient_checkpointing \
+ --max_grad_norm=1 \
+ --seed=42 \
+ --max_train_steps=20000 \
+ --learning_rate=3e-05 \
+ --lr_scheduler="constant" --lr_warmup_steps=0 \
+ --task_name=$TASK_NAME \
+ --timestep=$TIMESTEP \
+ --validation_images=$VALIDATION_IMAGES \
+ --validation_steps=$VAL_STEP \
+ --checkpointing_steps=$VAL_STEP \
+ --base_test_data_dir=$BASE_TEST_DATA_DIR \
+ --output_dir=$OUTPUT_DIR \
+ --resume_from_checkpoint="latest"
\ No newline at end of file
diff --git a/Lotus/train_scripts/train_lotus_d_normal.sh b/Lotus/train_scripts/train_lotus_d_normal.sh
new file mode 100644
index 0000000000000000000000000000000000000000..35170a6406a96e4c64a4b83b0d15e0afffc63c5f
--- /dev/null
+++ b/Lotus/train_scripts/train_lotus_d_normal.sh
@@ -0,0 +1,58 @@
+# export PYTHONPATH="$(dirname "$(dirname "$0")"):$PYTHONPATH"
+
+export MODEL_NAME="stabilityai/stable-diffusion-2-base"
+
+# training dataset
+export TRAIN_DATA_DIR_HYPERSIM=$PATH_TO_HYPERSIM_DATA
+export TRAIN_DATA_DIR_VKITTI=$PATH_TO_VKITTI_DATA
+export RES_HYPERSIM=576
+export RES_VKITTI=375
+export P_HYPERSIM=0.9
+
+# training configs
+export BATCH_SIZE=16
+export CUDA=01234567
+export GAS=1
+export TOTAL_BSZ=$(($BATCH_SIZE * ${#CUDA} * $GAS))
+
+# model configs
+export TIMESTEP=999
+export TASK_NAME="normal"
+
+# eval
+export BASE_TEST_DATA_DIR="datasets/eval/"
+export VALIDATION_IMAGES="datasets/quick_validation/"
+export VAL_STEP=500
+
+# output dir
+export OUTPUT_DIR="output/train-lotus-d-${TASK_NAME}-bsz${TOTAL_BSZ}/"
+
+accelerate launch --config_file=accelerate_configs/$CUDA.yaml --mixed_precision="fp16" \
+ --main_process_port="13324" \
+ train_lotus_d.py \
+ --pretrained_model_name_or_path=$MODEL_NAME \
+ --train_data_dir_hypersim=$TRAIN_DATA_DIR_HYPERSIM \
+ --resolution_hypersim=$RES_HYPERSIM \
+ --train_data_dir_vkitti=$TRAIN_DATA_DIR_VKITTI \
+ --resolution_vkitti=$RES_VKITTI \
+ --prob_hypersim=$P_HYPERSIM \
+ --mix_dataset \
+ --random_flip \
+ --align_cam_normal \
+ --dataloader_num_workers=0 \
+ --train_batch_size=$BATCH_SIZE \
+ --gradient_accumulation_steps=$GAS \
+ --gradient_checkpointing \
+ --max_grad_norm=1 \
+ --seed=42 \
+ --max_train_steps=20000 \
+ --learning_rate=3e-05 \
+ --lr_scheduler="constant" --lr_warmup_steps=0 \
+ --task_name=$TASK_NAME \
+ --timestep=$TIMESTEP \
+ --validation_images=$VALIDATION_IMAGES \
+ --validation_steps=$VAL_STEP \
+ --checkpointing_steps=$VAL_STEP \
+ --base_test_data_dir=$BASE_TEST_DATA_DIR \
+ --output_dir=$OUTPUT_DIR \
+ --resume_from_checkpoint="latest"
\ No newline at end of file
diff --git a/Lotus/train_scripts/train_lotus_g_depth.sh b/Lotus/train_scripts/train_lotus_g_depth.sh
new file mode 100644
index 0000000000000000000000000000000000000000..f55ff305f0c2ed010e185a9578bd5f2e392503d7
--- /dev/null
+++ b/Lotus/train_scripts/train_lotus_g_depth.sh
@@ -0,0 +1,59 @@
+# export PYTHONPATH="$(dirname "$(dirname "$0")"):$PYTHONPATH"
+
+export MODEL_NAME="stabilityai/stable-diffusion-2-base"
+
+# training dataset
+export TRAIN_DATA_DIR_HYPERSIM=$PATH_TO_HYPERSIM_DATA
+export TRAIN_DATA_DIR_VKITTI=$PATH_TO_VKITTI_DATA
+export RES_HYPERSIM=576
+export RES_VKITTI=375
+export P_HYPERSIM=0.9
+export NORMTYPE="trunc_disparity"
+
+# training configs
+export BATCH_SIZE=16
+export CUDA=01234567
+export GAS=1
+export TOTAL_BSZ=$(($BATCH_SIZE * ${#CUDA} * $GAS))
+
+# model configs
+export TIMESTEP=999
+export TASK_NAME="depth"
+
+# eval
+export BASE_TEST_DATA_DIR="datasets/eval/"
+export VALIDATION_IMAGES="datasets/quick_validation/"
+export VAL_STEP=1000
+
+# output dir
+export OUTPUT_DIR="output/train-lotus-g-${TASK_NAME}-bsz${TOTAL_BSZ}/"
+
+accelerate launch --config_file=accelerate_configs/$CUDA.yaml --mixed_precision="fp16" \
+ --main_process_port="13224" \
+ train_lotus_g.py \
+ --pretrained_model_name_or_path=$MODEL_NAME \
+ --train_data_dir_hypersim=$TRAIN_DATA_DIR_HYPERSIM \
+ --resolution_hypersim=$RES_HYPERSIM \
+ --train_data_dir_vkitti=$TRAIN_DATA_DIR_VKITTI \
+ --resolution_vkitti=$RES_VKITTI \
+ --prob_hypersim=$P_HYPERSIM \
+ --mix_dataset \
+ --random_flip \
+ --norm_type=$NORMTYPE \
+ --dataloader_num_workers=0 \
+ --train_batch_size=$BATCH_SIZE \
+ --gradient_accumulation_steps=$GAS \
+ --gradient_checkpointing \
+ --max_grad_norm=1 \
+ --seed=42 \
+ --max_train_steps=20000 \
+ --learning_rate=3e-05 \
+ --lr_scheduler="constant" --lr_warmup_steps=0 \
+ --task_name=$TASK_NAME \
+ --timestep=$TIMESTEP \
+ --validation_images=$VALIDATION_IMAGES \
+ --validation_steps=$VAL_STEP \
+ --checkpointing_steps=$VAL_STEP \
+ --base_test_data_dir=$BASE_TEST_DATA_DIR \
+ --output_dir=$OUTPUT_DIR \
+ --resume_from_checkpoint="latest"
\ No newline at end of file
diff --git a/Lotus/train_scripts/train_lotus_g_normal.sh b/Lotus/train_scripts/train_lotus_g_normal.sh
new file mode 100644
index 0000000000000000000000000000000000000000..e8d028192d6bf71485a210bc67f61af83ba9db56
--- /dev/null
+++ b/Lotus/train_scripts/train_lotus_g_normal.sh
@@ -0,0 +1,58 @@
+# export PYTHONPATH="$(dirname "$(dirname "$0")"):$PYTHONPATH"
+
+export MODEL_NAME="stabilityai/stable-diffusion-2-base"
+
+# training dataset
+export TRAIN_DATA_DIR_HYPERSIM=$PATH_TO_HYPERSIM_DATA
+export TRAIN_DATA_DIR_VKITTI=$PATH_TO_VKITTI_DATA
+export RES_HYPERSIM=576
+export RES_VKITTI=375
+export P_HYPERSIM=0.9
+
+# training configs
+export BATCH_SIZE=16
+export CUDA=01234567
+export GAS=1
+export TOTAL_BSZ=$(($BATCH_SIZE * ${#CUDA} * $GAS))
+
+# model configs
+export TIMESTEP=999
+export TASK_NAME="normal"
+
+# eval
+export BASE_TEST_DATA_DIR="datasets/eval/"
+export VALIDATION_IMAGES="datasets/quick_validation/"
+export VAL_STEP=1000
+
+# output dir
+export OUTPUT_DIR="output/train-lotus-g-${TASK_NAME}-bsz${TOTAL_BSZ}/"
+
+accelerate launch --config_file=accelerate_configs/$CUDA.yaml --mixed_precision="fp16" \
+ --main_process_port="13224" \
+ train_lotus_g.py \
+ --pretrained_model_name_or_path=$MODEL_NAME \
+ --train_data_dir_hypersim=$TRAIN_DATA_DIR_HYPERSIM \
+ --resolution_hypersim=$RES_HYPERSIM \
+ --train_data_dir_vkitti=$TRAIN_DATA_DIR_VKITTI \
+ --resolution_vkitti=$RES_VKITTI \
+ --prob_hypersim=$P_HYPERSIM \
+ --mix_dataset \
+ --random_flip \
+ --align_cam_normal \
+ --dataloader_num_workers=0 \
+ --train_batch_size=$BATCH_SIZE \
+ --gradient_accumulation_steps=$GAS \
+ --gradient_checkpointing \
+ --max_grad_norm=1 \
+ --seed=42 \
+ --max_train_steps=20000 \
+ --learning_rate=3e-05 \
+ --lr_scheduler="constant" --lr_warmup_steps=0 \
+ --task_name=$TASK_NAME \
+ --timestep=$TIMESTEP \
+ --validation_images=$VALIDATION_IMAGES \
+ --validation_steps=$VAL_STEP \
+ --checkpointing_steps=$VAL_STEP \
+ --base_test_data_dir=$BASE_TEST_DATA_DIR \
+ --output_dir=$OUTPUT_DIR \
+ --resume_from_checkpoint="latest"
\ No newline at end of file
diff --git a/Lotus/utils/depth2normal.py b/Lotus/utils/depth2normal.py
new file mode 100644
index 0000000000000000000000000000000000000000..2a02ea773805d636a75bbdbef6c1d90b66c714cf
--- /dev/null
+++ b/Lotus/utils/depth2normal.py
@@ -0,0 +1,145 @@
+from PIL import Image
+import numpy as np
+import matplotlib.pyplot as plt
+import torch
+import cv2
+import argparse
+import os
+import numpy as np
+from tqdm import tqdm
+
+from utils.projection import intrins_to_intrins_inv, get_cam_coords
+from utils.visualize import normal_to_rgb
+from utils.d2n.plane_svd import Depth2normal as d2n_svd
+
+def count_data(root_dir, scenes):
+ count = 0
+ # Walk through all directories and files in the root directory
+ for scene in scenes:
+ for dirpath, dirnames, filenames in os.walk(root_dir):
+ # Filter files that end with the given suffix
+ for filename in filenames:
+ if filename.startswith("depth") and f'Scene{scene}' in dirpath:
+ count += 1
+ return count
+
+def args_parser():
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--data_path", required=True)
+ parser.add_argument("--depth_min", type=float, default=1e-3)
+ parser.add_argument("--depth_max", type=float, default=80.0)
+ parser.add_argument("--batch_size", type=int, default=4)
+ parser.add_argument("--scenes", type=str, nargs="+",
+ default=['01', '02', '06', '18', '20'])
+
+ return parser.parse_args()
+
+if __name__ == "__main__":
+
+ args = args_parser()
+ cuda_avail = torch.cuda.is_available()
+ device = torch.device("cuda" if cuda_avail else "cpu")
+
+ data_path = args.data_path
+ depth_min = args.depth_min
+ depth_max = args.depth_max
+ batch_size = args.batch_size
+
+ # scenes = ['01', '02', '06', '18', '20']
+ scenes = args.scenes
+ print(f"Processing scenes: {scenes}. ")
+
+ num_data = count_data(data_path, scenes)
+ print(f'Total number of data: {num_data}. ')
+
+ conditions = [
+ '15-deg-left', '15-deg-right', '30-deg-left', '30-deg-right', 'clone',
+ 'fog', 'morning', 'overcast', 'rain', 'sunset'
+ ]
+ cameras = ['0', '1']
+ # SceneX/Y/frames/depth/Camera_Z/depth_%05d.png
+ # SceneX/Y/intrinsic.txt
+
+ pbar = tqdm(total=num_data)
+
+ for scene in scenes:
+ for cond in conditions:
+ intrinsic_file = os.path.join(data_path,f'Scene{scene}/{cond}/intrinsic.txt')
+ with open(intrinsic_file, 'r') as file:
+ lines = file.readlines()
+ frames_x_cameras = len(lines)-1
+ intrinsics = np.zeros((frames_x_cameras//len(cameras), len(cameras),4))
+ for line in lines[1:]:
+ line = line.strip().split(" ")
+ frame_id = int(line[0])
+ camera_id = int(line[1])
+ k_00 = float(line[2])
+ k_11 = float(line[3])
+ k_02 = float(line[4])
+ k_12 = float(line[5])
+ intrinsics[frame_id][camera_id] = np.array([k_00, k_11, k_02, k_12])
+
+ for cam in cameras:
+ depth_dir = os.path.join(data_path, f'Scene{scene}/{cond}/frames/depth/Camera_{cam}')
+ depth_files = os.listdir(depth_dir)
+
+ num_batch = len(depth_files) // batch_size
+ batches = [batch_size]*num_batch
+ res = len(depth_files) % batch_size
+ if res > 0:
+ num_batch += 1
+ batches += [res]
+
+ for idx_b, batch in enumerate(batches):
+
+ depth_batch = []
+ intrins_inv_batch = []
+ depth_path_batch = []
+
+ for i in range(batch):
+ depth_file_idx = idx_b * batch_size + i
+ depth_file = depth_files[depth_file_idx]
+
+ depth_path = os.path.join(depth_dir, depth_file)
+ depth_path_batch.append(depth_path)
+
+ depth = cv2.imread(depth_path, cv2.IMREAD_ANYCOLOR | cv2.IMREAD_ANYDEPTH)
+ depth = depth / 100 # cm -> m
+ depth = depth[:, :, None] # (H, W, 1)
+ depth = torch.from_numpy(depth).permute(2, 0, 1).unsqueeze(0) # (1, 1, H, W)
+ depth = depth.to(device)
+ depth_batch.append(depth)
+
+ frame_id = int(depth_file.split(".")[0].split("_")[-1])
+ k_00 = intrinsics[frame_id][int(cam)][0]
+ k_11 = intrinsics[frame_id][int(cam)][1]
+ k_02 = intrinsics[frame_id][int(cam)][2]
+ k_12 = intrinsics[frame_id][int(cam)][3]
+ intrins = np.array([
+ [k_00, 0, k_02],
+ [0, k_11, k_12],
+ [0, 0, 1 ]
+ ])
+ intrins_inv = intrins_to_intrins_inv(intrins)
+ intrins_inv = torch.from_numpy(intrins_inv).unsqueeze(0).to(device)
+ intrins_inv_batch.append(intrins_inv)
+
+ depth_batch = torch.cat(depth_batch, dim=0)
+ intrins_inv_batch = torch.cat(intrins_inv_batch, dim=0)
+
+ points = get_cam_coords(intrins_inv_batch, depth_batch)
+
+ with torch.no_grad():
+ D2N = d2n_svd(d_min=depth_min, d_max=depth_max, k=5, d=1, gamma=0.05, min_nghbr=4)
+ normal, valid_mask = D2N(points)
+ normal_rgb = normal_to_rgb(normal, valid_mask)
+ for i in range(batch):
+ norm_rgb = normal_rgb[i]
+ norm_rgb = Image.fromarray(norm_rgb, "RGB")
+
+ norm_rgb_save_path = depth_path_batch[i].replace("depth",'normal')
+ os.makedirs(os.path.dirname(norm_rgb_save_path), exist_ok=True)
+ norm_rgb.save(norm_rgb_save_path)
+
+ pbar.update(batch)
+ pbar.close()
\ No newline at end of file
diff --git a/Lotus/utils/depth2normal.sh b/Lotus/utils/depth2normal.sh
new file mode 100644
index 0000000000000000000000000000000000000000..91be0dd05295e96df111b595ca65ddf1f5317f3d
--- /dev/null
+++ b/Lotus/utils/depth2normal.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+export PYTHONPATH=$PYTHONPATH:$PWD
+
+CUDA_VISIBLE_DEVICES=1 python utils/depth2normal.py \
+ --data_path $PATH_TO_VKITTI_DATA \
+ --batch_size 10 \
+ --scenes 01 02 06 18 20
\ No newline at end of file
diff --git a/Lotus/utils/hypersim_dataset.py b/Lotus/utils/hypersim_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..926cc90fd10fe5ab86b24372e35192f330bcc550
--- /dev/null
+++ b/Lotus/utils/hypersim_dataset.py
@@ -0,0 +1,225 @@
+from datasets import Dataset as Dataset_hf
+import os
+import h5py
+import numpy as np
+from PIL import Image
+import torch
+import torch.nn.functional as F
+import random
+from torchvision import transforms
+
+def hypersim_distance_to_depth(npyDistance):
+ intWidth=1024
+ intHeight=768
+ fltFocal=886.81
+
+ npyImageplaneX = np.linspace((-0.5 * intWidth) + 0.5, (0.5 * intWidth) - 0.5, intWidth).reshape(1, intWidth).repeat(intHeight, 0).astype(np.float32)[:, :, None]
+ npyImageplaneY = np.linspace((-0.5 * intHeight) + 0.5, (0.5 * intHeight) - 0.5, intHeight).reshape(intHeight, 1).repeat(intWidth, 1).astype(np.float32)[:, :, None]
+ npyImageplaneZ = np.full([intHeight, intWidth, 1], fltFocal, np.float32)
+ npyImageplane = np.concatenate([npyImageplaneX, npyImageplaneY, npyImageplaneZ], 2)
+
+ npyDepth = npyDistance / np.linalg.norm(npyImageplane, 2, 2) * fltFocal
+
+ return npyDepth
+
+def creat_uv_mesh(H, W):
+ y, x = np.meshgrid(np.arange(0, H, dtype=np.float64), np.arange(0, W, dtype=np.float64), indexing='ij')
+ meshgrid = np.stack((x,y))
+ ones = np.ones((1,H*W), dtype=np.float64)
+ xy = meshgrid.reshape(2, -1)
+ return np.concatenate([xy, ones], axis=0)
+
+# Some Hypersim normals are not properly oriented towards the camera.
+ # The align_normals and creat_uv_mesh functions are from GeoWizard
+ # https://github.com/fuxiao0719/GeoWizard/blob/5ff496579c6be35d9d86fe4d0760a6b5e6ba25c5/geowizard/training/dataloader/file_io.py#L79
+def align_normals(normal, depth, K, H, W):
+ '''
+ Orientation of surface normals in hypersim is not always consistent
+ see https://github.com/apple/ml-hypersim/issues/26
+ '''
+ # inv K
+ K = np.array([[K[0], 0, K[2]],
+ [ 0, K[1], K[3]],
+ [ 0, 0, 1]])
+ inv_K = np.linalg.inv(K)
+ # reprojection depth to camera points
+ xy = creat_uv_mesh(H, W)
+ points = np.matmul(inv_K[:3, :3], xy).reshape(3, H, W)
+ points = depth * points
+ points = points.transpose((1,2,0))
+ # align normal
+ orient_mask = np.sum(normal * points, axis=2) < 0
+ normal[orient_mask] *= -1
+ return normal
+
+class HypersimImageDepthNormalTransform:
+ def __init__(self, size, random_flip, norm_type, truncnorm_min=0.02, align_cam_normal=False) -> None:
+ self.size = size
+ self.random_flip = random_flip
+ self.norm_type = norm_type
+ self.truncnorm_min = truncnorm_min
+ self.truncnorm_max = 1 - truncnorm_min
+ self.d_max = 65
+ self.align_cam_normal = align_cam_normal
+
+ def to_tensor_and_resize_normal(self, normal):
+ # to tensor
+ normal = torch.from_numpy(normal).permute(2,0,1).unsqueeze(0)
+ # resize
+ normal = F.interpolate(normal, size=self.size, mode='nearest').squeeze()
+ # shape = 3 * 768 * 1024
+ return normal
+
+ def __call__(self, image, depth, normal):
+ # convert the inward normals to outward normals
+ normal[:,:,0] *= -1
+ if self.align_cam_normal:
+ # align normal towards camera
+ H, W = normal.shape[:2]
+ normal = align_normals(normal, depth, [886.81, 886.81, W/2, H/2], H, W)
+
+ # resize
+ image = transforms.functional.resize(image, self.size, interpolation=Image.BILINEAR)
+
+ depth = torch.from_numpy(depth).unsqueeze(0).unsqueeze(0)
+ depth = F.interpolate(depth, size=self.size, mode='nearest').squeeze()
+
+ normal = self.to_tensor_and_resize_normal(normal)
+
+ # random flip
+ if self.random_flip and random.random() > 0.5:
+ image = transforms.functional.hflip(image)
+ depth = torch.flip(depth, [-1])
+ normal = torch.flip(normal, [-1])
+ normal[0,:,:] = - normal[0,:,:] # Flip x-component of normal map
+
+ # to_tensor and normalize
+ # image
+ image = transforms.ToTensor()(image)
+ image = transforms.Normalize([0.5], [0.5])(image)
+
+ # depth
+ if self.norm_type == 'instnorm':
+ dmin = depth.min()
+ dmax = depth.max()
+ depth_norm = ((depth - dmin)/(dmax - dmin + 1e-5) - 0.5) * 2.0
+ elif self.norm_type == 'truncnorm':
+ # refer to Marigold
+ dmin = torch.quantile(depth, self.truncnorm_min)
+ dmax = torch.quantile(depth, self.truncnorm_max)
+ depth_norm = ((depth - dmin)/(dmax - dmin + 1e-5) - 0.5) * 2.0
+ elif self.norm_type == 'perscene_norm':
+ depth_norm = ((depth / self.d_max) - 0.5 ) * 2.0
+ elif self.norm_type == "disparity":
+ disparity = 1 / depth
+ disparity_min = disparity.min()
+ disparity_max = disparity.max()
+ disparity_norm = ((disparity - disparity_min)/(disparity_max - disparity_min + 1e-5) - 0.5) * 2
+ depth_norm = disparity_norm
+ elif self.norm_type == "trunc_disparity":
+ disparity = 1 / depth
+ disparity_min = torch.quantile(disparity, self.truncnorm_min)
+ disparity_max = torch.quantile(disparity, self.truncnorm_max)
+ disparity_norm = ((disparity - disparity_min)/(disparity_max - disparity_min + 1e-5) - 0.5) * 2
+ depth_norm = disparity_norm
+ else:
+ raise TypeError(f"Not supported normalization type: {self.norm_type}. ")
+
+ depth_norm = depth_norm.clip(-1,1)
+ depth = depth_norm.unsqueeze(0).repeat(3,1,1)
+
+ # normal
+ normal = normal.clip(-1, 1)
+
+ return image, depth, normal
+
+def get_hypersim_dataset_depth_normal(data_dir, resolution, random_flip, norm_type, truncnorm_min, align_cam_normal=False, split='train'):
+ split_dir = os.path.join(data_dir, split)
+ # load data and construct the dataset
+ data_dict = {
+ "image": [],
+ "depth": [],
+ "normal": []
+ }
+ for root, dirs, files in os.walk(split_dir):
+ for file in files:
+ if file.endswith("tonemap.jpg"):
+ image_path = os.path.join(root, file)
+ depth_path = image_path.replace("final_preview", "geometry_hdf5").replace("tonemap.jpg", "depth_meters.hdf5")
+ normal_path = image_path.replace("final_preview", "geometry_hdf5").replace("tonemap.jpg", "normal_cam.hdf5")
+ data_dict["image"].append(image_path)
+ data_dict["depth"].append(depth_path)
+ data_dict["normal"].append(normal_path)
+ dataset = Dataset_hf.from_dict(data_dict)
+
+ # define dataset transform
+ column_names = dataset.column_names
+
+ image_column = column_names[0]
+ depth_column = column_names[1]
+ normal_colum = column_names[2]
+
+ w, h = Image.open(dataset[0][image_column]).size
+ if h > w:
+ new_w = resolution
+ new_h = int(resolution * h / w)
+ else:
+ new_h = resolution
+ new_w = int(resolution * w / h)
+
+ transforms = HypersimImageDepthNormalTransform((new_h, new_w), random_flip, norm_type, truncnorm_min, align_cam_normal)
+
+ def preprocess_hypersim(examples):
+ # convert image to RGB
+ images = [Image.open(image).convert("RGB") for image in examples[image_column]]
+ depths = [] # List[np.array()]
+ normals = [] # List[np.array()]
+ for depth_file in examples[depth_column]:
+ # convert distance to depth
+ depth_fd = h5py.File(depth_file, 'r')
+ dist = np.array(depth_fd['dataset'])
+ depths.append(hypersim_distance_to_depth(dist))
+ for normal_file in examples[normal_colum]:
+ normal_fd = h5py.File(normal_file, 'r')
+ dist = np.array(normal_fd['dataset'])
+ normals.append(dist)
+ # transform image and annotation simutanueously.
+ examples["pixel_values"] = []
+ examples["depth_values"] = []
+ examples["normal_values"] = []
+
+ for img, dep, nor in zip(images, depths, normals):
+ train_img, train_dep, train_nor = transforms(img, dep, nor)
+ examples["pixel_values"].append(train_img)
+ examples["depth_values"].append(train_dep)
+ examples["normal_values"].append(train_nor)
+
+ return examples
+
+ # define collate function
+ def collate_fn_hypersim(examples):
+ pixel_values = torch.stack([example["pixel_values"] for example in examples])
+ pixel_values = pixel_values.to(memory_format=torch.contiguous_format).float()
+
+ depth_values = torch.stack([example["depth_values"] for example in examples])
+ depth_values = depth_values.to(memory_format=torch.contiguous_format).float()
+
+ normal_values = torch.stack([example["normal_values"] for example in examples])
+ normal_values = normal_values.to(memory_format=torch.contiguous_format).float()
+
+ image_paths = [example[image_column] for example in examples]
+ depth_paths = [example[depth_column] for example in examples]
+ normal_paths = [example[normal_colum] for example in examples]
+
+ example_dict = {
+ "pixel_values": pixel_values,
+ "depth_values": depth_values,
+ "normal_values": normal_values,
+ "image_pathes": image_paths,
+ "depth_paths": depth_paths,
+ "normal_paths": normal_paths
+ }
+
+ return example_dict
+
+ return dataset, preprocess_hypersim, collate_fn_hypersim
diff --git a/Lotus/utils/image_utils.py b/Lotus/utils/image_utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..4721fabf708537e8dc40c0a89bb8e76a2067cd3b
--- /dev/null
+++ b/Lotus/utils/image_utils.py
@@ -0,0 +1,158 @@
+from PIL import Image
+import matplotlib
+import numpy as np
+
+from typing import List, Union
+import PIL.Image
+
+import torch
+from torchvision.transforms import InterpolationMode
+from torchvision.transforms.functional import resize
+
+def concatenate_images(*image_lists):
+ # Ensure at least one image list is provided
+ if not image_lists or not image_lists[0]:
+ raise ValueError("At least one non-empty image list must be provided")
+
+ # Determine the maximum width of any single row and the total height
+ max_width = 0
+ total_height = 0
+ row_widths = []
+ row_heights = []
+
+ # Compute dimensions for each row
+ for image_list in image_lists:
+ if image_list: # Ensure the list is not empty
+ width = sum(img.width for img in image_list)
+ height = image_list[0].height # Assuming all images in the list have the same height
+ max_width = max(max_width, width)
+ total_height += height
+ row_widths.append(width)
+ row_heights.append(height)
+
+ # Create a new image to concatenate everything into
+ new_image = Image.new('RGB', (max_width, total_height))
+
+ # Concatenate each row of images
+ y_offset = 0
+ for i, image_list in enumerate(image_lists):
+ x_offset = 0
+ for img in image_list:
+ new_image.paste(img, (x_offset, y_offset))
+ x_offset += img.width
+ y_offset += row_heights[i] # Move the offset down to the next row
+
+ return new_image
+
+
+def colorize_depth_map(depth, mask=None, reverse_color=False):
+ cm = matplotlib.colormaps["Spectral"]
+ # normalize
+ depth = ((depth - depth.min()) / (depth.max() - depth.min()))
+ # colorize
+ if reverse_color:
+ img_colored_np = cm(1 - depth, bytes=False)[:, :, 0:3] # Invert the depth values before applying colormap
+ else:
+ img_colored_np = cm(depth, bytes=False)[:, :, 0:3] # (h,w,3)
+
+ depth_colored = (img_colored_np * 255).astype(np.uint8)
+ if mask is not None:
+ masked_image = np.zeros_like(depth_colored)
+ masked_image[mask.numpy()] = depth_colored[mask.numpy()]
+ depth_colored_img = Image.fromarray(masked_image)
+ else:
+ depth_colored_img = Image.fromarray(depth_colored)
+ return depth_colored_img
+
+
+def resize_max_res(
+ img: torch.Tensor,
+ max_edge_resolution: int,
+ resample_method: InterpolationMode = InterpolationMode.BILINEAR,
+) -> torch.Tensor:
+ """
+ Resize image to limit maximum edge length while keeping aspect ratio.
+
+ Args:
+ img (`torch.Tensor`):
+ Image tensor to be resized. Expected shape: [B, C, H, W]
+ max_edge_resolution (`int`):
+ Maximum edge length (pixel).
+ resample_method (`PIL.Image.Resampling`):
+ Resampling method used to resize images.
+
+ Returns:
+ `torch.Tensor`: Resized image.
+ """
+ assert 4 == img.dim(), f"Invalid input shape {img.shape}"
+
+ original_height, original_width = img.shape[-2:]
+ downscale_factor = min(
+ max_edge_resolution / original_width, max_edge_resolution / original_height
+ )
+
+ new_width = int(original_width * downscale_factor)
+ new_height = int(original_height * downscale_factor)
+
+ resized_img = resize(img, (new_height, new_width), resample_method, antialias=True)
+ return resized_img
+
+def resize_back(
+ img: Union[torch.Tensor, np.ndarray, PIL.Image.Image, List[PIL.Image.Image]],
+ target_size: Union[int, tuple[int, int]],
+ resample_method: Union[InterpolationMode, int] = InterpolationMode.BILINEAR,
+) -> Union[torch.Tensor, np.ndarray, PIL.Image.Image, List[PIL.Image.Image]]:
+ """
+ Resize image to target size.
+
+ Args:
+ img (`Union[torch.Tensor, np.ndarray, PIL.Image.Image, List[PIL.Image.Image]]`):
+ Image to be resized.
+ target_size (`Union[int, tuple[int, int]]`):
+ Target size of the resized image.
+ resample_method (`Union[InterpolationMode, int]`):
+ Resampling method used to resize images.
+
+ Returns:
+ `Union[torch.Tensor, np.ndarray, PIL.Image.Image, List[PIL.Image.Image]]`: Resized image.
+ """
+ if isinstance(img, torch.Tensor): # [B, C, H, W]
+ resized_img = resize(img, target_size, resample_method, antialias=True)
+ if isinstance(img, np.ndarray): # [B, H, W, C]
+ # Conver to Torch.Tensor
+ img = torch.tensor(img).permute(0, 3, 1, 2)
+ resized_img = resize(img, target_size, resample_method, antialias=True)
+ # Convert back to np.ndarray
+ resized_img = resized_img.permute(0, 2, 3, 1).numpy()
+ elif isinstance(img, PIL.Image.Image):
+ target_size = (target_size[1], target_size[0]) # PIL uses (width, height)
+ resized_img = img.resize(target_size, resample_method)
+ elif isinstance(img, list) and all(isinstance(i, PIL.Image.Image) for i in img):
+ target_size = (target_size[1], target_size[0]) # PIL uses (width, height)
+ resized_img = [i.resize(target_size, resample_method) for i in img]
+ return resized_img
+
+def get_pil_resample_method(method_str: str) -> int:
+ resample_method_dict = {
+ "bilinear": Image.BILINEAR,
+ "bicubic": Image.BICUBIC,
+ "nearest": Image.NEAREST,
+ }
+ resample_method = resample_method_dict.get(method_str, None)
+ if resample_method is None:
+ raise ValueError(f"Unknown resampling method: {resample_method}")
+ else:
+ return resample_method
+
+def get_tv_resample_method(method_str: str) -> InterpolationMode:
+ resample_method_dict = {
+ "bilinear": InterpolationMode.BILINEAR,
+ "bicubic": InterpolationMode.BICUBIC,
+ "nearest": InterpolationMode.NEAREST_EXACT,
+ "nearest-exact": InterpolationMode.NEAREST_EXACT,
+ }
+ resample_method = resample_method_dict.get(method_str, None)
+ if resample_method is None:
+ raise ValueError(f"Unknown resampling method: {resample_method}")
+ else:
+ return resample_method
diff --git a/Lotus/utils/process_hypersim.py b/Lotus/utils/process_hypersim.py
new file mode 100644
index 0000000000000000000000000000000000000000..d1e147a4683703961d9aa0315f14c5aa2310be45
--- /dev/null
+++ b/Lotus/utils/process_hypersim.py
@@ -0,0 +1,119 @@
+import pandas as pd
+import os
+import shutil
+import argparse
+import json
+import h5py
+import numpy as np
+from tqdm import tqdm
+
+def has_nan(hdf5_path):
+ """
+ Check if the HDF5 file contains any NaN values.
+ """
+ with h5py.File(hdf5_path, 'r') as file:
+ for key in file.keys():
+ if np.isnan(file[key][:]).any():
+ return True
+ return False
+
+def copy_images_and_depths(df, src_path, trg_path, filter_nan=False):
+ """
+ Copy images and depth files that do not contain NaN values in depth data.
+ """
+ print(f"Filtering NaN values: {filter_nan}")
+ metadata = []
+ for index, row in tqdm(df.iterrows(), total=df.shape[0], desc="Processing images and depths"):
+ image_file_name = f"frame.{row['frame_id']:04d}.tonemap.jpg"
+ depth_file_name = f"frame.{row['frame_id']:04d}.depth_meters.hdf5"
+ normal_file_name = f"frame.{row['frame_id']:04d}.normal_cam.hdf5"
+ # normal_file_name_bump = f"frame.{row['frame_id']:04d}.normal_bump_cam.hdf5"
+
+ src_image_path = os.path.join(src_path, row['scene_name'], 'images', f'scene_{row["camera_name"]}_final_preview', image_file_name)
+ src_depth_path = os.path.join(src_path, row['scene_name'], 'images', f'scene_{row["camera_name"]}_geometry_hdf5', depth_file_name)
+ src_normal_path = os.path.join(src_path, row['scene_name'], 'images', f'scene_{row["camera_name"]}_geometry_hdf5', normal_file_name)
+ # src_normal_bump_path = os.path.join(src_path, row['scene_name'], 'images', f'scene_{row["camera_name"]}_geometry_hdf5', normal_file_name_bump)
+
+ do_copy = True
+ if filter_nan:
+ if has_nan(src_depth_path): # Check if the depth file contains NaN
+ do_copy = False
+
+ if do_copy: # Check if the depth file contains NaN
+ trg_image_path = os.path.join(trg_path, row['scene_name'], 'images', f'scene_{row["camera_name"]}_final_preview', image_file_name)
+ trg_depth_path = os.path.join(trg_path, row['scene_name'], 'images', f'scene_{row["camera_name"]}_geometry_hdf5', depth_file_name)
+ trg_normal_path = os.path.join(trg_path, row['scene_name'], 'images', f'scene_{row["camera_name"]}_geometry_hdf5', normal_file_name)
+ # trg_normal_bump_path = os.path.join(trg_path, row['scene_name'], 'images', f'scene_{row["camera_name"]}_geometry_hdf5', normal_file_name_bump)
+
+ os.makedirs(os.path.dirname(trg_image_path), exist_ok=True)
+ os.makedirs(os.path.dirname(trg_depth_path), exist_ok=True)
+ os.makedirs(os.path.dirname(trg_normal_path), exist_ok=True)
+ # os.makedirs(os.path.dirname(trg_normal_bump_path), exist_ok=True)
+
+ shutil.copy(src_image_path, trg_image_path)
+ shutil.copy(src_depth_path, trg_depth_path)
+ shutil.copy(src_normal_path, trg_normal_path)
+ # shutil.copy(src_normal_bump_path, trg_normal_bump_path)
+
+ metadata.append({
+ "file_name": os.path.join(row['scene_name'], 'images', f'scene_{row["camera_name"]}_final_preview', image_file_name),
+ "depth": os.path.join(row['scene_name'], 'images', f'scene_{row["camera_name"]}_geometry_hdf5', depth_file_name),
+ "normal_cam": os.path.join(row['scene_name'], 'images', f'scene_{row["camera_name"]}_geometry_hdf5', normal_file_name),
+ # "normal_bump_cam": os.path.join(row['scene_name'], 'images', f'scene_{row["camera_name"]}_geometry_hdf5', normal_file_name_bump),
+ })
+ # print(f"Copied {src_image_path} and {src_depth_path} to {trg_image_path} and {trg_depth_path}")
+ # print(f"Copied {src_normal_path} and {src_normal_bump_path} to {trg_normal_path} and {trg_normal_bump_path}")
+
+ return metadata
+
+def save_metadata(metadata, trg_path):
+ """
+ Save metadata to a JSONL file.
+ """
+ metadata_path = os.path.join(trg_path, 'metadata.jsonl')
+ with open(metadata_path, 'w') as f:
+ for meta in metadata:
+ json_line = json.dumps(meta)
+ f.write(json_line + '\n')
+ print(f"Metadata saved to {metadata_path}")
+
+def parse_args():
+ """
+ Parse command line arguments.
+ """
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--csv_path", required=True)
+ parser.add_argument("--src_path", required=True)
+ parser.add_argument("--trg_path", required=True)
+ parser.add_argument("--split", default="train")
+ parser.add_argument("--filter_nan", action="store_true")
+ return parser.parse_args()
+
+'''
+Example Usage:
+ python utils/process_hypersim.py \
+ --csv_path=datasets/hypersim_raw/metadata_images_split_scene_v1.csv \
+ --src_path=datasets/hypersim_raw/downloads \
+ --trg_path=datasets/hypersim_filtered \
+ --split='train' \
+ --filter_nan
+'''
+
+if __name__ == "__main__":
+ args = parse_args()
+
+ # Load the CSV file
+ data = pd.read_csv(args.csv_path)
+
+ # Filter the data for images that are included in public release and are part of the target split
+ split_data = data[(data['included_in_public_release'] == True) & (data['split_partition_name'] == args.split)]
+
+ # Prepare paths
+ src_base_path = args.src_path
+ trg_base_path = os.path.join(args.trg_path, args.split)
+
+ # Process and copy files
+ metadata = copy_images_and_depths(split_data, src_base_path, trg_base_path, args.filter_nan)
+
+ # Save metadata
+ save_metadata(metadata, trg_base_path)
diff --git a/Lotus/utils/process_hypersim.sh b/Lotus/utils/process_hypersim.sh
new file mode 100644
index 0000000000000000000000000000000000000000..df419d868b023a0817b0214bc5d28f36f5c2df24
--- /dev/null
+++ b/Lotus/utils/process_hypersim.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+python utils/process_hypersim.py \
+ --csv_path=$PATH_TO_HYPERSIM_SPLIT_CSV \
+ --src_path=$PATH_TO_RAW_HYPERSIM_DATA \
+ --trg_path=$PATH_TO_HYPERSIM_DATA \
+ --split='train' \
+ --filter_nan
diff --git a/Lotus/utils/projection.py b/Lotus/utils/projection.py
new file mode 100644
index 0000000000000000000000000000000000000000..54078bfe5e871d314a1426fc89e25f9592d34ae9
--- /dev/null
+++ b/Lotus/utils/projection.py
@@ -0,0 +1,276 @@
+import numpy as np
+import torch
+import torch.nn.functional as F
+
+
+def intrins_zero_to(intrins):
+ """ add 0.5 to ensure top-left pixel is (0.5, 0.5)
+
+ NOTE: intrins should have the shape (..., 3, 3)
+ """
+ intrins[..., 0, 2] += 0.5
+ intrins[..., 1, 2] += 0.5
+ return intrins
+
+
+def intrins_to_zero(intrins):
+ """ subtract 0.5 to ensure top-left pixel is (0, 0)
+
+ NOTE: intrins should have the shape (..., 3, 3)
+ """
+ intrins[..., 0, 2] -= 0.5
+ intrins[..., 1, 2] -= 0.5
+ return intrins
+
+
+def intrins_crop(intrins,
+ crop_top: int = 0,
+ crop_left: int = 0):
+ """ update intrins after crop
+
+ NOTE: intrins should have the shape (..., 3, 3)
+ """
+ intrins[..., 0, 2] -= crop_left
+ intrins[..., 1, 2] -= crop_top
+ return intrins
+
+
+def intrins_resize(intrins,
+ ratio_H: float = 1.0,
+ ratio_W: float = 1.0):
+ """ update intrins after resize
+
+ NOTE: intrins should have the shape (..., 3, 3)
+ NOTE: top-left is (0,0)
+ """
+ intrins = intrins_zero_to(intrins)
+ intrins[..., 0, 0] *= ratio_W # fx
+ intrins[..., 0, 2] *= ratio_W # cx
+ intrins[..., 1, 1] *= ratio_H # fy
+ intrins[..., 1, 2] *= ratio_H # cy
+ intrins = intrins_to_zero(intrins)
+ return intrins
+
+
+def get_intrins(fx, fy, cx, cy, dtype=torch.float32, device='cpu'):
+ """ intrins from fx, fy, cx, cy
+
+ NOTE: top-left is (0,0)
+ """
+ intrins = torch.tensor([[ fx, 0.0, cx],
+ [0.0, fy, cy],
+ [0.0, 0.0, 1.0]], dtype=dtype, device=device)
+ intrins_inv = torch.tensor([[1/fx, 0.0, -cx/fx],
+ [ 0.0, 1/fy, -cy/fy],
+ [ 0.0, 0.0, 1.0]], dtype=dtype, device=device)
+ return intrins, intrins_inv
+
+
+def intrins_to_intrins_inv(intrins):
+ """ intrins to intrins_inv
+
+ NOTE: top-left is (0,0)
+ """
+ if torch.is_tensor(intrins):
+ intrins_inv = torch.zeros_like(intrins)
+ elif type(intrins) is np.ndarray:
+ intrins_inv = np.zeros_like(intrins)
+ else:
+ raise Exception('intrins should be torch tensor or numpy array')
+
+ intrins_inv[0, 0] = 1 / intrins[0, 0]
+ intrins_inv[0, 2] = - intrins[0, 2] / intrins[0, 0]
+ intrins_inv[1, 1] = 1 / intrins[1, 1]
+ intrins_inv[1, 2] = - intrins[1, 2] / intrins[1, 1]
+ intrins_inv[2, 2] = 1.0
+ return intrins_inv
+
+
+def intrins_from_fov(new_fov, H, W, dtype=torch.float32, device='cpu'):
+ """ define intrins based on field-of-view
+ principal point is assumed to be at the center
+
+ NOTE: new_fov should be in degrees
+ NOTE: top-left is (0,0)
+ """
+ new_fx = new_fy = (max(H, W) / 2.0) / np.tan(np.deg2rad(new_fov / 2.0))
+ new_cx = (W / 2.0) - 0.5
+ new_cy = (H / 2.0) - 0.5
+
+ new_intrins = torch.tensor([
+ [new_fx, 0, new_cx ],
+ [0, new_fy, new_cy ],
+ [0, 0, 1 ]
+ ], dtype=dtype, device=device)
+
+ return new_intrins
+
+
+def intrins_from_fov2(new_fov, H, W, cx, cy, dtype=torch.float32, device='cpu'):
+ """ define intrins based on field-of-view
+ principal point is assumed to be at (cx, cy)
+
+ NOTE: new_fov should be in degrees
+ NOTE: top-left is (0,0)
+ """
+ cx += 0.5
+ cy += 0.5
+
+ if W >= H:
+ x1 = W - cx
+ x2 = cx
+ else:
+ x1 = H - cy
+ x2 = cy
+
+ # use tan(x+y) = (tan(x) + tan(y)) / (1 – tan(x)tan(y))
+ A = np.tan(np.deg2rad(new_fov))
+ B = - (x1 + x2)
+ C = - np.tan(np.deg2rad(new_fov)) * x1 * x2
+ new_f = (-B + np.sqrt(B**2.0 - (4 * A * C))) / (2*A)
+
+ intrins = torch.tensor([[new_f, 0.0, cx-0.5],
+ [0.0, new_f, cy-0.5],
+ [0.0, 0.0, 1.0]], dtype=dtype, device=device)
+ return intrins
+
+
+def intrins_from_txt(intrins_path, dtype=torch.float32, device='cpu'):
+ """ define intrins based on txt
+ it should contain fx,fy,cx,cy - separated by commas
+
+ NOTE: top-left is (0,0)
+ """
+ with open(intrins_path, 'r') as f:
+ intrins_ = f.readlines()[0].split()[0].split(',')
+ intrins_ = [float(i) for i in intrins_]
+ fx, fy, cx, cy = intrins_
+
+ intrins = torch.tensor([
+ [fx, 0,cx],
+ [ 0,fy,cy],
+ [ 0, 0, 1]
+ ], dtype=dtype, device=device)
+
+ return intrins
+
+
+def get_fov(fx, fy, cx, cy, H, W):
+ """ compute horizontal and vertical field-of-view from intrins
+
+ NOTE: top-left is (0,0)
+ """
+ cx += 0.5
+ cy += 0.5
+ fov_x = np.rad2deg(np.arctan((W - cx) / fx) + np.arctan((cx) / fx))
+ fov_y = np.rad2deg(np.arctan((H - cy) / fy) + np.arctan((cy) / fy))
+ return fov_x, fov_y
+
+
+def get_ray_array(H, W, intrins, flatten=True):
+ """ get ray array
+ multiplying the output by per-pixel depth would give you the camera-coordinates of each pixel
+
+ NOTE: intrins should be a torch tensor of shape (B, 3, 3)
+ NOTE: top-left is (0,0)
+ """
+ assert torch.is_tensor(intrins) and intrins.ndim == 3
+ B, _, _ = intrins.shape
+
+ fx = intrins[:, 0, 0].unsqueeze(-1).unsqueeze(-1) # (B, 1, 1)
+ fy = intrins[:, 1, 1].unsqueeze(-1).unsqueeze(-1) # (B, 1, 1)
+ cx = intrins[:, 0, 2].unsqueeze(-1).unsqueeze(-1) # (B, 1, 1)
+ cy = intrins[:, 1, 2].unsqueeze(-1).unsqueeze(-1) # (B, 1, 1)
+
+ x_range = torch.cat([torch.arange(W, dtype=intrins.dtype, device=intrins.device).view(1, 1, W)] * H, axis=1).repeat(B,1,1) # (B, H, W)
+ y_range = torch.cat([torch.arange(H, dtype=intrins.dtype, device=intrins.device).view(1, H, 1)] * W, axis=2).repeat(B,1,1) # (B, H, W)
+
+ # B, 3, H, W
+ ray_array = torch.ones((B, 3, H, W), dtype=intrins.dtype, device=intrins.device)
+ ray_array[:, 0, :, :] = (x_range - cx) / fx
+ ray_array[:, 1, :, :] = (y_range - cy) / fy
+
+ if flatten:
+ ray_array = ray_array.view(B, 3, H*W)
+
+ return ray_array
+
+
+def get_cam_coords(intrins_inv, depth):
+ """ camera coordinates from intrins_inv and depth
+
+ NOTE: intrins_inv should be a torch tensor of shape (B, 3, 3)
+ NOTE: depth should be a torch tensor of shape (B, 1, H, W)
+ NOTE: top-left is (0,0)
+ """
+ assert torch.is_tensor(intrins_inv) and intrins_inv.ndim == 3
+ assert torch.is_tensor(depth) and depth.ndim == 4
+ assert intrins_inv.dtype == depth.dtype
+ assert intrins_inv.device == depth.device
+ B, _, H, W = depth.size()
+
+ u_range = torch.arange(W, dtype=depth.dtype, device=depth.device).view(1, W).expand(H, W) # (H, W)
+ v_range = torch.arange(H, dtype=depth.dtype, device=depth.device).view(H, 1).expand(H, W) # (H, W)
+ ones = torch.ones(H, W, dtype=depth.dtype, device=depth.device)
+ pixel_coords = torch.stack((u_range, v_range, ones), dim=0).unsqueeze(0).repeat(B,1,1,1) # (B, 3, H, W)
+ pixel_coords = pixel_coords.view(B, 3, H*W) # (B, 3, H*W)
+
+ cam_coords = intrins_inv.bmm(pixel_coords).view(B, 3, H, W)
+ cam_coords = cam_coords * depth
+ return cam_coords
+
+
+def pix_to_src_coords(src_pix, new_H, new_W, orig_H, orig_W):
+ """ src_pix: homogeneous pixel coordinates
+ src_coords: used for F.grid_sample (align_corners=False)
+ """
+ src_pix = src_pix[:2, :] / src_pix[2:, :]
+
+ src_coords = torch.FloatTensor(1, new_H, new_W, 2).fill_(0)
+ src_coords[0, :, :, 0] = src_pix[0, :].reshape(new_H, new_W) + 0.5
+ src_coords[0, :, :, 1] = src_pix[1, :].reshape(new_H, new_W) + 0.5
+ v_center = orig_H / 2.
+ u_center = orig_W / 2.
+ src_coords[:, :, :, 0] = (src_coords[:, :, :, 0] - u_center) / u_center
+ src_coords[:, :, :, 1] = (src_coords[:, :, :, 1] - v_center) / v_center
+
+ src_coords[src_coords > 2.0] = 2.0
+ src_coords[src_coords < -2.0] = -2.0
+ src_coords[torch.isinf(src_coords)] = 2.0
+ src_coords[torch.isnan(src_coords)] = 2.0
+ return src_coords
+
+
+def zbuffer_to_radial(zbuffer, intrins, H, W):
+ """ convert zbuffer to radial
+ radial: Euclidean distance from the camera center
+
+ NOTE: zbuffer should be a torch tensor of shape (B, 1, H, W)
+ NOTE: intrins should be a torch tensor of shape (B, 3, 3)
+ NOTE: top-left is (0,0)
+ """
+ assert torch.is_tensor(zbuffer) and zbuffer.ndim == 4
+ assert torch.is_tensor(intrins) and intrins.ndim == 3
+
+ ray_array = get_ray_array(H, W, intrins, flatten=False) # (B, 3, H, W)
+ cam_coord = ray_array * zbuffer
+ radial = torch.linalg.norm(cam_coord, dim=1, keepdim=True)
+ return radial
+
+
+def radial_to_zbuffer(radial, intrins, H, W):
+ """ convert radial to zbuffer
+ radial: Euclidean distance from the camera center
+
+ NOTE: radial should be a torch tensor of shape (B, 1, H, W)
+ NOTE: intrins should be a torch tensor of shape (B, 3, 3)
+ NOTE: top-left is (0,0)
+ """
+ assert torch.is_tensor(radial) and radial.ndim == 4
+ assert torch.is_tensor(intrins) and intrins.ndim == 3
+
+ ray_array = get_ray_array(H, W, intrins, flatten=False) # (B, 3, H, W)
+ ray_norm = torch.linalg.norm(ray_array, dim=1, keepdim=True)
+ zbuffer = radial / ray_norm
+ return zbuffer
+
diff --git a/Pixel-Perfect-Depth/LICENSE b/Pixel-Perfect-Depth/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64
--- /dev/null
+++ b/Pixel-Perfect-Depth/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/Pixel-Perfect-Depth/README.md b/Pixel-Perfect-Depth/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..c40482f4d5befe932b66392d56677f5e9f2a34c0
--- /dev/null
+++ b/Pixel-Perfect-Depth/README.md
@@ -0,0 +1,130 @@
+