From 696bcee65b1af1029efa4a860bd09985c121cd7c Mon Sep 17 00:00:00 2001 From: "mingjiang.li" Date: Fri, 13 Sep 2024 15:43:45 +0800 Subject: [PATCH 1/5] move yolov6 to deepsparkhub-GPL Signed-off-by: mingjiang.li --- cv/detection/yolov6/pytorch/.gitignore | 119 -- cv/detection/yolov6/pytorch/LICENSE | 674 --------- cv/detection/yolov6/pytorch/README.md | 36 +- .../yolov6/pytorch/configs/base/README.md | 26 - .../yolov6/pytorch/configs/base/README_cn.md | 25 - .../pytorch/configs/base/yolov6l_base.py | 67 - .../configs/base/yolov6l_base_finetune.py | 63 - .../pytorch/configs/base/yolov6m_base.py | 67 - .../configs/base/yolov6m_base_finetune.py | 67 - .../pytorch/configs/base/yolov6n_base.py | 66 - .../configs/base/yolov6n_base_finetune.py | 66 - .../pytorch/configs/base/yolov6s_base.py | 68 - .../configs/base/yolov6s_base_finetune.py | 68 - .../configs/experiment/eval_640_repro.py | 79 -- .../experiment/yolov6n_with_eval_params.py | 76 - .../configs/experiment/yolov6s_csp_scaled.py | 57 - .../pytorch/configs/experiment/yolov6t.py | 55 - .../configs/experiment/yolov6t_csp_scaled.py | 57 - .../configs/experiment/yolov6t_finetune.py | 55 - .../yolov6/pytorch/configs/mbla/README.md | 28 - .../yolov6/pytorch/configs/mbla/README_cn.md | 26 - .../pytorch/configs/mbla/yolov6l_mbla.py | 70 - .../configs/mbla/yolov6l_mbla_finetune.py | 70 - .../pytorch/configs/mbla/yolov6m_mbla.py | 70 - .../configs/mbla/yolov6m_mbla_finetune.py | 70 - .../pytorch/configs/mbla/yolov6s_mbla.py | 70 - .../configs/mbla/yolov6s_mbla_finetune.py | 70 - .../pytorch/configs/mbla/yolov6x_mbla.py | 70 - .../configs/mbla/yolov6x_mbla_finetune.py | 70 - .../yolov6/pytorch/configs/qarepvgg/README.md | 26 - .../pytorch/configs/qarepvgg/yolov6m_qa.py | 68 - .../pytorch/configs/qarepvgg/yolov6n_qa.py | 66 - .../pytorch/configs/qarepvgg/yolov6s_qa.py | 67 - .../pytorch/configs/repopt/yolov6_tiny_hs.py | 59 - .../pytorch/configs/repopt/yolov6_tiny_opt.py | 59 - .../configs/repopt/yolov6_tiny_opt_qat.py | 83 -- .../pytorch/configs/repopt/yolov6n_hs.py | 59 - .../pytorch/configs/repopt/yolov6n_opt.py | 59 - .../pytorch/configs/repopt/yolov6n_opt_qat.py | 82 -- .../pytorch/configs/repopt/yolov6s_hs.py | 59 - .../pytorch/configs/repopt/yolov6s_opt.py | 60 - .../pytorch/configs/repopt/yolov6s_opt_qat.py | 113 -- .../pytorch/configs/yolov6_lite/README.md | 22 - .../pytorch/configs/yolov6_lite/README_cn.md | 23 - .../configs/yolov6_lite/yolov6_lite_l.py | 54 - .../yolov6_lite/yolov6_lite_l_finetune.py | 54 - .../configs/yolov6_lite/yolov6_lite_m.py | 54 - .../yolov6_lite/yolov6_lite_m_finetune.py | 54 - .../configs/yolov6_lite/yolov6_lite_s.py | 54 - .../yolov6_lite/yolov6_lite_s_finetune.py | 54 - .../yolov6/pytorch/configs/yolov6l.py | 68 - .../yolov6/pytorch/configs/yolov6l6.py | 62 - .../pytorch/configs/yolov6l6_finetune.py | 62 - .../pytorch/configs/yolov6l_finetune.py | 68 - .../yolov6/pytorch/configs/yolov6m.py | 66 - .../yolov6/pytorch/configs/yolov6m6.py | 61 - .../pytorch/configs/yolov6m6_finetune.py | 61 - .../pytorch/configs/yolov6m_finetune.py | 66 - .../yolov6/pytorch/configs/yolov6n.py | 65 - .../yolov6/pytorch/configs/yolov6n6.py | 56 - .../pytorch/configs/yolov6n6_finetune.py | 56 - .../pytorch/configs/yolov6n_finetune.py | 65 - .../yolov6/pytorch/configs/yolov6s.py | 65 - .../yolov6/pytorch/configs/yolov6s6.py | 56 - .../pytorch/configs/yolov6s6_finetune.py | 56 - .../pytorch/configs/yolov6s_finetune.py | 65 - cv/detection/yolov6/pytorch/data/coco.yaml | 21 - cv/detection/yolov6/pytorch/data/dataset.yaml | 11 - cv/detection/yolov6/pytorch/data/voc.yaml | 11 - cv/detection/yolov6/pytorch/hubconf.py | 182 --- cv/detection/yolov6/pytorch/requirements.txt | 14 - cv/detection/yolov6/pytorch/tools/eval.py | 169 --- cv/detection/yolov6/pytorch/tools/infer.py | 120 -- .../tools/partial_quantization/README.md | 46 - .../tools/partial_quantization/eval.py | 49 - .../tools/partial_quantization/eval.yaml | 8 - .../partial_quantization/partial_quant.py | 126 -- .../pytorch/tools/partial_quantization/ptq.py | 161 --- .../sensitivity_analyse.py | 125 -- .../tools/partial_quantization/utils.py | 92 -- .../yolov6/pytorch/tools/qat/README.md | 80 -- .../yolov6/pytorch/tools/qat/onnx_utils.py | 293 ---- .../yolov6/pytorch/tools/qat/qat_export.py | 169 --- .../yolov6/pytorch/tools/qat/qat_utils.py | 153 -- .../pytorch/tools/quantization/mnn/README.md | 1 - .../tools/quantization/ppq/ProgramEntrance.py | 189 --- .../ppq/write_qparams_onnx2trt.py | 94 -- .../tensorrt/post_training/Calibrator.py | 211 --- .../tensorrt/post_training/LICENSE | 191 --- .../tensorrt/post_training/README.md | 83 -- .../post_training/onnx_to_tensorrt.py | 222 --- .../quantization/tensorrt/requirements.txt | 7 - .../tensorrt/training_aware/QAT_quantizer.py | 39 - cv/detection/yolov6/pytorch/tools/train.py | 142 -- .../yolov6/pytorch/yolov6/__init__.py | 0 .../pytorch/yolov6/assigners/__init__.py | 2 - .../yolov6/assigners/anchor_generator.py | 63 - .../yolov6/assigners/assigner_utils.py | 89 -- .../pytorch/yolov6/assigners/atss_assigner.py | 161 --- .../yolov6/assigners/iou2d_calculator.py | 249 ---- .../pytorch/yolov6/assigners/tal_assigner.py | 173 --- .../yolov6/pytorch/yolov6/core/engine.py | 591 -------- .../yolov6/pytorch/yolov6/core/evaler.py | 545 -------- .../yolov6/pytorch/yolov6/core/inferer.py | 295 ---- .../pytorch/yolov6/data/data_augment.py | 208 --- .../yolov6/pytorch/yolov6/data/data_load.py | 126 -- .../yolov6/pytorch/yolov6/data/datasets.py | 664 --------- .../yolov6/pytorch/yolov6/data/vis_dataset.py | 59 - .../yolov6/pytorch/yolov6/data/voc2yolo.py | 100 -- .../yolov6/pytorch/yolov6/layers/common.py | 986 ------------- .../pytorch/yolov6/layers/dbb_transforms.py | 50 - .../pytorch/yolov6/models/efficientrep.py | 582 -------- .../pytorch/yolov6/models/effidehead.py | 293 ---- .../yolov6/pytorch/yolov6/models/end2end.py | 282 ---- .../models/heads/effidehead_distill_ns.py | 270 ---- .../yolov6/models/heads/effidehead_fuseab.py | 342 ----- .../yolov6/models/heads/effidehead_lite.py | 280 ---- .../pytorch/yolov6/models/losses/loss.py | 273 ---- .../yolov6/models/losses/loss_distill.py | 362 ----- .../yolov6/models/losses/loss_distill_ns.py | 350 ----- .../yolov6/models/losses/loss_fuseab.py | 243 ---- .../yolov6/pytorch/yolov6/models/reppan.py | 1226 ----------------- .../yolov6/pytorch/yolov6/models/yolo.py | 138 -- .../yolov6/pytorch/yolov6/models/yolo_lite.py | 88 -- .../yolov6/pytorch/yolov6/solver/build.py | 46 - .../yolov6/pytorch/yolov6/utils/Arial.ttf | Bin 773236 -> 0 bytes .../pytorch/yolov6/utils/RepOptimizer.py | 195 --- .../yolov6/pytorch/yolov6/utils/checkpoint.py | 61 - .../yolov6/pytorch/yolov6/utils/config.py | 101 -- .../yolov6/pytorch/yolov6/utils/ema.py | 59 - .../yolov6/pytorch/yolov6/utils/envs.py | 54 - .../yolov6/pytorch/yolov6/utils/events.py | 55 - .../yolov6/pytorch/yolov6/utils/figure_iou.py | 127 -- .../yolov6/pytorch/yolov6/utils/general.py | 127 -- .../yolov6/pytorch/yolov6/utils/metrics.py | 258 ---- .../yolov6/pytorch/yolov6/utils/nms.py | 105 -- .../pytorch/yolov6/utils/torch_utils.py | 111 -- 137 files changed, 22 insertions(+), 18008 deletions(-) delete mode 100644 cv/detection/yolov6/pytorch/.gitignore delete mode 100644 cv/detection/yolov6/pytorch/LICENSE delete mode 100644 cv/detection/yolov6/pytorch/configs/base/README.md delete mode 100644 cv/detection/yolov6/pytorch/configs/base/README_cn.md delete mode 100644 cv/detection/yolov6/pytorch/configs/base/yolov6l_base.py delete mode 100644 cv/detection/yolov6/pytorch/configs/base/yolov6l_base_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/base/yolov6m_base.py delete mode 100644 cv/detection/yolov6/pytorch/configs/base/yolov6m_base_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/base/yolov6n_base.py delete mode 100644 cv/detection/yolov6/pytorch/configs/base/yolov6n_base_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/base/yolov6s_base.py delete mode 100644 cv/detection/yolov6/pytorch/configs/base/yolov6s_base_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/experiment/eval_640_repro.py delete mode 100644 cv/detection/yolov6/pytorch/configs/experiment/yolov6n_with_eval_params.py delete mode 100644 cv/detection/yolov6/pytorch/configs/experiment/yolov6s_csp_scaled.py delete mode 100644 cv/detection/yolov6/pytorch/configs/experiment/yolov6t.py delete mode 100644 cv/detection/yolov6/pytorch/configs/experiment/yolov6t_csp_scaled.py delete mode 100644 cv/detection/yolov6/pytorch/configs/experiment/yolov6t_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/mbla/README.md delete mode 100644 cv/detection/yolov6/pytorch/configs/mbla/README_cn.md delete mode 100644 cv/detection/yolov6/pytorch/configs/mbla/yolov6l_mbla.py delete mode 100644 cv/detection/yolov6/pytorch/configs/mbla/yolov6l_mbla_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/mbla/yolov6m_mbla.py delete mode 100644 cv/detection/yolov6/pytorch/configs/mbla/yolov6m_mbla_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/mbla/yolov6s_mbla.py delete mode 100644 cv/detection/yolov6/pytorch/configs/mbla/yolov6s_mbla_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/mbla/yolov6x_mbla.py delete mode 100644 cv/detection/yolov6/pytorch/configs/mbla/yolov6x_mbla_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/qarepvgg/README.md delete mode 100644 cv/detection/yolov6/pytorch/configs/qarepvgg/yolov6m_qa.py delete mode 100644 cv/detection/yolov6/pytorch/configs/qarepvgg/yolov6n_qa.py delete mode 100644 cv/detection/yolov6/pytorch/configs/qarepvgg/yolov6s_qa.py delete mode 100644 cv/detection/yolov6/pytorch/configs/repopt/yolov6_tiny_hs.py delete mode 100644 cv/detection/yolov6/pytorch/configs/repopt/yolov6_tiny_opt.py delete mode 100644 cv/detection/yolov6/pytorch/configs/repopt/yolov6_tiny_opt_qat.py delete mode 100644 cv/detection/yolov6/pytorch/configs/repopt/yolov6n_hs.py delete mode 100644 cv/detection/yolov6/pytorch/configs/repopt/yolov6n_opt.py delete mode 100644 cv/detection/yolov6/pytorch/configs/repopt/yolov6n_opt_qat.py delete mode 100644 cv/detection/yolov6/pytorch/configs/repopt/yolov6s_hs.py delete mode 100644 cv/detection/yolov6/pytorch/configs/repopt/yolov6s_opt.py delete mode 100644 cv/detection/yolov6/pytorch/configs/repopt/yolov6s_opt_qat.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6_lite/README.md delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6_lite/README_cn.md delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_l.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_l_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_m.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_m_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_s.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_s_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6l.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6l6.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6l6_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6l_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6m.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6m6.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6m6_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6m_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6n.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6n6.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6n6_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6n_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6s.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6s6.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6s6_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/configs/yolov6s_finetune.py delete mode 100644 cv/detection/yolov6/pytorch/data/coco.yaml delete mode 100644 cv/detection/yolov6/pytorch/data/dataset.yaml delete mode 100644 cv/detection/yolov6/pytorch/data/voc.yaml delete mode 100644 cv/detection/yolov6/pytorch/hubconf.py delete mode 100644 cv/detection/yolov6/pytorch/requirements.txt delete mode 100644 cv/detection/yolov6/pytorch/tools/eval.py delete mode 100644 cv/detection/yolov6/pytorch/tools/infer.py delete mode 100644 cv/detection/yolov6/pytorch/tools/partial_quantization/README.md delete mode 100644 cv/detection/yolov6/pytorch/tools/partial_quantization/eval.py delete mode 100644 cv/detection/yolov6/pytorch/tools/partial_quantization/eval.yaml delete mode 100644 cv/detection/yolov6/pytorch/tools/partial_quantization/partial_quant.py delete mode 100644 cv/detection/yolov6/pytorch/tools/partial_quantization/ptq.py delete mode 100644 cv/detection/yolov6/pytorch/tools/partial_quantization/sensitivity_analyse.py delete mode 100644 cv/detection/yolov6/pytorch/tools/partial_quantization/utils.py delete mode 100644 cv/detection/yolov6/pytorch/tools/qat/README.md delete mode 100644 cv/detection/yolov6/pytorch/tools/qat/onnx_utils.py delete mode 100644 cv/detection/yolov6/pytorch/tools/qat/qat_export.py delete mode 100644 cv/detection/yolov6/pytorch/tools/qat/qat_utils.py delete mode 100644 cv/detection/yolov6/pytorch/tools/quantization/mnn/README.md delete mode 100644 cv/detection/yolov6/pytorch/tools/quantization/ppq/ProgramEntrance.py delete mode 100644 cv/detection/yolov6/pytorch/tools/quantization/ppq/write_qparams_onnx2trt.py delete mode 100755 cv/detection/yolov6/pytorch/tools/quantization/tensorrt/post_training/Calibrator.py delete mode 100644 cv/detection/yolov6/pytorch/tools/quantization/tensorrt/post_training/LICENSE delete mode 100644 cv/detection/yolov6/pytorch/tools/quantization/tensorrt/post_training/README.md delete mode 100755 cv/detection/yolov6/pytorch/tools/quantization/tensorrt/post_training/onnx_to_tensorrt.py delete mode 100644 cv/detection/yolov6/pytorch/tools/quantization/tensorrt/requirements.txt delete mode 100644 cv/detection/yolov6/pytorch/tools/quantization/tensorrt/training_aware/QAT_quantizer.py delete mode 100644 cv/detection/yolov6/pytorch/tools/train.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/__init__.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/assigners/__init__.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/assigners/anchor_generator.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/assigners/assigner_utils.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/assigners/atss_assigner.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/assigners/iou2d_calculator.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/assigners/tal_assigner.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/core/engine.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/core/evaler.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/core/inferer.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/data/data_augment.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/data/data_load.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/data/datasets.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/data/vis_dataset.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/data/voc2yolo.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/layers/common.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/layers/dbb_transforms.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/models/efficientrep.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/models/effidehead.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/models/end2end.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/models/heads/effidehead_distill_ns.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/models/heads/effidehead_fuseab.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/models/heads/effidehead_lite.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/models/losses/loss.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/models/losses/loss_distill.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/models/losses/loss_distill_ns.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/models/losses/loss_fuseab.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/models/reppan.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/models/yolo.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/models/yolo_lite.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/solver/build.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/utils/Arial.ttf delete mode 100644 cv/detection/yolov6/pytorch/yolov6/utils/RepOptimizer.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/utils/checkpoint.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/utils/config.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/utils/ema.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/utils/envs.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/utils/events.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/utils/figure_iou.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/utils/general.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/utils/metrics.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/utils/nms.py delete mode 100644 cv/detection/yolov6/pytorch/yolov6/utils/torch_utils.py diff --git a/cv/detection/yolov6/pytorch/.gitignore b/cv/detection/yolov6/pytorch/.gitignore deleted file mode 100644 index 11fa492a2..000000000 --- a/cv/detection/yolov6/pytorch/.gitignore +++ /dev/null @@ -1,119 +0,0 @@ -coco - -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class -**/*.pyc - -# C extensions - -# Distribution / packaging - -.Python -videos/ -build/ -runs/ -weights/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -parts/ -sdist/ -var/ -wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# pyenv -.python-version - -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# custom -.DS_Store - -# Pytorch -*.pth - -#vscode -.vscode/* - -#user scripts -*.sh - -# model files -*.onnx -*.pt -*.engine diff --git a/cv/detection/yolov6/pytorch/LICENSE b/cv/detection/yolov6/pytorch/LICENSE deleted file mode 100644 index f288702d2..000000000 --- a/cv/detection/yolov6/pytorch/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/cv/detection/yolov6/pytorch/README.md b/cv/detection/yolov6/pytorch/README.md index 47b6daf8a..6c6f4e951 100644 --- a/cv/detection/yolov6/pytorch/README.md +++ b/cv/detection/yolov6/pytorch/README.md @@ -1,14 +1,17 @@ # YOLOv6 + ## Model description + For years, the YOLO series has been the de facto industry-level standard for efficient object detection. The YOLO community has prospered overwhelmingly to enrich its use in a multitude of hardware platforms and abundant scenarios. In this technical report, we strive to push its limits to the next level, stepping forward with an unwavering mindset for industry application. -Considering the diverse requirements for speed and accuracy in the real environment, we extensively examine the up-to-date object detection advancements either from industry or academia. Specifically, we heavily assimilate ideas from recent network design, training strategies, testing techniques, quantization, and optimization methods. On top of this, we integrate our thoughts and practice to build a suite of deployment-ready networks at various scales to accommodate diversified use cases. With the generous permission of YOLO authors, we name it YOLOv6. We also express our warm welcome to users and contributors for further enhancement. For a glimpse of performance, our YOLOv6-N hits 35.9% AP on the COCO dataset at a throughput of 1234 FPS on an NVIDIA Tesla T4 GPU. YOLOv6-S strikes 43.5% AP at 495 FPS, outperforming other mainstream detectors at the same scale~(YOLOv5-S, YOLOX-S, and PPYOLOE-S). Our quantized version of YOLOv6-S even brings a new state-of-the-art 43.3% AP at 869 FPS. Furthermore, YOLOv6-M/L also achieves better accuracy performance (i.e., 49.5%/52.3%) than other detectors with a similar inference speed. We carefully conducted experiments to validate the effectiveness of each component. +Considering the diverse requirements for speed and accuracy in the real environment, we extensively examine the up-to-date object detection advancements either from industry or academia. Specifically, we heavily assimilate ideas from recent network design, training strategies, testing techniques, quantization, and optimization methods. On top of this, we integrate our thoughts and practice to build a suite of deployment-ready networks at various scales to accommodate diversified use cases. With the generous permission of YOLO authors, we name it YOLOv6. We also express our warm welcome to users and contributors for further enhancement. For a glimpse of performance, our YOLOv6-N hits 35.9% AP on the COCO dataset at a throughput of 1234 FPS on an NVIDIA Tesla T4 GPU. YOLOv6-S strikes 43.5% AP at 495 FPS, outperforming other mainstream detectors at the same scale~(YOLOv5-S, YOLOX-S, and PPYOLOE-S). Our quantized version of YOLOv6-S even brings a new state-of-the-art 43.3% AP at 869 FPS. Furthermore, YOLOv6-M/L also achieves better accuracy performance (i.e., 49.5%/52.3%) than other detectors with a similar inference speed. We carefully conducted experiments to validate the effectiveness of each component. Implementation of paper: + - [YOLOv6 v3.0: A Full-Scale Reloading](https://arxiv.org/abs/2301.05586) 🔥 - [YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications](https://arxiv.org/abs/2209.02976) - ## Installing packages -``` + +```bash ## install libGL yum install mesa-libGL @@ -19,16 +22,19 @@ cd zlib-1.2.9/ ./configure && make install cd .. rm -rf zlib-1.2.9.tar.gz zlib-1.2.9/ -``` -``` +## clone yolov6 +git clone https://gitee.com/deep-spark/deepsparkhub-GPL.git +cd deepsparkhub-GPL/cv/detection/yolov6/pytorch/ pip3 install -r requirements.txt ``` ## Preparing datasets + - data: prepare dataset and specify dataset paths in data.yaml ( [COCO](http://cocodataset.org), [YOLO format coco labels](https://github.com/meituan/YOLOv6/releases/download/0.1.0/coco2017labels.zip) ) - make sure your dataset structure as follows: -``` + +```bash ├── coco │ ├── annotations │ │ ├── instances_train2017.json @@ -45,24 +51,26 @@ pip3 install -r requirements.txt ## Training +> After training, reporting "AttributeError: 'NoneType' object has no attribute 'python_exit_status'" is a [known issue](https://github.com/meituan/YOLOv6/issues/506), add "--workers 0" if you want to avoid. + Single gpu train -``` +```bash python3 tools/train.py --batch 32 --conf configs/yolov6s.py --data data/coco.yaml --epoch 300 --name yolov6s_coco ``` Multiple gpu train -``` + +```bash python3 -m torch.distributed.launch --nproc_per_node 8 tools/train.py --batch 256 --conf configs/yolov6s.py --data data/coco.yaml --epoch 300 --name yolov6s_coco --device 0,1,2,3,4,5,6,7 ``` ## Training Results -Model | Size | mAPval
0.5:0.95 | mAPval
0.5 | -| :----------------------------------------------------------- | ---- | :----------------------- | --------------------------------------- | -| YOLOv6-S| 640 | 44.3 | 61.3 | -## Remark -After training, reporting "AttributeError: 'NoneType' object has no attribute 'python_exit_status'" is a [known issue](https://github.com/meituan/YOLOv6/issues/506), add "--workers 0" if you want to avoid. +| Model | Size | mAPval
0.5:0.95 | mAPval
0.5 | +| :------- | ---- | :----------------------- | ------------------- | +| YOLOv6-S | 640 | 44.3 | 61.3 | ## Reference -https://github.com/meituan/YOLOv6 \ No newline at end of file + +- [YOLOv6](https://github.com/meituan/YOLOv6) diff --git a/cv/detection/yolov6/pytorch/configs/base/README.md b/cv/detection/yolov6/pytorch/configs/base/README.md deleted file mode 100644 index 77ef5a4e9..000000000 --- a/cv/detection/yolov6/pytorch/configs/base/README.md +++ /dev/null @@ -1,26 +0,0 @@ -## YOLOv6 base model - -English | [简体中文](./README_cn.md) - -### Features - -- Use only regular convolution and Relu activation functions. - -- Apply CSP (1/2 channel dim) blocks in the network structure, except for Nano base model. - -Advantage: -- Adopt a unified network structure and configuration, and the accuracy loss of the PTQ 8-bit quantization model is negligible. -- Suitable for users who are just getting started or who need to apply, optimize and deploy an 8-bit quantization model quickly and frequently. - - -### Performance - -| Model | Size | mAPval
0.5:0.95 | SpeedT4
TRT FP16 b1
(FPS) | SpeedT4
TRT FP16 b32
(FPS) | SpeedT4
TRT INT8 b1
(FPS) | SpeedT4
TRT INT8 b32
(FPS) | Params
(M) | FLOPs
(G) | -| :--------------------------------------------------------------------------------------------- | --- | ----------------- | ----- | ---- | ---- | ---- | ----- | ------ | -| [**YOLOv6-N-base**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6n_base.pt) | 640 | 36.6distill | 727 | 1302 | 814 | 1805 | 4.65 | 11.46 | -| [**YOLOv6-S-base**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6s_base.pt) | 640 | 45.3distill | 346 | 525 | 487 | 908 | 13.14 | 30.6 | -| [**YOLOv6-M-base**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6m_base.pt) | 640 | 49.4distill | 179 | 245 | 284 | 439 | 28.33 | 72.30 | -| [**YOLOv6-L-base**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6l_base.pt) | 640 | 51.1distill | 116 | 157 | 196 | 288 | 59.61 | 150.89 | - -- Speed is tested with TensorRT 8.2.4.2 on T4. -- The processes of model training, evaluation, and inference are the same as the original ones. For details, please refer to [this README](https://github.com/meituan/YOLOv6#quick-start). diff --git a/cv/detection/yolov6/pytorch/configs/base/README_cn.md b/cv/detection/yolov6/pytorch/configs/base/README_cn.md deleted file mode 100644 index b6b01d144..000000000 --- a/cv/detection/yolov6/pytorch/configs/base/README_cn.md +++ /dev/null @@ -1,25 +0,0 @@ -## YOLOv6 基础版模型 - -简体中文 | [English](./README.md) - -### 模型特点 - -- 仅使用常规卷积和Relu激活函数 - -- 网络结构均采用CSP (1/2通道) block,Nano网络除外。 - -优势: -- 采用统一的网络结构和配置,且 PTQ 8位量化模型精度损失较小,适合刚入门或有快速迭代部署8位量化模型需求的用户。 - - -### 模型指标 - -| 模型 | 尺寸 | mAPval
0.5:0.95 | 速度T4
TRT FP16 b1
(FPS) | 速度T4
TRT FP16 b32
(FPS) | 速度T4
TRT INT8 b1
(FPS) | 速度T4
TRT INT8 b32
(FPS) | Params
(M) | FLOPs
(G) | -| :--------------------------------------------------------------------------------------------- | --- | ----------------- | ----- | ---- | ---- | ---- | ----- | ------ | -| [**YOLOv6-N-base**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6n_base.pt) | 640 | 36.6distill | 727 | 1302 | 814 | 1805 | 4.65 | 11.46 | -| [**YOLOv6-S-base**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6s_base.pt) | 640 | 45.3distill | 346 | 525 | 487 | 908 | 13.14 | 30.6 | -| [**YOLOv6-M-base**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6m_base.pt) | 640 | 49.4distill | 179 | 245 | 284 | 439 | 28.33 | 72.30 | -| [**YOLOv6-L-base**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6l_base.pt) | 640 | 51.1distill | 116 | 157 | 196 | 288 | 59.61 | 150.89 | - -- 速度是在 T4 上测试的,TensorRT 版本为 8.4.2.4; -- 模型训练、评估、推理流程与原来保持一致,具体可参考 [首页 README 文档](https://github.com/meituan/YOLOv6/blob/main/README_cn.md#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B)。 diff --git a/cv/detection/yolov6/pytorch/configs/base/yolov6l_base.py b/cv/detection/yolov6/pytorch/configs/base/yolov6l_base.py deleted file mode 100644 index ef2dbbb23..000000000 --- a/cv/detection/yolov6/pytorch/configs/base/yolov6l_base.py +++ /dev/null @@ -1,67 +0,0 @@ -# YOLOv6l large base model -model = dict( - type='YOLOv6l_base', - pretrained=None, - depth_multiple=1.0, - width_multiple=1.0, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - fuse_P2=True, - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 2.0, - 'dfl': 1.0, - }, - ) -) - -solver=dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.9, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.1, -) -training_mode = "conv_relu" diff --git a/cv/detection/yolov6/pytorch/configs/base/yolov6l_base_finetune.py b/cv/detection/yolov6/pytorch/configs/base/yolov6l_base_finetune.py deleted file mode 100644 index 7e8dc0626..000000000 --- a/cv/detection/yolov6/pytorch/configs/base/yolov6l_base_finetune.py +++ /dev/null @@ -1,63 +0,0 @@ -# YOLOv6 large base model -model = dict( - type='YOLOv6l_base', - depth_multiple=1.0, - width_multiple=1.0, - pretrained=None, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - fuse_P2=True, - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=1, - out_indices=[17, 20, 23], - strides=[8, 16, 32], - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 2.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) -training_mode = "conv_relu" diff --git a/cv/detection/yolov6/pytorch/configs/base/yolov6m_base.py b/cv/detection/yolov6/pytorch/configs/base/yolov6m_base.py deleted file mode 100644 index 5670f096c..000000000 --- a/cv/detection/yolov6/pytorch/configs/base/yolov6m_base.py +++ /dev/null @@ -1,67 +0,0 @@ -# YOLOv6m medium/large base model -model = dict( - type='YOLOv6m_base', - pretrained=None, - depth_multiple=0.80, - width_multiple=0.75, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - fuse_P2=True, - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 0.8, - 'dfl': 1.0, - }, - ) -) - -solver=dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.9, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.1, -) -training_mode = "conv_relu" diff --git a/cv/detection/yolov6/pytorch/configs/base/yolov6m_base_finetune.py b/cv/detection/yolov6/pytorch/configs/base/yolov6m_base_finetune.py deleted file mode 100644 index af5449ec1..000000000 --- a/cv/detection/yolov6/pytorch/configs/base/yolov6m_base_finetune.py +++ /dev/null @@ -1,67 +0,0 @@ -# YOLOv6m medium/large base model -model = dict( - type='YOLOv6m_base', - pretrained=None, - depth_multiple=0.80, - width_multiple=0.75, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - fuse_P2=True, - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 0.8, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) -training_mode = "conv_relu" diff --git a/cv/detection/yolov6/pytorch/configs/base/yolov6n_base.py b/cv/detection/yolov6/pytorch/configs/base/yolov6n_base.py deleted file mode 100644 index 8340ca602..000000000 --- a/cv/detection/yolov6/pytorch/configs/base/yolov6n_base.py +++ /dev/null @@ -1,66 +0,0 @@ -# YOLOv6s nano base model -model = dict( - type='YOLOv6n_base', - pretrained=None, - depth_multiple=0.33, - width_multiple=0.25, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - fuse_P2=True, - cspsppf=True, - ), - neck=dict( - type='RepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, # set to True if you want to further train with distillation - reg_max=16, # set to 16 if you want to further train with distillation - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) -training_mode = "conv_relu" diff --git a/cv/detection/yolov6/pytorch/configs/base/yolov6n_base_finetune.py b/cv/detection/yolov6/pytorch/configs/base/yolov6n_base_finetune.py deleted file mode 100644 index 593c3def9..000000000 --- a/cv/detection/yolov6/pytorch/configs/base/yolov6n_base_finetune.py +++ /dev/null @@ -1,66 +0,0 @@ -# YOLOv6s nanao base model -model = dict( - type='YOLOv6n_base', - pretrained=None, - depth_multiple=0.33, - width_multiple=0.25, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - fuse_P2=True, - cspsppf=True, - ), - neck=dict( - type='RepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=False, # set to True if you want to further train with distillation - reg_max=0, # set to 16 if you want to further train with distillation - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) -training_mode = "conv_relu" diff --git a/cv/detection/yolov6/pytorch/configs/base/yolov6s_base.py b/cv/detection/yolov6/pytorch/configs/base/yolov6s_base.py deleted file mode 100644 index 4e28c1785..000000000 --- a/cv/detection/yolov6/pytorch/configs/base/yolov6s_base.py +++ /dev/null @@ -1,68 +0,0 @@ -# YOLOv6s small base model -model = dict( - type='YOLOv6s_base', - pretrained=None, - depth_multiple=0.70, - width_multiple=0.50, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - fuse_P2=True, - cspsppf=True, - ), - neck=dict( - type='CSPRepBiFPANNeck',#CSPRepPANNeck - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, # set to True if you want to further train with distillation - reg_max=16, # set to 16 if you want to further train with distillation - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) -training_mode = "conv_relu" diff --git a/cv/detection/yolov6/pytorch/configs/base/yolov6s_base_finetune.py b/cv/detection/yolov6/pytorch/configs/base/yolov6s_base_finetune.py deleted file mode 100644 index eb4d2159a..000000000 --- a/cv/detection/yolov6/pytorch/configs/base/yolov6s_base_finetune.py +++ /dev/null @@ -1,68 +0,0 @@ -# YOLOv6s small base model -model = dict( - type='YOLOv6s_base', - pretrained=None, - depth_multiple=0.70, - width_multiple=0.50, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - fuse_P2=True, - cspsppf=True, - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=False, # set to True if you want to further train with distillation - reg_max=0, # set to 16 if you want to further train with distillation - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) -training_mode = "conv_relu" diff --git a/cv/detection/yolov6/pytorch/configs/experiment/eval_640_repro.py b/cv/detection/yolov6/pytorch/configs/experiment/eval_640_repro.py deleted file mode 100644 index 1f6a6217e..000000000 --- a/cv/detection/yolov6/pytorch/configs/experiment/eval_640_repro.py +++ /dev/null @@ -1,79 +0,0 @@ -# eval param for different scale - -eval_params = dict( - default = dict( - img_size=640, - shrink_size=2, - infer_on_rect=False, - ), - yolov6n = dict( - img_size=640, - shrink_size=4, - infer_on_rect=False, - ), - yolov6t = dict( - img_size=640, - shrink_size=6, - infer_on_rect=False, - ), - yolov6s = dict( - img_size=640, - shrink_size=6, - infer_on_rect=False, - ), - yolov6m = dict( - img_size=640, - shrink_size=4, - infer_on_rect=False, - ), - yolov6l = dict( - img_size=640, - shrink_size=4, - infer_on_rect=False, - ), - yolov6l_relu = dict( - img_size=640, - shrink_size=2, - infer_on_rect=False, - ), - yolov6n6 = dict( - img_size=1280, - shrink_size=17, - infer_on_rect=False, - ), - yolov6s6 = dict( - img_size=1280, - shrink_size=8, - infer_on_rect=False, - ), - yolov6m6 = dict( - img_size=1280, - shrink_size=64, - infer_on_rect=False, - ), - yolov6l6 = dict( - img_size=1280, - shrink_size=41, - infer_on_rect=False, - ), - yolov6s_mbla = dict( - img_size=640, - shrink_size=7, - infer_on_rect=False, - ), - yolov6m_mbla = dict( - img_size=640, - shrink_size=7, - infer_on_rect=False, - ), - yolov6l_mbla = dict( - img_size=640, - shrink_size=7, - infer_on_rect=False, - ), - yolov6x_mbla = dict( - img_size=640, - shrink_size=3, - infer_on_rect=False, - ) -) diff --git a/cv/detection/yolov6/pytorch/configs/experiment/yolov6n_with_eval_params.py b/cv/detection/yolov6/pytorch/configs/experiment/yolov6n_with_eval_params.py deleted file mode 100644 index e7366b334..000000000 --- a/cv/detection/yolov6/pytorch/configs/experiment/yolov6n_with_eval_params.py +++ /dev/null @@ -1,76 +0,0 @@ -# YOLOv6n model with eval param(when traing) -model = dict( - type='YOLOv6n', - pretrained=None, - depth_multiple=0.33, - width_multiple=0.25, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - ), - neck=dict( - type='RepPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=1, - out_indices=[17, 20, 23], - strides=[8, 16, 32], - iou_type='siou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.02, #0.01 # 0.02 - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) - -# Eval params when eval model. -# If eval_params item is list, eg conf_thres=[0.03, 0.03], -# first will be used in train.py and second will be used in eval.py. -eval_params = dict( - batch_size=None, #None mean will be the same as batch on one device * 2 - img_size=None, #None mean will be the same as train image size - conf_thres=0.03, - iou_thres=0.65, - - #pading and scale coord - shrink_size=None, # None mean will not shrink the image. - infer_on_rect=True, - - #metric - verbose=False, - do_coco_metric=True, - do_pr_metric=False, - plot_curve=False, - plot_confusion_matrix=False -) diff --git a/cv/detection/yolov6/pytorch/configs/experiment/yolov6s_csp_scaled.py b/cv/detection/yolov6/pytorch/configs/experiment/yolov6s_csp_scaled.py deleted file mode 100644 index ba28843ac..000000000 --- a/cv/detection/yolov6/pytorch/configs/experiment/yolov6s_csp_scaled.py +++ /dev/null @@ -1,57 +0,0 @@ -# YOLOv6m model -model = dict( - type='YOLOv6s_csp', - pretrained=None, - depth_multiple=0.70, - width_multiple=0.50, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - ), - neck=dict( - type='CSPRepPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=1, - out_indices=[17, 20, 23], - strides=[8, 16, 32], - iou_type='giou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver=dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.9, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.1, -) diff --git a/cv/detection/yolov6/pytorch/configs/experiment/yolov6t.py b/cv/detection/yolov6/pytorch/configs/experiment/yolov6t.py deleted file mode 100644 index afacd436c..000000000 --- a/cv/detection/yolov6/pytorch/configs/experiment/yolov6t.py +++ /dev/null @@ -1,55 +0,0 @@ -# YOLOv6t model -model = dict( - type='YOLOv6t', - pretrained=None, - depth_multiple=0.33, - width_multiple=0.375, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - ), - neck=dict( - type='RepPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=1, - out_indices=[17, 20, 23], - strides=[8, 16, 32], - iou_type='siou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) diff --git a/cv/detection/yolov6/pytorch/configs/experiment/yolov6t_csp_scaled.py b/cv/detection/yolov6/pytorch/configs/experiment/yolov6t_csp_scaled.py deleted file mode 100644 index e8ba99a90..000000000 --- a/cv/detection/yolov6/pytorch/configs/experiment/yolov6t_csp_scaled.py +++ /dev/null @@ -1,57 +0,0 @@ -# YOLOv6n model -model = dict( - type='YOLOv6n_csp', - pretrained=None, - depth_multiple=0.60, - width_multiple=0.50, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - ), - neck=dict( - type='CSPRepPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=1, - out_indices=[17, 20, 23], - strides=[8, 16, 32], - iou_type='giou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver=dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.9, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.1, -) diff --git a/cv/detection/yolov6/pytorch/configs/experiment/yolov6t_finetune.py b/cv/detection/yolov6/pytorch/configs/experiment/yolov6t_finetune.py deleted file mode 100644 index 8be474166..000000000 --- a/cv/detection/yolov6/pytorch/configs/experiment/yolov6t_finetune.py +++ /dev/null @@ -1,55 +0,0 @@ -# YOLOv6t model -model = dict( - type='YOLOv6t', - pretrained='weights/yolov6t.pt', - depth_multiple=0.33, - width_multiple=0.375, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - ), - neck=dict( - type='RepPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=1, - out_indices=[17, 20, 23], - strides=[8, 16, 32], - iou_type='siou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) diff --git a/cv/detection/yolov6/pytorch/configs/mbla/README.md b/cv/detection/yolov6/pytorch/configs/mbla/README.md deleted file mode 100644 index d163124d6..000000000 --- a/cv/detection/yolov6/pytorch/configs/mbla/README.md +++ /dev/null @@ -1,28 +0,0 @@ -## YOLOv6 mbla model - -English | [简体中文](./README_cn.md) - -### Features - -- Apply MBLABlock(Multi Branch Layer Aggregation Block) blocks in the network structure. - -Advantage: -- Adopt a unified network structure and configuration. - -- Better performance for Small model comparing to yolov6 3.0 release. - -- Better performance comparing to yolov6 3.0 base. - - - -### Performance - -| Model | Size | mAPval
0.5:0.95 | SpeedT4
trt fp16 b1
(fps) | SpeedT4
trt fp16 b32
(fps) | Params
(M) | FLOPs
(G) | -| :----------------------------------------------------------- | -------- | :----------------------- | -------------------------------------- | --------------------------------------- | -------------------- | ------------------- | -| [**YOLOv6-S-mbla**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6s_mbla.pt) | 640 | 47.0distill | 300 | 424 | 11.6 | 29.8 | -| [**YOLOv6-M-mbla**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6m_mbla.pt) | 640 | 50.3distill | 168 | 216 | 26.1 | 66.7 | -| [**YOLOv6-L-mbla**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6l_base.pt) | 640 | 52.0distill | 129 | 154 | 46.3 | 118.2 | -| [**YOLOv6-X-base**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6x_base.pt) | 640 | 53.5distill | 78 | 94 | 78.8 | 199.0 | - -- Speed is tested with TensorRT 8.4.2.4 on T4. -- The processes of model training, evaluation, and inference are the same as the original ones. For details, please refer to [this README](https://github.com/meituan/YOLOv6#quick-start). diff --git a/cv/detection/yolov6/pytorch/configs/mbla/README_cn.md b/cv/detection/yolov6/pytorch/configs/mbla/README_cn.md deleted file mode 100644 index ad399fe09..000000000 --- a/cv/detection/yolov6/pytorch/configs/mbla/README_cn.md +++ /dev/null @@ -1,26 +0,0 @@ -## YOLOv6 MBLA版模型 - -简体中文 | [English](./README.md) - -### 模型特点 - -- 网络主体结构均采用MBLABlock(Multi Branch Layer Aggregation Block) - -优势: -- 采用统一的网络结构和配置 - -- 相比3.0版本在s尺度效果提升,相比3.0base版本各尺度效果提升 - - - -### 模型指标 - -| 模型 | 输入尺寸 | mAPval
0.5:0.95 | 速度T4
trt fp16 b1
(fps) | 速度T4
trt fp16 b32
(fps) | Params
(M) | FLOPs
(G) | -| :----------------------------------------------------------- | -------- | :----------------------- | -------------------------------------- | --------------------------------------- | -------------------- | ------------------- | -| [**YOLOv6-S-mbla**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6s_mbla.pt) | 640 | 47.0distill | 300 | 424 | 11.6 | 29.8 | -| [**YOLOv6-M-mbla**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6m_mbla.pt) | 640 | 50.3distill | 168 | 216 | 26.1 | 66.7 | -| [**YOLOv6-L-mbla**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6l_base.pt) | 640 | 52.0distill | 129 | 154 | 46.3 | 118.2 | -| [**YOLOv6-X-base**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6x_base.pt) | 640 | 53.5distill | 78 | 94 | 78.8 | 199.0 | - -- 速度是在 T4 上测试的,TensorRT 版本为 8.4.2.4; -- 模型训练、评估、推理流程与原来保持一致,具体可参考 [首页 README 文档](https://github.com/meituan/YOLOv6/blob/main/README_cn.md#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B)。 diff --git a/cv/detection/yolov6/pytorch/configs/mbla/yolov6l_mbla.py b/cv/detection/yolov6/pytorch/configs/mbla/yolov6l_mbla.py deleted file mode 100644 index 7534b7054..000000000 --- a/cv/detection/yolov6/pytorch/configs/mbla/yolov6l_mbla.py +++ /dev/null @@ -1,70 +0,0 @@ -# YOLOv6l model -model = dict( - type='YOLOv6l_mbla', - pretrained=None, - depth_multiple=0.5, - width_multiple=1.0, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 4, 8, 8, 4], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - fuse_P2=True, - stage_block_type="MBLABlock", - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[8, 8, 8, 8], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - stage_block_type="MBLABlock", - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 2.0, - 'dfl': 1.0, - }, - ) -) - -solver=dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.9, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.1, -) - -training_mode = "conv_silu" diff --git a/cv/detection/yolov6/pytorch/configs/mbla/yolov6l_mbla_finetune.py b/cv/detection/yolov6/pytorch/configs/mbla/yolov6l_mbla_finetune.py deleted file mode 100644 index 6ea88967c..000000000 --- a/cv/detection/yolov6/pytorch/configs/mbla/yolov6l_mbla_finetune.py +++ /dev/null @@ -1,70 +0,0 @@ -# YOLOv6l model -model = dict( - type='YOLOv6l_mbla', - pretrained=None, - depth_multiple=0.5, - width_multiple=1.0, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 4, 8, 8, 4], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - fuse_P2=True, - stage_block_type="MBLABlock", - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[8, 8, 8, 8], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - stage_block_type="MBLABlock", - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 2.0, - 'dfl': 1.0, - }, - ) -) - -solver=dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) - -training_mode = "conv_silu" diff --git a/cv/detection/yolov6/pytorch/configs/mbla/yolov6m_mbla.py b/cv/detection/yolov6/pytorch/configs/mbla/yolov6m_mbla.py deleted file mode 100644 index f84fc43d1..000000000 --- a/cv/detection/yolov6/pytorch/configs/mbla/yolov6m_mbla.py +++ /dev/null @@ -1,70 +0,0 @@ -# YOLOv6l model -model = dict( - type='YOLOv6m_mbla', - pretrained=None, - depth_multiple=0.5, - width_multiple=0.75, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 4, 8, 8, 4], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - fuse_P2=True, - stage_block_type="MBLABlock", - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[8, 8, 8, 8], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - stage_block_type="MBLABlock", - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 2.0, - 'dfl': 1.0, - }, - ) -) - -solver=dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.9, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.1, -) - -training_mode = "conv_silu" diff --git a/cv/detection/yolov6/pytorch/configs/mbla/yolov6m_mbla_finetune.py b/cv/detection/yolov6/pytorch/configs/mbla/yolov6m_mbla_finetune.py deleted file mode 100644 index aa0bc816a..000000000 --- a/cv/detection/yolov6/pytorch/configs/mbla/yolov6m_mbla_finetune.py +++ /dev/null @@ -1,70 +0,0 @@ -# YOLOv6l model -model = dict( - type='YOLOv6m_mbla', - pretrained=None, - depth_multiple=0.5, - width_multiple=0.75, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 4, 8, 8, 4], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - fuse_P2=True, - stage_block_type="MBLABlock", - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[8, 8, 8, 8], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - stage_block_type="MBLABlock", - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 2.0, - 'dfl': 1.0, - }, - ) -) - -solver=dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) - -training_mode = "conv_silu" diff --git a/cv/detection/yolov6/pytorch/configs/mbla/yolov6s_mbla.py b/cv/detection/yolov6/pytorch/configs/mbla/yolov6s_mbla.py deleted file mode 100644 index eedc76eec..000000000 --- a/cv/detection/yolov6/pytorch/configs/mbla/yolov6s_mbla.py +++ /dev/null @@ -1,70 +0,0 @@ -# YOLOv6l model -model = dict( - type='YOLOv6s_mbla', - pretrained=None, - depth_multiple=0.5, - width_multiple=0.5, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 4, 8, 8, 4], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - fuse_P2=True, - stage_block_type="MBLABlock", - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[8, 8, 8, 8], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - stage_block_type="MBLABlock", - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 2.0, - 'dfl': 1.0, - }, - ) -) - -solver=dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.9, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.1, -) - -training_mode = "conv_silu" diff --git a/cv/detection/yolov6/pytorch/configs/mbla/yolov6s_mbla_finetune.py b/cv/detection/yolov6/pytorch/configs/mbla/yolov6s_mbla_finetune.py deleted file mode 100644 index a9812c716..000000000 --- a/cv/detection/yolov6/pytorch/configs/mbla/yolov6s_mbla_finetune.py +++ /dev/null @@ -1,70 +0,0 @@ -# YOLOv6l model -model = dict( - type='YOLOv6s_mbla', - pretrained=None, - depth_multiple=0.5, - width_multiple=0.5, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 4, 8, 8, 4], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - fuse_P2=True, - stage_block_type="MBLABlock", - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[8, 8, 8, 8], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - stage_block_type="MBLABlock", - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 2.0, - 'dfl': 1.0, - }, - ) -) - -solver=dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) - -training_mode = "conv_silu" diff --git a/cv/detection/yolov6/pytorch/configs/mbla/yolov6x_mbla.py b/cv/detection/yolov6/pytorch/configs/mbla/yolov6x_mbla.py deleted file mode 100644 index b7b9703c2..000000000 --- a/cv/detection/yolov6/pytorch/configs/mbla/yolov6x_mbla.py +++ /dev/null @@ -1,70 +0,0 @@ -# YOLOv6l model -model = dict( - type='YOLOv6x_mbla', - pretrained=None, - depth_multiple=1.0, - width_multiple=1.0, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 4, 8, 8, 4], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - fuse_P2=True, - stage_block_type="MBLABlock", - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[8, 8, 8, 8], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - stage_block_type="MBLABlock", - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 2.0, - 'dfl': 1.0, - }, - ) -) - -solver=dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.9, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.1, -) - -training_mode = "conv_silu" diff --git a/cv/detection/yolov6/pytorch/configs/mbla/yolov6x_mbla_finetune.py b/cv/detection/yolov6/pytorch/configs/mbla/yolov6x_mbla_finetune.py deleted file mode 100644 index 65c57cb21..000000000 --- a/cv/detection/yolov6/pytorch/configs/mbla/yolov6x_mbla_finetune.py +++ /dev/null @@ -1,70 +0,0 @@ -# YOLOv6l model -model = dict( - type='YOLOv6x_mbla', - pretrained=None, - depth_multiple=1.0, - width_multiple=1.0, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 4, 8, 8, 4], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - fuse_P2=True, - stage_block_type="MBLABlock", - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[8, 8, 8, 8], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - stage_block_type="MBLABlock", - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 2.0, - 'dfl': 1.0, - }, - ) -) - -solver=dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) - -training_mode = "conv_silu" diff --git a/cv/detection/yolov6/pytorch/configs/qarepvgg/README.md b/cv/detection/yolov6/pytorch/configs/qarepvgg/README.md deleted file mode 100644 index 81b130d28..000000000 --- a/cv/detection/yolov6/pytorch/configs/qarepvgg/README.md +++ /dev/null @@ -1,26 +0,0 @@ -## YOLOv6 base model - -English | [简体中文](./README_cn.md) - -### Features - -- This is a RepOpt-version implementation of YOLOv6 according to [QARepVGG](https://arxiv.org/abs/2212.01593). - -- The QARep version models possess slightly lower float accuracy on COCO than the RepVGG version models, but achieve highly improved quantized accuracy. - -- The INT8 accuracies listed were obtained using a simple PTQ process, as implemented in the [`onnx_to_trt.py`](../../deploy/TensorRT/onnx_to_trt.py) script. However, higher accuracies could be achieved using Quantization-Aware Training (QAT) due to the specific architecture design of the QARepVGG model. - -### Performance - -| Model | Size | Float
mAPval
0.5:0.95 | INT8
mAPval
0.5:0.95 | SpeedT4
trt fp16 b32
(fps) | SpeedT4
trt int8 b32
(fps) | Params
(M) | FLOPs
(G) | -| :----------------------------------------------------------- | -------- | :----------------------- | -------------------------------------- | --------------------------------------- | -------------------- | ------------------- | -------------------- | -| [**YOLOv6-N**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6n.pt) | 640 | 37.5 | 34.3 | 1286 | 1773 |4.7 | 11.4 | -| [**YOLOv6-N-qa**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6n_qa.pt) | 640 | 37.1 | 36.4 | 1286 | 1773 | 4.7 | 11.4 | -| [**YOLOv6-S**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6s.pt) | 640 | 45.0 | 41.3 | 513 | 1117 | 18.5 | 45.3 | -| [**YOLOv6-S-qa**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6s_qa.pt) | 640 | 44.7 | 44.0 | 513 | 1117 | 18.5 | 45.3 | -| [**YOLOv6-M**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6m.pt) | 640 | 50.0 | 48.1 | 250 | 439 | 34.9 | 85.8 | -| [**YOLOv6-M-qa**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6m_qa.pt) | 640 | 49.7 | 49.4 | 250 | 439 | 34.9 | 85.8 | - -- Speed is tested with TensorRT 8.4 on T4. -- We have not conducted experiments on the YOLOv6-L model since it does not use the RepVGG architecture. -- The processes of model training, evaluation, and inference are the same as the original ones. For details, please refer to [this README](https://github.com/meituan/YOLOv6#quick-start). diff --git a/cv/detection/yolov6/pytorch/configs/qarepvgg/yolov6m_qa.py b/cv/detection/yolov6/pytorch/configs/qarepvgg/yolov6m_qa.py deleted file mode 100644 index c0690f15e..000000000 --- a/cv/detection/yolov6/pytorch/configs/qarepvgg/yolov6m_qa.py +++ /dev/null @@ -1,68 +0,0 @@ -# YOLOv6m model -model = dict( - type='YOLOv6m', - pretrained=None, - depth_multiple=0.60, - width_multiple=0.75, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(2)/3, - fuse_P2=True, - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(2)/3, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 0.8, - 'dfl': 1.0, - }, - ) -) - -solver=dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.9, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.1, -) - -training_mode='qarepvggv2' diff --git a/cv/detection/yolov6/pytorch/configs/qarepvgg/yolov6n_qa.py b/cv/detection/yolov6/pytorch/configs/qarepvgg/yolov6n_qa.py deleted file mode 100644 index b42d9ddb4..000000000 --- a/cv/detection/yolov6/pytorch/configs/qarepvgg/yolov6n_qa.py +++ /dev/null @@ -1,66 +0,0 @@ -# YOLOv6s model -model = dict( - type='YOLOv6n', - pretrained=None, - depth_multiple=0.33, - width_multiple=0.25, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - fuse_P2=True, - cspsppf=True, - ), - neck=dict( - type='RepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='siou', - use_dfl=False, # set to True if you want to further train with distillation - reg_max=0, # set to 16 if you want to further train with distillation - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.02, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) -training_mode='qarepvggv2' diff --git a/cv/detection/yolov6/pytorch/configs/qarepvgg/yolov6s_qa.py b/cv/detection/yolov6/pytorch/configs/qarepvgg/yolov6s_qa.py deleted file mode 100644 index 3051679a2..000000000 --- a/cv/detection/yolov6/pytorch/configs/qarepvgg/yolov6s_qa.py +++ /dev/null @@ -1,67 +0,0 @@ -# YOLOv6s model -model = dict( - type='YOLOv6s', - pretrained=None, - depth_multiple=0.33, - width_multiple=0.50, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - fuse_P2=True, - cspsppf=True, - ), - neck=dict( - type='RepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=False, # set to True if you want to further train with distillation - reg_max=0, # set to 16 if you want to further train with distillation - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) - -training_mode='qarepvggv2' diff --git a/cv/detection/yolov6/pytorch/configs/repopt/yolov6_tiny_hs.py b/cv/detection/yolov6/pytorch/configs/repopt/yolov6_tiny_hs.py deleted file mode 100644 index 70a74279c..000000000 --- a/cv/detection/yolov6/pytorch/configs/repopt/yolov6_tiny_hs.py +++ /dev/null @@ -1,59 +0,0 @@ -# YOLOv6t model -model = dict( - type='YOLOv6t', - pretrained=None, - depth_multiple=0.33, - width_multiple=0.375, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - ), - neck=dict( - type='RepPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=1, - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='siou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) - -# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"] -training_mode='hyper_search' diff --git a/cv/detection/yolov6/pytorch/configs/repopt/yolov6_tiny_opt.py b/cv/detection/yolov6/pytorch/configs/repopt/yolov6_tiny_opt.py deleted file mode 100644 index 95dbf3178..000000000 --- a/cv/detection/yolov6/pytorch/configs/repopt/yolov6_tiny_opt.py +++ /dev/null @@ -1,59 +0,0 @@ -# YOLOv6t model -model = dict( - type='YOLOv6t', - pretrained=None, - scales='../yolov6_assert/v6t_v2_scale_last.pt', - depth_multiple=0.33, - width_multiple=0.375, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - ), - neck=dict( - type='RepPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=1, - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='siou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) -# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"] -training_mode='repopt' diff --git a/cv/detection/yolov6/pytorch/configs/repopt/yolov6_tiny_opt_qat.py b/cv/detection/yolov6/pytorch/configs/repopt/yolov6_tiny_opt_qat.py deleted file mode 100644 index 701bf4f1d..000000000 --- a/cv/detection/yolov6/pytorch/configs/repopt/yolov6_tiny_opt_qat.py +++ /dev/null @@ -1,83 +0,0 @@ -# YOLOv6t model -model = dict( - type='YOLOv6t', - pretrained='./assets/v6s_t.pt', - scales='./assets/v6t_v2_scale_last.pt', - depth_multiple=0.33, - width_multiple=0.375, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - ), - neck=dict( - type='RepPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=1, - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='siou', - use_dfl=False, - reg_max=0, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.00001, - lrf=0.001, - momentum=0.937, - weight_decay=0.00005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) - -ptq = dict( - num_bits = 8, - calib_batches = 4, - # 'max', 'histogram' - calib_method = 'max', - # 'entropy', 'percentile', 'mse' - histogram_amax_method='entropy', - histogram_amax_percentile=99.99, - calib_output_path='./', - sensitive_layers_skip=False, - sensitive_layers_list=[], -) - -qat = dict( - calib_pt = './assets/v6s_t_calib_max.pt', - sensitive_layers_skip = False, - sensitive_layers_list=[], -) - -# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"] -training_mode='repopt' diff --git a/cv/detection/yolov6/pytorch/configs/repopt/yolov6n_hs.py b/cv/detection/yolov6/pytorch/configs/repopt/yolov6n_hs.py deleted file mode 100644 index 67607ba28..000000000 --- a/cv/detection/yolov6/pytorch/configs/repopt/yolov6n_hs.py +++ /dev/null @@ -1,59 +0,0 @@ -# YOLOv6n model -model = dict( - type='YOLOv6n', - pretrained=None, - depth_multiple=0.33, - width_multiple=0.25, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - ), - neck=dict( - type='RepPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=1, - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='siou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.02, #0.01 # 0.02 - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) - -# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"] -training_mode='hyper_search' diff --git a/cv/detection/yolov6/pytorch/configs/repopt/yolov6n_opt.py b/cv/detection/yolov6/pytorch/configs/repopt/yolov6n_opt.py deleted file mode 100644 index 9b3db4fbf..000000000 --- a/cv/detection/yolov6/pytorch/configs/repopt/yolov6n_opt.py +++ /dev/null @@ -1,59 +0,0 @@ -# YOLOv6n model -model = dict( - type='YOLOv6n', - pretrained=None, - scales='../yolov6_assert/v6n_v2_scale_last.pt', - depth_multiple=0.33, - width_multiple=0.25, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - ), - neck=dict( - type='RepPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=1, - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='siou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.02, #0.01 # 0.02 - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) -# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"] -training_mode='repopt' diff --git a/cv/detection/yolov6/pytorch/configs/repopt/yolov6n_opt_qat.py b/cv/detection/yolov6/pytorch/configs/repopt/yolov6n_opt_qat.py deleted file mode 100644 index 4e76dfd3c..000000000 --- a/cv/detection/yolov6/pytorch/configs/repopt/yolov6n_opt_qat.py +++ /dev/null @@ -1,82 +0,0 @@ -# YOLOv6n model -model = dict( - type='YOLOv6n', - pretrained='./assets/v6s_n.pt', - scales='./assets/v6n_v2_scale_last.pt', - depth_multiple=0.33, - width_multiple=0.25, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - ), - neck=dict( - type='RepPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=1, - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='siou', - use_dfl=False, - reg_max=0, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.00001, #0.01 # 0.02 - lrf=0.001, - momentum=0.937, - weight_decay=0.00005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) - -ptq = dict( - num_bits = 8, - calib_batches = 4, - # 'max', 'histogram' - calib_method = 'max', - # 'entropy', 'percentile', 'mse' - histogram_amax_method='entropy', - histogram_amax_percentile=99.99, - calib_output_path='./', - sensitive_layers_skip=False, - sensitive_layers_list=[], -) - -qat = dict( - calib_pt = './assets/v6s_n_calib_max.pt', - sensitive_layers_skip = False, - sensitive_layers_list=[], -) -# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"] -training_mode='repopt' diff --git a/cv/detection/yolov6/pytorch/configs/repopt/yolov6s_hs.py b/cv/detection/yolov6/pytorch/configs/repopt/yolov6s_hs.py deleted file mode 100644 index 60c7286a1..000000000 --- a/cv/detection/yolov6/pytorch/configs/repopt/yolov6s_hs.py +++ /dev/null @@ -1,59 +0,0 @@ -# YOLOv6s model -model = dict( - type='YOLOv6s', - pretrained=None, - depth_multiple=0.33, - width_multiple=0.50, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - ), - neck=dict( - type='RepPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=1, - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=False, - reg_max=0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) - -# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"] -training_mode='hyper_search' diff --git a/cv/detection/yolov6/pytorch/configs/repopt/yolov6s_opt.py b/cv/detection/yolov6/pytorch/configs/repopt/yolov6s_opt.py deleted file mode 100644 index 2676eb4f1..000000000 --- a/cv/detection/yolov6/pytorch/configs/repopt/yolov6s_opt.py +++ /dev/null @@ -1,60 +0,0 @@ -# YOLOv6s model -model = dict( - type='YOLOv6s', - pretrained=None, - scales='../yolov6_assert/v6s_v2_scale.pt', - depth_multiple=0.33, - width_multiple=0.50, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - ), - neck=dict( - type='RepPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=1, - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=False, - reg_max=0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) - -# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"] -training_mode='repopt' diff --git a/cv/detection/yolov6/pytorch/configs/repopt/yolov6s_opt_qat.py b/cv/detection/yolov6/pytorch/configs/repopt/yolov6s_opt_qat.py deleted file mode 100644 index a41ea085c..000000000 --- a/cv/detection/yolov6/pytorch/configs/repopt/yolov6s_opt_qat.py +++ /dev/null @@ -1,113 +0,0 @@ -# YOLOv6s model -model = dict( - type='YOLOv6s', - pretrained='./assets/yolov6s_v2_reopt_43.1.pt', - scales='./assets/yolov6s_v2_scale.pt', - depth_multiple=0.33, - width_multiple=0.50, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - ), - neck=dict( - type='RepPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=1, - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type = 'giou', - use_dfl = False, - reg_max = 0, # if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.00001, - lrf=0.001, - momentum=0.937, - weight_decay=0.00005, - warmup_epochs=3, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) - -ptq = dict( - num_bits = 8, - calib_batches = 4, - # 'max', 'histogram' - calib_method = 'histogram', - # 'entropy', 'percentile', 'mse' - histogram_amax_method='entropy', - histogram_amax_percentile=99.99, - calib_output_path='./', - sensitive_layers_skip=False, - sensitive_layers_list=['detect.stems.0.conv', - 'detect.stems.1.conv', - 'detect.stems.2.conv', - 'detect.cls_convs.0.conv', - 'detect.cls_convs.1.conv', - 'detect.cls_convs.2.conv', - 'detect.reg_convs.0.conv', - 'detect.reg_convs.1.conv', - 'detect.reg_convs.2.conv', - 'detect.cls_preds.0', - 'detect.cls_preds.1', - 'detect.cls_preds.2', - 'detect.reg_preds.0', - 'detect.reg_preds.1', - 'detect.reg_preds.2', - ], -) - -qat = dict( - calib_pt = './assets/yolov6s_v2_reopt_43.1_calib_histogram.pt', - sensitive_layers_skip = False, - sensitive_layers_list=['detect.stems.0.conv', - 'detect.stems.1.conv', - 'detect.stems.2.conv', - 'detect.cls_convs.0.conv', - 'detect.cls_convs.1.conv', - 'detect.cls_convs.2.conv', - 'detect.reg_convs.0.conv', - 'detect.reg_convs.1.conv', - 'detect.reg_convs.2.conv', - 'detect.cls_preds.0', - 'detect.cls_preds.1', - 'detect.cls_preds.2', - 'detect.reg_preds.0', - 'detect.reg_preds.1', - 'detect.reg_preds.2', - ], -) - -# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"] -training_mode='repopt' diff --git a/cv/detection/yolov6/pytorch/configs/yolov6_lite/README.md b/cv/detection/yolov6/pytorch/configs/yolov6_lite/README.md deleted file mode 100644 index 170d12d92..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6_lite/README.md +++ /dev/null @@ -1,22 +0,0 @@ -## YOLOv6Lite model - -English | [简体中文](./README_cn.md) - -## Mobile Benchmark -| Model | Size | mAPval
0.5:0.95 | sm8350
(ms) | mt6853
(ms) | sdm660
(ms) |Params
(M) | FLOPs
(G) | -| :----------------------------------------------------------- | ---- | -------------------- | -------------------- | -------------------- | -------------------- | -------------------- | -------------------- | -| [**YOLOv6Lite-S**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6lite_s.pt) | 320*320 | 22.4 | 7.99 | 11.99 | 41.86 | 0.55 | 0.56 | -| [**YOLOv6Lite-M**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6lite_m.pt) | 320*320 | 25.1 | 9.08 | 13.27 | 47.95 | 0.79 | 0.67 | -| [**YOLOv6Lite-L**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6lite_l.pt) | 320*320 | 28.0 | 11.37 | 16.20 | 61.40 | 1.09 | 0.87 | -| [**YOLOv6Lite-L**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6lite_l.pt) | 320*192 | 25.0 | 7.02 | 9.66 | 36.13 | 1.09 | 0.52 | -| [**YOLOv6Lite-L**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6lite_l.pt) | 224*128 | 18.9 | 3.63 | 4.99 | 17.76 | 1.09 | 0.24 | - -
-Table Notes - -- From the perspective of model size and input image ratio, we have built a series of models on the mobile terminal to facilitate flexible applications in different scenarios. -- All checkpoints are trained with 400 epochs without distillation. -- Results of the mAP and speed are evaluated on [COCO val2017](https://cocodataset.org/#download) dataset, and the input resolution is the Size in the table. -- Speed is tested on MNN 2.3.0 AArch64 with 2 threads by arm82 acceleration. The inference warm-up is performed 10 times, and the cycle is performed 100 times. -- Qualcomm 888(sm8350), Dimensity 720(mt6853) and Qualcomm 660(sdm660) correspond to chips with different performances at the high, middle and low end respectively, which can be used as a reference for model capabilities under different chips. -- Refer to [Test NCNN Speed](./docs/Test_NCNN_speed.md) tutorial to reproduce the NCNN speed results of YOLOv6Lite. diff --git a/cv/detection/yolov6/pytorch/configs/yolov6_lite/README_cn.md b/cv/detection/yolov6/pytorch/configs/yolov6_lite/README_cn.md deleted file mode 100644 index 23dd715e1..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6_lite/README_cn.md +++ /dev/null @@ -1,23 +0,0 @@ -## YOLOv6 轻量级模型 - -简体中文 | [English](./README.md) - -## 移动端模型指标 - -| 模型 | 输入尺寸 | mAPval
0.5:0.95 | sm8350
(ms) | mt6853
(ms) | sdm660
(ms) |Params
(M) | FLOPs
(G) | -| :----------------------------------------------------------- | ---- | -------------------- | -------------------- | -------------------- | -------------------- | -------------------- | -------------------- | -| [**YOLOv6Lite-S**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6lite_s.pt) | 320*320 | 22.4 | 7.99 | 11.99 | 41.86 | 0.55 | 0.56 | -| [**YOLOv6Lite-M**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6lite_m.pt) | 320*320 | 25.1 | 9.08 | 13.27 | 47.95 | 0.79 | 0.67 | -| [**YOLOv6Lite-L**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6lite_l.pt) | 320*320 | 28.0 | 11.37 | 16.20 | 61.40 | 1.09 | 0.87 | -| [**YOLOv6Lite-L**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6lite_l.pt) | 320*192 | 25.0 | 7.02 | 9.66 | 36.13 | 1.09 | 0.52 | -| [**YOLOv6Lite-L**](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6lite_l.pt) | 224*128 | 18.9 | 3.63 | 4.99 | 17.76 | 1.09 | 0.24 | - -
-表格笔记 - -- 从模型尺寸和输入图片比例两种角度,在构建了移动端系列模型,方便不同场景下的灵活应用。 -- 所有权重都经过 400 个 epoch 的训练,并且没有使用蒸馏技术。 -- mAP 和速度指标是在 COCO val2017 数据集上评估的,输入分辨率为表格中对应展示的。 -- 使用 MNN 2.3.0 AArch64 进行速度测试。测速时,采用2个线程,并开启arm82加速,推理预热10次,循环100次。 -- 高通888(sm8350)、天玑720(mt6853)和高通660(sdm660)分别对应高中低端不同性能的芯片,可以作为不同芯片下机型能力的参考。 -- [NCNN 速度测试](./docs/Test_NCNN_speed.md)教程可以帮助展示及复现 YOLOv6Lite 的 NCNN 速度结果。 diff --git a/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_l.py b/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_l.py deleted file mode 100644 index 212c8c73b..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_l.py +++ /dev/null @@ -1,54 +0,0 @@ -# YOLOv6-lite-l model -model = dict( - type='YOLOv6-lite-l', - pretrained=None, - width_multiple=1.5, - backbone=dict( - type='Lite_EffiBackbone', - num_repeats=[1, 3, 7, 3], - out_channels=[24, 32, 64, 128, 256], - scale_size=0.5, - ), - neck=dict( - type='Lite_EffiNeck', - in_channels=[256, 128, 64], - unified_channels=96 - ), - head=dict( - type='Lite_EffideHead', - in_channels=[96, 96, 96, 96], - num_layers=4, - anchors=1, - strides=[8, 16, 32, 64], - atss_warmup_epoch=4, - iou_type='siou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.1 * 4, - lrf=0.01, - momentum=0.9, - weight_decay=0.00004, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_l_finetune.py b/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_l_finetune.py deleted file mode 100644 index 6effa765e..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_l_finetune.py +++ /dev/null @@ -1,54 +0,0 @@ -# YOLOv6-lite-l model -model = dict( - type='YOLOv6-lite-l', - pretrained='weights/yolov6_lite_l.pt', - width_multiple=1.5, - backbone=dict( - type='Lite_EffiBackbone', - num_repeats=[1, 3, 7, 3], - out_channels=[24, 32, 64, 128, 256], - scale_size=0.5, - ), - neck=dict( - type='Lite_EffiNeck', - in_channels=[256, 128, 64], - unified_channels=96 - ), - head=dict( - type='Lite_EffideHead', - in_channels=[96, 96, 96, 96], - num_layers=4, - anchors=1, - strides=[8, 16, 32, 64], - atss_warmup_epoch=4, - iou_type='siou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_m.py b/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_m.py deleted file mode 100644 index 8f0de368d..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_m.py +++ /dev/null @@ -1,54 +0,0 @@ -# YOLOv6-lite-m model -model = dict( - type='YOLOv6-lite-m', - pretrained=None, - width_multiple=1.1, - backbone=dict( - type='Lite_EffiBackbone', - num_repeats=[1, 3, 7, 3], - out_channels=[24, 32, 64, 128, 256], - scale_size=0.5, - ), - neck=dict( - type='Lite_EffiNeck', - in_channels=[256, 128, 64], - unified_channels=96 - ), - head=dict( - type='Lite_EffideHead', - in_channels=[96, 96, 96, 96], - num_layers=4, - anchors=1, - strides=[8, 16, 32, 64], - atss_warmup_epoch=4, - iou_type='siou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.1 * 4, - lrf=0.01, - momentum=0.9, - weight_decay=0.00004, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_m_finetune.py b/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_m_finetune.py deleted file mode 100644 index 09fcd5c5f..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_m_finetune.py +++ /dev/null @@ -1,54 +0,0 @@ -# YOLOv6-lite-m model -model = dict( - type='YOLOv6-lite-m', - pretrained='weights/yolov6_lite_m.pt', - width_multiple=1.1, - backbone=dict( - type='Lite_EffiBackbone', - num_repeats=[1, 3, 7, 3], - out_channels=[24, 32, 64, 128, 256], - scale_size=0.5, - ), - neck=dict( - type='Lite_EffiNeck', - in_channels=[256, 128, 64], - unified_channels=96 - ), - head=dict( - type='Lite_EffideHead', - in_channels=[96, 96, 96, 96], - num_layers=4, - anchors=1, - strides=[8, 16, 32, 64], - atss_warmup_epoch=4, - iou_type='siou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_s.py b/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_s.py deleted file mode 100644 index 42a52e373..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_s.py +++ /dev/null @@ -1,54 +0,0 @@ -# YOLOv6-lite-s model -model = dict( - type='YOLOv6-lite-s', - pretrained=None, - width_multiple=0.7, - backbone=dict( - type='Lite_EffiBackbone', - num_repeats=[1, 3, 7, 3], - out_channels=[24, 32, 64, 128, 256], - scale_size=0.5, - ), - neck=dict( - type='Lite_EffiNeck', - in_channels=[256, 128, 64], - unified_channels=96 - ), - head=dict( - type='Lite_EffideHead', - in_channels=[96, 96, 96, 96], - num_layers=4, - anchors=1, - strides=[8, 16, 32, 64], - atss_warmup_epoch=4, - iou_type='siou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.1 * 4, - lrf=0.01, - momentum=0.9, - weight_decay=0.00004, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_s_finetune.py b/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_s_finetune.py deleted file mode 100644 index 967e16766..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6_lite/yolov6_lite_s_finetune.py +++ /dev/null @@ -1,54 +0,0 @@ -# YOLOv6-lite-s model -model = dict( - type='YOLOv6-lite-s', - pretrained='weights/yolov6_lite_s.pt', - width_multiple=0.7, - backbone=dict( - type='Lite_EffiBackbone', - num_repeats=[1, 3, 7, 3], - out_channels=[24, 32, 64, 128, 256], - scale_size=0.5, - ), - neck=dict( - type='Lite_EffiNeck', - in_channels=[256, 128, 64], - unified_channels=96 - ), - head=dict( - type='Lite_EffideHead', - in_channels=[96, 96, 96, 96], - num_layers=4, - anchors=1, - strides=[8, 16, 32, 64], - atss_warmup_epoch=4, - iou_type='siou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6l.py b/cv/detection/yolov6/pytorch/configs/yolov6l.py deleted file mode 100644 index bfa6728b5..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6l.py +++ /dev/null @@ -1,68 +0,0 @@ -# YOLOv6l model -model = dict( - type='YOLOv6l', - pretrained=None, - depth_multiple=1.0, - width_multiple=1.0, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - fuse_P2=True, - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 2.0, - 'dfl': 1.0, - }, - ) -) - -solver=dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.9, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.1, -) -training_mode = "conv_silu" -# use normal conv to speed up training and further improve accuracy. diff --git a/cv/detection/yolov6/pytorch/configs/yolov6l6.py b/cv/detection/yolov6/pytorch/configs/yolov6l6.py deleted file mode 100644 index 3bb77c5f5..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6l6.py +++ /dev/null @@ -1,62 +0,0 @@ -# YOLOv6l6 model -model = dict( - type='YOLOv6l6', - pretrained=None, - depth_multiple=1.0, - width_multiple=1.0, - backbone=dict( - type='CSPBepBackbone_P6', - num_repeats=[1, 6, 12, 18, 6, 6], - out_channels=[64, 128, 256, 512, 768, 1024], - csp_e=float(1)/2, - fuse_P2=True, - ), - neck=dict( - type='CSPRepBiFPANNeck_P6', - num_repeats=[12, 12, 12, 12, 12, 12], - out_channels=[512, 256, 128, 256, 512, 1024], - csp_e=float(1)/2, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512, 1024], - num_layers=4, - anchors=1, - strides=[8, 16, 32, 64], - atss_warmup_epoch=4, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.9, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.2, -) -training_mode = "conv_silu" diff --git a/cv/detection/yolov6/pytorch/configs/yolov6l6_finetune.py b/cv/detection/yolov6/pytorch/configs/yolov6l6_finetune.py deleted file mode 100644 index 2ffb8ada8..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6l6_finetune.py +++ /dev/null @@ -1,62 +0,0 @@ -# YOLOv6l6 model -model = dict( - type='YOLOv6l6', - pretrained='weights/yolov6l6.pt', - depth_multiple=1.0, - width_multiple=1.0, - backbone=dict( - type='CSPBepBackbone_P6', - num_repeats=[1, 6, 12, 18, 6, 6], - out_channels=[64, 128, 256, 512, 768, 1024], - csp_e=float(1)/2, - fuse_P2=True, - ), - neck=dict( - type='CSPRepBiFPANNeck_P6', - num_repeats=[12, 12, 12, 12, 12, 12], - out_channels=[512, 256, 128, 256, 512, 1024], - csp_e=float(1)/2, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512, 1024], - num_layers=4, - anchors=1, - strides=[8, 16, 32, 64], - atss_warmup_epoch=4, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) -training_mode = "conv_silu" diff --git a/cv/detection/yolov6/pytorch/configs/yolov6l_finetune.py b/cv/detection/yolov6/pytorch/configs/yolov6l_finetune.py deleted file mode 100644 index 9b3012338..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6l_finetune.py +++ /dev/null @@ -1,68 +0,0 @@ -# YOLOv6l model -model = dict( - type='YOLOv6l', - pretrained='weights/yolov6l.pt', - depth_multiple=1.0, - width_multiple=1.0, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(1)/2, - fuse_P2=True, - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(1)/2, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 2.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) -training_mode = "conv_silu" -# use normal conv to speed up training and further improve accuracy. diff --git a/cv/detection/yolov6/pytorch/configs/yolov6m.py b/cv/detection/yolov6/pytorch/configs/yolov6m.py deleted file mode 100644 index 29fae396e..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6m.py +++ /dev/null @@ -1,66 +0,0 @@ -# YOLOv6m model -model = dict( - type='YOLOv6m', - pretrained=None, - depth_multiple=0.60, - width_multiple=0.75, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(2)/3, - fuse_P2=True, - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(2)/3, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 0.8, - 'dfl': 1.0, - }, - ) -) - -solver=dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.9, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.1, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6m6.py b/cv/detection/yolov6/pytorch/configs/yolov6m6.py deleted file mode 100644 index e741bbc03..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6m6.py +++ /dev/null @@ -1,61 +0,0 @@ -# YOLOv6m6 model -model = dict( - type='YOLOv6m6', - pretrained=None, - depth_multiple=0.60, - width_multiple=0.75, - backbone=dict( - type='CSPBepBackbone_P6', - num_repeats=[1, 6, 12, 18, 6, 6], - out_channels=[64, 128, 256, 512, 768, 1024], - csp_e=float(2)/3, - fuse_P2=True, - ), - neck=dict( - type='CSPRepBiFPANNeck_P6', - num_repeats=[12, 12, 12, 12, 12, 12], - out_channels=[512, 256, 128, 256, 512, 1024], - csp_e=float(2)/3, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512, 1024], - num_layers=4, - anchors=1, - strides=[8, 16, 32, 64], - atss_warmup_epoch=4, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.9, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.1, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6m6_finetune.py b/cv/detection/yolov6/pytorch/configs/yolov6m6_finetune.py deleted file mode 100644 index 83760d3a1..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6m6_finetune.py +++ /dev/null @@ -1,61 +0,0 @@ -# YOLOv6m6 model -model = dict( - type='YOLOv6m6', - pretrained='weights/yolov6m6.pt', - depth_multiple=0.60, - width_multiple=0.75, - backbone=dict( - type='CSPBepBackbone_P6', - num_repeats=[1, 6, 12, 18, 6, 6], - out_channels=[64, 128, 256, 512, 768, 1024], - csp_e=float(2)/3, - fuse_P2=True, - ), - neck=dict( - type='CSPRepBiFPANNeck_P6', - num_repeats=[12, 12, 12, 12, 12, 12], - out_channels=[512, 256, 128, 256, 512, 1024], - csp_e=float(2)/3, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512, 1024], - num_layers=4, - anchors=1, - strides=[8, 16, 32, 64], - atss_warmup_epoch=4, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6m_finetune.py b/cv/detection/yolov6/pytorch/configs/yolov6m_finetune.py deleted file mode 100644 index cfe0fa935..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6m_finetune.py +++ /dev/null @@ -1,66 +0,0 @@ -# YOLOv6m model -model = dict( - type='YOLOv6m', - pretrained='weights/yolov6m.pt', - depth_multiple=0.60, - width_multiple=0.75, - backbone=dict( - type='CSPBepBackbone', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - csp_e=float(2)/3, - fuse_P2=True, - ), - neck=dict( - type='CSPRepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - csp_e=float(2)/3, - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=True, - reg_max=16, #if use_dfl is False, please set reg_max to 0 - distill_weight={ - 'class': 0.8, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6n.py b/cv/detection/yolov6/pytorch/configs/yolov6n.py deleted file mode 100644 index 74f9386d7..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6n.py +++ /dev/null @@ -1,65 +0,0 @@ -# YOLOv6n model -model = dict( - type='YOLOv6n', - pretrained=None, - depth_multiple=0.33, - width_multiple=0.25, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - fuse_P2=True, - cspsppf=True, - ), - neck=dict( - type='RepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='siou', - use_dfl=False, # set to True if you want to further train with distillation - reg_max=0, # set to 16 if you want to further train with distillation - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.02, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6n6.py b/cv/detection/yolov6/pytorch/configs/yolov6n6.py deleted file mode 100644 index 0abe3a44d..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6n6.py +++ /dev/null @@ -1,56 +0,0 @@ -# YOLOv6n model -model = dict( - type='YOLOv6n6', - pretrained=None, - depth_multiple=0.33, - width_multiple=0.25, - backbone=dict( - type='EfficientRep6', - num_repeats=[1, 6, 12, 18, 6, 6], - out_channels=[64, 128, 256, 512, 768, 1024], - fuse_P2=True, # if use RepBiFPANNeck6, please set fuse_P2 to True. - cspsppf=True, - ), - neck=dict( - type='RepBiFPANNeck6', - num_repeats=[12, 12, 12, 12, 12, 12], - out_channels=[512, 256, 128, 256, 512, 1024], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512, 1024], - num_layers=4, - anchors=1, - strides=[8, 16, 32, 64], - atss_warmup_epoch=4, - iou_type='siou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.02, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6n6_finetune.py b/cv/detection/yolov6/pytorch/configs/yolov6n6_finetune.py deleted file mode 100644 index 01100f0f6..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6n6_finetune.py +++ /dev/null @@ -1,56 +0,0 @@ -# YOLOv6n model -model = dict( - type='YOLOv6n6', - pretrained='weights/yolov6n6.pt', - depth_multiple=0.33, - width_multiple=0.25, - backbone=dict( - type='EfficientRep6', - num_repeats=[1, 6, 12, 18, 6, 6], - out_channels=[64, 128, 256, 512, 768, 1024], - fuse_P2=True, # if use RepBiFPANNeck6, please set fuse_P2 to True. - cspsppf=True, - ), - neck=dict( - type='RepBiFPANNeck6', - num_repeats=[12, 12, 12, 12, 12, 12], - out_channels=[512, 256, 128, 256, 512, 1024], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512, 1024], - num_layers=4, - anchors=1, - strides=[8, 16, 32, 64], - atss_warmup_epoch=4, - iou_type='siou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6n_finetune.py b/cv/detection/yolov6/pytorch/configs/yolov6n_finetune.py deleted file mode 100644 index 03b6d1baa..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6n_finetune.py +++ /dev/null @@ -1,65 +0,0 @@ -# YOLOv6s model -model = dict( - type='YOLOv6n', - pretrained='weights/yolov6n.pt', - depth_multiple=0.33, - width_multiple=0.25, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - fuse_P2=True, - cspsppf=True, - ), - neck=dict( - type='RepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='siou', - use_dfl=False, # set to True if you want to further train with distillation - reg_max=0, # set to 16 if you want to further train with distillation - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6s.py b/cv/detection/yolov6/pytorch/configs/yolov6s.py deleted file mode 100644 index 8d8b6739c..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6s.py +++ /dev/null @@ -1,65 +0,0 @@ -# YOLOv6s model -model = dict( - type='YOLOv6s', - pretrained=None, - depth_multiple=0.33, - width_multiple=0.50, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - fuse_P2=True, - cspsppf=True, - ), - neck=dict( - type='RepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=False, # set to True if you want to further train with distillation - reg_max=0, # set to 16 if you want to further train with distillation - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6s6.py b/cv/detection/yolov6/pytorch/configs/yolov6s6.py deleted file mode 100644 index 091bfffca..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6s6.py +++ /dev/null @@ -1,56 +0,0 @@ -# YOLOv6n model -model = dict( - type='YOLOv6s6', - pretrained=None, - depth_multiple=0.33, - width_multiple=0.50, - backbone=dict( - type='EfficientRep6', - num_repeats=[1, 6, 12, 18, 6, 6], - out_channels=[64, 128, 256, 512, 768, 1024], - fuse_P2=True, # if use RepBiFPANNeck6, please set fuse_P2 to True. - cspsppf=True, - ), - neck=dict( - type='RepBiFPANNeck6', - num_repeats=[12, 12, 12, 12, 12, 12], - out_channels=[512, 256, 128, 256, 512, 1024], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512, 1024], - num_layers=4, - anchors=1, - strides=[8, 16, 32, 64], - atss_warmup_epoch=4, - iou_type='giou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.01, - lrf=0.01, - momentum=0.937, - weight_decay=0.0005, - warmup_epochs=3.0, - warmup_momentum=0.8, - warmup_bias_lr=0.1 -) - -data_aug = dict( - hsv_h=0.015, - hsv_s=0.7, - hsv_v=0.4, - degrees=0.0, - translate=0.1, - scale=0.5, - shear=0.0, - flipud=0.0, - fliplr=0.5, - mosaic=1.0, - mixup=0.0, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6s6_finetune.py b/cv/detection/yolov6/pytorch/configs/yolov6s6_finetune.py deleted file mode 100644 index a22697ed3..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6s6_finetune.py +++ /dev/null @@ -1,56 +0,0 @@ -# YOLOv6n model -model = dict( - type='YOLOv6s6', - pretrained='weights/yolov6s6.pt', - depth_multiple=0.33, - width_multiple=0.50, - backbone=dict( - type='EfficientRep6', - num_repeats=[1, 6, 12, 18, 6, 6], - out_channels=[64, 128, 256, 512, 768, 1024], - fuse_P2=True, # if use RepBiFPANNeck6, please set fuse_P2 to True. - cspsppf=True, - ), - neck=dict( - type='RepBiFPANNeck6', - num_repeats=[12, 12, 12, 12, 12, 12], - out_channels=[512, 256, 128, 256, 512, 1024], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512, 1024], - num_layers=4, - anchors=1, - strides=[8, 16, 32, 64], - atss_warmup_epoch=4, - iou_type='giou', - use_dfl=False, - reg_max=0 #if use_dfl is False, please set reg_max to 0 - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) diff --git a/cv/detection/yolov6/pytorch/configs/yolov6s_finetune.py b/cv/detection/yolov6/pytorch/configs/yolov6s_finetune.py deleted file mode 100644 index d6fb27fe8..000000000 --- a/cv/detection/yolov6/pytorch/configs/yolov6s_finetune.py +++ /dev/null @@ -1,65 +0,0 @@ -# YOLOv6s model -model = dict( - type='YOLOv6s', - pretrained='weights/yolov6s.pt', - depth_multiple=0.33, - width_multiple=0.50, - backbone=dict( - type='EfficientRep', - num_repeats=[1, 6, 12, 18, 6], - out_channels=[64, 128, 256, 512, 1024], - fuse_P2=True, - cspsppf=True, - ), - neck=dict( - type='RepBiFPANNeck', - num_repeats=[12, 12, 12, 12], - out_channels=[256, 128, 128, 256, 256, 512], - ), - head=dict( - type='EffiDeHead', - in_channels=[128, 256, 512], - num_layers=3, - begin_indices=24, - anchors=3, - anchors_init=[[10,13, 19,19, 33,23], - [30,61, 59,59, 59,119], - [116,90, 185,185, 373,326]], - out_indices=[17, 20, 23], - strides=[8, 16, 32], - atss_warmup_epoch=0, - iou_type='giou', - use_dfl=False, # set to True if you want to further train with distillation - reg_max=0, # set to 16 if you want to further train with distillation - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - }, - ) -) - -solver = dict( - optim='SGD', - lr_scheduler='Cosine', - lr0=0.0032, - lrf=0.12, - momentum=0.843, - weight_decay=0.00036, - warmup_epochs=2.0, - warmup_momentum=0.5, - warmup_bias_lr=0.05 -) - -data_aug = dict( - hsv_h=0.0138, - hsv_s=0.664, - hsv_v=0.464, - degrees=0.373, - translate=0.245, - scale=0.898, - shear=0.602, - flipud=0.00856, - fliplr=0.5, - mosaic=1.0, - mixup=0.243, -) diff --git a/cv/detection/yolov6/pytorch/data/coco.yaml b/cv/detection/yolov6/pytorch/data/coco.yaml deleted file mode 100644 index ff88acbeb..000000000 --- a/cv/detection/yolov6/pytorch/data/coco.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# COCO 2017 dataset http://cocodataset.org -train: ./coco/images/train2017 # 118287 images -val: ./coco/images/val2017 # 5000 images -test: ./coco/images/val2017 -anno_path: ./coco/annotations/instances_val2017.json - -# number of classes -nc: 80 -# whether it is coco dataset, only coco dataset should be set to True. -is_coco: True - -# class names -names: [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', - 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', - 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', - 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', - 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', - 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', - 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', - 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', - 'hair drier', 'toothbrush' ] diff --git a/cv/detection/yolov6/pytorch/data/dataset.yaml b/cv/detection/yolov6/pytorch/data/dataset.yaml deleted file mode 100644 index 6e0269215..000000000 --- a/cv/detection/yolov6/pytorch/data/dataset.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Please insure that your custom_dataset are put in same parent dir with YOLOv6_DIR -train: ../custom_dataset/images/train # train images -val: ../custom_dataset/images/val # val images -test: ../custom_dataset/images/test # test images (optional) - -# whether it is coco dataset, only coco dataset should be set to True. -is_coco: False -# Classes -nc: 20 # number of classes -names: ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', - 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor'] # class names diff --git a/cv/detection/yolov6/pytorch/data/voc.yaml b/cv/detection/yolov6/pytorch/data/voc.yaml deleted file mode 100644 index d6aa6a622..000000000 --- a/cv/detection/yolov6/pytorch/data/voc.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# Please insure that your custom_dataset are put in same parent dir with YOLOv6_DIR -train: VOCdevkit/voc_07_12/images/train # train images -val: VOCdevkit/voc_07_12/images/val # val images -test: VOCdevkit/voc_07_12/images/val # test images (optional) - -# whether it is coco dataset, only coco dataset should be set to True. -is_coco: False -# Classes -nc: 20 # number of classes -names: ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', - 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor'] # class names diff --git a/cv/detection/yolov6/pytorch/hubconf.py b/cv/detection/yolov6/pytorch/hubconf.py deleted file mode 100644 index 13ec92ab2..000000000 --- a/cv/detection/yolov6/pytorch/hubconf.py +++ /dev/null @@ -1,182 +0,0 @@ -import os -import cv2 -import math -import pathlib -import torch -import numpy as np -from PIL import Image -import matplotlib.pyplot as plt - -from yolov6.layers.common import DetectBackend -from yolov6.utils.nms import non_max_suppression -from yolov6.data.data_augment import letterbox -from yolov6.core.inferer import Inferer -from yolov6.utils.events import LOGGER -from yolov6.utils.events import load_yaml - -PATH_YOLOv6 = pathlib.Path(__file__).parent -DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu') -CLASS_NAMES = load_yaml(str(PATH_YOLOv6/"data/coco.yaml"))['names'] - - -def visualize_detections(image, - boxes, - classes, - scores, - min_score=0.4, - figsize=(16, 16), - linewidth=2, - color='lawngreen' - ): - image = np.array(image, dtype=np.uint8) - fig = plt.figure(figsize=figsize) - plt.axis("off") - plt.imshow(image) - ax = plt.gca() - for box, name, score in zip(boxes, classes, scores): - if score >= min_score: - text = "{}: {:.2f}".format(name, score) - x1, y1, x2, y2 = box - w, h = x2 - x1, y2 - y1 - patch = plt.Rectangle( - [x1, y1], w, h, fill=False, edgecolor=color, linewidth=linewidth - ) - ax.add_patch(patch) - ax.text( - x1, - y1, - text, - bbox={"facecolor": color, "alpha": 0.8}, - clip_box=ax.clipbox, - clip_on=True, - ) - plt.show() - - -def check_img_size(img_size, s=32, floor=0): - def make_divisible(x, divisor): - return math.ceil(x / divisor) * divisor - if isinstance(img_size, int): # integer i.e. img_size=640 - new_size = max(make_divisible(img_size, int(s)), floor) - elif isinstance(img_size, list): # list i.e. img_size=[640, 480] - new_size = [max(make_divisible(x, int(s)), floor) for x in img_size] - else: - raise Exception(f"Unsupported type of img_size: {type(img_size)}") - - if new_size != img_size: - LOGGER.info( - f'WARNING: --img-size {img_size} must be multiple of max stride {s}, updating to {new_size}') - return new_size if isinstance(img_size, list) else [new_size] * 2 - - -def process_image(path, img_size, stride): - '''Preprocess image before inference.''' - try: - img_src = cv2.imread(path) - img_src = cv2.cvtColor(img_src, cv2.COLOR_RGB2BGR) - assert img_src is not None, f"opencv cannot read image correctly or {path} not exists" - except: - img_src = np.asarray(Image.open(path)) - assert img_src is not None, f"Image Not Found {path}, workdir: {os.getcwd()}" - - image = letterbox(img_src, img_size, stride=stride)[0] - image = image.transpose((2, 0, 1)) # HWC to CHW - image = torch.from_numpy(np.ascontiguousarray(image)) - image = image.float() - image /= 255 - return image, img_src - - -class Detector(DetectBackend): - def __init__(self, - ckpt_path, - class_names, - device, - img_size=640, - conf_thres=0.25, - iou_thres=0.45, - max_det=1000): - super().__init__(ckpt_path, device) - self.class_names = class_names - self.model.float() - self.device = device - self.img_size = check_img_size(img_size) - self.conf_thres = conf_thres - self.iou_thres = iou_thres - self.max_det = max_det - - def forward(self, x, src_shape): - pred_results = super().forward(x) - classes = None # the classes to keep - det = non_max_suppression(pred_results, self.conf_thres, self.iou_thres, - classes, agnostic=False, max_det=self.max_det)[0] - - det[:, :4] = Inferer.rescale( - x.shape[2:], det[:, :4], src_shape).round() - boxes = det[:, :4] - scores = det[:, 4] - labels = det[:, 5].long() - prediction = {'boxes': boxes, 'scores': scores, 'labels': labels} - return prediction - - def predict(self, img_path): - img, img_src = process_image(img_path, self.img_size, 32) - img = img.to(self.device) - if len(img.shape) == 3: - img = img[None] - - prediction = self.forward(img, img_src.shape) - out = {k: v.cpu().numpy() for k, v in prediction.items()} - out['classes'] = [self.class_names[i] for i in out['labels']] - return out - - def show_predict(self, - img_path, - min_score=0.5, - figsize=(16, 16), - color='lawngreen', - linewidth=2): - prediction = self.predict(img_path) - boxes, scores, classes = prediction['boxes'], prediction['scores'], prediction['classes'] - visualize_detections(Image.open(img_path), - boxes, classes, scores, - min_score=min_score, figsize=figsize, color=color, linewidth=linewidth - ) - - -def create_model(model_name, class_names=CLASS_NAMES, device=DEVICE, - img_size=640, conf_thres=0.25, iou_thres=0.45, max_det=1000): - if not os.path.exists(str(PATH_YOLOv6/'weights')): - os.mkdir(str(PATH_YOLOv6/'weights')) - if not os.path.exists(str(PATH_YOLOv6/'weights') + f'/{model_name}.pt'): - torch.hub.load_state_dict_from_url( - f"https://github.com/meituan/YOLOv6/releases/download/0.3.0/{model_name}.pt", - str(PATH_YOLOv6/'weights')) - return Detector(str(PATH_YOLOv6/'weights') + f'/{model_name}.pt', - class_names, device, img_size=img_size, conf_thres=conf_thres, - iou_thres=iou_thres, max_det=max_det) - - -def yolov6n(class_names=CLASS_NAMES, device=DEVICE, img_size=640, conf_thres=0.25, iou_thres=0.45, max_det=1000): - return create_model('yolov6n', class_names, device, img_size=img_size, conf_thres=conf_thres, - iou_thres=iou_thres, max_det=max_det) - - -def yolov6s(class_names=CLASS_NAMES, device=DEVICE, img_size=640, conf_thres=0.25, iou_thres=0.45, max_det=1000): - return create_model('yolov6s', class_names, device, img_size=img_size, conf_thres=conf_thres, - iou_thres=iou_thres, max_det=max_det) - - -def yolov6m(class_names=CLASS_NAMES, device=DEVICE, img_size=640, conf_thres=0.25, iou_thres=0.45, max_det=1000): - return create_model('yolov6m', class_names, device, img_size=img_size, conf_thres=conf_thres, - iou_thres=iou_thres, max_det=max_det) - - -def yolov6l(class_names=CLASS_NAMES, device=DEVICE, img_size=640, conf_thres=0.25, iou_thres=0.45, max_det=1000): - return create_model('yolov6l', class_names, device, img_size=img_size, conf_thres=conf_thres, - iou_thres=iou_thres, max_det=max_det) - - -def custom(ckpt_path, class_names, device=DEVICE, img_size=640, conf_thres=0.25, iou_thres=0.45, max_det=1000): - return Detector(ckpt_path, class_names, device, img_size=img_size, conf_thres=conf_thres, - iou_thres=iou_thres, max_det=max_det) diff --git a/cv/detection/yolov6/pytorch/requirements.txt b/cv/detection/yolov6/pytorch/requirements.txt deleted file mode 100644 index 046e8145b..000000000 --- a/cv/detection/yolov6/pytorch/requirements.txt +++ /dev/null @@ -1,14 +0,0 @@ -# torch>=1.8.0 -# torchvision>=0.9.0 -numpy>=1.19.5 -opencv-python>=4.1.2 -PyYAML>=5.3.1 -scipy>=1.4.1 -tqdm>=4.41.0 -addict>=2.4.0 -tensorboard>=2.7.0 -pycocotools>=2.0 -# onnx>=1.10.0 # ONNX export -# onnx-simplifier>=0.3.6 # ONNX simplifier -thop # FLOPs computation -# pytorch_quantization>=2.1.1 diff --git a/cv/detection/yolov6/pytorch/tools/eval.py b/cv/detection/yolov6/pytorch/tools/eval.py deleted file mode 100644 index 5543029c1..000000000 --- a/cv/detection/yolov6/pytorch/tools/eval.py +++ /dev/null @@ -1,169 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- -import argparse -import os -import os.path as osp -import sys -import torch - -ROOT = os.getcwd() -if str(ROOT) not in sys.path: - sys.path.append(str(ROOT)) - -from yolov6.core.evaler import Evaler -from yolov6.utils.events import LOGGER -from yolov6.utils.general import increment_name, check_img_size -from yolov6.utils.config import Config - -def boolean_string(s): - if s not in {'False', 'True'}: - raise ValueError('Not a valid boolean string') - return s == 'True' - -def get_args_parser(add_help=True): - parser = argparse.ArgumentParser(description='YOLOv6 PyTorch Evalating', add_help=add_help) - parser.add_argument('--data', type=str, default='./data/coco.yaml', help='dataset.yaml path') - parser.add_argument('--weights', type=str, default='./weights/yolov6s.pt', help='model.pt path(s)') - parser.add_argument('--batch-size', type=int, default=32, help='batch size') - parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)') - parser.add_argument('--conf-thres', type=float, default=0.03, help='confidence threshold') - parser.add_argument('--iou-thres', type=float, default=0.65, help='NMS IoU threshold') - parser.add_argument('--task', default='val', help='val, test, or speed') - parser.add_argument('--device', default='0', help='cuda device, i.e. 0 or 0,1,2,3 or cpu') - parser.add_argument('--half', default=False, action='store_true', help='whether to use fp16 infer') - parser.add_argument('--save_dir', type=str, default='runs/val/', help='evaluation save dir') - parser.add_argument('--name', type=str, default='exp', help='save evaluation results to save_dir/name') - parser.add_argument('--shrink_size', type=int, default=0, help='load img resize when test') - parser.add_argument('--infer_on_rect', default=True, type=boolean_string, help='default to run with rectangle image to boost speed.') - parser.add_argument('--reproduce_640_eval', default=False, action='store_true', help='whether to reproduce 640 infer result, overwrite some config') - parser.add_argument('--eval_config_file', type=str, default='./configs/experiment/eval_640_repro.py', help='config file for repro 640 infer result') - parser.add_argument('--do_coco_metric', default=True, type=boolean_string, help='whether to use pycocotool to metric, set False to close') - parser.add_argument('--do_pr_metric', default=False, type=boolean_string, help='whether to calculate precision, recall and F1, n, set False to close') - parser.add_argument('--plot_curve', default=True, type=boolean_string, help='whether to save plots in savedir when do pr metric, set False to close') - parser.add_argument('--plot_confusion_matrix', default=False, action='store_true', help='whether to save confusion matrix plots when do pr metric, might cause no harm warning print') - parser.add_argument('--verbose', default=False, action='store_true', help='whether to print metric on each class') - parser.add_argument('--config-file', default='', type=str, help='experiments description file, lower priority than reproduce_640_eval') - parser.add_argument('--specific-shape', action='store_true', help='rectangular training') - parser.add_argument('--height', type=int, default=None, help='image height of model input') - parser.add_argument('--width', type=int, default=None, help='image width of model input') - args = parser.parse_args() - - if args.config_file: - assert os.path.exists(args.config_file), print("Config file {} does not exist".format(args.config_file)) - cfg = Config.fromfile(args.config_file) - if not hasattr(cfg, 'eval_params'): - LOGGER.info("Config file doesn't has eval params config.") - else: - eval_params=cfg.eval_params - for key, value in eval_params.items(): - if key not in args.__dict__: - LOGGER.info(f"Unrecognized config {key}, continue") - continue - if isinstance(value, list): - if value[1] is not None: - args.__dict__[key] = value[1] - else: - if value is not None: - args.__dict__[key] = value - - # load params for reproduce 640 eval result - if args.reproduce_640_eval: - assert os.path.exists(args.eval_config_file), print("Reproduce config file {} does not exist".format(args.eval_config_file)) - eval_params = Config.fromfile(args.eval_config_file).eval_params - eval_model_name = os.path.splitext(os.path.basename(args.weights))[0] - if eval_model_name not in eval_params: - eval_model_name = "default" - args.shrink_size = eval_params[eval_model_name]["shrink_size"] - args.infer_on_rect = eval_params[eval_model_name]["infer_on_rect"] - #force params - #args.img_size = 640 - args.conf_thres = 0.03 - args.iou_thres = 0.65 - args.task = "val" - args.do_coco_metric = True - - LOGGER.info(args) - return args - - -@torch.no_grad() -def run(data, - weights=None, - batch_size=32, - img_size=640, - conf_thres=0.03, - iou_thres=0.65, - task='val', - device='', - half=False, - model=None, - dataloader=None, - save_dir='', - name = '', - shrink_size=640, - letterbox_return_int=False, - infer_on_rect=False, - reproduce_640_eval=False, - eval_config_file='./configs/experiment/eval_640_repro.py', - verbose=False, - do_coco_metric=True, - do_pr_metric=False, - plot_curve=False, - plot_confusion_matrix=False, - config_file=None, - specific_shape=False, - height=640, - width=640 - ): - """ Run the evaluation process - - This function is the main process of evaluation, supporting image file and dir containing images. - It has tasks of 'val', 'train' and 'speed'. Task 'train' processes the evaluation during training phase. - Task 'val' processes the evaluation purely and return the mAP of model.pt. Task 'speed' processes the - evaluation of inference speed of model.pt. - - """ - - # task - Evaler.check_task(task) - if task == 'train': - save_dir = save_dir - else: - save_dir = str(increment_name(osp.join(save_dir, name))) - os.makedirs(save_dir, exist_ok=True) - - # check the threshold value, reload device/half/data according task - Evaler.check_thres(conf_thres, iou_thres, task) - device = Evaler.reload_device(device, model, task) - half = device.type != 'cpu' and half - data = Evaler.reload_dataset(data, task) if isinstance(data, str) else data - - # # verify imgsz is gs-multiple - if specific_shape: - height = check_img_size(height, 32, floor=256) - width = check_img_size(width, 32, floor=256) - else: - img_size = check_img_size(img_size, 32, floor=256) - val = Evaler(data, batch_size, img_size, conf_thres, \ - iou_thres, device, half, save_dir, \ - shrink_size, infer_on_rect, - verbose, do_coco_metric, do_pr_metric, - plot_curve, plot_confusion_matrix, - specific_shape=specific_shape,height=height, width=width) - model = val.init_model(model, weights, task) - dataloader = val.init_data(dataloader, task) - - # eval - model.eval() - pred_result, vis_outputs, vis_paths = val.predict_model(model, dataloader, task) - eval_result = val.eval_model(pred_result, model, dataloader, task) - return eval_result, vis_outputs, vis_paths - - -def main(args): - run(**vars(args)) - - -if __name__ == "__main__": - args = get_args_parser() - main(args) diff --git a/cv/detection/yolov6/pytorch/tools/infer.py b/cv/detection/yolov6/pytorch/tools/infer.py deleted file mode 100644 index 95b3fdc7f..000000000 --- a/cv/detection/yolov6/pytorch/tools/infer.py +++ /dev/null @@ -1,120 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- -import argparse -import os -import sys -import os.path as osp - -import torch - -ROOT = os.getcwd() -if str(ROOT) not in sys.path: - sys.path.append(str(ROOT)) - -from yolov6.utils.events import LOGGER -from yolov6.core.inferer import Inferer - - -def get_args_parser(add_help=True): - parser = argparse.ArgumentParser(description='YOLOv6 PyTorch Inference.', add_help=add_help) - parser.add_argument('--weights', type=str, default='weights/yolov6s.pt', help='model path(s) for inference.') - parser.add_argument('--source', type=str, default='data/images', help='the source path, e.g. image-file/dir.') - parser.add_argument('--webcam', action='store_true', help='whether to use webcam.') - parser.add_argument('--webcam-addr', type=str, default='0', help='the web camera address, local camera or rtsp address.') - parser.add_argument('--yaml', type=str, default='data/coco.yaml', help='data yaml file.') - parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='the image-size(h,w) in inference size.') - parser.add_argument('--conf-thres', type=float, default=0.4, help='confidence threshold for inference.') - parser.add_argument('--iou-thres', type=float, default=0.45, help='NMS IoU threshold for inference.') - parser.add_argument('--max-det', type=int, default=1000, help='maximal inferences per image.') - parser.add_argument('--device', default='0', help='device to run our model i.e. 0 or 0,1,2,3 or cpu.') - parser.add_argument('--save-txt', action='store_true', help='save results to *.txt.') - parser.add_argument('--not-save-img', action='store_true', help='do not save visuallized inference results.') - parser.add_argument('--save-dir', type=str, help='directory to save predictions in. See --save-txt.') - parser.add_argument('--view-img', action='store_true', help='show inference results') - parser.add_argument('--classes', nargs='+', type=int, help='filter by classes, e.g. --classes 0, or --classes 0 2 3.') - parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS.') - parser.add_argument('--project', default='runs/inference', help='save inference results to project/name.') - parser.add_argument('--name', default='exp', help='save inference results to project/name.') - parser.add_argument('--hide-labels', default=False, action='store_true', help='hide labels.') - parser.add_argument('--hide-conf', default=False, action='store_true', help='hide confidences.') - parser.add_argument('--half', action='store_true', help='whether to use FP16 half-precision inference.') - - args = parser.parse_args() - LOGGER.info(args) - return args - - -@torch.no_grad() -def run(weights=osp.join(ROOT, 'yolov6s.pt'), - source=osp.join(ROOT, 'data/images'), - webcam=False, - webcam_addr=0, - yaml=None, - img_size=640, - conf_thres=0.4, - iou_thres=0.45, - max_det=1000, - device='', - save_txt=False, - not_save_img=False, - save_dir=None, - view_img=True, - classes=None, - agnostic_nms=False, - project=osp.join(ROOT, 'runs/inference'), - name='exp', - hide_labels=False, - hide_conf=False, - half=False, - ): - """ Inference process, supporting inference on one image file or directory which containing images. - Args: - weights: The path of model.pt, e.g. yolov6s.pt - source: Source path, supporting image files or dirs containing images. - yaml: Data yaml file, . - img_size: Inference image-size, e.g. 640 - conf_thres: Confidence threshold in inference, e.g. 0.25 - iou_thres: NMS IOU threshold in inference, e.g. 0.45 - max_det: Maximal detections per image, e.g. 1000 - device: Cuda device, e.e. 0, or 0,1,2,3 or cpu - save_txt: Save results to *.txt - not_save_img: Do not save visualized inference results - classes: Filter by class: --class 0, or --class 0 2 3 - agnostic_nms: Class-agnostic NMS - project: Save results to project/name - name: Save results to project/name, e.g. 'exp' - line_thickness: Bounding box thickness (pixels), e.g. 3 - hide_labels: Hide labels, e.g. False - hide_conf: Hide confidences - half: Use FP16 half-precision inference, e.g. False - """ - # create save dir - if save_dir is None: - save_dir = osp.join(project, name) - save_txt_path = osp.join(save_dir, 'labels') - else: - save_txt_path = save_dir - if (not not_save_img or save_txt) and not osp.exists(save_dir): - os.makedirs(save_dir) - else: - LOGGER.warning('Save directory already existed') - if save_txt: - save_txt_path = osp.join(save_dir, 'labels') - if not osp.exists(save_txt_path): - os.makedirs(save_txt_path) - - # Inference - inferer = Inferer(source, webcam, webcam_addr, weights, device, yaml, img_size, half) - inferer.infer(conf_thres, iou_thres, classes, agnostic_nms, max_det, save_dir, save_txt, not not_save_img, hide_labels, hide_conf, view_img) - - if save_txt or not not_save_img: - LOGGER.info(f"Results saved to {save_dir}") - - -def main(args): - run(**vars(args)) - - -if __name__ == "__main__": - args = get_args_parser() - main(args) diff --git a/cv/detection/yolov6/pytorch/tools/partial_quantization/README.md b/cv/detection/yolov6/pytorch/tools/partial_quantization/README.md deleted file mode 100644 index 3a15a39dd..000000000 --- a/cv/detection/yolov6/pytorch/tools/partial_quantization/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Partial Quantization -The performance of YOLOv6s heavily degrades from 42.4% to 35.6% after traditional PTQ, which is unacceptable. To resolve this issue, we propose **partial quantization**. First we analyze the quantization sensitivity of all layers, and then we let the most sensitive layers to have full precision as a compromise. - -With partial quantization, we finally reach 42.1%, only 0.3% loss in accuracy, while the throughput of the partially quantized model is about 1.56 times that of the FP16 model at a batch size of 32. This method achieves a nice tradeoff between accuracy and throughput. - -## Prerequirements -```python -pip install --extra-index-url=https://pypi.ngc.nvidia.com --trusted-host pypi.ngc.nvidia.com nvidia-pyindex -pip install --extra-index-url=https://pypi.ngc.nvidia.com --trusted-host pypi.ngc.nvidia.com pytorch_quantization -``` -## Sensitivity analysis - -Please use the following command to perform sensitivity analysis. Since we randomly sample 128 images from train dataset each time, the sensitivity files will be slightly different. - -```python - python3 sensitivity_analyse.py --weights yolov6s_reopt.pt \ - --batch-size 32 \ - --batch-number 4 \ - --data-root train_data_path -``` - -## Partial quantization - -With the sensitivity file at hand, we then proceed with partial quantization as follows. - -```python -python3 partial_quant.py --weights yolov6s_reopt.pt \ - --calib-weights yolov6s_repot_calib.pt \ - --sensitivity-file yolov6s_reopt_sensivitiy_128_calib.txt \ - --quant-boundary 55 \ - --export-batch-size 1 -``` - -## Deployment - -Build a TRT engine - -```python -trtexec --workspace=1024 --percentile=99 --streams=1 --int8 --fp16 --avgRuns=10 --onnx=yolov6s_reopt_partial_bs1.sim.onnx --saveEngine=yolov6s_reopt_partial_bs1.sim.trt -``` - -## Performance -| Model | Size | Precision |mAPval
0.5:0.95 | SpeedT4
trt b1
(fps) | SpeedT4
trt b32
(fps) | -| :-------------- | ----------- | ----------- |:----------------------- | ---------------------------------------- | -----------------------------------| -| [**YOLOv6-s-partial**]
[bs1](https://github.com/lippman1125/YOLOv6/releases/download/0.1.0/yolov6s_reopt_partial_bs1.sim.onnx)
[bs32](https://github.com/lippman1125/YOLOv6/releases/download/0.1.0/yolov6s_reopt_partial_bs32.sim.onnx)
| 640 | INT8 |42.1 | 503 | 811 | -| [**YOLOv6-s**] | 640 | FP16 |42.4 | 373 | 520 | diff --git a/cv/detection/yolov6/pytorch/tools/partial_quantization/eval.py b/cv/detection/yolov6/pytorch/tools/partial_quantization/eval.py deleted file mode 100644 index 8213b9458..000000000 --- a/cv/detection/yolov6/pytorch/tools/partial_quantization/eval.py +++ /dev/null @@ -1,49 +0,0 @@ -import os -import torch -from yolov6.core.evaler import Evaler - -class EvalerWrapper(object): - def __init__(self, eval_cfg): - task = eval_cfg['task'] - save_dir = eval_cfg['save_dir'] - half = eval_cfg['half'] - data = eval_cfg['data'] - batch_size = eval_cfg['batch_size'] - img_size = eval_cfg['img_size'] - device = eval_cfg['device'] - dataloader = None - - Evaler.check_task(task) - if not os.path.exists(save_dir): - os.makedirs(save_dir) - - # reload thres/device/half/data according task - conf_thres = 0.03 - iou_thres = 0.65 - device = Evaler.reload_device(device, None, task) - data = Evaler.reload_dataset(data) if isinstance(data, str) else data - - # init - val = Evaler(data, batch_size, img_size, conf_thres, \ - iou_thres, device, half, save_dir) - val.stride = eval_cfg['stride'] - dataloader = val.init_data(dataloader, task) - - self.eval_cfg = eval_cfg - self.half = half - self.device = device - self.task = task - self.val = val - self.val_loader = dataloader - - def eval(self, model): - model.eval() - model.to(self.device) - if self.half is True: - model.half() - - with torch.no_grad(): - pred_result, vis_outputs, vis_paths = self.val.predict_model(model, self.val_loader, self.task) - eval_result = self.val.eval_model(pred_result, model, self.val_loader, self.task) - - return eval_result diff --git a/cv/detection/yolov6/pytorch/tools/partial_quantization/eval.yaml b/cv/detection/yolov6/pytorch/tools/partial_quantization/eval.yaml deleted file mode 100644 index 3296e8ac5..000000000 --- a/cv/detection/yolov6/pytorch/tools/partial_quantization/eval.yaml +++ /dev/null @@ -1,8 +0,0 @@ -task: 'val' -save_dir: 'runs/val/exp' -half: False -data: '../../data/coco.yaml' -batch_size: 32 -img_size: 640 -device: '0' -stride: 32 diff --git a/cv/detection/yolov6/pytorch/tools/partial_quantization/partial_quant.py b/cv/detection/yolov6/pytorch/tools/partial_quantization/partial_quant.py deleted file mode 100644 index 6ca595607..000000000 --- a/cv/detection/yolov6/pytorch/tools/partial_quantization/partial_quant.py +++ /dev/null @@ -1,126 +0,0 @@ -import argparse -import time -import sys -import os - -ROOT = os.getcwd() -if str(ROOT) not in sys.path: - sys.path.append(str(ROOT)) - -sys.path.append('../../') - -from yolov6.models.effidehead import Detect -from yolov6.layers.common import * -from yolov6.utils.events import LOGGER, load_yaml -from yolov6.utils.checkpoint import load_checkpoint - -from tools.partial_quantization.eval import EvalerWrapper -from tools.partial_quantization.utils import get_module, concat_quant_amax_fuse, quant_sensitivity_load -from tools.partial_quantization.ptq import load_ptq, partial_quant - -from pytorch_quantization import nn as quant_nn - -# concat_fusion_list = [ -# ('backbone.ERBlock_5.2.m', 'backbone.ERBlock_5.2.cv2.conv'), -# ('backbone.ERBlock_5.0.rbr_reparam', 'neck.Rep_p4.conv1.rbr_reparam'), -# ('backbone.ERBlock_4.0.rbr_reparam', 'neck.Rep_p3.conv1.rbr_reparam'), -# ('neck.upsample1.upsample_transpose', 'neck.Rep_n3.conv1.rbr_reparam'), -# ('neck.upsample0.upsample_transpose', 'neck.Rep_n4.conv1.rbr_reparam') -# ] - -op_concat_fusion_list = [ - ('backbone.ERBlock_5.2.m', 'backbone.ERBlock_5.2.cv2.conv'), - ('backbone.ERBlock_5.0.conv', 'neck.Rep_p4.conv1.conv', 'neck.upsample_feat0_quant'), - ('backbone.ERBlock_4.0.conv', 'neck.Rep_p3.conv1.conv', 'neck.upsample_feat1_quant'), - ('neck.upsample1.upsample_transpose', 'neck.Rep_n3.conv1.conv'), - ('neck.upsample0.upsample_transpose', 'neck.Rep_n4.conv1.conv'), - # - ('detect.reg_convs.0.conv', 'detect.cls_convs.0.conv'), - ('detect.reg_convs.1.conv', 'detect.cls_convs.1.conv'), - ('detect.reg_convs.2.conv', 'detect.cls_convs.2.conv'), -] - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--weights', type=str, default='./yolov6s_reopt.pt', help='weights path') - parser.add_argument('--calib-weights', type=str, default='./yolov6s_reopt_calib.pt', help='calib weights path') - parser.add_argument('--data-root', type=str, default=None, help='train data path') - parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='image size') # height, width - parser.add_argument('--conf', type=str, default='../../configs/repopt/yolov6s_opt_qat.py', help='model config') - parser.add_argument('--export-batch-size', type=int, default=None, help='export batch size') - parser.add_argument('--inplace', action='store_true', help='set Detect() inplace=True') - parser.add_argument('--device', default='0', help='cuda device, i.e. 0 or 0, 1, 2, 3 or cpu') - parser.add_argument('--sensitivity-file', type=str, default=None, help='quantization sensitivity file') - parser.add_argument('--quant-boundary', type=int, default=None, help='quantization boundary') - parser.add_argument('--eval-yaml', type=str, default='./eval.yaml', help='evaluation config') - args = parser.parse_args() - args.img_size *= 2 if len(args.img_size) == 1 else 1 # expand - print(args) - t = time.time() - - # Check device - cuda = args.device != 'cpu' and torch.cuda.is_available() - device = torch.device('cuda:0' if cuda else 'cpu') - assert not (device.type == 'cpu' and args.half), '--half only compatible with GPU export, i.e. use --device 0' - # Load PyTorch model - model = load_checkpoint(args.weights, map_location=device, inplace=True, fuse=True) # load FP32 model - model.eval() - yolov6_evaler = EvalerWrapper(eval_cfg=load_yaml(args.eval_yaml)) - orig_mAP = yolov6_evaler.eval(model) - - for layer in model.modules(): - if isinstance(layer, RepVGGBlock): - layer.switch_to_deploy() - - for k, m in model.named_modules(): - if isinstance(m, Conv): # assign export-friendly activations - if isinstance(m.act, nn.SiLU): - m.act = SiLU() - elif isinstance(m, Detect): - m.inplace = args.inplace - - model_ptq = load_ptq(model, args.calib_weights, device) - - quant_sensitivity = quant_sensitivity_load(args.sensitivity_file) - quant_sensitivity.sort(key=lambda tup: tup[2], reverse=True) - boundary = args.quant_boundary - quantable_ops = [qops[0] for qops in quant_sensitivity[:boundary+1]] - # only quantize ops in quantable_ops list - partial_quant(model_ptq, quantable_ops=quantable_ops) - # concat amax fusion - for sub_fusion_list in opt_concat_fusion_list: - ops = [get_module(model_ptq, op_name) for op_name in sub_fusion_list] - concat_quant_amax_fuse(ops) - - part_mAP = yolov6_evaler.eval(model_ptq) - print(part_mAP) - # ONNX export - quant_nn.TensorQuantizer.use_fb_fake_quant = True - if args.export_batch_size is None: - img = torch.zeros(1, 3, *args.img_size).to(device) - export_file = args.weights.replace('.pt', '_partial_dynamic.onnx') # filename - dynamic_axes = {"image_arrays": {0: "batch"}, "outputs": {0: "batch"}} - torch.onnx.export(model_ptq, - img, - export_file, - verbose=False, - opset_version=13, - training=torch.onnx.TrainingMode.EVAL, - do_constant_folding=True, - input_names=['image_arrays'], - output_names=['outputs'], - dynamic_axes=dynamic_axes - ) - else: - img = torch.zeros(args.export_batch_size, 3, *args.img_size).to(device) - export_file = args.weights.replace('.pt', '_partial_bs{}.onnx'.format(args.export_batch_size)) # filename - torch.onnx.export(model_ptq, - img, - export_file, - verbose=False, - opset_version=13, - training=torch.onnx.TrainingMode.EVAL, - do_constant_folding=True, - input_names=['image_arrays'], - output_names=['outputs'] - ) diff --git a/cv/detection/yolov6/pytorch/tools/partial_quantization/ptq.py b/cv/detection/yolov6/pytorch/tools/partial_quantization/ptq.py deleted file mode 100644 index 6895a36ed..000000000 --- a/cv/detection/yolov6/pytorch/tools/partial_quantization/ptq.py +++ /dev/null @@ -1,161 +0,0 @@ -import torch -import torch.nn as nn -import copy - -from pytorch_quantization import nn as quant_nn -from pytorch_quantization import tensor_quant -from pytorch_quantization import calib -from pytorch_quantization.tensor_quant import QuantDescriptor - -from tools.partial_quantization.utils import set_module, module_quant_disable - -def collect_stats(model, data_loader, batch_number, device='cuda'): - """Feed data to the network and collect statistic""" - - # Enable calibrators - for name, module in model.named_modules(): - if isinstance(module, quant_nn.TensorQuantizer): - if module._calibrator is not None: - module.disable_quant() - module.enable_calib() - else: - module.disable() - - for i, data_tuple in enumerate(data_loader): - image = data_tuple[0] - image = image.float()/255.0 - model(image.to(device)) - if i + 1 >= batch_number: - break - - # Disable calibrators - for name, module in model.named_modules(): - if isinstance(module, quant_nn.TensorQuantizer): - if module._calibrator is not None: - module.enable_quant() - module.disable_calib() - else: - module.enable() - - -def compute_amax(model, **kwargs): - # Load calib result - for name, module in model.named_modules(): - if isinstance(module, quant_nn.TensorQuantizer): - print(F"{name:40}: {module}") - if module._calibrator is not None: - if isinstance(module._calibrator, calib.MaxCalibrator): - module.load_calib_amax() - else: - module.load_calib_amax(**kwargs) - - -def quantable_op_check(k, quantable_ops): - if quantable_ops is None: - return True - - if k in quantable_ops: - return True - else: - return False - - -def quant_model_init(model, device): - - model_ptq = copy.deepcopy(model) - model_ptq.eval() - model_ptq.to(device) - conv2d_weight_default_desc = tensor_quant.QUANT_DESC_8BIT_CONV2D_WEIGHT_PER_CHANNEL - conv2d_input_default_desc = QuantDescriptor(num_bits=8, calib_method='histogram') - - convtrans2d_weight_default_desc = tensor_quant.QUANT_DESC_8BIT_CONVTRANSPOSE2D_WEIGHT_PER_CHANNEL - convtrans2d_input_default_desc = QuantDescriptor(num_bits=8, calib_method='histogram') - - for k, m in model_ptq.named_modules(): - if 'proj_conv' in k: - print("Skip Layer {}".format(k)) - continue - - if isinstance(m, nn.Conv2d): - in_channels = m.in_channels - out_channels = m.out_channels - kernel_size = m.kernel_size - stride = m.stride - padding = m.padding - quant_conv = quant_nn.QuantConv2d(in_channels, - out_channels, - kernel_size, - stride, - padding, - quant_desc_input = conv2d_input_default_desc, - quant_desc_weight = conv2d_weight_default_desc) - quant_conv.weight.data.copy_(m.weight.detach()) - if m.bias is not None: - quant_conv.bias.data.copy_(m.bias.detach()) - else: - quant_conv.bias = None - set_module(model_ptq, k, quant_conv) - elif isinstance(m, nn.ConvTranspose2d): - in_channels = m.in_channels - out_channels = m.out_channels - kernel_size = m.kernel_size - stride = m.stride - padding = m.padding - quant_convtrans = quant_nn.QuantConvTranspose2d(in_channels, - out_channels, - kernel_size, - stride, - padding, - quant_desc_input = convtrans2d_input_default_desc, - quant_desc_weight = convtrans2d_weight_default_desc) - quant_convtrans.weight.data.copy_(m.weight.detach()) - if m.bias is not None: - quant_convtrans.bias.data.copy_(m.bias.detach()) - else: - quant_convtrans.bias = None - set_module(model_ptq, k, quant_convtrans) - elif isinstance(m, nn.MaxPool2d): - kernel_size = m.kernel_size - stride = m.stride - padding = m.padding - dilation = m.dilation - ceil_mode = m.ceil_mode - quant_maxpool2d = quant_nn.QuantMaxPool2d(kernel_size, - stride, - padding, - dilation, - ceil_mode, - quant_desc_input = conv2d_input_default_desc) - set_module(model_ptq, k, quant_maxpool2d) - else: - # module can not be quantized, continue - continue - - return model_ptq.to(device) - - -def do_ptq(model, train_loader, batch_number, device): - model_ptq = quant_model_init(model, device) - # It is a bit slow since we collect histograms on CPU - with torch.no_grad(): - collect_stats(model_ptq, train_loader, batch_number, device) - compute_amax(model_ptq, method='entropy') - return model_ptq - - -def load_ptq(model, calib_path, device): - model_ptq = quant_model_init(model, device) - model_ptq.load_state_dict(torch.load(calib_path)['model'].state_dict()) - return model_ptq - - -def partial_quant(model_ptq, quantable_ops=None): - # ops not in quantable_ops will reserve full-precision. - for k, m in model_ptq.named_modules(): - if quantable_op_check(k, quantable_ops): - continue - # enable full-precision - if isinstance(m, quant_nn.QuantConv2d) or \ - isinstance(m, quant_nn.QuantConvTranspose2d) or \ - isinstance(m, quant_nn.QuantMaxPool2d): - module_quant_disable(model_ptq, k) diff --git a/cv/detection/yolov6/pytorch/tools/partial_quantization/sensitivity_analyse.py b/cv/detection/yolov6/pytorch/tools/partial_quantization/sensitivity_analyse.py deleted file mode 100644 index bcf1fb09a..000000000 --- a/cv/detection/yolov6/pytorch/tools/partial_quantization/sensitivity_analyse.py +++ /dev/null @@ -1,125 +0,0 @@ -import argparse -import time -import sys -import os - -ROOT = os.getcwd() -if str(ROOT) not in sys.path: - sys.path.append(str(ROOT)) - -sys.path.append('../../') - -from yolov6.models.effidehead import Detect -from yolov6.layers.common import * -from yolov6.utils.events import LOGGER, load_yaml -from yolov6.utils.checkpoint import load_checkpoint -from yolov6.data.data_load import create_dataloader -from yolov6.utils.config import Config - -from tools.partial_quantization.eval import EvalerWrapper -from tools.partial_quantization.utils import module_quant_enable, module_quant_disable, model_quant_disable -from tools.partial_quantization.utils import quant_sensitivity_save, quant_sensitivity_load -from tools.partial_quantization.ptq import do_ptq, load_ptq - -from pytorch_quantization import nn as quant_nn - - -def quant_sensitivity_analyse(model_ptq, evaler): - # disable all quantable layer - model_quant_disable(model_ptq) - - # analyse each quantable layer - quant_sensitivity = list() - for k, m in model_ptq.named_modules(): - if isinstance(m, quant_nn.QuantConv2d) or \ - isinstance(m, quant_nn.QuantConvTranspose2d) or \ - isinstance(m, quant_nn.MaxPool2d): - module_quant_enable(model_ptq, k) - else: - # module can not be quantized, continue - continue - - eval_result = evaler.eval(model_ptq) - print(eval_result) - print("Quantize Layer {}, result mAP0.5 = {:0.4f}, mAP0.5:0.95 = {:0.4f}".format(k, - eval_result[0], - eval_result[1])) - quant_sensitivity.append((k, eval_result[0], eval_result[1])) - # disable this module sensitivity, anlayse next module - module_quant_disable(model_ptq, k) - - return quant_sensitivity - -# python3 sensitivity_analyse.py --weights ../../assets/yolov6s_v2_reopt.pt --batch-size 32 --batch-number 4 --conf ../../configs/repopt/yolov6s_opt.py --data-root /path -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--weights', type=str, default='./yolov6s_v2_reopt.pt', help='weights path') - parser.add_argument('--data-root', type=str, default=None, help='train data path') - parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='image size') # height, width - parser.add_argument('--conf', type=str, default='../../configs/repopt/yolov6s_opt.py', help='model config') - parser.add_argument('--batch-size', type=int, default=128, help='batch size') - parser.add_argument('--batch-number', type=int, default=1, help='batch number') - parser.add_argument('--half', action='store_true', help='FP16 half-precision export') - parser.add_argument('--inplace', action='store_true', help='set Detect() inplace=True') - parser.add_argument('--device', default='0', help='cuda device, i.e. 0 or 0, 1, 2, 3 or cpu') - parser.add_argument('--calib-weights', type=str, default=None, help='weights with calibration parameter') - parser.add_argument('--data-yaml', type=str, default='../../data/coco.yaml', help='data config') - parser.add_argument('--eval-yaml', type=str, default='./eval.yaml', help='evaluation config') - args = parser.parse_args() - args.img_size *= 2 if len(args.img_size) == 1 else 1 # expand - print(args) - yolov6_evaler = EvalerWrapper(eval_cfg=load_yaml(args.eval_yaml)) - # Check device - cuda = args.device != 'cpu' and torch.cuda.is_available() - device = torch.device('cuda:0' if cuda else 'cpu') - assert not (device.type == 'cpu' and args.half), '--half only compatible with GPU export, i.e. use --device 0' - # Load PyTorch model - model = load_checkpoint(args.weights, map_location=device, inplace=True, fuse=True) # load FP32 model - model.eval() - - for layer in model.modules(): - if isinstance(layer, RepVGGBlock): - layer.switch_to_deploy() - - for k, m in model.named_modules(): - if isinstance(m, Conv): # assign export-friendly activations - if isinstance(m.act, nn.SiLU): - m.act = SiLU() - elif isinstance(m, Detect): - m.inplace = args.inplace - - orig_mAP = yolov6_evaler.eval(model) - print("Full Precision model mAP0.5={:.4f}, mAP0.5_0.95={:0.4f}".format(orig_mAP[0], orig_mAP[1])) - - # Step1: create dataloder - cfg = Config.fromfile(args.conf) - data_cfg = load_yaml(args.data_yaml) - train_loader, _ = create_dataloader( - args.data_root, - img_size=args.img_size[0], - batch_size=args.batch_size, - stride=32, - hyp=dict(cfg.data_aug), - augment=True, - shuffle=True, - data_dict=data_cfg) - - # Step2: do post training quantization - if args.calib_weights is None: - model_ptq= do_ptq(model, train_loader, args.batch_number, device) - torch.save({'model': model_ptq}, args.weights.replace('.pt', '_calib.pt')) - else: - model_ptq = load_ptq(model, args.calib_weights, device) - quant_mAP = yolov6_evaler.eval(model_ptq) - print("Post Training Quantization model mAP0.5={:.4f}, mAP0.5_0.95={:0.4f}".format(quant_mAP[0], quant_mAP[1])) - - # Step3: do sensitivity analysis and save sensistivity results - quant_sensitivity = quant_sensitivity_analyse(model_ptq, yolov6_evaler) - qfile = "{}_quant_sensitivity_{}_calib.txt".format(os.path.basename(args.weights).split('.')[0], - args.batch_size * args.batch_number) - quant_sensitivity_save(quant_sensitivity, qfile) - - - quant_sensitivity.sort(key=lambda tup: tup[2], reverse=True) - for sensitivity in quant_sensitivity: - print(sensitivity) diff --git a/cv/detection/yolov6/pytorch/tools/partial_quantization/utils.py b/cv/detection/yolov6/pytorch/tools/partial_quantization/utils.py deleted file mode 100644 index 16cd00914..000000000 --- a/cv/detection/yolov6/pytorch/tools/partial_quantization/utils.py +++ /dev/null @@ -1,92 +0,0 @@ -import os -from pytorch_quantization import nn as quant_nn - - -def set_module(model, submodule_key, module): - tokens = submodule_key.split('.') - sub_tokens = tokens[:-1] - cur_mod = model - for s in sub_tokens: - cur_mod = getattr(cur_mod, s) - setattr(cur_mod, tokens[-1], module) - - -def get_module(model, submodule_key): - sub_tokens = submodule_key.split('.') - cur_mod = model - for s in sub_tokens: - cur_mod = getattr(cur_mod, s) - return cur_mod - - -def module_quant_disable(model, k): - cur_module = get_module(model, k) - if hasattr(cur_module, '_input_quantizer'): - cur_module._input_quantizer.disable() - if hasattr(cur_module, '_weight_quantizer'): - cur_module._weight_quantizer.disable() - - -def module_quant_enable(model, k): - cur_module = get_module(model, k) - if hasattr(cur_module, '_input_quantizer'): - cur_module._input_quantizer.enable() - if hasattr(cur_module, '_weight_quantizer'): - cur_module._weight_quantizer.enable() - - -def model_quant_disable(model): - for name, module in model.named_modules(): - if isinstance(module, quant_nn.TensorQuantizer): - module.disable() - - -def model_quant_enable(model): - for name, module in model.named_modules(): - if isinstance(module, quant_nn.TensorQuantizer): - module.enable() - - -def concat_quant_amax_fuse(ops_list): - if len(ops_list) <= 1: - return - - amax = -1 - for op in ops_list: - if hasattr(op, '_amax'): - op_amax = op._amax.detach().item() - elif hasattr(op, '_input_quantizer'): - op_amax = op._input_quantizer._amax.detach().item() - else: - print("Not quantable op, skip") - return - print("op amax = {:7.4f}, amax = {:7.4f}".format(op_amax, amax)) - if amax < op_amax: - amax = op_amax - - print("amax = {:7.4f}".format(amax)) - for op in ops_list: - if hasattr(op, '_amax'): - op._amax.fill_(amax) - elif hasattr(op, '_input_quantizer'): - op._input_quantizer._amax.fill_(amax) - - -def quant_sensitivity_load(file): - assert os.path.exists(file), print("File {} does not exist".format(file)) - quant_sensitivity = list() - with open(file, 'r') as qfile: - lines = qfile.readlines() - for line in lines: - layer, mAP1, mAP2 = line.strip('\n').split(' ') - quant_sensitivity.append((layer, float(mAP1), float(mAP2))) - - return quant_sensitivity - - -def quant_sensitivity_save(quant_sensitivity, file): - with open(file, 'w') as qfile: - for item in quant_sensitivity: - name, mAP1, mAP2 = item - line = name + " " + "{:0.4f}".format(mAP1) + " " + "{:0.4f}".format(mAP2) + "\n" - qfile.write(line) diff --git a/cv/detection/yolov6/pytorch/tools/qat/README.md b/cv/detection/yolov6/pytorch/tools/qat/README.md deleted file mode 100644 index deef45cb4..000000000 --- a/cv/detection/yolov6/pytorch/tools/qat/README.md +++ /dev/null @@ -1,80 +0,0 @@ -# Quantization-Aware Training - -As of v0.2.0 release, traditional post-training quantization (PTQ) produces a degraded performance of `YOLOv6-S` from 43.4% to 41.2%. This is however much improved compared with v0.1.0 since the most sensitve layers are removed. Yet it is not ready for deployment. Meanwhile, due to the inconsistency of reparameterization blocks during training and inference, quantization-aware training (QAT) cannot be directly integrated into YOLOv6. As a remedy, we first train a single-branch network called `YOLOv6-S-RepOpt` with [RepOptimizer](https://arxiv.org/pdf/2205.15242.pdf). It reaches 43.1% mAP and is very close to YOLOv6-S. We then apply our quantization strategy on `YOLOv6-S-RepOpt`. - -We apply post-training quantization to `YOLOv6-S-RepOpt`, and its mAP slightly drops by 0.5%. Hence it is necessary to use QAT to further improve the accuracy. Besides, we involve **channel-wise distillation** to accelerate the convergence. We finally reach a quantized model at 43.0% mAP. - -To deploy the quantized model on typical NVIDIA GPUs (e.g. T4), we export the model to the ONNX format, then we use TensorRT to build a serialized engine along with the computed scale cache. The performance arrives at **43.3% mAP**, only 0.1% left to match the fully float precision of `YOLOv6-S`. - - -## Pre-requirements - -It is required to install `pytorch_quantization`, on top of which we build our quantization strategy. - -```python -pip install --extra-index-url=https://pypi.ngc.nvidia.com --trusted-host pypi.ngc.nvidia.com nvidia-pyindex -pip install --extra-index-url=https://pypi.ngc.nvidia.com --trusted-host pypi.ngc.nvidia.com pytorch_quantization -``` - -## Training with RepOptimizer -Firstly, train a `YOLOv6-S RepOpt` as follows, or download our realeased [checkpoint](https://github.com/meituan/YOLOv6/releases/download/0.2.0/yolov6s_v2_reopt.pt) and [scales](https://github.com/meituan/YOLOv6/releases/download/0.2.0/yolov6s_v2_scale.pt). -* [Tutorial of RepOpt for YOLOv6](https://github.com/meituan/YOLOv6/blob/main/docs/tutorial_repopt.md) -## PTQ -We perform PTQ to get the range of activations and weights. -```python -CUDA_VISIBLE_DEVICES=0 python tools/train.py \ - --data ./data/coco.yaml \ - --output-dir ./runs/opt_train_v6s_ptq \ - --conf configs/repopt/yolov6s_opt_qat.py \ - --quant \ - --calib \ - --batch 32 \ - --workers 0 -``` - -## QAT - -Our proposed QAT strategy comes with channel-wise distillation. It loades calibrated ReOptimizer-trained model and trains for 10 epochs. To reproduce the result, - -```python -CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python -m torch.distributed.launch --nproc_per_node=8 \ - tools/train.py \ - --data ./data/coco.yaml \ - --output-dir ./runs/opt_train_v6s_qat \ - --conf configs/repopt/yolov6s_opt_qat.py \ - --quant \ - --distill \ - --distill_feat \ - --batch 128 \ - --epochs 10 \ - --workers 32 \ - --teacher_model_path ./assets/yolov6s_v2_reopt_43.1.pt \ - --device 0,1,2,3,4,5,6,7 -``` -## ONNX Export -To export to ONNX, -```python -python3 qat_export.py --weights yolov6s_v2_reopt_43.1.pt --quant-weights yolov6s_v2_reopt_qat_43.0.pt --graph-opt --export-batch-size 1 -``` - -## TensorRT Deployment - -To build a TRT engine, - -```python -trtexec --workspace=1024 --percentile=99 --streams=1 --int8 --fp16 --avgRuns=10 --onnx=yolov6s_v2_reopt_qat_43.0_bs1.sim.onnx --calib=yolov6s_v2_reopt_qat_43.0_remove_qdq_bs1_calibration_addscale.cache --saveEngine=yolov6s_v2_reopt_qat_43.0_bs1.sim.trt -``` -You can directly build engine with [yolov6s_v2_quant.onnx](https://github.com/meituan/YOLOv6/releases/download/0.2.0/yolov6s_v2_reopt_qat_43.0_remove_qdq_bs1.sim.onnx) and [yolov6s_v2_calibration.cache](https://github.com/meituan/YOLOv6/releases/download/0.2.0/yolov6s_v2_reopt_qat_43.0_remove_qdq_bs1_calibration_addscale.cache) - -## Performance Comparison - -We release our quantized and graph-optimized YOLOv6-S (v0.2.0) model. The following throughput is tested with TensorRT 8.4 on a NVIDIA Tesla T4 GPU. - -| Model | Size | Precision |mAPval
0.5:0.95 | SpeedT4
trt b1
(fps) | SpeedT4
trt b32
(fps) | -| :-------------- | ----------- | ----------- |:----------------------- | ---------------------------------------- | -----------------------------------| -| [**YOLOv6-S RepOpt**] | 640 | INT8 |43.3 | 619 | 924 | -| [**YOLOv6-S**] | 640 | FP16 |43.4 | 377 | 541 | -| [**YOLOv6-T RepOpt**] | 640 | INT8 |39.8 | 741 | 1167 | -| [**YOLOv6-T**] | 640 | FP16 |40.3 | 449 | 659 | -| [**YOLOv6-N RepOpt**] | 640 | INT8 |34.8 | 1114 | 1828 | -| [**YOLOv6-N**] | 640 | FP16 |35.9 | 802 | 1234 | diff --git a/cv/detection/yolov6/pytorch/tools/qat/onnx_utils.py b/cv/detection/yolov6/pytorch/tools/qat/onnx_utils.py deleted file mode 100644 index 19aa13111..000000000 --- a/cv/detection/yolov6/pytorch/tools/qat/onnx_utils.py +++ /dev/null @@ -1,293 +0,0 @@ -import os.path - -import onnx -import numpy as np -import struct -import sys -import copy - -def search_node_by_output_id(nodes, output_id: str): - prev_node = None - for node_id, node in enumerate(nodes): - if output_id in node.output: - prev_node = node - break - return prev_node - -def get_prev_node(nodes, node): - node_input_list = node.input - prev_node_list = [] - for node_id, node in enumerate(nodes): - for node_output in node.output: - if node_output in node_input_list: - prev_node_list.append(node) - return prev_node_list - -def get_next_node(nodes, node): - node_output_list = node.output - next_node_list = [] - for node_id, node in enumerate(nodes): - for node_input in node.input: - if node_input in node_output_list: - next_node_list.append(node) - return next_node_list - -def get_conv_qdq_node(nodes, conv_node): - # get conv input - conv_input_id = conv_node.input[0] - # print(conv_input_id) - dequant_node = None - quant_node = None - # get dequant node by conv input - for node_id, node in enumerate(nodes): - if node.op_type == "DequantizeLinear" and conv_input_id in node.output: - dequant_node = node - break - # get quant node by dequant input - if dequant_node is not None: - dequant_input_id = dequant_node.input[0] - # print(dequant_input_id) - for node_id, node in enumerate(nodes): - if node.op_type == "QuantizeLinear" and dequant_input_id in node.output: - quant_node = node - break - # print(dequant_node) - # print(quant_node) - return dequant_node, quant_node - -def onnx_conv_horizon_fuse(onnx_model): - onnx_replica = copy.deepcopy(onnx_model) - graph = onnx_replica.graph - nodes = graph.node - # find qualified add op - pattern = [] - for node_id, node in enumerate(graph.node): - if node.op_type == "Add": - avail_count = 0 - for input_id in node.input: - prev_node = search_node_by_output_id(graph.node, input_id) - # prev node must be BatchNorm or Conv - if prev_node is not None: - if prev_node.op_type in ['BatchNormalization', 'Conv'] and \ - len(prev_node.output) == 1: - avail_count += 1 - if avail_count == 2: - pattern.append(node) - # print(pattern) - - # process each add - for add_node in pattern: - prev_add_node_list = get_prev_node(nodes, add_node) - # collect conv node - conv_node_list = [] - for node in prev_add_node_list: - if node.op_type == "BatchNormalization": - prev_node_list = get_prev_node(nodes, node) - assert len(prev_node_list) == 1 and prev_node_list[0].op_type == "Conv", \ - "Conv horizon fusion pattern not match" - conv_node_list.append(prev_node_list[0]) - else: - conv_node_list.append(node) - - # print(conv_node_list) - # collect qdq node - qdq_node_list = [] - for node in conv_node_list: - dequant_node, quant_node = get_conv_qdq_node(nodes, node) - assert dequant_node is not None and quant_node is not None, "Conv horizon fusion pattern not match" - qdq_node_list.extend((dequant_node, quant_node)) - - # find scale node - scale_node_list = [] - for qdq_node in qdq_node_list: - scale_iput_id = qdq_node.input[1] - for node in nodes: - if scale_iput_id in node.output: - scale_node_list.append(node) - # print(scale_node_list) - # get max scale - max = 0 - for scale_node in scale_node_list: - val = np.frombuffer(scale_node.attribute[0].t.raw_data, dtype=np.float32)[0] - print(val) - if max < val: - max = val - # rewrite max scale - for scale_node in scale_node_list: - scale_node.attribute[0].t.raw_data = bytes(struct.pack("f", max)) - - # check - for scale_node in scale_node_list: - val = np.frombuffer(scale_node.attribute[0].t.raw_data, dtype=np.float32)[0] - print(val) - - return onnx_replica - -def onnx_add_insert_qdqnode(onnx_model): - onnx_replica = copy.deepcopy(onnx_model) - graph = onnx_replica.graph - nodes = graph.node - # find qualified add op - patterns = [] - for node_id, node in enumerate(graph.node): - if node.op_type == "Add": - same_input_node_list = [] - same_input = None - for add_input in node.input: - for other_id, other_node in enumerate(nodes): - if other_id != node_id: - for other_input in other_node.input: - if other_input == add_input: - same_input_node_list.append(other_node) - same_input = other_input - break - # Find previous node of Add, which has two output, one is QuantizeLinear, other is Add - if len(same_input_node_list) == 1 and same_input_node_list[0].op_type == 'QuantizeLinear': - prev_add_node = search_node_by_output_id(nodes, same_input) - dequant_node = get_next_node(nodes, same_input_node_list[0])[0] - patterns.append((node, prev_add_node, same_input_node_list[0], dequant_node, same_input)) - print(patterns) - for pattern in patterns: - add_node, prev_add_node, quant_node, dequant_node, same_input = pattern - dq_x, dq_s, dq_z = dequant_node.input - new_quant_node = onnx.helper.make_node('QuantizeLinear', - inputs=quant_node.input, - outputs=[prev_add_node.name + "_Dequant"], - name=prev_add_node.name + "_QuantizeLinear") - new_dequant_node = onnx.helper.make_node('DequantizeLinear', - inputs=[prev_add_node.name + "_Dequant", dq_s, dq_z], - outputs=[prev_add_node.name + "_Add"], - name=prev_add_node.name + "_DequantizeLinear") - - add_node.input.remove(same_input) - add_node.input.append(prev_add_node.name + "_Add") - for node_id, node in enumerate(graph.node): - if node.name == prev_add_node.name: - graph.node.insert(node_id + 1, new_quant_node) - graph.node.insert(node_id + 2, new_dequant_node) - - return onnx_replica - - # new_dequant_node = onnx.helper.make_node('DequantizeLinear', - # inputs=quant_node.input, - # outputs=prev_add_node.output, - # name=prev_add_node.name + "_DequantizeLinear") - - -def onnx_remove_qdqnode(onnx_model): - onnx_replica = copy.deepcopy(onnx_model) - graph = onnx_replica.graph - nodes = graph.node - - # demo for remove node with first input and output - in_rename_map = {} - scale_node_list = [] - zero_node_list = [] - activation_map = {} - for node_id, node in enumerate(graph.node): - if node.op_type == "QuantizeLinear": - # node input - in_name = node.input[0] - scale_name = node.input[1] - zero_name = node.input[2] - # print(scale_name) - # node output - out_name = node.output[0] - # record input, remove one node, set node's input to its next - in_rename_map[out_name] = in_name - scale_node_list.append(scale_name) - zero_node_list.append(zero_name) - # for i, node in enumerate(graph.node): - # if node.output[0] == scale_name: - # if len(node.attribute[0].t.dims) > 0: - # print(node.attribute[0].t.dims) - # graph.node.remove(nodes[i]) - # for i, node in enumerate(graph.node): - # if node.output[0] == zero_name: - # graph.node.remove(nodes[i]) - # record scale of activation - for i, node in enumerate(graph.node): - if node.output[0] == scale_name: - if len(node.attribute[0].t.dims) == 0: - # print(node.attribute[0].t.raw_data) - # print(np.frombuffer(node.attribute[0].t.raw_data, dtype=np.float32)) - val = np.frombuffer(node.attribute[0].t.raw_data, dtype=np.float32)[0] - if in_name in activation_map.keys(): - old_val = struct.unpack('!f', bytes.fromhex(activation_map[in_name]))[0] - # print("Already record, old {:.4f}, new {:.4f}".format(old_val, val)) - if val > old_val: - activation_map[in_name] = struct.pack('>f', val).hex() - else: - activation_map[in_name] = struct.pack('>f', val).hex() - # remove QuantizeLinear node - graph.node.remove(nodes[node_id]) - - - # relink - for node_id, node in enumerate(graph.node): - for in_id, in_name in enumerate(node.input): - if in_name in in_rename_map.keys(): - # set node input == removed node's input - node.input[in_id] = in_rename_map[in_name] - - in_rename_map = {} - # activation_map = {} - for node_id, node in enumerate(graph.node): - if node.op_type == "DequantizeLinear": - in_name = node.input[0] - scale_name = node.input[1] - zero_name = node.input[2] - # print(scale_name) - out_name = node.output[0] - in_rename_map[out_name] = in_name - graph.node.remove(nodes[node_id]) - scale_node_list.append(scale_name) - zero_node_list.append(zero_name) - - # relink - for node_id, node in enumerate(graph.node): - for in_id, in_name in enumerate(node.input): - if in_name in in_rename_map.keys(): - node.input[in_id] = in_rename_map[in_name] - - nodes = graph.node - for node_name in (scale_node_list + zero_node_list): - for node_id, node in enumerate(graph.node): - if node.name == node_name: - # print("node input={}".format(node.input)) - # for node_input in node.input: - # print(node_input) - # graph.node.remove(node_input) - graph.node.remove(nodes[node_id]) - - for node_name in (scale_node_list + zero_node_list): - for node_id, node in enumerate(graph.node): - if node.output[0] == node_name: - # print("node input={}".format(node.input)) - # for node_input in node.input: - # print(node_input) - # graph.node.remove(node_input) - graph.node.remove(nodes[node_id]) - - return onnx_replica, activation_map - -def save_calib_cache_file(cache_file, activation_map, headline='TRT-8XXX-EntropyCalibration2\n'): - with open(os.path.join(cache_file), 'w') as cfile: - cfile.write(headline) - for k, v in activation_map.items(): - cfile.write("{}: {}\n".format(k, v)) - -def get_remove_qdq_onnx_and_cache(onnx_file): - model = onnx.load(onnx_file) - # onnx_insert = onnx_add_insert_qdqnode(model) - model_wo_qdq, activation_map = onnx_remove_qdqnode(model) - onnx_name, onnx_dir = os.path.basename(onnx_file), os.path.dirname(onnx_file) - onnx_new_name = onnx_name.replace('.onnx', '_remove_qdq.onnx') - onnx.save(model_wo_qdq, os.path.join(onnx_dir, onnx_new_name)) - cache_name = onnx_new_name.replace('.onnx', '_add_insert_qdq_calibration.cache') - save_calib_cache_file(os.path.join(onnx_dir, cache_name), activation_map) - -if __name__ == '__main__': - - onnx_file = sys.argv[1] - get_remove_qdq_onnx_and_cache(onnx_file) diff --git a/cv/detection/yolov6/pytorch/tools/qat/qat_export.py b/cv/detection/yolov6/pytorch/tools/qat/qat_export.py deleted file mode 100644 index 541005d3c..000000000 --- a/cv/detection/yolov6/pytorch/tools/qat/qat_export.py +++ /dev/null @@ -1,169 +0,0 @@ -import argparse -import time -import sys -import os -ROOT = os.getcwd() -if str(ROOT) not in sys.path: - sys.path.append(str(ROOT)) -sys.path.append('../../') -from yolov6.models.effidehead import Detect -from yolov6.models.yolo import build_model -from yolov6.layers.common import * -from yolov6.utils.events import LOGGER, load_yaml -from yolov6.utils.checkpoint import load_checkpoint, load_state_dict -from yolov6.utils.config import Config -from tools.partial_quantization.eval import EvalerWrapper -from tools.partial_quantization.utils import get_module, concat_quant_amax_fuse -from tools.qat.qat_utils import qat_init_model_manu -from pytorch_quantization import nn as quant_nn -from onnx_utils import get_remove_qdq_onnx_and_cache - -op_concat_fusion_list = [ - ('backbone.ERBlock_5.2.m', 'backbone.ERBlock_5.2.cv2.conv'), - ('backbone.ERBlock_5.0.conv', 'neck.Rep_p4.conv1.conv', 'neck.upsample_feat0_quant'), - ('backbone.ERBlock_4.0.conv', 'neck.Rep_p3.conv1.conv', 'neck.upsample_feat1_quant'), - ('neck.upsample1.upsample_transpose', 'neck.Rep_n3.conv1.conv'), - ('neck.upsample0.upsample_transpose', 'neck.Rep_n4.conv1.conv'), - # - ('detect.reg_convs.0.conv', 'detect.cls_convs.0.conv'), - ('detect.reg_convs.1.conv', 'detect.cls_convs.1.conv'), - ('detect.reg_convs.2.conv', 'detect.cls_convs.2.conv'), -] - -def zero_scale_fix(model, device): - - for k, m in model.named_modules(): - # print(k, m) - if isinstance(m, quant_nn.QuantConv2d) or \ - isinstance(m, quant_nn.QuantConvTranspose2d): - # print(m) - # print(m._weight_quantizer._amax) - weight_amax = m._weight_quantizer._amax.detach().cpu().numpy() - # print(weight_amax) - print(k) - ones = np.ones_like(weight_amax) - print("zero scale number = {}".format(np.sum(weight_amax == 0.0))) - weight_amax = np.where(weight_amax == 0.0, ones, weight_amax) - m._weight_quantizer._amax.copy_(torch.from_numpy(weight_amax).to(device)) - else: - # module can not be quantized, continue - continue - -# python3 qat_export.py --weights yolov6s_v2_reopt.pt --quant-weights yolov6s_v2_reopt_qat_43.0.pt --export-batch-size 1 --conf ../../configs/repopt/yolov6s_opt_qat.py -# python3 qat_export.py --weights v6s_t.pt --quant-weights yolov6t_v2_reopt_qat_40.1.pt --export-batch-size 1 --conf ../../configs/repopt/yolov6_tiny_opt_qat.py -# python3 qat_export.py --weights v6s_n.pt --quant-weights yolov6n_v2_reopt_qat_34.9.pt --export-batch-size 1 --conf ../../configs/repopt/yolov6n_opt_qat.py -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--weights', type=str, default='./yolov6s_v2_reopt.pt', help='weights path') - parser.add_argument('--quant-weights', type=str, default='./yolov6s_v2_reopt_qat_43.0.pt', help='calib weights path') - parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='image size') # height, width - parser.add_argument('--conf', type=str, default='../../configs/repopt/yolov6s_opt_qat.py', help='model config') - parser.add_argument('--export-batch-size', type=int, default=None, help='export batch size') - parser.add_argument('--calib', action='store_true', default=False, help='calibrated model') - parser.add_argument('--scale-fix', action='store_true', help='enable scale fix') - parser.add_argument('--fuse-bn', action='store_true', help='fuse bn') - parser.add_argument('--graph-opt', action='store_true', help='enable graph optimizer') - parser.add_argument('--inplace', action='store_true', help='set Detect() inplace=True') - parser.add_argument('--end2end', action='store_true', help='export end2end onnx') - parser.add_argument('--trt-version', type=int, default=8, help='tensorrt version') - parser.add_argument('--with-preprocess', action='store_true', help='export bgr2rgb and normalize') - parser.add_argument('--max-wh', type=int, default=None, help='None for tensorrt nms, int value for onnx-runtime nms') - parser.add_argument('--topk-all', type=int, default=100, help='topk objects for every images') - parser.add_argument('--iou-thres', type=float, default=0.45, help='iou threshold for NMS') - parser.add_argument('--conf-thres', type=float, default=0.4, help='conf threshold for NMS') - parser.add_argument('--device', default='0', help='cuda device, i.e. 0 or 0, 1, 2, 3 or cpu') - parser.add_argument('--eval-yaml', type=str, default='../partial_quantization/eval.yaml', help='evaluation config') - args = parser.parse_args() - args.img_size *= 2 if len(args.img_size) == 1 else 1 # expand - print(args) - t = time.time() - # Check device - cuda = args.device != 'cpu' and torch.cuda.is_available() - device = torch.device('cuda:0' if cuda else 'cpu') - assert not (device.type == 'cpu' and args.half), '--half only compatible with GPU export, i.e. use --device 0' - model = load_checkpoint(args.weights, map_location=device, inplace=args.inplace, fuse=args.fuse_bn) - yolov6_evaler = EvalerWrapper(eval_cfg=load_yaml(args.eval_yaml)) - # orig_mAP = yolov6_evaler.eval(model) - for layer in model.modules(): - if isinstance(layer, RepVGGBlock): - layer.switch_to_deploy() - for k, m in model.named_modules(): - if isinstance(m, Conv): # assign export-friendly activations - if isinstance(m.act, nn.SiLU): - m.act = SiLU() - elif isinstance(m, Detect): - m.inplace = args.inplace - # Load PyTorch model - cfg = Config.fromfile(args.conf) - # init qat model - qat_init_model_manu(model, cfg, args) - print(model) - model.neck.upsample_enable_quant(cfg.ptq.num_bits, cfg.ptq.calib_method) - ckpt = torch.load(args.quant_weights) - model.load_state_dict(ckpt['model'].float().state_dict()) - print(model) - model.to(device) - if args.scale_fix: - zero_scale_fix(model, device) - if args.graph_opt: - # concat amax fusion - for sub_fusion_list in op_concat_fusion_list: - ops = [get_module(model, op_name) for op_name in sub_fusion_list] - concat_quant_amax_fuse(ops) - qat_mAP = yolov6_evaler.eval(model) - print(qat_mAP) - if args.end2end: - from yolov6.models.end2end import End2End - model = End2End(model, max_obj=args.topk_all, iou_thres=args.iou_thres,score_thres=args.conf_thres, - max_wh=args.max_wh, device=device, trt_version=args.trt_version, with_preprocess=args.with_preprocess) - # ONNX export - quant_nn.TensorQuantizer.use_fb_fake_quant = True - if args.export_batch_size is None: - img = torch.zeros(1, 3, *args.img_size).to(device) - export_file = args.quant_weights.replace('.pt', '_dynamic.onnx') # filename - if args.graph_opt: - export_file = export_file.replace('.onnx', '_graph_opt.onnx') - if args.end2end: - export_file = export_file.replace('.onnx', '_e2e.onnx') - dynamic_axes = { - "image_arrays": {0: "batch"}, - } - if args.end2end: - dynamic_axes["num_dets"] = {0: "batch"} - dynamic_axes["det_boxes"] = {0: "batch"} - dynamic_axes["det_scores"] = {0: "batch"} - dynamic_axes["det_classes"] = {0: "batch"} - else: - dynamic_axes["outputs"] = {0: "batch"} - torch.onnx.export(model, - img, - export_file, - verbose=False, - opset_version=13, - training=torch.onnx.TrainingMode.EVAL, - do_constant_folding=True, - input_names=['images'], - output_names=['num_dets', 'det_boxes', 'det_scores', 'det_classes'] - if args.end2end else ['outputs'], - dynamic_axes=dynamic_axes - ) - else: - img = torch.zeros(args.export_batch_size, 3, *args.img_size).to(device) - export_file = args.quant_weights.replace('.pt', '_bs{}.onnx'.format(args.export_batch_size)) # filename - if args.graph_opt: - export_file = export_file.replace('.onnx', '_graph_opt.onnx') - if args.end2end: - export_file = export_file.replace('.onnx', '_e2e.onnx') - torch.onnx.export(model, - img, - export_file, - verbose=False, - opset_version=13, - training=torch.onnx.TrainingMode.EVAL, - do_constant_folding=True, - input_names=['images'], - output_names=['num_dets', 'det_boxes', 'det_scores', 'det_classes'] - if args.end2end else ['outputs'], - ) - - get_remove_qdq_onnx_and_cache(export_file) diff --git a/cv/detection/yolov6/pytorch/tools/qat/qat_utils.py b/cv/detection/yolov6/pytorch/tools/qat/qat_utils.py deleted file mode 100644 index e5762726f..000000000 --- a/cv/detection/yolov6/pytorch/tools/qat/qat_utils.py +++ /dev/null @@ -1,153 +0,0 @@ -from tqdm import tqdm -import torch -import torch.nn as nn - -from pytorch_quantization import nn as quant_nn -from pytorch_quantization import tensor_quant -from pytorch_quantization import calib -from pytorch_quantization.tensor_quant import QuantDescriptor - -from tools.partial_quantization.utils import set_module, module_quant_disable - -def collect_stats(model, data_loader, num_batches): - """Feed data to the network and collect statistic""" - - # Enable calibrators - for name, module in model.named_modules(): - if isinstance(module, quant_nn.TensorQuantizer): - if module._calibrator is not None: - module.disable_quant() - module.enable_calib() - else: - module.disable() - - for i, (image, _, _, _) in tqdm(enumerate(data_loader), total=num_batches): - image = image.float()/255.0 - model(image.cuda()) - if i >= num_batches: - break - - # Disable calibrators - for name, module in model.named_modules(): - if isinstance(module, quant_nn.TensorQuantizer): - if module._calibrator is not None: - module.enable_quant() - module.disable_calib() - else: - module.enable() - -def compute_amax(model, **kwargs): - # Load Calib result - for name, module in model.named_modules(): - if isinstance(module, quant_nn.TensorQuantizer): - print(F"{name:40}: {module}") - if module._calibrator is not None: - #MinMaxCalib - if isinstance(module._calibrator, calib.MaxCalibrator): - module.load_calib_amax() - else: - #HistogramCalib - module.load_calib_amax(**kwargs) - model.cuda() - -def ptq_calibrate(model, train_loader, cfg): - model.eval() - model.cuda() - # It is a bit slow since we collect histograms on CPU - with torch.no_grad(): - collect_stats(model, train_loader, cfg.ptq.calib_batches) - compute_amax(model, method=cfg.ptq.histogram_amax_method, percentile=cfg.ptq.histogram_amax_percentile) - -def qat_init_model_manu(model, cfg, args): - # print(model) - conv2d_weight_default_desc = tensor_quant.QUANT_DESC_8BIT_CONV2D_WEIGHT_PER_CHANNEL - conv2d_input_default_desc = QuantDescriptor(num_bits=cfg.ptq.num_bits, calib_method=cfg.ptq.calib_method) - - convtrans2d_weight_default_desc = tensor_quant.QUANT_DESC_8BIT_CONVTRANSPOSE2D_WEIGHT_PER_CHANNEL - convtrans2d_input_default_desc = QuantDescriptor(num_bits=cfg.ptq.num_bits, calib_method=cfg.ptq.calib_method) - - for k, m in model.named_modules(): - if 'proj_conv' in k: - print("Skip Layer {}".format(k)) - continue - if args.calib is True and cfg.ptq.sensitive_layers_skip is True: - if k in cfg.ptq.sensitive_layers_list: - print("Skip Layer {}".format(k)) - continue - # print(k, m) - if isinstance(m, nn.Conv2d): - # print("in_channel = {}".format(m.in_channels)) - # print("out_channel = {}".format(m.out_channels)) - # print("kernel size = {}".format(m.kernel_size)) - # print("stride size = {}".format(m.stride)) - # print("pad size = {}".format(m.padding)) - in_channels = m.in_channels - out_channels = m.out_channels - kernel_size = m.kernel_size - stride = m.stride - padding = m.padding - quant_conv = quant_nn.QuantConv2d(in_channels, - out_channels, - kernel_size, - stride, - padding, - quant_desc_input = conv2d_input_default_desc, - quant_desc_weight = conv2d_weight_default_desc) - quant_conv.weight.data.copy_(m.weight.detach()) - if m.bias is not None: - quant_conv.bias.data.copy_(m.bias.detach()) - else: - quant_conv.bias = None - set_module(model, k, quant_conv) - elif isinstance(m, nn.ConvTranspose2d): - # print("in_channel = {}".format(m.in_channels)) - # print("out_channel = {}".format(m.out_channels)) - # print("kernel size = {}".format(m.kernel_size)) - # print("stride size = {}".format(m.stride)) - # print("pad size = {}".format(m.padding)) - in_channels = m.in_channels - out_channels = m.out_channels - kernel_size = m.kernel_size - stride = m.stride - padding = m.padding - quant_convtrans = quant_nn.QuantConvTranspose2d(in_channels, - out_channels, - kernel_size, - stride, - padding, - quant_desc_input = convtrans2d_input_default_desc, - quant_desc_weight = convtrans2d_weight_default_desc) - quant_convtrans.weight.data.copy_(m.weight.detach()) - if m.bias is not None: - quant_convtrans.bias.data.copy_(m.bias.detach()) - else: - quant_convtrans.bias = None - set_module(model, k, quant_convtrans) - elif isinstance(m, nn.MaxPool2d): - # print("kernel size = {}".format(m.kernel_size)) - # print("stride size = {}".format(m.stride)) - # print("pad size = {}".format(m.padding)) - # print("dilation = {}".format(m.dilation)) - # print("ceil mode = {}".format(m.ceil_mode)) - kernel_size = m.kernel_size - stride = m.stride - padding = m.padding - dilation = m.dilation - ceil_mode = m.ceil_mode - quant_maxpool2d = quant_nn.QuantMaxPool2d(kernel_size, - stride, - padding, - dilation, - ceil_mode, - quant_desc_input = conv2d_input_default_desc) - set_module(model, k, quant_maxpool2d) - else: - # module can not be quantized, continue - continue - -def skip_sensitive_layers(model, sensitive_layers): - print('Skip sensitive layers...') - for name, module in model.named_modules(): - if name in sensitive_layers: - print(F"Disable {name}") - module_quant_disable(model, name) diff --git a/cv/detection/yolov6/pytorch/tools/quantization/mnn/README.md b/cv/detection/yolov6/pytorch/tools/quantization/mnn/README.md deleted file mode 100644 index 91f12c935..000000000 --- a/cv/detection/yolov6/pytorch/tools/quantization/mnn/README.md +++ /dev/null @@ -1 +0,0 @@ -# Coming soon diff --git a/cv/detection/yolov6/pytorch/tools/quantization/ppq/ProgramEntrance.py b/cv/detection/yolov6/pytorch/tools/quantization/ppq/ProgramEntrance.py deleted file mode 100644 index 38c9c6685..000000000 --- a/cv/detection/yolov6/pytorch/tools/quantization/ppq/ProgramEntrance.py +++ /dev/null @@ -1,189 +0,0 @@ -try: - from ppq.core.config import PPQ_CONFIG - if PPQ_CONFIG.VERSION < '0.6.6': - raise ValueError('为了运行该脚本的内容,你必须安装更高版本的 PPQ(>0.6.6)') - - import ppq.lib as PFL - from ppq import TargetPlatform, TorchExecutor, graphwise_error_analyse - from ppq.api import ENABLE_CUDA_KERNEL - from ppq.api.interface import load_onnx_graph - from ppq.core import (QuantizationPolicy, QuantizationProperty, - RoundingPolicy) - from ppq.IR import Operation - from ppq.quantization.optim import (LearnedStepSizePass, - ParameterBakingPass, - ParameterQuantizePass, - QuantAlignmentPass, QuantizeFusionPass, - QuantizeSimplifyPass, - RuntimeCalibrationPass) - -except ImportError: - raise Exception('为了运行脚本内容,你必须安装 PPQ 量化工具(https://github.com/openppl-public/ppq)') -from typing import List - -import torch - -# ------------------------------------------------------------ -# 在这个例子中我们将向你展示如何使用 INT8 量化一个 Yolo v6 模型 -# 我们使用随机数据进行量化,这并不能得到好的量化结果。 -# 在量化你的网络时,你应当使用真实数据和正确的预处理。 -# -# 根据你选取的目标平台,PPQ 可以为 TensorRT, Openvino, Ncnn 等诸多平台生成量化模型 -# ------------------------------------------------------------ -graph = load_onnx_graph(onnx_import_file='Models/det_model/yolov6s.onnx') -dataset = [torch.rand(size=[1, 3, 640, 640]) for _ in range(64)] - -# ----------------------------------------------------------- -# 我们将借助 PFL - PPQ Foundation Library, 即 PPQ 基础类库完成量化 -# 这是 PPQ 自 0.6.6 以来推出的新的量化 api 接口,这一接口是提供给 -# 算法工程师、部署工程师、以及芯片研发人员使用的,它更为灵活。 -# 我们将手动使用 Quantizer 完成算子量化信息初始化, 并且手动完成模型的调度工作 -# -# 在开始之前,我需要向你介绍量化器、量化信息以及调度表 -# 量化信息在 PPQ 中是由 TensorQuantizationConfig(TQC) 进行描述的 -# 这个结构体描述了我要如何去量化一个数据,其中包含了量化位宽、量化策略、 -# 量化 Scale, offset 等内容。 -# ------------------------------------------------------------ -from ppq import TensorQuantizationConfig as TQC - -MyTQC = TQC( - policy = QuantizationPolicy( - QuantizationProperty.SYMMETRICAL + - QuantizationProperty.LINEAR + - QuantizationProperty.PER_TENSOR), - rounding=RoundingPolicy.ROUND_HALF_EVEN, - num_of_bits=8, quant_min=-128, quant_max=127, - exponent_bits=0, channel_axis=None, - observer_algorithm='minmax' -) -# ------------------------------------------------------------ -# 作为示例,我们创建了一个 "线性" "对称" "Tensorwise" 的量化信息 -# 这三者皆是该量化信息的 QuantizationPolicy 的一部分 -# 同时要求该量化信息使用 ROUND_HALF_EVEN 方式进行取整 -# 量化位宽为 8 bit,其中指数部分为 0 bit -# 量化上限为 127.0,下限则为 -128.0 -# 这是一个 Tensorwise 的量化信息,因此 channel_axis = None -# observer_algorithm 表示在未来使用 minmax calibration 方法确定该量化信息的 scale - -# 上述例子完成了该 TQC 的初始化,但并未真正启用该量化信息 -# MyTQC.scale, MyTQC.offset 仍然为空,它们必须经过 calibration 才会具有有意义的值 -# 并且他目前的状态 MyTQC.state 仍然是 Quantization.INITIAL,这意味着在计算时该 TQC 并不会参与运算。 -# ------------------------------------------------------------ - -# ------------------------------------------------------------ -# 接下来我们向你介绍量化器,这是 PPQ 中的一个核心类型 -# 它的职责是为网络中所有处于量化区的算子初始化量化信息(TQC) -# PPQ 中实现了一堆不同的量化器,它们分别适配不同的情形 -# 在这个例子中,我们分别创建了 TRT_INT8, GRAPHCORE_FP8, TRT_FP8 三种不同的量化器 -# 由它们所生成的量化信息是不同的,为此你可以访问它们的源代码 -# 位于 ppq.quantization.quantizer 中,查看它们初始化量化信息的逻辑。 -# ------------------------------------------------------------ -_ = PFL.Quantizer(platform=TargetPlatform.TRT_FP8, graph=graph) # 取得 TRT_FP8 所对应的量化器 -_ = PFL.Quantizer(platform=TargetPlatform.GRAPHCORE_FP8, graph=graph) # 取得 GRAPHCORE_FP8 所对应的量化器 -quantizer = PFL.Quantizer(platform=TargetPlatform.TRT_INT8, graph=graph) # 取得 TRT_INT8 所对应的量化器 - -# ------------------------------------------------------------ -# 调度器是 PPQ 中另一核心类型,它负责切分计算图 -# 在量化开始之前,你的计算图将被切分成可量化区域,以及不可量化区域 -# 不可量化区域往往就是那些执行 Shape 推断的算子所构成的子图 -# *** 量化器只为量化区的算子初始化量化信息 *** -# 调度信息将被写在算子的属性中,你可以通过 op.platform 来访问每一个算子的调度信息 -# ------------------------------------------------------------ -dispatching = PFL.Dispatcher(graph=graph).dispatch( # 生成调度表 - quant_types=quantizer.quant_operation_types) - -for op in graph.operations.values(): - # quantize_operation - 为算子初始化量化信息,platform 传递了算子的调度信息 - # 如果你的算子被调度到 TargetPlatform.FP32 上,则该算子不量化 - # 你可以手动修改调度信息 - dispatching['Op1'] = TargetPlatform.FP32 # 将 Op1 强行送往非量化区 - dispatching['Op2'] = TargetPlatform.TRT_INT8 # 将 Op2 强行送往量化区 - quantizer.quantize_operation( - op_name = op.name, platform = dispatching[op.name]) - -# ------------------------------------------------------------ -# 在创建量化管线之前,我们需要初始化执行器,它用于模拟硬件并执行你的网络 -# 请注意,执行器需要对网络结果进行分析并缓存分析结果,如果你的网络结构发生变化 -# 你必须重新建立新的执行器。在上一步操作中,我们对算子进行了量化,这使得 -# 普通的算子被量化算子替代,这一步操作将会改变网络结构。因此我们必须在其后建立执行器。 -# ------------------------------------------------------------ -collate_fn = lambda x: x.cuda() -executor = TorchExecutor(graph=graph, device='cuda') -executor.tracing_operation_meta(inputs=collate_fn(dataset[0])) -executor.load_graph(graph=graph) - -# ------------------------------------------------------------ -# 如果在你的模型中存在 NMS 算子 ———— PPQ 不知道如何计算这个玩意,但它跟量化也没啥关系 -# 因此你可以注册一个假的 NMS forward 函数给 PPQ,帮助我们完成网络的前向传播流程 -# ------------------------------------------------------------ -from ppq.api import register_operation_handler -def nms_forward_function(op: Operation, values: List[torch.Tensor], **kwards) -> List[torch.Tensor]: - return ( - torch.zeros([1, 1], dtype=torch.int32).cuda(), - torch.zeros([1, 100, 4],dtype=torch.float32).cuda(), - torch.zeros([1, 100],dtype=torch.float32).cuda(), - torch.zeros([1, 100], dtype=torch.int32).cuda() - ) -register_operation_handler(nms_forward_function, 'EfficientNMS_TRT', platform=TargetPlatform.FP32) - -# ------------------------------------------------------------ -# 下面的过程将创建量化管线,它还是一个 PPQ 的核心类型 -# 在 PPQ 中,模型的量化是由一个一个的量化过程(QuantizationOptimizationPass)完成的 -# 量化管线 是 量化过程 的集合,在其中的量化过程将被逐个调用 -# 从而实现对 TQC 中内容的修改,最终实现模型的量化 -# 在这里我们为管线中添加了 7 个量化过程,分别处理不同的内容 - -# QuantizeSimplifyPass - 用于移除网络中的冗余量化信息 -# QuantizeFusionPass - 用于调整量化信息状态,从而模拟推理图融合 -# ParameterQuantizePass - 用于为模型中的所有参数执行 Calibration, 生成它们的 scale,并将对应 TQC 的状态调整为 ACTIVED -# RuntimeCalibrationPass - 用于为模型中的所有激活执行 Calibration, 生成它们的 scale,并将对应 TQC 的状态调整为 ACTIVED -# QuantAlignmentPass - 用于执行 concat, add, sum, sub, pooling 算子的定点对齐 -# LearnedStepSizePass - 用于训练微调模型的权重,从而降低量化误差 -# ParameterBakingPass - 用于执行模型参数烘焙 - -# 在 PPQ 中我们提供了数十种不同的 QuantizationOptimizationPass -# 你可以组合它们从而实现自定义的功能,也可以继承 QuantizationOptimizationPass 基类 -# 从而创造出新的量化优化过程 -# ------------------------------------------------------------ -pipeline = PFL.Pipeline([ - QuantizeSimplifyPass(), - QuantizeFusionPass( - activation_type=quantizer.activation_fusion_types), - ParameterQuantizePass(), - RuntimeCalibrationPass(), - QuantAlignmentPass(force_overlap=True), - LearnedStepSizePass( - steps=1000, is_scale_trainable=True, - lr=1e-5, block_size=4, collecting_device='cuda'), - ParameterBakingPass() -]) - -with ENABLE_CUDA_KERNEL(): - # 调用管线完成量化 - pipeline.optimize( - graph=graph, dataloader=dataset, verbose=True, - calib_steps=32, collate_fn=collate_fn, executor=executor) - - # 执行量化误差分析 - graphwise_error_analyse( - graph=graph, running_device='cuda', - dataloader=dataset, collate_fn=collate_fn) - -# ------------------------------------------------------------ -# 在最后,我们导出计算图 -# 同样地,我们根据不同推理框架的需要,写了一堆不同的网络导出逻辑 -# 你通过参数 platform 告诉 PPQ 你的模型最终将部署在何处, -# PPQ 则会返回一个对应的 GraphExporter 对象,它将负责将 PPQ 的量化信息 -# 翻译成推理框架所需的内容。你也可以自己写一个 GraphExporter 类并注册到 PPQ 框架中来。 -# ------------------------------------------------------------ -exporter = PFL.Exporter(platform=TargetPlatform.TRT_INT8) -exporter.export(file_path='Quantized.onnx', config_path='Quantized.json', graph=graph) - -# ------------------------------------------------------------ -# 导出所需的 onnx 和 json 文件之后,你可以调用在这个文件旁边的 write_qparams_onnx2trt.py 生成 engine -# -# 你需要注意到,我们生成的 onnx 和 json 文件是可以随时迁移的,但 engine 一旦编译完成则不能迁移 -# https://github.com/openppl-public/ppq/blob/master/md_doc/deploy_trt_by_OnnxParser.md -# -# 性能分析脚本 https://github.com/openppl-public/ppq/blob/master/ppq/samples/TensorRT/Example_Profiling.py -# ------------------------------------------------------------ diff --git a/cv/detection/yolov6/pytorch/tools/quantization/ppq/write_qparams_onnx2trt.py b/cv/detection/yolov6/pytorch/tools/quantization/ppq/write_qparams_onnx2trt.py deleted file mode 100644 index 7b48dc8bc..000000000 --- a/cv/detection/yolov6/pytorch/tools/quantization/ppq/write_qparams_onnx2trt.py +++ /dev/null @@ -1,94 +0,0 @@ -import os -import json -import argparse -import tensorrt as trt - -TRT_LOGGER = trt.Logger() - -EXPLICIT_BATCH = 1 << (int)(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH) - -def GiB(val): - return val * 1 << 30 - -def json_load(filename): - with open(filename) as json_file: - data = json.load(json_file) - return data - -def setDynamicRange(network, json_file): - """Sets ranges for network layers.""" - quant_param_json = json_load(json_file) - act_quant = quant_param_json["act_quant_info"] - - for i in range(network.num_inputs): - input_tensor = network.get_input(i) - if act_quant.__contains__(input_tensor.name): - print(input_tensor.name) - value = act_quant[input_tensor.name] - tensor_max = abs(value) - tensor_min = -abs(value) - input_tensor.dynamic_range = (tensor_min, tensor_max) - - for i in range(network.num_layers): - layer = network.get_layer(i) - - for output_index in range(layer.num_outputs): - tensor = layer.get_output(output_index) - - if act_quant.__contains__(tensor.name): - print("\033[1;32mWrite quantization parameters:%s\033[0m" % tensor.name) - value = act_quant[tensor.name] - tensor_max = abs(value) - tensor_min = -abs(value) - tensor.dynamic_range = (tensor_min, tensor_max) - else: - print("\033[1;31mNo quantization parameters are written: %s\033[0m" % tensor.name) - - -def build_engine(onnx_file, json_file, engine_file): - builder = trt.Builder(TRT_LOGGER) - network = builder.create_network(EXPLICIT_BATCH) - - config = builder.create_builder_config() - - # If it is a dynamic onnx model , you need to add the following. - # profile = builder.create_optimization_profile() - # profile.set_shape("input_name", (batch, channels, min_h, min_w), (batch, channels, opt_h, opt_w), (batch, channels, max_h, max_w)) - # config.add_optimization_profile(profile) - - - parser = trt.OnnxParser(network, TRT_LOGGER) - config.max_workspace_size = GiB(1) - - if not os.path.exists(onnx_file): - quit('ONNX file {} not found'.format(onnx_file)) - - with open(onnx_file, 'rb') as model: - if not parser.parse(model.read()): - print('ERROR: Failed to parse the ONNX file.') - for error in range(parser.num_errors): - print(parser.get_error(error)) - return None - - config.set_flag(trt.BuilderFlag.INT8) - - setDynamicRange(network, json_file) - - engine = builder.build_engine(network, config) - - with open(engine_file, "wb") as f: - f.write(engine.serialize()) - - -if __name__ == '__main__': - # Add plugins if needed - # import ctypes - # ctypes.CDLL("libmmdeploy_tensorrt_ops.so") - parser = argparse.ArgumentParser(description='Writing qparams to onnx to convert tensorrt engine.') - parser.add_argument('--onnx', type=str, default=None) - parser.add_argument('--qparam_json', type=str, default=None) - parser.add_argument('--engine', type=str, default=None) - arg = parser.parse_args() - - build_engine(arg.onnx, arg.qparam_json, arg.engine) - print("\033[1;32mgenerate %s\033[0m" % arg.engine) diff --git a/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/post_training/Calibrator.py b/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/post_training/Calibrator.py deleted file mode 100755 index efe358dd1..000000000 --- a/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/post_training/Calibrator.py +++ /dev/null @@ -1,211 +0,0 @@ -# -# Modified by Meituan -# 2022.6.24 -# - -# Copyright 2019 NVIDIA Corporation -# -# 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 os -import sys -import glob -import random -import logging -import cv2 - -import numpy as np -from PIL import Image -import tensorrt as trt -import pycuda.driver as cuda -import pycuda.autoinit - -logging.basicConfig(level=logging.DEBUG, - format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", - datefmt="%Y-%m-%d %H:%M:%S") -logger = logging.getLogger(__name__) - -def preprocess_yolov6(image, channels=3, height=224, width=224): - """Pre-processing for YOLOv6-based Object Detection Models - - Parameters - ---------- - image: PIL.Image - The image resulting from PIL.Image.open(filename) to preprocess - channels: int - The number of channels the image has (Usually 1 or 3) - height: int - The desired height of the image (usually 640) - width: int - The desired width of the image (usually 640) - - Returns - ------- - img_data: numpy array - The preprocessed image data in the form of a numpy array - - """ - # Get the image in CHW format - resized_image = image.resize((width, height), Image.BILINEAR) - img_data = np.asarray(resized_image).astype(np.float32) - - if len(img_data.shape) == 2: - # For images without a channel dimension, we stack - img_data = np.stack([img_data] * 3) - logger.debug("Received grayscale image. Reshaped to {:}".format(img_data.shape)) - else: - img_data = img_data.transpose([2, 0, 1]) - - mean_vec = np.array([0.0, 0.0, 0.0]) - stddev_vec = np.array([1.0, 1.0, 1.0]) - assert img_data.shape[0] == channels - - for i in range(img_data.shape[0]): - # Scale each pixel to [0, 1] and normalize per channel. - img_data[i, :, :] = (img_data[i, :, :] / 255.0 - mean_vec[i]) / stddev_vec[i] - - return img_data - - -def get_int8_calibrator(calib_cache, calib_data, max_calib_size, calib_batch_size): - # Use calibration cache if it exists - if os.path.exists(calib_cache): - logger.info("Skipping calibration files, using calibration cache: {:}".format(calib_cache)) - calib_files = [] - # Use calibration files from validation dataset if no cache exists - else: - if not calib_data: - raise ValueError("ERROR: Int8 mode requested, but no calibration data provided. Please provide --calibration-data /path/to/calibration/files") - - calib_files = get_calibration_files(calib_data, max_calib_size) - - # Choose pre-processing function for INT8 calibration - preprocess_func = preprocess_yolov6 - - int8_calibrator = ImageCalibrator(calibration_files=calib_files, - batch_size=calib_batch_size, - cache_file=calib_cache) - return int8_calibrator - - -def get_calibration_files(calibration_data, max_calibration_size=None, allowed_extensions=(".jpeg", ".jpg", ".png")): - """Returns a list of all filenames ending with `allowed_extensions` found in the `calibration_data` directory. - - Parameters - ---------- - calibration_data: str - Path to directory containing desired files. - max_calibration_size: int - Max number of files to use for calibration. If calibration_data contains more than this number, - a random sample of size max_calibration_size will be returned instead. If None, all samples will be used. - - Returns - ------- - calibration_files: List[str] - List of filenames contained in the `calibration_data` directory ending with `allowed_extensions`. - """ - - logger.info("Collecting calibration files from: {:}".format(calibration_data)) - calibration_files = [path for path in glob.iglob(os.path.join(calibration_data, "**"), recursive=True) - if os.path.isfile(path) and path.lower().endswith(allowed_extensions)] - logger.info("Number of Calibration Files found: {:}".format(len(calibration_files))) - - if len(calibration_files) == 0: - raise Exception("ERROR: Calibration data path [{:}] contains no files!".format(calibration_data)) - - if max_calibration_size: - if len(calibration_files) > max_calibration_size: - logger.warning("Capping number of calibration images to max_calibration_size: {:}".format(max_calibration_size)) - random.seed(42) # Set seed for reproducibility - calibration_files = random.sample(calibration_files, max_calibration_size) - - return calibration_files - - -# https://docs.nvidia.com/deeplearning/sdk/tensorrt-api/python_api/infer/Int8/EntropyCalibrator2.html -class ImageCalibrator(trt.IInt8EntropyCalibrator2): - """INT8 Calibrator Class for Imagenet-based Image Classification Models. - - Parameters - ---------- - calibration_files: List[str] - List of image filenames to use for INT8 Calibration - batch_size: int - Number of images to pass through in one batch during calibration - input_shape: Tuple[int] - Tuple of integers defining the shape of input to the model (Default: (3, 224, 224)) - cache_file: str - Name of file to read/write calibration cache from/to. - preprocess_func: function -> numpy.ndarray - Pre-processing function to run on calibration data. This should match the pre-processing - done at inference time. In general, this function should return a numpy array of - shape `input_shape`. - """ - - def __init__(self, calibration_files=[], batch_size=32, input_shape=(3, 224, 224), - cache_file="calibration.cache", use_cv2=False): - super().__init__() - self.input_shape = input_shape - self.cache_file = cache_file - self.batch_size = batch_size - self.batch = np.zeros((self.batch_size, *self.input_shape), dtype=np.float32) - self.device_input = cuda.mem_alloc(self.batch.nbytes) - - self.files = calibration_files - self.use_cv2 = use_cv2 - # Pad the list so it is a multiple of batch_size - if len(self.files) % self.batch_size != 0: - logger.info("Padding # calibration files to be a multiple of batch_size {:}".format(self.batch_size)) - self.files += calibration_files[(len(calibration_files) % self.batch_size):self.batch_size] - - self.batches = self.load_batches() - self.preprocess_func = preprocess_yolov6 - - def load_batches(self): - # Populates a persistent self.batch buffer with images. - for index in range(0, len(self.files), self.batch_size): - for offset in range(self.batch_size): - if self.use_cv2: - image = cv2.imread(self.files[index + offset]) - else: - image = Image.open(self.files[index + offset]) - self.batch[offset] = self.preprocess_func(image, *self.input_shape) - logger.info("Calibration images pre-processed: {:}/{:}".format(index+self.batch_size, len(self.files))) - yield self.batch - - def get_batch_size(self): - return self.batch_size - - def get_batch(self, names): - try: - # Assume self.batches is a generator that provides batch data. - batch = next(self.batches) - # Assume that self.device_input is a device buffer allocated by the constructor. - cuda.memcpy_htod(self.device_input, batch) - return [int(self.device_input)] - except StopIteration: - # When we're out of batches, we return either [] or None. - # This signals to TensorRT that there is no calibration data remaining. - return None - - def read_calibration_cache(self): - # If there is a cache, use it instead of calibrating again. Otherwise, implicitly return None. - if os.path.exists(self.cache_file): - with open(self.cache_file, "rb") as f: - logger.info("Using calibration cache to save time: {:}".format(self.cache_file)) - return f.read() - - def write_calibration_cache(self, cache): - with open(self.cache_file, "wb") as f: - logger.info("Caching calibration data for future use: {:}".format(self.cache_file)) - f.write(cache) diff --git a/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/post_training/LICENSE b/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/post_training/LICENSE deleted file mode 100644 index 604095e5c..000000000 --- a/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/post_training/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ - - 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 - - Copyright 2020 NVIDIA Corporation - - 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/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/post_training/README.md b/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/post_training/README.md deleted file mode 100644 index e2624aa4a..000000000 --- a/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/post_training/README.md +++ /dev/null @@ -1,83 +0,0 @@ -# ONNX -> TensorRT INT8 -These scripts were last tested using the -[NGC TensorRT Container Version 20.06-py3](https://ngc.nvidia.com/catalog/containers/nvidia:tensorrt). -You can see the corresponding framework versions for this container [here](https://docs.nvidia.com/deeplearning/sdk/tensorrt-container-release-notes/rel_20.06.html#rel_20.06). - -## Quickstart - -> **NOTE**: This INT8 example is only valid for **fixed-shape** ONNX models at the moment. -> -INT8 Calibration on **dynamic-shape** models is now supported, however this example has not been updated -to reflect that yet. For more details on INT8 Calibration for **dynamic-shape** models, please -see the [documentation](https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#int8-calib-dynamic-shapes). - -### 1. Convert ONNX model to TensorRT INT8 - -See `./onnx_to_tensorrt.py -h` for full list of command line arguments. - -```bash -./onnx_to_tensorrt.py --explicit-batch \ - --onnx resnet50/model.onnx \ - --fp16 \ - --int8 \ - --calibration-cache="caches/yolov6.cache" \ - -o resnet50.int8.engine -``` - -See the [INT8 Calibration](#int8-calibration) section below for details on calibration -using your own model or different data, where you don't have an existing calibration cache -or want to create a new one. - -## INT8 Calibration - -See [Calibrator.py](Calibrator.py) for a reference implementation -of TensorRT's [IInt8EntropyCalibrator2](https://docs.nvidia.com/deeplearning/sdk/tensorrt-api/python_api/infer/Int8/EntropyCalibrator2.html). - -This class can be tweaked to work for other kinds of models, inputs, etc. - -In the [Quickstart](#quickstart) section above, we made use of a pre-existing cache, -[caches/yolov6.cache](caches/yolov6.cache), to save time for the sake of an example. - -However, to calibrate using different data or a different model, you can do so with the `--calibration-data` argument. - -* This requires that you've mounted a dataset, such as Imagenet, to use for calibration. - * Add something like `-v /imagenet:/imagenet` to your Docker command in Step (1) - to mount a dataset found locally at `/imagenet`. -* You can specify your own `preprocess_func` by defining it inside of `Calibrator.py` - -```bash -# Path to dataset to use for calibration. -# **Not necessary if you already have a calibration cache from a previous run. -CALIBRATION_DATA="/imagenet" - -# Truncate calibration images to a random sample of this amount if more are found. -# **Not necessary if you already have a calibration cache from a previous run. -MAX_CALIBRATION_SIZE=512 - -# Calibration cache to be used instead of calibration data if it already exists, -# or the cache will be created from the calibration data if it doesn't exist. -CACHE_FILENAME="caches/yolov6.cache" - -# Path to ONNX model -ONNX_MODEL="model/yolov6.onnx" - -# Path to write TensorRT engine to -OUTPUT="yolov6.int8.engine" - -# Creates an int8 engine from your ONNX model, creating ${CACHE_FILENAME} based -# on your ${CALIBRATION_DATA}, unless ${CACHE_FILENAME} already exists, then -# it will use simply use that instead. -python3 onnx_to_tensorrt.py --fp16 --int8 -v \ - --max_calibration_size=${MAX_CALIBRATION_SIZE} \ - --calibration-data=${CALIBRATION_DATA} \ - --calibration-cache=${CACHE_FILENAME} \ - --preprocess_func=${PREPROCESS_FUNC} \ - --explicit-batch \ - --onnx ${ONNX_MODEL} -o ${OUTPUT} - -``` - -### Pre-processing - -In order to calibrate your model correctly, you should `pre-process` your data the same way -that you would during inference. diff --git a/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/post_training/onnx_to_tensorrt.py b/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/post_training/onnx_to_tensorrt.py deleted file mode 100755 index 48c4fcb55..000000000 --- a/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/post_training/onnx_to_tensorrt.py +++ /dev/null @@ -1,222 +0,0 @@ -#!/usr/bin/env python3 - -# -# Modified by Meituan -# 2022.6.24 -# - -# Copyright 2019 NVIDIA Corporation -# -# 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 os -import sys -import glob -import math -import logging -import argparse - -import tensorrt as trt -#sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages') - -TRT_LOGGER = trt.Logger() -logging.basicConfig(level=logging.DEBUG, - format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", - datefmt="%Y-%m-%d %H:%M:%S") -logger = logging.getLogger(__name__) - - -def add_profiles(config, inputs, opt_profiles): - logger.debug("=== Optimization Profiles ===") - for i, profile in enumerate(opt_profiles): - for inp in inputs: - _min, _opt, _max = profile.get_shape(inp.name) - logger.debug("{} - OptProfile {} - Min {} Opt {} Max {}".format(inp.name, i, _min, _opt, _max)) - config.add_optimization_profile(profile) - - -def mark_outputs(network): - # Mark last layer's outputs if not already marked - # NOTE: This may not be correct in all cases - last_layer = network.get_layer(network.num_layers-1) - if not last_layer.num_outputs: - logger.error("Last layer contains no outputs.") - return - - for i in range(last_layer.num_outputs): - network.mark_output(last_layer.get_output(i)) - - -def check_network(network): - if not network.num_outputs: - logger.warning("No output nodes found, marking last layer's outputs as network outputs. Correct this if wrong.") - mark_outputs(network) - - inputs = [network.get_input(i) for i in range(network.num_inputs)] - outputs = [network.get_output(i) for i in range(network.num_outputs)] - max_len = max([len(inp.name) for inp in inputs] + [len(out.name) for out in outputs]) - - logger.debug("=== Network Description ===") - for i, inp in enumerate(inputs): - logger.debug("Input {0} | Name: {1:{2}} | Shape: {3}".format(i, inp.name, max_len, inp.shape)) - for i, out in enumerate(outputs): - logger.debug("Output {0} | Name: {1:{2}} | Shape: {3}".format(i, out.name, max_len, out.shape)) - - -def get_batch_sizes(max_batch_size): - # Returns powers of 2, up to and including max_batch_size - max_exponent = math.log2(max_batch_size) - for i in range(int(max_exponent)+1): - batch_size = 2**i - yield batch_size - - if max_batch_size != batch_size: - yield max_batch_size - - -# TODO: This only covers dynamic shape for batch size, not dynamic shape for other dimensions -def create_optimization_profiles(builder, inputs, batch_sizes=[1,8,16,32,64]): - # Check if all inputs are fixed explicit batch to create a single profile and avoid duplicates - if all([inp.shape[0] > -1 for inp in inputs]): - profile = builder.create_optimization_profile() - for inp in inputs: - fbs, shape = inp.shape[0], inp.shape[1:] - profile.set_shape(inp.name, min=(fbs, *shape), opt=(fbs, *shape), max=(fbs, *shape)) - return [profile] - - # Otherwise for mixed fixed+dynamic explicit batch inputs, create several profiles - profiles = {} - for bs in batch_sizes: - if not profiles.get(bs): - profiles[bs] = builder.create_optimization_profile() - - for inp in inputs: - shape = inp.shape[1:] - # Check if fixed explicit batch - if inp.shape[0] > -1: - bs = inp.shape[0] - - profiles[bs].set_shape(inp.name, min=(bs, *shape), opt=(bs, *shape), max=(bs, *shape)) - - return list(profiles.values()) - - -def main(): - parser = argparse.ArgumentParser(description="Creates a TensorRT engine from the provided ONNX file.\n") - parser.add_argument("--onnx", required=True, help="The ONNX model file to convert to TensorRT") - parser.add_argument("-o", "--output", type=str, default="model.engine", help="The path at which to write the engine") - parser.add_argument("-b", "--max-batch-size", type=int, help="The max batch size for the TensorRT engine input") - parser.add_argument("-v", "--verbosity", action="count", help="Verbosity for logging. (None) for ERROR, (-v) for INFO/WARNING/ERROR, (-vv) for VERBOSE.") - parser.add_argument("--explicit-batch", action='store_true', help="Set trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH.") - parser.add_argument("--explicit-precision", action='store_true', help="Set trt.NetworkDefinitionCreationFlag.EXPLICIT_PRECISION.") - parser.add_argument("--gpu-fallback", action='store_true', help="Set trt.BuilderFlag.GPU_FALLBACK.") - parser.add_argument("--refittable", action='store_true', help="Set trt.BuilderFlag.REFIT.") - parser.add_argument("--debug", action='store_true', help="Set trt.BuilderFlag.DEBUG.") - parser.add_argument("--strict-types", action='store_true', help="Set trt.BuilderFlag.STRICT_TYPES.") - parser.add_argument("--fp16", action="store_true", help="Attempt to use FP16 kernels when possible.") - parser.add_argument("--int8", action="store_true", help="Attempt to use INT8 kernels when possible. This should generally be used in addition to the --fp16 flag. \ - ONLY SUPPORTS RESNET-LIKE MODELS SUCH AS RESNET50/VGG16/INCEPTION/etc.") - parser.add_argument("--calibration-cache", help="(INT8 ONLY) The path to read/write from calibration cache.", default="calibration.cache") - parser.add_argument("--calibration-data", help="(INT8 ONLY) The directory containing {*.jpg, *.jpeg, *.png} files to use for calibration. (ex: Imagenet Validation Set)", default=None) - parser.add_argument("--calibration-batch-size", help="(INT8 ONLY) The batch size to use during calibration.", type=int, default=128) - parser.add_argument("--max-calibration-size", help="(INT8 ONLY) The max number of data to calibrate on from --calibration-data.", type=int, default=2048) - parser.add_argument("-s", "--simple", action="store_true", help="Use SimpleCalibrator with random data instead of ImagenetCalibrator for INT8 calibration.") - args, _ = parser.parse_known_args() - - print(args) - - # Adjust logging verbosity - if args.verbosity is None: - TRT_LOGGER.min_severity = trt.Logger.Severity.ERROR - # -v - elif args.verbosity == 1: - TRT_LOGGER.min_severity = trt.Logger.Severity.INFO - # -vv - else: - TRT_LOGGER.min_severity = trt.Logger.Severity.VERBOSE - logger.info("TRT_LOGGER Verbosity: {:}".format(TRT_LOGGER.min_severity)) - - # Network flags - network_flags = 0 - if args.explicit_batch: - network_flags |= 1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH) - if args.explicit_precision: - network_flags |= 1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_PRECISION) - - builder_flag_map = { - 'gpu_fallback': trt.BuilderFlag.GPU_FALLBACK, - 'refittable': trt.BuilderFlag.REFIT, - 'debug': trt.BuilderFlag.DEBUG, - 'strict_types': trt.BuilderFlag.STRICT_TYPES, - 'fp16': trt.BuilderFlag.FP16, - 'int8': trt.BuilderFlag.INT8, - } - - # Building engine - with trt.Builder(TRT_LOGGER) as builder, \ - builder.create_network(network_flags) as network, \ - builder.create_builder_config() as config, \ - trt.OnnxParser(network, TRT_LOGGER) as parser: - - config.max_workspace_size = 2**30 # 1GiB - - # Set Builder Config Flags - for flag in builder_flag_map: - if getattr(args, flag): - logger.info("Setting {}".format(builder_flag_map[flag])) - config.set_flag(builder_flag_map[flag]) - - # Fill network atrributes with information by parsing model - with open(args.onnx, "rb") as f: - if not parser.parse(f.read()): - print('ERROR: Failed to parse the ONNX file: {}'.format(args.onnx)) - for error in range(parser.num_errors): - print(parser.get_error(error)) - sys.exit(1) - - # Display network info and check certain properties - check_network(network) - - if args.explicit_batch: - # Add optimization profiles - batch_sizes = [1, 8, 16, 32, 64] - inputs = [network.get_input(i) for i in range(network.num_inputs)] - opt_profiles = create_optimization_profiles(builder, inputs, batch_sizes) - add_profiles(config, inputs, opt_profiles) - # Implicit Batch Network - else: - builder.max_batch_size = args.max_batch_size - opt_profiles = [] - - # Precision flags - if args.fp16 and not builder.platform_has_fast_fp16: - logger.warning("FP16 not supported on this platform.") - - if args.int8 and not builder.platform_has_fast_int8: - logger.warning("INT8 not supported on this platform.") - - if args.int8: - from Calibrator import ImageCalibrator, get_int8_calibrator # local module - config.int8_calibrator = get_int8_calibrator(args.calibration_cache, - args.calibration_data, - args.max_calibration_size, - args.calibration_batch_size) - - logger.info("Building Engine...") - with builder.build_engine(network, config) as engine, open(args.output, "wb") as f: - logger.info("Serializing engine to file: {:}".format(args.output)) - f.write(engine.serialize()) - - -if __name__ == "__main__": - main() diff --git a/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/requirements.txt b/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/requirements.txt deleted file mode 100644 index 5473d1024..000000000 --- a/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -# pip install -r requirements.txt -# python3.8 environment - -tensorrt # TensorRT 8.0+ -pycuda==2020.1 # CUDA 11.0 -nvidia-pyindex -pytorch-quantization diff --git a/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/training_aware/QAT_quantizer.py b/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/training_aware/QAT_quantizer.py deleted file mode 100644 index 356330fa5..000000000 --- a/cv/detection/yolov6/pytorch/tools/quantization/tensorrt/training_aware/QAT_quantizer.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# QAT_quantizer.py -# YOLOv6 -# -# Created by Meituan on 2022/06/24. -# Copyright © 2022 -# - -from absl import logging -from pytorch_quantization import nn as quant_nn -from pytorch_quantization import quant_modules - -# Call this function before defining the model -def tensorrt_official_qat(): - # Quantization Aware Training is based on Straight Through Estimator (STE) derivative approximation. - # It is some time known as “quantization aware training”. - - # PyTorch-Quantization is a toolkit for training and evaluating PyTorch models with simulated quantization. - # Quantization can be added to the model automatically, or manually, allowing the model to be tuned for accuracy and performance. - # Quantization is compatible with NVIDIAs high performance integer kernels which leverage integer Tensor Cores. - # The quantized model can be exported to ONNX and imported by TensorRT 8.0 and later. - # https://github.com/NVIDIA/TensorRT/blob/main/tools/pytorch-quantization/examples/finetune_quant_resnet50.ipynb - - # The example to export the - # model.eval() - # quant_nn.TensorQuantizer.use_fb_fake_quant = True # We have to shift to pytorch's fake quant ops before exporting the model to ONNX - # opset_version = 13 - - # Export ONNX for multiple batch sizes - # print("Creating ONNX file: " + onnx_filename) - # dummy_input = torch.randn(batch_onnx, 3, 224, 224, device='cuda') #TODO: switch input dims by model - # torch.onnx.export(model, dummy_input, onnx_filename, verbose=False, opset_version=opset_version, enable_onnx_checker=False, do_constant_folding=True) - try: - quant_modules.initialize() - except NameError: - logging.info("initialzation error for quant_modules") - -# def QAT_quantizer(): -# coming soon diff --git a/cv/detection/yolov6/pytorch/tools/train.py b/cv/detection/yolov6/pytorch/tools/train.py deleted file mode 100644 index 635c68e47..000000000 --- a/cv/detection/yolov6/pytorch/tools/train.py +++ /dev/null @@ -1,142 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- -import argparse -from logging import Logger -import os -import yaml -import os.path as osp -from pathlib import Path -import torch -import torch.distributed as dist -import sys -import datetime - -ROOT = os.getcwd() -if str(ROOT) not in sys.path: - sys.path.append(str(ROOT)) - -from yolov6.core.engine import Trainer -from yolov6.utils.config import Config -from yolov6.utils.events import LOGGER, save_yaml -from yolov6.utils.envs import get_envs, select_device, set_random_seed -from yolov6.utils.general import increment_name, find_latest_checkpoint, check_img_size - - -def get_args_parser(add_help=True): - parser = argparse.ArgumentParser(description='YOLOv6 PyTorch Training', add_help=add_help) - parser.add_argument('--data-path', default='./data/coco.yaml', type=str, help='path of dataset') - parser.add_argument('--conf-file', default='./configs/yolov6n.py', type=str, help='experiments description file') - parser.add_argument('--img-size', default=640, type=int, help='train, val image size (pixels)') - parser.add_argument('--rect', action='store_true', help='whether to use rectangular training, default is False') - parser.add_argument('--batch-size', default=32, type=int, help='total batch size for all GPUs') - parser.add_argument('--epochs', default=400, type=int, help='number of total epochs to run') - parser.add_argument('--workers', default=8, type=int, help='number of data loading workers (default: 8)') - parser.add_argument('--device', default='0', type=str, help='cuda device, i.e. 0 or 0,1,2,3 or cpu') - parser.add_argument('--eval-interval', default=20, type=int, help='evaluate at every interval epochs') - parser.add_argument('--eval-final-only', action='store_true', help='only evaluate at the final epoch') - parser.add_argument('--heavy-eval-range', default=50, type=int, - help='evaluating every epoch for last such epochs (can be jointly used with --eval-interval)') - parser.add_argument('--check-images', action='store_true', help='check images when initializing datasets') - parser.add_argument('--check-labels', action='store_true', help='check label files when initializing datasets') - parser.add_argument('--output-dir', default='./runs/train', type=str, help='path to save outputs') - parser.add_argument('--name', default='exp', type=str, help='experiment name, saved to output_dir/name') - parser.add_argument('--dist_url', default='env://', type=str, help='url used to set up distributed training') - parser.add_argument('--gpu_count', type=int, default=0) - parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter') - parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume the most recent training') - parser.add_argument('--write_trainbatch_tb', action='store_true', help='write train_batch image to tensorboard once an epoch, may slightly slower train speed if open') - parser.add_argument('--stop_aug_last_n_epoch', default=15, type=int, help='stop strong aug at last n epoch, neg value not stop, default 15') - parser.add_argument('--save_ckpt_on_last_n_epoch', default=-1, type=int, help='save last n epoch even not best or last, neg value not save') - parser.add_argument('--distill', action='store_true', help='distill or not') - parser.add_argument('--distill_feat', action='store_true', help='distill featmap or not') - parser.add_argument('--quant', action='store_true', help='quant or not') - parser.add_argument('--calib', action='store_true', help='run ptq') - parser.add_argument('--teacher_model_path', type=str, default=None, help='teacher model path') - parser.add_argument('--temperature', type=int, default=20, help='distill temperature') - parser.add_argument('--fuse_ab', action='store_true', help='fuse ab branch in training process or not') - parser.add_argument('--bs_per_gpu', default=32, type=int, help='batch size per GPU for auto-rescale learning rate, set to 16 for P6 models') - parser.add_argument('--specific-shape', action='store_true', help='rectangular training') - parser.add_argument('--height', type=int, default=None, help='image height of model input') - parser.add_argument('--width', type=int, default=None, help='image width of model input') - return parser - - -def check_and_init(args): - '''check config files and device.''' - # check files - master_process = args.rank == 0 if args.world_size > 1 else args.rank == -1 - if args.resume: - # args.resume can be a checkpoint file path or a boolean value. - checkpoint_path = args.resume if isinstance(args.resume, str) else find_latest_checkpoint() - assert os.path.isfile(checkpoint_path), f'the checkpoint path is not exist: {checkpoint_path}' - LOGGER.info(f'Resume training from the checkpoint file :{checkpoint_path}') - resume_opt_file_path = Path(checkpoint_path).parent.parent / 'args.yaml' - if osp.exists(resume_opt_file_path): - with open(resume_opt_file_path) as f: - args = argparse.Namespace(**yaml.safe_load(f)) # load args value from args.yaml - else: - LOGGER.warning(f'We can not find the path of {Path(checkpoint_path).parent.parent / "args.yaml"},'\ - f' we will save exp log to {Path(checkpoint_path).parent.parent}') - LOGGER.warning(f'In this case, make sure to provide configuration, such as data, batch size.') - args.save_dir = str(Path(checkpoint_path).parent.parent) - args.resume = checkpoint_path # set the args.resume to checkpoint path. - else: - args.save_dir = str(increment_name(osp.join(args.output_dir, args.name))) - if master_process: - os.makedirs(args.save_dir) - - # check specific shape - if args.specific_shape: - if args.rect: - LOGGER.warning('You set specific shape, and rect to True is needless. YOLOv6 will use the specific shape to train.') - args.height = check_img_size(args.height, 32, floor=256) # verify imgsz is gs-multiple - args.width = check_img_size(args.width, 32, floor=256) - else: - args.img_size = check_img_size(args.img_size, 32, floor=256) - - cfg = Config.fromfile(args.conf_file) - if not hasattr(cfg, 'training_mode'): - setattr(cfg, 'training_mode', 'repvgg') - # check device - device = select_device(args.device) - # set random seed - set_random_seed(1+args.rank, deterministic=(args.rank == -1)) - # save args - if master_process: - save_yaml(vars(args), osp.join(args.save_dir, 'args.yaml')) - - return cfg, device, args - - -def main(args): - '''main function of training''' - # Setup - args.local_rank, args.rank, args.world_size = get_envs() - cfg, device, args = check_and_init(args) - # reload envs because args was chagned in check_and_init(args) - args.local_rank, args.rank, args.world_size = get_envs() - LOGGER.info(f'training args are: {args}\n') - if args.local_rank != -1: # if DDP mode - torch.cuda.set_device(args.local_rank) - device = torch.device('cuda', args.local_rank) - LOGGER.info('Initializing process group... ') - dist.init_process_group(backend="nccl" if dist.is_nccl_available() else "gloo", \ - init_method=args.dist_url, rank=args.local_rank, world_size=args.world_size,timeout=datetime.timedelta(seconds=7200)) - - # Start - trainer = Trainer(args, cfg, device) - # PTQ - if args.quant and args.calib: - trainer.calibrate(cfg) - return - trainer.train() - - # End - if args.world_size > 1 and args.rank == 0: - LOGGER.info('Destroying process group... ') - dist.destroy_process_group() - - -if __name__ == '__main__': - args = get_args_parser().parse_args() - main(args) diff --git a/cv/detection/yolov6/pytorch/yolov6/__init__.py b/cv/detection/yolov6/pytorch/yolov6/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/cv/detection/yolov6/pytorch/yolov6/assigners/__init__.py b/cv/detection/yolov6/pytorch/yolov6/assigners/__init__.py deleted file mode 100644 index 8c1636e47..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/assigners/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .atss_assigner import ATSSAssigner -from .tal_assigner import TaskAlignedAssigner diff --git a/cv/detection/yolov6/pytorch/yolov6/assigners/anchor_generator.py b/cv/detection/yolov6/pytorch/yolov6/assigners/anchor_generator.py deleted file mode 100644 index c8276418e..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/assigners/anchor_generator.py +++ /dev/null @@ -1,63 +0,0 @@ -import torch -from yolov6.utils.general import check_version - -torch_1_10_plus = check_version(torch.__version__, minimum='1.10.0') - -def generate_anchors(feats, fpn_strides, grid_cell_size=5.0, grid_cell_offset=0.5, device='cpu', is_eval=False, mode='af'): - '''Generate anchors from features.''' - anchors = [] - anchor_points = [] - stride_tensor = [] - num_anchors_list = [] - assert feats is not None - if is_eval: - for i, stride in enumerate(fpn_strides): - _, _, h, w = feats[i].shape - shift_x = torch.arange(end=w, device=device) + grid_cell_offset - shift_y = torch.arange(end=h, device=device) + grid_cell_offset - shift_y, shift_x = torch.meshgrid(shift_y, shift_x, indexing='ij') if torch_1_10_plus else torch.meshgrid(shift_y, shift_x) - anchor_point = torch.stack( - [shift_x, shift_y], axis=-1).to(torch.float) - if mode == 'af': # anchor-free - anchor_points.append(anchor_point.reshape([-1, 2])) - stride_tensor.append( - torch.full( - (h * w, 1), stride, dtype=torch.float, device=device)) - elif mode == 'ab': # anchor-based - anchor_points.append(anchor_point.reshape([-1, 2]).repeat(3,1)) - stride_tensor.append( - torch.full( - (h * w, 1), stride, dtype=torch.float, device=device).repeat(3,1)) - anchor_points = torch.cat(anchor_points) - stride_tensor = torch.cat(stride_tensor) - return anchor_points, stride_tensor - else: - for i, stride in enumerate(fpn_strides): - _, _, h, w = feats[i].shape - cell_half_size = grid_cell_size * stride * 0.5 - shift_x = (torch.arange(end=w, device=device) + grid_cell_offset) * stride - shift_y = (torch.arange(end=h, device=device) + grid_cell_offset) * stride - shift_y, shift_x = torch.meshgrid(shift_y, shift_x, indexing='ij') if torch_1_10_plus else torch.meshgrid(shift_y, shift_x) - anchor = torch.stack( - [ - shift_x - cell_half_size, shift_y - cell_half_size, - shift_x + cell_half_size, shift_y + cell_half_size - ], - axis=-1).clone().to(feats[0].dtype) - anchor_point = torch.stack( - [shift_x, shift_y], axis=-1).clone().to(feats[0].dtype) - - if mode == 'af': # anchor-free - anchors.append(anchor.reshape([-1, 4])) - anchor_points.append(anchor_point.reshape([-1, 2])) - elif mode == 'ab': # anchor-based - anchors.append(anchor.reshape([-1, 4]).repeat(3,1)) - anchor_points.append(anchor_point.reshape([-1, 2]).repeat(3,1)) - num_anchors_list.append(len(anchors[-1])) - stride_tensor.append( - torch.full( - [num_anchors_list[-1], 1], stride, dtype=feats[0].dtype)) - anchors = torch.cat(anchors) - anchor_points = torch.cat(anchor_points).to(device) - stride_tensor = torch.cat(stride_tensor).to(device) - return anchors, anchor_points, num_anchors_list, stride_tensor diff --git a/cv/detection/yolov6/pytorch/yolov6/assigners/assigner_utils.py b/cv/detection/yolov6/pytorch/yolov6/assigners/assigner_utils.py deleted file mode 100644 index a10f02a34..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/assigners/assigner_utils.py +++ /dev/null @@ -1,89 +0,0 @@ -import torch -import torch.nn.functional as F - -def dist_calculator(gt_bboxes, anchor_bboxes): - """compute center distance between all bbox and gt - - Args: - gt_bboxes (Tensor): shape(bs*n_max_boxes, 4) - anchor_bboxes (Tensor): shape(num_total_anchors, 4) - Return: - distances (Tensor): shape(bs*n_max_boxes, num_total_anchors) - ac_points (Tensor): shape(num_total_anchors, 2) - """ - gt_cx = (gt_bboxes[:, 0] + gt_bboxes[:, 2]) / 2.0 - gt_cy = (gt_bboxes[:, 1] + gt_bboxes[:, 3]) / 2.0 - gt_points = torch.stack([gt_cx, gt_cy], dim=1) - ac_cx = (anchor_bboxes[:, 0] + anchor_bboxes[:, 2]) / 2.0 - ac_cy = (anchor_bboxes[:, 1] + anchor_bboxes[:, 3]) / 2.0 - ac_points = torch.stack([ac_cx, ac_cy], dim=1) - - distances = (gt_points[:, None, :] - ac_points[None, :, :]).pow(2).sum(-1).sqrt() - - return distances, ac_points - -def select_candidates_in_gts(xy_centers, gt_bboxes, eps=1e-9): - """select the positive anchors's center in gt - - Args: - xy_centers (Tensor): shape(bs*n_max_boxes, num_total_anchors, 4) - gt_bboxes (Tensor): shape(bs, n_max_boxes, 4) - Return: - (Tensor): shape(bs, n_max_boxes, num_total_anchors) - """ - n_anchors = xy_centers.size(0) - bs, n_max_boxes, _ = gt_bboxes.size() - _gt_bboxes = gt_bboxes.reshape([-1, 4]) - xy_centers = xy_centers.unsqueeze(0).repeat(bs * n_max_boxes, 1, 1) - gt_bboxes_lt = _gt_bboxes[:, 0:2].unsqueeze(1).repeat(1, n_anchors, 1) - gt_bboxes_rb = _gt_bboxes[:, 2:4].unsqueeze(1).repeat(1, n_anchors, 1) - b_lt = xy_centers - gt_bboxes_lt - b_rb = gt_bboxes_rb - xy_centers - bbox_deltas = torch.cat([b_lt, b_rb], dim=-1) - bbox_deltas = bbox_deltas.reshape([bs, n_max_boxes, n_anchors, -1]) - return (bbox_deltas.min(axis=-1)[0] > eps).to(gt_bboxes.dtype) - -def select_highest_overlaps(mask_pos, overlaps, n_max_boxes): - """if an anchor box is assigned to multiple gts, - the one with the highest iou will be selected. - - Args: - mask_pos (Tensor): shape(bs, n_max_boxes, num_total_anchors) - overlaps (Tensor): shape(bs, n_max_boxes, num_total_anchors) - Return: - target_gt_idx (Tensor): shape(bs, num_total_anchors) - fg_mask (Tensor): shape(bs, num_total_anchors) - mask_pos (Tensor): shape(bs, n_max_boxes, num_total_anchors) - """ - fg_mask = mask_pos.sum(axis=-2) - if fg_mask.max() > 1: - mask_multi_gts = (fg_mask.unsqueeze(1) > 1).repeat([1, n_max_boxes, 1]) - max_overlaps_idx = overlaps.argmax(axis=1) - is_max_overlaps = F.one_hot(max_overlaps_idx, n_max_boxes) - is_max_overlaps = is_max_overlaps.permute(0, 2, 1).to(overlaps.dtype) - mask_pos = torch.where(mask_multi_gts, is_max_overlaps, mask_pos) - fg_mask = mask_pos.sum(axis=-2) - target_gt_idx = mask_pos.argmax(axis=-2) - return target_gt_idx, fg_mask , mask_pos - -def iou_calculator(box1, box2, eps=1e-9): - """Calculate iou for batch - - Args: - box1 (Tensor): shape(bs, n_max_boxes, 1, 4) - box2 (Tensor): shape(bs, 1, num_total_anchors, 4) - Return: - (Tensor): shape(bs, n_max_boxes, num_total_anchors) - """ - box1 = box1.unsqueeze(2) # [N, M1, 4] -> [N, M1, 1, 4] - box2 = box2.unsqueeze(1) # [N, M2, 4] -> [N, 1, M2, 4] - px1y1, px2y2 = box1[:, :, :, 0:2], box1[:, :, :, 2:4] - gx1y1, gx2y2 = box2[:, :, :, 0:2], box2[:, :, :, 2:4] - x1y1 = torch.maximum(px1y1, gx1y1) - x2y2 = torch.minimum(px2y2, gx2y2) - overlap = (x2y2 - x1y1).clip(0).prod(-1) - area1 = (px2y2 - px1y1).clip(0).prod(-1) - area2 = (gx2y2 - gx1y1).clip(0).prod(-1) - union = area1 + area2 - overlap + eps - - return overlap / union diff --git a/cv/detection/yolov6/pytorch/yolov6/assigners/atss_assigner.py b/cv/detection/yolov6/pytorch/yolov6/assigners/atss_assigner.py deleted file mode 100644 index 12a5f243b..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/assigners/atss_assigner.py +++ /dev/null @@ -1,161 +0,0 @@ -import torch -import torch.nn as nn -import torch.nn.functional as F -from yolov6.assigners.iou2d_calculator import iou2d_calculator -from yolov6.assigners.assigner_utils import dist_calculator, select_candidates_in_gts, select_highest_overlaps, iou_calculator - -class ATSSAssigner(nn.Module): - '''Adaptive Training Sample Selection Assigner''' - def __init__(self, - topk=9, - num_classes=80): - super(ATSSAssigner, self).__init__() - self.topk = topk - self.num_classes = num_classes - self.bg_idx = num_classes - - @torch.no_grad() - def forward(self, - anc_bboxes, - n_level_bboxes, - gt_labels, - gt_bboxes, - mask_gt, - pd_bboxes): - r"""This code is based on - https://github.com/fcjian/TOOD/blob/master/mmdet/core/bbox/assigners/atss_assigner.py - - Args: - anc_bboxes (Tensor): shape(num_total_anchors, 4) - n_level_bboxes (List):len(3) - gt_labels (Tensor): shape(bs, n_max_boxes, 1) - gt_bboxes (Tensor): shape(bs, n_max_boxes, 4) - mask_gt (Tensor): shape(bs, n_max_boxes, 1) - pd_bboxes (Tensor): shape(bs, n_max_boxes, 4) - Returns: - target_labels (Tensor): shape(bs, num_total_anchors) - target_bboxes (Tensor): shape(bs, num_total_anchors, 4) - target_scores (Tensor): shape(bs, num_total_anchors, num_classes) - fg_mask (Tensor): shape(bs, num_total_anchors) - """ - self.n_anchors = anc_bboxes.size(0) - self.bs = gt_bboxes.size(0) - self.n_max_boxes = gt_bboxes.size(1) - - if self.n_max_boxes == 0: - device = gt_bboxes.device - return torch.full( [self.bs, self.n_anchors], self.bg_idx).to(device), \ - torch.zeros([self.bs, self.n_anchors, 4]).to(device), \ - torch.zeros([self.bs, self.n_anchors, self.num_classes]).to(device), \ - torch.zeros([self.bs, self.n_anchors]).to(device) - - - overlaps = iou2d_calculator(gt_bboxes.reshape([-1, 4]), anc_bboxes) - overlaps = overlaps.reshape([self.bs, -1, self.n_anchors]) - - distances, ac_points = dist_calculator(gt_bboxes.reshape([-1, 4]), anc_bboxes) - distances = distances.reshape([self.bs, -1, self.n_anchors]) - - is_in_candidate, candidate_idxs = self.select_topk_candidates( - distances, n_level_bboxes, mask_gt) - - overlaps_thr_per_gt, iou_candidates = self.thres_calculator( - is_in_candidate, candidate_idxs, overlaps) - - # select candidates iou >= threshold as positive - is_pos = torch.where( - iou_candidates > overlaps_thr_per_gt.repeat([1, 1, self.n_anchors]), - is_in_candidate, torch.zeros_like(is_in_candidate)) - - is_in_gts = select_candidates_in_gts(ac_points, gt_bboxes) - mask_pos = is_pos * is_in_gts * mask_gt - - target_gt_idx, fg_mask, mask_pos = select_highest_overlaps( - mask_pos, overlaps, self.n_max_boxes) - - # assigned target - target_labels, target_bboxes, target_scores = self.get_targets( - gt_labels, gt_bboxes, target_gt_idx, fg_mask) - - # soft label with iou - if pd_bboxes is not None: - ious = iou_calculator(gt_bboxes, pd_bboxes) * mask_pos - ious = ious.max(axis=-2)[0].unsqueeze(-1) - target_scores *= ious - - return target_labels.long(), target_bboxes, target_scores, fg_mask.bool() - - def select_topk_candidates(self, - distances, - n_level_bboxes, - mask_gt): - - mask_gt = mask_gt.repeat(1, 1, self.topk).bool() - level_distances = torch.split(distances, n_level_bboxes, dim=-1) - is_in_candidate_list = [] - candidate_idxs = [] - start_idx = 0 - for per_level_distances, per_level_boxes in zip(level_distances, n_level_bboxes): - - end_idx = start_idx + per_level_boxes - selected_k = min(self.topk, per_level_boxes) - _, per_level_topk_idxs = per_level_distances.topk(selected_k, dim=-1, largest=False) - candidate_idxs.append(per_level_topk_idxs + start_idx) - per_level_topk_idxs = torch.where(mask_gt, - per_level_topk_idxs, torch.zeros_like(per_level_topk_idxs)) - is_in_candidate = F.one_hot(per_level_topk_idxs, per_level_boxes).sum(dim=-2) - is_in_candidate = torch.where(is_in_candidate > 1, - torch.zeros_like(is_in_candidate), is_in_candidate) - is_in_candidate_list.append(is_in_candidate.to(distances.dtype)) - start_idx = end_idx - - is_in_candidate_list = torch.cat(is_in_candidate_list, dim=-1) - candidate_idxs = torch.cat(candidate_idxs, dim=-1) - - return is_in_candidate_list, candidate_idxs - - def thres_calculator(self, - is_in_candidate, - candidate_idxs, - overlaps): - - n_bs_max_boxes = self.bs * self.n_max_boxes - _candidate_overlaps = torch.where(is_in_candidate > 0, - overlaps, torch.zeros_like(overlaps)) - candidate_idxs = candidate_idxs.reshape([n_bs_max_boxes, -1]) - assist_idxs = self.n_anchors * torch.arange(n_bs_max_boxes, device=candidate_idxs.device) - assist_idxs = assist_idxs[:,None] - faltten_idxs = candidate_idxs + assist_idxs - candidate_overlaps = _candidate_overlaps.reshape(-1)[faltten_idxs] - candidate_overlaps = candidate_overlaps.reshape([self.bs, self.n_max_boxes, -1]) - - overlaps_mean_per_gt = candidate_overlaps.mean(axis=-1, keepdim=True) - overlaps_std_per_gt = candidate_overlaps.std(axis=-1, keepdim=True) - overlaps_thr_per_gt = overlaps_mean_per_gt + overlaps_std_per_gt - - return overlaps_thr_per_gt, _candidate_overlaps - - def get_targets(self, - gt_labels, - gt_bboxes, - target_gt_idx, - fg_mask): - - # assigned target labels - batch_idx = torch.arange(self.bs, dtype=gt_labels.dtype, device=gt_labels.device) - batch_idx = batch_idx[...,None] - target_gt_idx = (target_gt_idx + batch_idx * self.n_max_boxes).long() - target_labels = gt_labels.flatten()[target_gt_idx.flatten()] - target_labels = target_labels.reshape([self.bs, self.n_anchors]) - target_labels = torch.where(fg_mask > 0, - target_labels, torch.full_like(target_labels, self.bg_idx)) - - # assigned target boxes - target_bboxes = gt_bboxes.reshape([-1, 4])[target_gt_idx.flatten()] - target_bboxes = target_bboxes.reshape([self.bs, self.n_anchors, 4]) - - # assigned target scores - target_scores = F.one_hot(target_labels.long(), self.num_classes + 1).float() - target_scores = target_scores[:, :, :self.num_classes] - - return target_labels, target_bboxes, target_scores diff --git a/cv/detection/yolov6/pytorch/yolov6/assigners/iou2d_calculator.py b/cv/detection/yolov6/pytorch/yolov6/assigners/iou2d_calculator.py deleted file mode 100644 index 63768015b..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/assigners/iou2d_calculator.py +++ /dev/null @@ -1,249 +0,0 @@ -#This code is based on -#https://github.com/fcjian/TOOD/blob/master/mmdet/core/bbox/iou_calculators/iou2d_calculator.py - -import torch - - -def cast_tensor_type(x, scale=1., dtype=None): - if dtype == 'fp16': - # scale is for preventing overflows - x = (x / scale).half() - return x - - -def fp16_clamp(x, min=None, max=None): - if not x.is_cuda and x.dtype == torch.float16: - # clamp for cpu float16, tensor fp16 has no clamp implementation - return x.float().clamp(min, max).half() - - return x.clamp(min, max) - - -def iou2d_calculator(bboxes1, bboxes2, mode='iou', is_aligned=False, scale=1., dtype=None): - """2D Overlaps (e.g. IoUs, GIoUs) Calculator.""" - - """Calculate IoU between 2D bboxes. - - Args: - bboxes1 (Tensor): bboxes have shape (m, 4) in - format, or shape (m, 5) in format. - bboxes2 (Tensor): bboxes have shape (m, 4) in - format, shape (m, 5) in format, or be - empty. If ``is_aligned `` is ``True``, then m and n must be - equal. - mode (str): "iou" (intersection over union), "iof" (intersection - over foreground), or "giou" (generalized intersection over - union). - is_aligned (bool, optional): If True, then m and n must be equal. - Default False. - - Returns: - Tensor: shape (m, n) if ``is_aligned `` is False else shape (m,) - """ - assert bboxes1.size(-1) in [0, 4, 5] - assert bboxes2.size(-1) in [0, 4, 5] - if bboxes2.size(-1) == 5: - bboxes2 = bboxes2[..., :4] - if bboxes1.size(-1) == 5: - bboxes1 = bboxes1[..., :4] - - if dtype == 'fp16': - # change tensor type to save cpu and cuda memory and keep speed - bboxes1 = cast_tensor_type(bboxes1, scale, dtype) - bboxes2 = cast_tensor_type(bboxes2, scale, dtype) - overlaps = bbox_overlaps(bboxes1, bboxes2, mode, is_aligned) - if not overlaps.is_cuda and overlaps.dtype == torch.float16: - # resume cpu float32 - overlaps = overlaps.float() - return overlaps - - return bbox_overlaps(bboxes1, bboxes2, mode, is_aligned) - - -def bbox_overlaps(bboxes1, bboxes2, mode='iou', is_aligned=False, eps=1e-6): - """Calculate overlap between two set of bboxes. - - FP16 Contributed by https://github.com/open-mmlab/mmdetection/pull/4889 - Note: - Assume bboxes1 is M x 4, bboxes2 is N x 4, when mode is 'iou', - there are some new generated variable when calculating IOU - using bbox_overlaps function: - - 1) is_aligned is False - area1: M x 1 - area2: N x 1 - lt: M x N x 2 - rb: M x N x 2 - wh: M x N x 2 - overlap: M x N x 1 - union: M x N x 1 - ious: M x N x 1 - - Total memory: - S = (9 x N x M + N + M) * 4 Byte, - - When using FP16, we can reduce: - R = (9 x N x M + N + M) * 4 / 2 Byte - R large than (N + M) * 4 * 2 is always true when N and M >= 1. - Obviously, N + M <= N * M < 3 * N * M, when N >=2 and M >=2, - N + 1 < 3 * N, when N or M is 1. - - Given M = 40 (ground truth), N = 400000 (three anchor boxes - in per grid, FPN, R-CNNs), - R = 275 MB (one times) - - A special case (dense detection), M = 512 (ground truth), - R = 3516 MB = 3.43 GB - - When the batch size is B, reduce: - B x R - - Therefore, CUDA memory runs out frequently. - - Experiments on GeForce RTX 2080Ti (11019 MiB): - - | dtype | M | N | Use | Real | Ideal | - |:----:|:----:|:----:|:----:|:----:|:----:| - | FP32 | 512 | 400000 | 8020 MiB | -- | -- | - | FP16 | 512 | 400000 | 4504 MiB | 3516 MiB | 3516 MiB | - | FP32 | 40 | 400000 | 1540 MiB | -- | -- | - | FP16 | 40 | 400000 | 1264 MiB | 276MiB | 275 MiB | - - 2) is_aligned is True - area1: N x 1 - area2: N x 1 - lt: N x 2 - rb: N x 2 - wh: N x 2 - overlap: N x 1 - union: N x 1 - ious: N x 1 - - Total memory: - S = 11 x N * 4 Byte - - When using FP16, we can reduce: - R = 11 x N * 4 / 2 Byte - - So do the 'giou' (large than 'iou'). - - Time-wise, FP16 is generally faster than FP32. - - When gpu_assign_thr is not -1, it takes more time on cpu - but not reduce memory. - There, we can reduce half the memory and keep the speed. - - If ``is_aligned`` is ``False``, then calculate the overlaps between each - bbox of bboxes1 and bboxes2, otherwise the overlaps between each aligned - pair of bboxes1 and bboxes2. - - Args: - bboxes1 (Tensor): shape (B, m, 4) in format or empty. - bboxes2 (Tensor): shape (B, n, 4) in format or empty. - B indicates the batch dim, in shape (B1, B2, ..., Bn). - If ``is_aligned`` is ``True``, then m and n must be equal. - mode (str): "iou" (intersection over union), "iof" (intersection over - foreground) or "giou" (generalized intersection over union). - Default "iou". - is_aligned (bool, optional): If True, then m and n must be equal. - Default False. - eps (float, optional): A value added to the denominator for numerical - stability. Default 1e-6. - - Returns: - Tensor: shape (m, n) if ``is_aligned`` is False else shape (m,) - - Example: - >>> bboxes1 = torch.FloatTensor([ - >>> [0, 0, 10, 10], - >>> [10, 10, 20, 20], - >>> [32, 32, 38, 42], - >>> ]) - >>> bboxes2 = torch.FloatTensor([ - >>> [0, 0, 10, 20], - >>> [0, 10, 10, 19], - >>> [10, 10, 20, 20], - >>> ]) - >>> overlaps = bbox_overlaps(bboxes1, bboxes2) - >>> assert overlaps.shape == (3, 3) - >>> overlaps = bbox_overlaps(bboxes1, bboxes2, is_aligned=True) - >>> assert overlaps.shape == (3, ) - - Example: - >>> empty = torch.empty(0, 4) - >>> nonempty = torch.FloatTensor([[0, 0, 10, 9]]) - >>> assert tuple(bbox_overlaps(empty, nonempty).shape) == (0, 1) - >>> assert tuple(bbox_overlaps(nonempty, empty).shape) == (1, 0) - >>> assert tuple(bbox_overlaps(empty, empty).shape) == (0, 0) - """ - - assert mode in ['iou', 'iof', 'giou'], f'Unsupported mode {mode}' - # Either the boxes are empty or the length of boxes' last dimension is 4 - assert (bboxes1.size(-1) == 4 or bboxes1.size(0) == 0) - assert (bboxes2.size(-1) == 4 or bboxes2.size(0) == 0) - - # Batch dim must be the same - # Batch dim: (B1, B2, ... Bn) - assert bboxes1.shape[:-2] == bboxes2.shape[:-2] - batch_shape = bboxes1.shape[:-2] - - rows = bboxes1.size(-2) - cols = bboxes2.size(-2) - if is_aligned: - assert rows == cols - - if rows * cols == 0: - if is_aligned: - return bboxes1.new(batch_shape + (rows, )) - else: - return bboxes1.new(batch_shape + (rows, cols)) - - area1 = (bboxes1[..., 2] - bboxes1[..., 0]) * ( - bboxes1[..., 3] - bboxes1[..., 1]) - area2 = (bboxes2[..., 2] - bboxes2[..., 0]) * ( - bboxes2[..., 3] - bboxes2[..., 1]) - - if is_aligned: - lt = torch.max(bboxes1[..., :2], bboxes2[..., :2]) # [B, rows, 2] - rb = torch.min(bboxes1[..., 2:], bboxes2[..., 2:]) # [B, rows, 2] - - wh = fp16_clamp(rb - lt, min=0) - overlap = wh[..., 0] * wh[..., 1] - - if mode in ['iou', 'giou']: - union = area1 + area2 - overlap - else: - union = area1 - if mode == 'giou': - enclosed_lt = torch.min(bboxes1[..., :2], bboxes2[..., :2]) - enclosed_rb = torch.max(bboxes1[..., 2:], bboxes2[..., 2:]) - else: - lt = torch.max(bboxes1[..., :, None, :2], - bboxes2[..., None, :, :2]) # [B, rows, cols, 2] - rb = torch.min(bboxes1[..., :, None, 2:], - bboxes2[..., None, :, 2:]) # [B, rows, cols, 2] - - wh = fp16_clamp(rb - lt, min=0) - overlap = wh[..., 0] * wh[..., 1] - - if mode in ['iou', 'giou']: - union = area1[..., None] + area2[..., None, :] - overlap - else: - union = area1[..., None] - if mode == 'giou': - enclosed_lt = torch.min(bboxes1[..., :, None, :2], - bboxes2[..., None, :, :2]) - enclosed_rb = torch.max(bboxes1[..., :, None, 2:], - bboxes2[..., None, :, 2:]) - - eps = union.new_tensor([eps]) - union = torch.max(union, eps) - ious = overlap / union - if mode in ['iou', 'iof']: - return ious - # calculate gious - enclose_wh = fp16_clamp(enclosed_rb - enclosed_lt, min=0) - enclose_area = enclose_wh[..., 0] * enclose_wh[..., 1] - enclose_area = torch.max(enclose_area, eps) - gious = ious - (enclose_area - union) / enclose_area - return gious diff --git a/cv/detection/yolov6/pytorch/yolov6/assigners/tal_assigner.py b/cv/detection/yolov6/pytorch/yolov6/assigners/tal_assigner.py deleted file mode 100644 index 45008f5ac..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/assigners/tal_assigner.py +++ /dev/null @@ -1,173 +0,0 @@ -import torch -import torch.nn as nn -import torch.nn.functional as F -from yolov6.assigners.assigner_utils import select_candidates_in_gts, select_highest_overlaps, iou_calculator, dist_calculator - -class TaskAlignedAssigner(nn.Module): - def __init__(self, - topk=13, - num_classes=80, - alpha=1.0, - beta=6.0, - eps=1e-9): - super(TaskAlignedAssigner, self).__init__() - self.topk = topk - self.num_classes = num_classes - self.bg_idx = num_classes - self.alpha = alpha - self.beta = beta - self.eps = eps - - @torch.no_grad() - def forward(self, - pd_scores, - pd_bboxes, - anc_points, - gt_labels, - gt_bboxes, - mask_gt): - """This code referenced to - https://github.com/Nioolek/PPYOLOE_pytorch/blob/master/ppyoloe/assigner/tal_assigner.py - - Args: - pd_scores (Tensor): shape(bs, num_total_anchors, num_classes) - pd_bboxes (Tensor): shape(bs, num_total_anchors, 4) - anc_points (Tensor): shape(num_total_anchors, 2) - gt_labels (Tensor): shape(bs, n_max_boxes, 1) - gt_bboxes (Tensor): shape(bs, n_max_boxes, 4) - mask_gt (Tensor): shape(bs, n_max_boxes, 1) - Returns: - target_labels (Tensor): shape(bs, num_total_anchors) - target_bboxes (Tensor): shape(bs, num_total_anchors, 4) - target_scores (Tensor): shape(bs, num_total_anchors, num_classes) - fg_mask (Tensor): shape(bs, num_total_anchors) - """ - self.bs = pd_scores.size(0) - self.n_max_boxes = gt_bboxes.size(1) - - if self.n_max_boxes == 0: - device = gt_bboxes.device - return torch.full_like(pd_scores[..., 0], self.bg_idx).to(device), \ - torch.zeros_like(pd_bboxes).to(device), \ - torch.zeros_like(pd_scores).to(device), \ - torch.zeros_like(pd_scores[..., 0]).to(device) - - cycle, step, self.bs = (1, self.bs, self.bs) if self.n_max_boxes <= 100 else (self.bs, 1, 1) - target_labels_lst, target_bboxes_lst, target_scores_lst, fg_mask_lst = [], [], [], [] - # loop batch dim in case of numerous object box - for i in range(cycle): - start, end = i*step, (i+1)*step - pd_scores_ = pd_scores[start:end, ...] - pd_bboxes_ = pd_bboxes[start:end, ...] - gt_labels_ = gt_labels[start:end, ...] - gt_bboxes_ = gt_bboxes[start:end, ...] - mask_gt_ = mask_gt[start:end, ...] - - mask_pos, align_metric, overlaps = self.get_pos_mask( - pd_scores_, pd_bboxes_, gt_labels_, gt_bboxes_, anc_points, mask_gt_) - - target_gt_idx, fg_mask, mask_pos = select_highest_overlaps( - mask_pos, overlaps, self.n_max_boxes) - - # assigned target - target_labels, target_bboxes, target_scores = self.get_targets( - gt_labels_, gt_bboxes_, target_gt_idx, fg_mask) - - # normalize - align_metric *= mask_pos - pos_align_metrics = align_metric.max(axis=-1, keepdim=True)[0] - pos_overlaps = (overlaps * mask_pos).max(axis=-1, keepdim=True)[0] - norm_align_metric = (align_metric * pos_overlaps / (pos_align_metrics + self.eps)).max(-2)[0].unsqueeze(-1) - target_scores = target_scores * norm_align_metric - - # append - target_labels_lst.append(target_labels) - target_bboxes_lst.append(target_bboxes) - target_scores_lst.append(target_scores) - fg_mask_lst.append(fg_mask) - - # concat - target_labels = torch.cat(target_labels_lst, 0) - target_bboxes = torch.cat(target_bboxes_lst, 0) - target_scores = torch.cat(target_scores_lst, 0) - fg_mask = torch.cat(fg_mask_lst, 0) - - return target_labels, target_bboxes, target_scores, fg_mask.bool() - - def get_pos_mask(self, - pd_scores, - pd_bboxes, - gt_labels, - gt_bboxes, - anc_points, - mask_gt): - - # get anchor_align metric - align_metric, overlaps = self.get_box_metrics(pd_scores, pd_bboxes, gt_labels, gt_bboxes) - # get in_gts mask - mask_in_gts = select_candidates_in_gts(anc_points, gt_bboxes) - # get topk_metric mask - mask_topk = self.select_topk_candidates( - align_metric * mask_in_gts, topk_mask=mask_gt.repeat([1, 1, self.topk]).bool()) - # merge all mask to a final mask - mask_pos = mask_topk * mask_in_gts * mask_gt - - return mask_pos, align_metric, overlaps - - def get_box_metrics(self, - pd_scores, - pd_bboxes, - gt_labels, - gt_bboxes): - - pd_scores = pd_scores.permute(0, 2, 1) - gt_labels = gt_labels.to(torch.long) - ind = torch.zeros([2, self.bs, self.n_max_boxes], dtype=torch.long) - ind[0] = torch.arange(end=self.bs).view(-1, 1).repeat(1, self.n_max_boxes) - ind[1] = gt_labels.squeeze(-1) - bbox_scores = pd_scores[ind[0], ind[1]] - - overlaps = iou_calculator(gt_bboxes, pd_bboxes) - align_metric = bbox_scores.pow(self.alpha) * overlaps.pow(self.beta) - - return align_metric, overlaps - - def select_topk_candidates(self, - metrics, - largest=True, - topk_mask=None): - - num_anchors = metrics.shape[-1] - topk_metrics, topk_idxs = torch.topk( - metrics, self.topk, axis=-1, largest=largest) - if topk_mask is None: - topk_mask = (topk_metrics.max(axis=-1, keepdim=True) > self.eps).tile( - [1, 1, self.topk]) - topk_idxs = torch.where(topk_mask, topk_idxs, torch.zeros_like(topk_idxs)) - is_in_topk = F.one_hot(topk_idxs, num_anchors).sum(axis=-2) - is_in_topk = torch.where(is_in_topk > 1, - torch.zeros_like(is_in_topk), is_in_topk) - return is_in_topk.to(metrics.dtype) - - def get_targets(self, - gt_labels, - gt_bboxes, - target_gt_idx, - fg_mask): - - # assigned target labels - batch_ind = torch.arange(end=self.bs, dtype=torch.int64, device=gt_labels.device)[...,None] - target_gt_idx = target_gt_idx + batch_ind * self.n_max_boxes - target_labels = gt_labels.long().flatten()[target_gt_idx] - - # assigned target boxes - target_bboxes = gt_bboxes.reshape([-1, 4])[target_gt_idx] - - # assigned target scores - target_labels[target_labels<0] = 0 - target_scores = F.one_hot(target_labels, self.num_classes) - fg_scores_mask = fg_mask[:, :, None].repeat(1, 1, self.num_classes) - target_scores = torch.where(fg_scores_mask > 0, target_scores, - torch.full_like(target_scores, 0)) - - return target_labels, target_bboxes, target_scores diff --git a/cv/detection/yolov6/pytorch/yolov6/core/engine.py b/cv/detection/yolov6/pytorch/yolov6/core/engine.py deleted file mode 100644 index 105451352..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/core/engine.py +++ /dev/null @@ -1,591 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- -from ast import Pass -import os -import time -from copy import deepcopy -import os.path as osp - -from tqdm import tqdm - -import cv2 -import numpy as np -import math -import torch -from torch.cuda import amp -from torch.nn.parallel import DistributedDataParallel as DDP -from torch.utils.tensorboard import SummaryWriter - -import tools.eval as eval -from yolov6.data.data_load import create_dataloader -from yolov6.models.yolo import build_model -from yolov6.models.yolo_lite import build_model as build_lite_model - -from yolov6.models.losses.loss import ComputeLoss as ComputeLoss -from yolov6.models.losses.loss_fuseab import ComputeLoss as ComputeLoss_ab -from yolov6.models.losses.loss_distill import ComputeLoss as ComputeLoss_distill -from yolov6.models.losses.loss_distill_ns import ComputeLoss as ComputeLoss_distill_ns - -from yolov6.utils.events import LOGGER, NCOLS, load_yaml, write_tblog, write_tbimg -from yolov6.utils.ema import ModelEMA, de_parallel -from yolov6.utils.checkpoint import load_state_dict, save_checkpoint, strip_optimizer -from yolov6.solver.build import build_optimizer, build_lr_scheduler -from yolov6.utils.RepOptimizer import extract_scales, RepVGGOptimizer -from yolov6.utils.nms import xywh2xyxy -from yolov6.utils.general import download_ckpt - - -class Trainer: - def __init__(self, args, cfg, device): - self.args = args - self.cfg = cfg - self.device = device - self.max_epoch = args.epochs - - if args.resume: - self.ckpt = torch.load(args.resume, map_location='cpu') - - self.rank = args.rank - self.local_rank = args.local_rank - self.world_size = args.world_size - self.main_process = self.rank in [-1, 0] - self.save_dir = args.save_dir - # get data loader - self.data_dict = load_yaml(args.data_path) - self.num_classes = self.data_dict['nc'] - # get model and optimizer - self.distill_ns = True if self.args.distill and self.cfg.model.type in ['YOLOv6n','YOLOv6s'] else False - model = self.get_model(args, cfg, self.num_classes, device) - if self.args.distill: - if self.args.fuse_ab: - LOGGER.error('ERROR in: Distill models should turn off the fuse_ab.\n') - exit() - self.teacher_model = self.get_teacher_model(args, cfg, self.num_classes, device) - if self.args.quant: - self.quant_setup(model, cfg, device) - if cfg.training_mode == 'repopt': - scales = self.load_scale_from_pretrained_models(cfg, device) - reinit = False if cfg.model.pretrained is not None else True - self.optimizer = RepVGGOptimizer(model, scales, args, cfg, reinit=reinit) - else: - self.optimizer = self.get_optimizer(args, cfg, model) - self.scheduler, self.lf = self.get_lr_scheduler(args, cfg, self.optimizer) - self.ema = ModelEMA(model) if self.main_process else None - # tensorboard - self.tblogger = SummaryWriter(self.save_dir) if self.main_process else None - self.start_epoch = 0 - #resume - if hasattr(self, "ckpt"): - resume_state_dict = self.ckpt['model'].float().state_dict() # checkpoint state_dict as FP32 - model.load_state_dict(resume_state_dict, strict=True) # load - self.start_epoch = self.ckpt['epoch'] + 1 - self.optimizer.load_state_dict(self.ckpt['optimizer']) - self.scheduler.load_state_dict(self.ckpt['scheduler']) - if self.main_process: - self.ema.ema.load_state_dict(self.ckpt['ema'].float().state_dict()) - self.ema.updates = self.ckpt['updates'] - if self.start_epoch > (self.max_epoch - self.args.stop_aug_last_n_epoch): - self.cfg.data_aug.mosaic = 0.0 - self.cfg.data_aug.mixup = 0.0 - - self.train_loader, self.val_loader = self.get_data_loader(self.args, self.cfg, self.data_dict) - - self.model = self.parallel_model(args, model, device) - self.model.nc, self.model.names = self.data_dict['nc'], self.data_dict['names'] - - self.max_stepnum = len(self.train_loader) - self.batch_size = args.batch_size - self.img_size = args.img_size - self.rect = args.rect - self.vis_imgs_list = [] - self.write_trainbatch_tb = args.write_trainbatch_tb - # set color for classnames - self.color = [tuple(np.random.choice(range(256), size=3)) for _ in range(self.model.nc)] - self.specific_shape = args.specific_shape - self.height = args.height - self.width = args.width - - self.loss_num = 3 - self.loss_info = ['Epoch', 'lr', 'iou_loss', 'dfl_loss', 'cls_loss'] - if self.args.distill: - self.loss_num += 1 - self.loss_info += ['cwd_loss'] - - - # Training Process - def train(self): - try: - self.before_train_loop() - for self.epoch in range(self.start_epoch, self.max_epoch): - self.before_epoch() - self.train_one_epoch(self.epoch) - self.after_epoch() - self.strip_model() - - except Exception as _: - LOGGER.error('ERROR in training loop or eval/save model.') - raise - finally: - self.train_after_loop() - - # Training loop for each epoch - def train_one_epoch(self, epoch_num): - try: - for self.step, self.batch_data in self.pbar: - self.train_in_steps(epoch_num, self.step) - self.print_details() - except Exception as _: - LOGGER.error('ERROR in training steps.') - raise - - # Training one batch data. - def train_in_steps(self, epoch_num, step_num): - images, targets = self.prepro_data(self.batch_data, self.device) - # plot train_batch and save to tensorboard once an epoch - if self.write_trainbatch_tb and self.main_process and self.step == 0: - self.plot_train_batch(images, targets) - write_tbimg(self.tblogger, self.vis_train_batch, self.step + self.max_stepnum * self.epoch, type='train') - - # forward - with amp.autocast(enabled=self.device != 'cpu'): - _, _, batch_height, batch_width = images.shape - preds, s_featmaps = self.model(images) - if self.args.distill: - with torch.no_grad(): - t_preds, t_featmaps = self.teacher_model(images) - temperature = self.args.temperature - total_loss, loss_items = self.compute_loss_distill(preds, t_preds, s_featmaps, t_featmaps, targets, \ - epoch_num, self.max_epoch, temperature, step_num, - batch_height, batch_width) - - elif self.args.fuse_ab: - total_loss, loss_items = self.compute_loss((preds[0],preds[3],preds[4]), targets, epoch_num, - step_num, batch_height, batch_width) # YOLOv6_af - total_loss_ab, loss_items_ab = self.compute_loss_ab(preds[:3], targets, epoch_num, step_num, - batch_height, batch_width) # YOLOv6_ab - total_loss += total_loss_ab - loss_items += loss_items_ab - else: - total_loss, loss_items = self.compute_loss(preds, targets, epoch_num, step_num, - batch_height, batch_width) # YOLOv6_af - if self.rank != -1: - total_loss *= self.world_size - # backward - self.scaler.scale(total_loss).backward() - self.loss_items = loss_items - self.update_optimizer() - - def after_epoch(self): - lrs_of_this_epoch = [x['lr'] for x in self.optimizer.param_groups] - self.scheduler.step() # update lr - if self.main_process: - self.ema.update_attr(self.model, include=['nc', 'names', 'stride']) # update attributes for ema model - - remaining_epochs = self.max_epoch - 1 - self.epoch # self.epoch is start from 0 - eval_interval = self.args.eval_interval if remaining_epochs >= self.args.heavy_eval_range else min(3, self.args.eval_interval) - is_val_epoch = (remaining_epochs == 0) or ((not self.args.eval_final_only) and ((self.epoch + 1) % eval_interval == 0)) - if is_val_epoch: - self.eval_model() - self.ap = self.evaluate_results[1] - self.best_ap = max(self.ap, self.best_ap) - # save ckpt - ckpt = { - 'model': deepcopy(de_parallel(self.model)).half(), - 'ema': deepcopy(self.ema.ema).half(), - 'updates': self.ema.updates, - 'optimizer': self.optimizer.state_dict(), - 'scheduler': self.scheduler.state_dict(), - 'epoch': self.epoch, - 'results': self.evaluate_results, - } - - save_ckpt_dir = osp.join(self.save_dir, 'weights') - save_checkpoint(ckpt, (is_val_epoch) and (self.ap == self.best_ap), save_ckpt_dir, model_name='last_ckpt') - if self.epoch >= self.max_epoch - self.args.save_ckpt_on_last_n_epoch: - save_checkpoint(ckpt, False, save_ckpt_dir, model_name=f'{self.epoch}_ckpt') - - #default save best ap ckpt in stop strong aug epochs - if self.epoch >= self.max_epoch - self.args.stop_aug_last_n_epoch: - if self.best_stop_strong_aug_ap < self.ap: - self.best_stop_strong_aug_ap = max(self.ap, self.best_stop_strong_aug_ap) - save_checkpoint(ckpt, False, save_ckpt_dir, model_name='best_stop_aug_ckpt') - - del ckpt - - self.evaluate_results = list(self.evaluate_results) - - # log for tensorboard - write_tblog(self.tblogger, self.epoch, self.evaluate_results, lrs_of_this_epoch, self.mean_loss) - # save validation predictions to tensorboard - write_tbimg(self.tblogger, self.vis_imgs_list, self.epoch, type='val') - - def eval_model(self): - if not hasattr(self.cfg, "eval_params"): - results, vis_outputs, vis_paths = eval.run(self.data_dict, - batch_size=self.batch_size // self.world_size * 2, - img_size=self.img_size, - model=self.ema.ema if self.args.calib is False else self.model, - conf_thres=0.03, - dataloader=self.val_loader, - save_dir=self.save_dir, - task='train', - specific_shape=self.specific_shape, - height=self.height, - width=self.width - ) - else: - def get_cfg_value(cfg_dict, value_str, default_value): - if value_str in cfg_dict: - if isinstance(cfg_dict[value_str], list): - return cfg_dict[value_str][0] if cfg_dict[value_str][0] is not None else default_value - else: - return cfg_dict[value_str] if cfg_dict[value_str] is not None else default_value - else: - return default_value - eval_img_size = get_cfg_value(self.cfg.eval_params, "img_size", self.img_size) - results, vis_outputs, vis_paths = eval.run(self.data_dict, - batch_size=get_cfg_value(self.cfg.eval_params, "batch_size", self.batch_size // self.world_size * 2), - img_size=eval_img_size, - model=self.ema.ema if self.args.calib is False else self.model, - conf_thres=get_cfg_value(self.cfg.eval_params, "conf_thres", 0.03), - dataloader=self.val_loader, - save_dir=self.save_dir, - task='train', - shrink_size=get_cfg_value(self.cfg.eval_params, "shrink_size", eval_img_size), - infer_on_rect=get_cfg_value(self.cfg.eval_params, "infer_on_rect", False), - verbose=get_cfg_value(self.cfg.eval_params, "verbose", False), - do_coco_metric=get_cfg_value(self.cfg.eval_params, "do_coco_metric", True), - do_pr_metric=get_cfg_value(self.cfg.eval_params, "do_pr_metric", False), - plot_curve=get_cfg_value(self.cfg.eval_params, "plot_curve", False), - plot_confusion_matrix=get_cfg_value(self.cfg.eval_params, "plot_confusion_matrix", False), - specific_shape=self.specific_shape, - height=self.height, - width=self.width - ) - - LOGGER.info(f"Epoch: {self.epoch} | mAP@0.5: {results[0]} | mAP@0.50:0.95: {results[1]}") - self.evaluate_results = results[:2] - # plot validation predictions - self.plot_val_pred(vis_outputs, vis_paths) - - - def before_train_loop(self): - LOGGER.info('Training start...') - self.start_time = time.time() - self.warmup_stepnum = max(round(self.cfg.solver.warmup_epochs * self.max_stepnum), 1000) if self.args.quant is False else 0 - self.scheduler.last_epoch = self.start_epoch - 1 - self.last_opt_step = -1 - self.scaler = amp.GradScaler(enabled=self.device != 'cpu') - - self.best_ap, self.ap = 0.0, 0.0 - self.best_stop_strong_aug_ap = 0.0 - self.evaluate_results = (0, 0) # AP50, AP50_95 - # resume results - if hasattr(self, "ckpt"): - self.evaluate_results = self.ckpt['results'] - self.best_ap = self.evaluate_results[1] - self.best_stop_strong_aug_ap = self.evaluate_results[1] - - - self.compute_loss = ComputeLoss(num_classes=self.data_dict['nc'], - ori_img_size=self.img_size, - warmup_epoch=self.cfg.model.head.atss_warmup_epoch, - use_dfl=self.cfg.model.head.use_dfl, - reg_max=self.cfg.model.head.reg_max, - iou_type=self.cfg.model.head.iou_type, - fpn_strides=self.cfg.model.head.strides) - - if self.args.fuse_ab: - self.compute_loss_ab = ComputeLoss_ab(num_classes=self.data_dict['nc'], - ori_img_size=self.img_size, - warmup_epoch=0, - use_dfl=False, - reg_max=0, - iou_type=self.cfg.model.head.iou_type, - fpn_strides=self.cfg.model.head.strides, - ) - if self.args.distill : - if self.cfg.model.type in ['YOLOv6n','YOLOv6s']: - Loss_distill_func = ComputeLoss_distill_ns - else: - Loss_distill_func = ComputeLoss_distill - - self.compute_loss_distill = Loss_distill_func(num_classes=self.data_dict['nc'], - ori_img_size=self.img_size, - fpn_strides=self.cfg.model.head.strides, - warmup_epoch=self.cfg.model.head.atss_warmup_epoch, - use_dfl=self.cfg.model.head.use_dfl, - reg_max=self.cfg.model.head.reg_max, - iou_type=self.cfg.model.head.iou_type, - distill_weight = self.cfg.model.head.distill_weight, - distill_feat = self.args.distill_feat, - ) - - def before_epoch(self): - #stop strong aug like mosaic and mixup from last n epoch by recreate dataloader - if self.epoch == self.max_epoch - self.args.stop_aug_last_n_epoch: - self.cfg.data_aug.mosaic = 0.0 - self.cfg.data_aug.mixup = 0.0 - self.train_loader, self.val_loader = self.get_data_loader(self.args, self.cfg, self.data_dict) - self.model.train() - if self.rank != -1: - self.train_loader.sampler.set_epoch(self.epoch) - self.mean_loss = torch.zeros(self.loss_num, device=self.device) - self.optimizer.zero_grad() - - LOGGER.info(('\n' + '%10s' * (self.loss_num + 2)) % (*self.loss_info,)) - self.pbar = enumerate(self.train_loader) - if self.main_process: - self.pbar = tqdm(self.pbar, total=self.max_stepnum, ncols=NCOLS, bar_format='{l_bar}{bar:10}{r_bar}{bar:-10b}') - - # Print loss after each steps - def print_details(self): - if self.main_process: - self.mean_loss = (self.mean_loss * self.step + self.loss_items) / (self.step + 1) - self.pbar.set_description(('%10s' + ' %10.4g' + '%10.4g' * self.loss_num) % (f'{self.epoch}/{self.max_epoch - 1}', \ - self.scheduler.get_last_lr()[0], *(self.mean_loss))) - - def strip_model(self): - if self.main_process: - LOGGER.info(f'\nTraining completed in {(time.time() - self.start_time) / 3600:.3f} hours.') - save_ckpt_dir = osp.join(self.save_dir, 'weights') - strip_optimizer(save_ckpt_dir, self.epoch) # strip optimizers for saved pt model - - # Empty cache if training finished - def train_after_loop(self): - if self.device != 'cpu': - torch.cuda.empty_cache() - - def update_optimizer(self): - curr_step = self.step + self.max_stepnum * self.epoch - self.accumulate = max(1, round(64 / self.batch_size)) - if curr_step <= self.warmup_stepnum: - self.accumulate = max(1, np.interp(curr_step, [0, self.warmup_stepnum], [1, 64 / self.batch_size]).round()) - for k, param in enumerate(self.optimizer.param_groups): - warmup_bias_lr = self.cfg.solver.warmup_bias_lr if k == 2 else 0.0 - param['lr'] = np.interp(curr_step, [0, self.warmup_stepnum], [warmup_bias_lr, param['initial_lr'] * self.lf(self.epoch)]) - if 'momentum' in param: - param['momentum'] = np.interp(curr_step, [0, self.warmup_stepnum], [self.cfg.solver.warmup_momentum, self.cfg.solver.momentum]) - if curr_step - self.last_opt_step >= self.accumulate: - self.scaler.step(self.optimizer) - self.scaler.update() - self.optimizer.zero_grad() - if self.ema: - self.ema.update(self.model) - self.last_opt_step = curr_step - - @staticmethod - def get_data_loader(args, cfg, data_dict): - train_path, val_path = data_dict['train'], data_dict['val'] - # check data - nc = int(data_dict['nc']) - class_names = data_dict['names'] - assert len(class_names) == nc, f'the length of class names does not match the number of classes defined' - grid_size = max(int(max(cfg.model.head.strides)), 32) - # create train dataloader - train_loader = create_dataloader(train_path, args.img_size, args.batch_size // args.world_size, grid_size, - hyp=dict(cfg.data_aug), augment=True, rect=args.rect, rank=args.local_rank, - workers=args.workers, shuffle=True, check_images=args.check_images, - check_labels=args.check_labels, data_dict=data_dict, task='train', - specific_shape=args.specific_shape, height=args.height, width=args.width)[0] - # create val dataloader - val_loader = None - if args.rank in [-1, 0]: - # TODO: check whether to set rect to self.rect? - val_loader = create_dataloader(val_path, args.img_size, args.batch_size // args.world_size * 2, grid_size, - hyp=dict(cfg.data_aug), rect=True, rank=-1, pad=0.5, - workers=args.workers, check_images=args.check_images, - check_labels=args.check_labels, data_dict=data_dict, task='val', - specific_shape=args.specific_shape, height=args.height, width=args.width)[0] - - return train_loader, val_loader - - @staticmethod - def prepro_data(batch_data, device): - images = batch_data[0].to(device, non_blocking=True).float() / 255 - targets = batch_data[1].to(device) - return images, targets - - def get_model(self, args, cfg, nc, device): - if 'YOLOv6-lite' in cfg.model.type: - assert not self.args.fuse_ab, 'ERROR in: YOLOv6-lite models not support fuse_ab mode.' - assert not self.args.distill, 'ERROR in: YOLOv6-lite models not support distill mode.' - model = build_lite_model(cfg, nc, device) - else: - model = build_model(cfg, nc, device, fuse_ab=self.args.fuse_ab, distill_ns=self.distill_ns) - weights = cfg.model.pretrained - if weights: # finetune if pretrained model is set - if not os.path.exists(weights): - download_ckpt(weights) - LOGGER.info(f'Loading state_dict from {weights} for fine-tuning...') - model = load_state_dict(weights, model, map_location=device) - - LOGGER.info('Model: {}'.format(model)) - return model - - def get_teacher_model(self, args, cfg, nc, device): - teacher_fuse_ab = False if cfg.model.head.num_layers != 3 else True - model = build_model(cfg, nc, device, fuse_ab=teacher_fuse_ab) - weights = args.teacher_model_path - if weights: # finetune if pretrained model is set - LOGGER.info(f'Loading state_dict from {weights} for teacher') - model = load_state_dict(weights, model, map_location=device) - LOGGER.info('Model: {}'.format(model)) - # Do not update running means and running vars - for module in model.modules(): - if isinstance(module, torch.nn.BatchNorm2d): - module.track_running_stats = False - return model - - @staticmethod - def load_scale_from_pretrained_models(cfg, device): - weights = cfg.model.scales - scales = None - if not weights: - LOGGER.error("ERROR: No scales provided to init RepOptimizer!") - else: - ckpt = torch.load(weights, map_location=device) - scales = extract_scales(ckpt) - return scales - - - @staticmethod - def parallel_model(args, model, device): - # If DP mode - dp_mode = device.type != 'cpu' and args.rank == -1 - if dp_mode and torch.cuda.device_count() > 1: - LOGGER.warning('WARNING: DP not recommended, use DDP instead.\n') - model = torch.nn.DataParallel(model) - - # If DDP mode - ddp_mode = device.type != 'cpu' and args.rank != -1 - if ddp_mode: - model = DDP(model, device_ids=[args.local_rank], output_device=args.local_rank) - - return model - - def get_optimizer(self, args, cfg, model): - accumulate = max(1, round(64 / args.batch_size)) - cfg.solver.weight_decay *= args.batch_size * accumulate / 64 - cfg.solver.lr0 *= args.batch_size / (self.world_size * args.bs_per_gpu) # rescale lr0 related to batchsize - optimizer = build_optimizer(cfg, model) - return optimizer - - @staticmethod - def get_lr_scheduler(args, cfg, optimizer): - epochs = args.epochs - lr_scheduler, lf = build_lr_scheduler(cfg, optimizer, epochs) - return lr_scheduler, lf - - def plot_train_batch(self, images, targets, max_size=1920, max_subplots=16): - # Plot train_batch with labels - if isinstance(images, torch.Tensor): - images = images.cpu().float().numpy() - if isinstance(targets, torch.Tensor): - targets = targets.cpu().numpy() - if np.max(images[0]) <= 1: - images *= 255 # de-normalise (optional) - bs, _, h, w = images.shape # batch size, _, height, width - bs = min(bs, max_subplots) # limit plot images - ns = np.ceil(bs ** 0.5) # number of subplots (square) - paths = self.batch_data[2] # image paths - # Build Image - mosaic = np.full((int(ns * h), int(ns * w), 3), 255, dtype=np.uint8) # init - for i, im in enumerate(images): - if i == max_subplots: # if last batch has fewer images than we expect - break - x, y = int(w * (i // ns)), int(h * (i % ns)) # block origin - im = im.transpose(1, 2, 0) - mosaic[y:y + h, x:x + w, :] = im - # Resize (optional) - scale = max_size / ns / max(h, w) - if scale < 1: - h = math.ceil(scale * h) - w = math.ceil(scale * w) - mosaic = cv2.resize(mosaic, tuple(int(x * ns) for x in (w, h))) - for i in range(bs): - x, y = int(w * (i // ns)), int(h * (i % ns)) # block origin - cv2.rectangle(mosaic, (x, y), (x + w, y + h), (255, 255, 255), thickness=2) # borders - cv2.putText(mosaic, f"{os.path.basename(paths[i])[:40]}", (x + 5, y + 15), - cv2.FONT_HERSHEY_COMPLEX, 0.5, color=(220, 220, 220), thickness=1) # filename - if len(targets) > 0: - ti = targets[targets[:, 0] == i] # image targets - boxes = xywh2xyxy(ti[:, 2:6]).T - classes = ti[:, 1].astype('int') - labels = ti.shape[1] == 6 # labels if no conf column - if boxes.shape[1]: - if boxes.max() <= 1.01: # if normalized with tolerance 0.01 - boxes[[0, 2]] *= w # scale to pixels - boxes[[1, 3]] *= h - elif scale < 1: # absolute coords need scale if image scales - boxes *= scale - boxes[[0, 2]] += x - boxes[[1, 3]] += y - for j, box in enumerate(boxes.T.tolist()): - box = [int(k) for k in box] - cls = classes[j] - color = tuple([int(x) for x in self.color[cls]]) - cls = self.data_dict['names'][cls] if self.data_dict['names'] else cls - if labels: - label = f'{cls}' - cv2.rectangle(mosaic, (box[0], box[1]), (box[2], box[3]), color, thickness=1) - cv2.putText(mosaic, label, (box[0], box[1] - 5), cv2.FONT_HERSHEY_COMPLEX, 0.5, color, thickness=1) - self.vis_train_batch = mosaic.copy() - - def plot_val_pred(self, vis_outputs, vis_paths, vis_conf=0.3, vis_max_box_num=5): - # plot validation predictions - self.vis_imgs_list = [] - for (vis_output, vis_path) in zip(vis_outputs, vis_paths): - vis_output_array = vis_output.cpu().numpy() # xyxy - ori_img = cv2.imread(vis_path) - for bbox_idx, vis_bbox in enumerate(vis_output_array): - x_tl = int(vis_bbox[0]) - y_tl = int(vis_bbox[1]) - x_br = int(vis_bbox[2]) - y_br = int(vis_bbox[3]) - box_score = vis_bbox[4] - cls_id = int(vis_bbox[5]) - # draw top n bbox - if box_score < vis_conf or bbox_idx > vis_max_box_num: - break - cv2.rectangle(ori_img, (x_tl, y_tl), (x_br, y_br), tuple([int(x) for x in self.color[cls_id]]), thickness=1) - cv2.putText(ori_img, f"{self.data_dict['names'][cls_id]}: {box_score:.2f}", (x_tl, y_tl - 10), cv2.FONT_HERSHEY_COMPLEX, 0.5, tuple([int(x) for x in self.color[cls_id]]), thickness=1) - self.vis_imgs_list.append(torch.from_numpy(ori_img[:, :, ::-1].copy())) - - - # PTQ - def calibrate(self, cfg): - def save_calib_model(model, cfg): - # Save calibrated checkpoint - output_model_path = os.path.join(cfg.ptq.calib_output_path, '{}_calib_{}.pt'. - format(os.path.splitext(os.path.basename(cfg.model.pretrained))[0], cfg.ptq.calib_method)) - if cfg.ptq.sensitive_layers_skip is True: - output_model_path = output_model_path.replace('.pt', '_partial.pt') - LOGGER.info('Saving calibrated model to {}... '.format(output_model_path)) - if not os.path.exists(cfg.ptq.calib_output_path): - os.mkdir(cfg.ptq.calib_output_path) - torch.save({'model': deepcopy(de_parallel(model)).half()}, output_model_path) - assert self.args.quant is True and self.args.calib is True - if self.main_process: - from tools.qat.qat_utils import ptq_calibrate - ptq_calibrate(self.model, self.train_loader, cfg) - self.epoch = 0 - self.eval_model() - save_calib_model(self.model, cfg) - # QAT - def quant_setup(self, model, cfg, device): - if self.args.quant: - from tools.qat.qat_utils import qat_init_model_manu, skip_sensitive_layers - qat_init_model_manu(model, cfg, self.args) - # workaround - model.neck.upsample_enable_quant(cfg.ptq.num_bits, cfg.ptq.calib_method) - # if self.main_process: - # print(model) - # QAT - if self.args.calib is False: - if cfg.qat.sensitive_layers_skip: - skip_sensitive_layers(model, cfg.qat.sensitive_layers_list) - # QAT flow load calibrated model - assert cfg.qat.calib_pt is not None, 'Please provide calibrated model' - model.load_state_dict(torch.load(cfg.qat.calib_pt)['model'].float().state_dict()) - model.to(device) diff --git a/cv/detection/yolov6/pytorch/yolov6/core/evaler.py b/cv/detection/yolov6/pytorch/yolov6/core/evaler.py deleted file mode 100644 index e79f51bea..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/core/evaler.py +++ /dev/null @@ -1,545 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- -import os -from tqdm import tqdm -import numpy as np -import json -import torch -import yaml -from pathlib import Path - -from pycocotools.coco import COCO -from pycocotools.cocoeval import COCOeval - -from yolov6.data.data_load import create_dataloader -from yolov6.utils.events import LOGGER, NCOLS -from yolov6.utils.nms import non_max_suppression -from yolov6.utils.general import download_ckpt -from yolov6.utils.checkpoint import load_checkpoint -from yolov6.utils.torch_utils import time_sync, get_model_info - - -class Evaler: - def __init__(self, - data, - batch_size=32, - img_size=640, - conf_thres=0.03, - iou_thres=0.65, - device='', - half=True, - save_dir='', - shrink_size=640, - infer_on_rect=False, - verbose=False, - do_coco_metric=True, - do_pr_metric=False, - plot_curve=True, - plot_confusion_matrix=False, - specific_shape=False, - height=640, - width=640 - ): - assert do_pr_metric or do_coco_metric, 'ERROR: at least set one val metric' - self.data = data - self.batch_size = batch_size - self.img_size = img_size - self.conf_thres = conf_thres - self.iou_thres = iou_thres - self.device = device - self.half = half - self.save_dir = save_dir - self.shrink_size = shrink_size - self.infer_on_rect = infer_on_rect - self.verbose = verbose - self.do_coco_metric = do_coco_metric - self.do_pr_metric = do_pr_metric - self.plot_curve = plot_curve - self.plot_confusion_matrix = plot_confusion_matrix - self.specific_shape = specific_shape - self.height = height - self.width = width - - def init_model(self, model, weights, task): - if task != 'train': - if not os.path.exists(weights): - download_ckpt(weights) - model = load_checkpoint(weights, map_location=self.device) - self.stride = int(model.stride.max()) - # switch to deploy - from yolov6.layers.common import RepVGGBlock - for layer in model.modules(): - if isinstance(layer, RepVGGBlock): - layer.switch_to_deploy() - elif isinstance(layer, torch.nn.Upsample) and not hasattr(layer, 'recompute_scale_factor'): - layer.recompute_scale_factor = None # torch 1.11.0 compatibility - LOGGER.info("Switch model to deploy modality.") - LOGGER.info("Model Summary: {}".format(get_model_info(model, self.img_size))) - if self.device.type != 'cpu': - model(torch.zeros(1, 3, self.img_size, self.img_size).to(self.device).type_as(next(model.parameters()))) - model.half() if self.half else model.float() - return model - - def init_data(self, dataloader, task): - '''Initialize dataloader. - Returns a dataloader for task val or speed. - ''' - self.is_coco = self.data.get("is_coco", False) - self.ids = self.coco80_to_coco91_class() if self.is_coco else list(range(1000)) - if task != 'train': - eval_hyp = { - "shrink_size":self.shrink_size, - } - rect = self.infer_on_rect - pad = 0.5 if rect else 0.0 - dataloader = create_dataloader(self.data[task if task in ('train', 'val', 'test') else 'val'], - self.img_size, self.batch_size, self.stride, hyp=eval_hyp, check_labels=True, pad=pad, rect=rect, - data_dict=self.data, task=task, specific_shape=self.specific_shape, height=self.height, width=self.width)[0] - return dataloader - - def predict_model(self, model, dataloader, task): - '''Model prediction - Predicts the whole dataset and gets the prediced results and inference time. - ''' - self.speed_result = torch.zeros(4, device=self.device) - pred_results = [] - pbar = tqdm(dataloader, desc=f"Inferencing model in {task} datasets.", ncols=NCOLS) - - # whether to compute metric and plot PR curve and P、R、F1 curve under iou50 match rule - if self.do_pr_metric: - stats, ap = [], [] - seen = 0 - iouv = torch.linspace(0.5, 0.95, 10) # iou vector for mAP@0.5:0.95 - niou = iouv.numel() - if self.plot_confusion_matrix: - from yolov6.utils.metrics import ConfusionMatrix - confusion_matrix = ConfusionMatrix(nc=model.nc) - - for i, (imgs, targets, paths, shapes) in enumerate(pbar): - # pre-process - t1 = time_sync() - imgs = imgs.to(self.device, non_blocking=True) - imgs = imgs.half() if self.half else imgs.float() - imgs /= 255 - self.speed_result[1] += time_sync() - t1 # pre-process time - - # Inference - t2 = time_sync() - outputs, _ = model(imgs) - self.speed_result[2] += time_sync() - t2 # inference time - - # post-process - t3 = time_sync() - outputs = non_max_suppression(outputs, self.conf_thres, self.iou_thres, multi_label=True) - self.speed_result[3] += time_sync() - t3 # post-process time - self.speed_result[0] += len(outputs) - - if self.do_pr_metric: - import copy - eval_outputs = copy.deepcopy([x.detach().cpu() for x in outputs]) - - # save result - pred_results.extend(self.convert_to_coco_format(outputs, imgs, paths, shapes, self.ids)) - - # for tensorboard visualization, maximum images to show: 8 - if i == 0: - vis_num = min(len(imgs), 8) - vis_outputs = outputs[:vis_num] - vis_paths = paths[:vis_num] - - if not self.do_pr_metric: - continue - - # Statistics per image - # This code is based on - # https://github.com/ultralytics/yolov5/blob/master/val.py - for si, pred in enumerate(eval_outputs): - labels = targets[targets[:, 0] == si, 1:] - nl = len(labels) - tcls = labels[:, 0].tolist() if nl else [] # target class - seen += 1 - - if len(pred) == 0: - if nl: - stats.append((torch.zeros(0, niou, dtype=torch.bool), torch.Tensor(), torch.Tensor(), tcls)) - continue - - # Predictions - predn = pred.clone() - self.scale_coords(imgs[si].shape[1:], predn[:, :4], shapes[si][0], shapes[si][1]) # native-space pred - - # Assign all predictions as incorrect - correct = torch.zeros(pred.shape[0], niou, dtype=torch.bool) - if nl: - - from yolov6.utils.nms import xywh2xyxy - - # target boxes - tbox = xywh2xyxy(labels[:, 1:5]) - tbox[:, [0, 2]] *= imgs[si].shape[1:][1] - tbox[:, [1, 3]] *= imgs[si].shape[1:][0] - - self.scale_coords(imgs[si].shape[1:], tbox, shapes[si][0], shapes[si][1]) # native-space labels - - labelsn = torch.cat((labels[:, 0:1], tbox), 1) # native-space labels - - from yolov6.utils.metrics import process_batch - - correct = process_batch(predn, labelsn, iouv) - if self.plot_confusion_matrix: - confusion_matrix.process_batch(predn, labelsn) - - # Append statistics (correct, conf, pcls, tcls) - stats.append((correct.cpu(), pred[:, 4].cpu(), pred[:, 5].cpu(), tcls)) - - if self.do_pr_metric: - # Compute statistics - stats = [np.concatenate(x, 0) for x in zip(*stats)] # to numpy - if len(stats) and stats[0].any(): - - from yolov6.utils.metrics import ap_per_class - p, r, ap, f1, ap_class = ap_per_class(*stats, plot=self.plot_curve, save_dir=self.save_dir, names=model.names) - AP50_F1_max_idx = len(f1.mean(0)) - f1.mean(0)[::-1].argmax() -1 - LOGGER.info(f"IOU 50 best mF1 thershold near {AP50_F1_max_idx/1000.0}.") - ap50, ap = ap[:, 0], ap.mean(1) # AP@0.5, AP@0.5:0.95 - mp, mr, map50, map = p[:, AP50_F1_max_idx].mean(), r[:, AP50_F1_max_idx].mean(), ap50.mean(), ap.mean() - nt = np.bincount(stats[3].astype(np.int64), minlength=model.nc) # number of targets per class - - # Print results - s = ('%-16s' + '%12s' * 7) % ('Class', 'Images', 'Labels', 'P@.5iou', 'R@.5iou', 'F1@.5iou', 'mAP@.5', 'mAP@.5:.95') - LOGGER.info(s) - pf = '%-16s' + '%12i' * 2 + '%12.3g' * 5 # print format - LOGGER.info(pf % ('all', seen, nt.sum(), mp, mr, f1.mean(0)[AP50_F1_max_idx], map50, map)) - - self.pr_metric_result = (map50, map) - - # Print results per class - if self.verbose and model.nc > 1: - for i, c in enumerate(ap_class): - LOGGER.info(pf % (model.names[c], seen, nt[c], p[i, AP50_F1_max_idx], r[i, AP50_F1_max_idx], - f1[i, AP50_F1_max_idx], ap50[i], ap[i])) - - if self.plot_confusion_matrix: - confusion_matrix.plot(save_dir=self.save_dir, names=list(model.names)) - else: - LOGGER.info("Calculate metric failed, might check dataset.") - self.pr_metric_result = (0.0, 0.0) - - return pred_results, vis_outputs, vis_paths - - - def eval_model(self, pred_results, model, dataloader, task): - '''Evaluate models - For task speed, this function only evaluates the speed of model and outputs inference time. - For task val, this function evaluates the speed and mAP by pycocotools, and returns - inference time and mAP value. - ''' - LOGGER.info(f'\nEvaluating speed.') - self.eval_speed(task) - - if not self.do_coco_metric and self.do_pr_metric: - return self.pr_metric_result - LOGGER.info(f'\nEvaluating mAP by pycocotools.') - if task != 'speed' and len(pred_results): - if 'anno_path' in self.data: - anno_json = self.data['anno_path'] - else: - # generated coco format labels in dataset initialization - task = 'val' if task == 'train' else task - if not isinstance(self.data[task], list): - self.data[task] = [self.data[task]] - dataset_root = os.path.dirname(os.path.dirname(self.data[task][0])) - base_name = os.path.basename(self.data[task][0]) - anno_json = os.path.join(dataset_root, 'annotations', f'instances_{base_name}.json') - pred_json = os.path.join(self.save_dir, "predictions.json") - LOGGER.info(f'Saving {pred_json}...') - with open(pred_json, 'w') as f: - json.dump(pred_results, f) - - anno = COCO(anno_json) - pred = anno.loadRes(pred_json) - cocoEval = COCOeval(anno, pred, 'bbox') - if self.is_coco: - imgIds = [int(os.path.basename(x).split(".")[0]) - for x in dataloader.dataset.img_paths] - cocoEval.params.imgIds = imgIds - cocoEval.evaluate() - cocoEval.accumulate() - - #print each class ap from pycocotool result - if self.verbose: - - import copy - val_dataset_img_count = cocoEval.cocoGt.imgToAnns.__len__() - val_dataset_anns_count = 0 - label_count_dict = {"images":set(), "anns":0} - label_count_dicts = [copy.deepcopy(label_count_dict) for _ in range(model.nc)] - for _, ann_i in cocoEval.cocoGt.anns.items(): - if ann_i["ignore"]: - continue - val_dataset_anns_count += 1 - nc_i = self.coco80_to_coco91_class().index(ann_i['category_id']) if self.is_coco else ann_i['category_id'] - label_count_dicts[nc_i]["images"].add(ann_i["image_id"]) - label_count_dicts[nc_i]["anns"] += 1 - - s = ('%-16s' + '%12s' * 7) % ('Class', 'Labeled_images', 'Labels', 'P@.5iou', 'R@.5iou', 'F1@.5iou', 'mAP@.5', 'mAP@.5:.95') - LOGGER.info(s) - #IOU , all p, all cats, all gt, maxdet 100 - coco_p = cocoEval.eval['precision'] - coco_p_all = coco_p[:, :, :, 0, 2] - map = np.mean(coco_p_all[coco_p_all>-1]) - - coco_p_iou50 = coco_p[0, :, :, 0, 2] - map50 = np.mean(coco_p_iou50[coco_p_iou50>-1]) - mp = np.array([np.mean(coco_p_iou50[ii][coco_p_iou50[ii]>-1]) for ii in range(coco_p_iou50.shape[0])]) - mr = np.linspace(.0, 1.00, int(np.round((1.00 - .0) / .01)) + 1, endpoint=True) - mf1 = 2 * mp * mr / (mp + mr + 1e-16) - i = mf1.argmax() # max F1 index - - pf = '%-16s' + '%12i' * 2 + '%12.3g' * 5 # print format - LOGGER.info(pf % ('all', val_dataset_img_count, val_dataset_anns_count, mp[i], mr[i], mf1[i], map50, map)) - - #compute each class best f1 and corresponding p and r - for nc_i in range(model.nc): - coco_p_c = coco_p[:, :, nc_i, 0, 2] - map = np.mean(coco_p_c[coco_p_c>-1]) - - coco_p_c_iou50 = coco_p[0, :, nc_i, 0, 2] - map50 = np.mean(coco_p_c_iou50[coco_p_c_iou50>-1]) - p = coco_p_c_iou50 - r = np.linspace(.0, 1.00, int(np.round((1.00 - .0) / .01)) + 1, endpoint=True) - f1 = 2 * p * r / (p + r + 1e-16) - i = f1.argmax() - LOGGER.info(pf % (model.names[nc_i], len(label_count_dicts[nc_i]["images"]), label_count_dicts[nc_i]["anns"], p[i], r[i], f1[i], map50, map)) - cocoEval.summarize() - map, map50 = cocoEval.stats[:2] # update results (mAP@0.5:0.95, mAP@0.5) - # Return results - model.float() # for training - if task != 'train': - LOGGER.info(f"Results saved to {self.save_dir}") - return (map50, map) - return (0.0, 0.0) - - def eval_speed(self, task): - '''Evaluate model inference speed.''' - if task != 'train': - n_samples = self.speed_result[0].item() - pre_time, inf_time, nms_time = 1000 * self.speed_result[1:].cpu().numpy() / n_samples - for n, v in zip(["pre-process", "inference", "NMS"],[pre_time, inf_time, nms_time]): - LOGGER.info("Average {} time: {:.2f} ms".format(n, v)) - - def box_convert(self, x): - '''Convert boxes with shape [n, 4] from [x1, y1, x2, y2] to [x, y, w, h] where x1y1=top-left, x2y2=bottom-right.''' - y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x) - y[:, 0] = (x[:, 0] + x[:, 2]) / 2 # x center - y[:, 1] = (x[:, 1] + x[:, 3]) / 2 # y center - y[:, 2] = x[:, 2] - x[:, 0] # width - y[:, 3] = x[:, 3] - x[:, 1] # height - return y - - def scale_coords(self, img1_shape, coords, img0_shape, ratio_pad=None): - '''Rescale coords (xyxy) from img1_shape to img0_shape.''' - - gain = ratio_pad[0] - pad = ratio_pad[1] - - coords[:, [0, 2]] -= pad[0] # x padding - coords[:, [0, 2]] /= gain[1] # raw x gain - coords[:, [1, 3]] -= pad[1] # y padding - coords[:, [1, 3]] /= gain[0] # y gain - - if isinstance(coords, torch.Tensor): # faster individually - coords[:, 0].clamp_(0, img0_shape[1]) # x1 - coords[:, 1].clamp_(0, img0_shape[0]) # y1 - coords[:, 2].clamp_(0, img0_shape[1]) # x2 - coords[:, 3].clamp_(0, img0_shape[0]) # y2 - else: # np.array (faster grouped) - coords[:, [0, 2]] = coords[:, [0, 2]].clip(0, img0_shape[1]) # x1, x2 - coords[:, [1, 3]] = coords[:, [1, 3]].clip(0, img0_shape[0]) # y1, y2 - return coords - - def convert_to_coco_format(self, outputs, imgs, paths, shapes, ids): - pred_results = [] - for i, pred in enumerate(outputs): - if len(pred) == 0: - continue - path, shape = Path(paths[i]), shapes[i][0] - self.scale_coords(imgs[i].shape[1:], pred[:, :4], shape, shapes[i][1]) - image_id = int(path.stem) if self.is_coco else path.stem - bboxes = self.box_convert(pred[:, 0:4]) - bboxes[:, :2] -= bboxes[:, 2:] / 2 - cls = pred[:, 5] - scores = pred[:, 4] - for ind in range(pred.shape[0]): - category_id = ids[int(cls[ind])] - bbox = [round(x, 3) for x in bboxes[ind].tolist()] - score = round(scores[ind].item(), 5) - pred_data = { - "image_id": image_id, - "category_id": category_id, - "bbox": bbox, - "score": score - } - pred_results.append(pred_data) - return pred_results - - @staticmethod - def check_task(task): - if task not in ['train', 'val', 'test', 'speed']: - raise Exception("task argument error: only support 'train' / 'val' / 'test' / 'speed' task.") - - @staticmethod - def check_thres(conf_thres, iou_thres, task): - '''Check whether confidence and iou threshold are best for task val/speed''' - if task != 'train': - if task == 'val' or task == 'test': - if conf_thres > 0.03: - LOGGER.warning(f'The best conf_thresh when evaluate the model is less than 0.03, while you set it to: {conf_thres}') - if iou_thres != 0.65: - LOGGER.warning(f'The best iou_thresh when evaluate the model is 0.65, while you set it to: {iou_thres}') - if task == 'speed' and conf_thres < 0.4: - LOGGER.warning(f'The best conf_thresh when test the speed of the model is larger than 0.4, while you set it to: {conf_thres}') - - @staticmethod - def reload_device(device, model, task): - # device = 'cpu' or '0' or '0,1,2,3' - if task == 'train': - device = next(model.parameters()).device - else: - if device == 'cpu': - os.environ['CUDA_VISIBLE_DEVICES'] = '-1' - elif device: - os.environ['CUDA_VISIBLE_DEVICES'] = device - assert torch.cuda.is_available() - cuda = device != 'cpu' and torch.cuda.is_available() - device = torch.device('cuda:0' if cuda else 'cpu') - return device - - @staticmethod - def reload_dataset(data, task='val'): - with open(data, errors='ignore') as yaml_file: - data = yaml.safe_load(yaml_file) - task = 'test' if task == 'test' else 'val' - path = data.get(task, 'val') - if not isinstance(path, list): - path = [path] - for p in path: - if not os.path.exists(p): - raise Exception(f'Dataset path {p} not found.') - return data - - @staticmethod - def coco80_to_coco91_class(): # converts 80-index (val2014) to 91-index (paper) - # https://tech.amikelive.com/node-718/what-object-categories-labels-are-in-coco-dataset/ - x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 27, 28, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 67, 70, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 84, 85, 86, 87, 88, 89, 90] - return x - - def eval_trt(self, engine, stride=32): - self.stride = stride - def init_engine(engine): - import tensorrt as trt - from collections import namedtuple,OrderedDict - Binding = namedtuple('Binding', ('name', 'dtype', 'shape', 'data', 'ptr')) - logger = trt.Logger(trt.Logger.ERROR) - trt.init_libnvinfer_plugins(logger, namespace="") - with open(engine, 'rb') as f, trt.Runtime(logger) as runtime: - model = runtime.deserialize_cuda_engine(f.read()) - bindings = OrderedDict() - for index in range(model.num_bindings): - name = model.get_binding_name(index) - dtype = trt.nptype(model.get_binding_dtype(index)) - shape = tuple(model.get_binding_shape(index)) - data = torch.from_numpy(np.empty(shape, dtype=np.dtype(dtype))).to(self.device) - bindings[name] = Binding(name, dtype, shape, data, int(data.data_ptr())) - binding_addrs = OrderedDict((n, d.ptr) for n, d in bindings.items()) - context = model.create_execution_context() - return context, bindings, binding_addrs, model.get_binding_shape(0)[0] - - def init_data(dataloader, task): - self.is_coco = self.data.get("is_coco", False) - self.ids = self.coco80_to_coco91_class() if self.is_coco else list(range(1000)) - pad = 0.0 - dataloader = create_dataloader(self.data[task if task in ('train', 'val', 'test') else 'val'], - self.img_size, self.batch_size, self.stride, check_labels=True, pad=pad, rect=False, - data_dict=self.data, task=task)[0] - return dataloader - - def convert_to_coco_format_trt(nums, boxes, scores, classes, paths, shapes, ids): - pred_results = [] - for i, (num, detbox, detscore, detcls) in enumerate(zip(nums, boxes, scores, classes)): - n = int(num[0]) - if n == 0: - continue - path, shape = Path(paths[i]), shapes[i][0] - gain = shapes[i][1][0][0] - pad = torch.tensor(shapes[i][1][1]*2).to(self.device) - detbox = detbox[:n, :] - detbox -= pad - detbox /= gain - detbox[:, 0].clamp_(0, shape[1]) - detbox[:, 1].clamp_(0, shape[0]) - detbox[:, 2].clamp_(0, shape[1]) - detbox[:, 3].clamp_(0, shape[0]) - detbox[:,2:] = detbox[:,2:] - detbox[:,:2] - detscore = detscore[:n] - detcls = detcls[:n] - - image_id = int(path.stem) if path.stem.isnumeric() else path.stem - - for ind in range(n): - category_id = ids[int(detcls[ind])] - bbox = [round(x, 3) for x in detbox[ind].tolist()] - score = round(detscore[ind].item(), 5) - pred_data = { - "image_id": image_id, - "category_id": category_id, - "bbox": bbox, - "score": score - } - pred_results.append(pred_data) - return pred_results - - context, bindings, binding_addrs, trt_batch_size = init_engine(engine) - assert trt_batch_size >= self.batch_size, f'The batch size you set is {self.batch_size}, it must <= tensorrt binding batch size {trt_batch_size}.' - tmp = torch.randn(self.batch_size, 3, self.img_size, self.img_size).to(self.device) - # warm up for 10 times - for _ in range(10): - binding_addrs['images'] = int(tmp.data_ptr()) - context.execute_v2(list(binding_addrs.values())) - dataloader = init_data(None,'val') - self.speed_result = torch.zeros(4, device=self.device) - pred_results = [] - pbar = tqdm(dataloader, desc="Inferencing model in validation dataset.", ncols=NCOLS) - for imgs, targets, paths, shapes in pbar: - nb_img = imgs.shape[0] - if nb_img != self.batch_size: - # pad to tensorrt model setted batch size - zeros = torch.zeros(self.batch_size - nb_img, 3, *imgs.shape[2:]) - imgs = torch.cat([imgs, zeros],0) - t1 = time_sync() - imgs = imgs.to(self.device, non_blocking=True) - # preprocess - imgs = imgs.float() - imgs /= 255 - - self.speed_result[1] += time_sync() - t1 # pre-process time - - # inference - t2 = time_sync() - binding_addrs['images'] = int(imgs.data_ptr()) - context.execute_v2(list(binding_addrs.values())) - # in the last batch, the nb_img may less than the batch size, so we need to fetch the valid detect results by [:nb_img] - nums = bindings['num_dets'].data[:nb_img] - boxes = bindings['det_boxes'].data[:nb_img] - scores = bindings['det_scores'].data[:nb_img] - classes = bindings['det_classes'].data[:nb_img] - self.speed_result[2] += time_sync() - t2 # inference time - - self.speed_result[3] += 0 - pred_results.extend(convert_to_coco_format_trt(nums, boxes, scores, classes, paths, shapes, self.ids)) - self.speed_result[0] += self.batch_size - return dataloader, pred_results diff --git a/cv/detection/yolov6/pytorch/yolov6/core/inferer.py b/cv/detection/yolov6/pytorch/yolov6/core/inferer.py deleted file mode 100644 index cea6586de..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/core/inferer.py +++ /dev/null @@ -1,295 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- -import os -import cv2 -import time -import math -import torch -import numpy as np -import os.path as osp - -from tqdm import tqdm -from pathlib import Path -from PIL import ImageFont -from collections import deque - -from yolov6.utils.events import LOGGER, load_yaml -from yolov6.layers.common import DetectBackend -from yolov6.data.data_augment import letterbox -from yolov6.data.datasets import LoadData -from yolov6.utils.nms import non_max_suppression -from yolov6.utils.torch_utils import get_model_info - -class Inferer: - def __init__(self, source, webcam, webcam_addr, weights, device, yaml, img_size, half): - - self.__dict__.update(locals()) - - # Init model - self.device = device - self.img_size = img_size - cuda = self.device != 'cpu' and torch.cuda.is_available() - self.device = torch.device(f'cuda:{device}' if cuda else 'cpu') - self.model = DetectBackend(weights, device=self.device) - self.stride = self.model.stride - self.class_names = load_yaml(yaml)['names'] - self.img_size = self.check_img_size(self.img_size, s=self.stride) # check image size - self.half = half - - # Switch model to deploy status - self.model_switch(self.model.model, self.img_size) - - # Half precision - if self.half & (self.device.type != 'cpu'): - self.model.model.half() - else: - self.model.model.float() - self.half = False - - if self.device.type != 'cpu': - self.model(torch.zeros(1, 3, *self.img_size).to(self.device).type_as(next(self.model.model.parameters()))) # warmup - - # Load data - self.webcam = webcam - self.webcam_addr = webcam_addr - self.files = LoadData(source, webcam, webcam_addr) - self.source = source - - - def model_switch(self, model, img_size): - ''' Model switch to deploy status ''' - from yolov6.layers.common import RepVGGBlock - for layer in model.modules(): - if isinstance(layer, RepVGGBlock): - layer.switch_to_deploy() - elif isinstance(layer, torch.nn.Upsample) and not hasattr(layer, 'recompute_scale_factor'): - layer.recompute_scale_factor = None # torch 1.11.0 compatibility - - LOGGER.info("Switch model to deploy modality.") - - def infer(self, conf_thres, iou_thres, classes, agnostic_nms, max_det, save_dir, save_txt, save_img, hide_labels, hide_conf, view_img=True): - ''' Model Inference and results visualization ''' - vid_path, vid_writer, windows = None, None, [] - fps_calculator = CalcFPS() - for img_src, img_path, vid_cap in tqdm(self.files): - img, img_src = self.process_image(img_src, self.img_size, self.stride, self.half) - img = img.to(self.device) - if len(img.shape) == 3: - img = img[None] - # expand for batch dim - t1 = time.time() - pred_results = self.model(img) - det = non_max_suppression(pred_results, conf_thres, iou_thres, classes, agnostic_nms, max_det=max_det)[0] - t2 = time.time() - - if self.webcam: - save_path = osp.join(save_dir, self.webcam_addr) - txt_path = osp.join(save_dir, self.webcam_addr) - else: - # Create output files in nested dirs that mirrors the structure of the images' dirs - rel_path = osp.relpath(osp.dirname(img_path), osp.dirname(self.source)) - save_path = osp.join(save_dir, rel_path, osp.basename(img_path)) # im.jpg - txt_path = osp.join(save_dir, rel_path, 'labels', osp.splitext(osp.basename(img_path))[0]) - os.makedirs(osp.join(save_dir, rel_path), exist_ok=True) - - gn = torch.tensor(img_src.shape)[[1, 0, 1, 0]] # normalization gain whwh - img_ori = img_src.copy() - - # check image and font - assert img_ori.data.contiguous, 'Image needs to be contiguous. Please apply to input images with np.ascontiguousarray(im).' - self.font_check() - - if len(det): - det[:, :4] = self.rescale(img.shape[2:], det[:, :4], img_src.shape).round() - for *xyxy, conf, cls in reversed(det): - if save_txt: # Write to file - xywh = (self.box_convert(torch.tensor(xyxy).view(1, 4)) / gn).view(-1).tolist() # normalized xywh - line = (cls, *xywh, conf) - with open(txt_path + '.txt', 'a') as f: - f.write(('%g ' * len(line)).rstrip() % line + '\n') - - if save_img: - class_num = int(cls) # integer class - label = None if hide_labels else (self.class_names[class_num] if hide_conf else f'{self.class_names[class_num]} {conf:.2f}') - - self.plot_box_and_label(img_ori, max(round(sum(img_ori.shape) / 2 * 0.003), 2), xyxy, label, color=self.generate_colors(class_num, True)) - - img_src = np.asarray(img_ori) - - # FPS counter - fps_calculator.update(1.0 / (t2 - t1)) - avg_fps = fps_calculator.accumulate() - - if self.files.type == 'video': - self.draw_text( - img_src, - f"FPS: {avg_fps:0.1f}", - pos=(20, 20), - font_scale=1.0, - text_color=(204, 85, 17), - text_color_bg=(255, 255, 255), - font_thickness=2, - ) - - if view_img: - if img_path not in windows: - windows.append(img_path) - cv2.namedWindow(str(img_path), cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO) # allow window resize (Linux) - cv2.resizeWindow(str(img_path), img_src.shape[1], img_src.shape[0]) - cv2.imshow(str(img_path), img_src) - cv2.waitKey(1) # 1 millisecond - - # Save results (image with detections) - if save_img: - if self.files.type == 'image': - cv2.imwrite(save_path, img_src) - else: # 'video' or 'stream' - if vid_path != save_path: # new video - vid_path = save_path - if isinstance(vid_writer, cv2.VideoWriter): - vid_writer.release() # release previous video writer - if vid_cap: # video - fps = vid_cap.get(cv2.CAP_PROP_FPS) - w = int(vid_cap.get(cv2.CAP_PROP_FRAME_WIDTH)) - h = int(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) - else: # stream - fps, w, h = 30, img_ori.shape[1], img_ori.shape[0] - save_path = str(Path(save_path).with_suffix('.mp4')) # force *.mp4 suffix on results videos - vid_writer = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h)) - vid_writer.write(img_src) - - @staticmethod - def process_image(img_src, img_size, stride, half): - '''Process image before image inference.''' - image = letterbox(img_src, img_size, stride=stride)[0] - # Convert - image = image.transpose((2, 0, 1))[::-1] # HWC to CHW, BGR to RGB - image = torch.from_numpy(np.ascontiguousarray(image)) - image = image.half() if half else image.float() # uint8 to fp16/32 - image /= 255 # 0 - 255 to 0.0 - 1.0 - - return image, img_src - - @staticmethod - def rescale(ori_shape, boxes, target_shape): - '''Rescale the output to the original image shape''' - ratio = min(ori_shape[0] / target_shape[0], ori_shape[1] / target_shape[1]) - padding = (ori_shape[1] - target_shape[1] * ratio) / 2, (ori_shape[0] - target_shape[0] * ratio) / 2 - - boxes[:, [0, 2]] -= padding[0] - boxes[:, [1, 3]] -= padding[1] - boxes[:, :4] /= ratio - - boxes[:, 0].clamp_(0, target_shape[1]) # x1 - boxes[:, 1].clamp_(0, target_shape[0]) # y1 - boxes[:, 2].clamp_(0, target_shape[1]) # x2 - boxes[:, 3].clamp_(0, target_shape[0]) # y2 - - return boxes - - def check_img_size(self, img_size, s=32, floor=0): - """Make sure image size is a multiple of stride s in each dimension, and return a new shape list of image.""" - if isinstance(img_size, int): # integer i.e. img_size=640 - new_size = max(self.make_divisible(img_size, int(s)), floor) - elif isinstance(img_size, list): # list i.e. img_size=[640, 480] - new_size = [max(self.make_divisible(x, int(s)), floor) for x in img_size] - else: - raise Exception(f"Unsupported type of img_size: {type(img_size)}") - - if new_size != img_size: - print(f'WARNING: --img-size {img_size} must be multiple of max stride {s}, updating to {new_size}') - return new_size if isinstance(img_size,list) else [new_size]*2 - - def make_divisible(self, x, divisor): - # Upward revision the value x to make it evenly divisible by the divisor. - return math.ceil(x / divisor) * divisor - - @staticmethod - def draw_text( - img, - text, - font=cv2.FONT_HERSHEY_SIMPLEX, - pos=(0, 0), - font_scale=1, - font_thickness=2, - text_color=(0, 255, 0), - text_color_bg=(0, 0, 0), - ): - - offset = (5, 5) - x, y = pos - text_size, _ = cv2.getTextSize(text, font, font_scale, font_thickness) - text_w, text_h = text_size - rec_start = tuple(x - y for x, y in zip(pos, offset)) - rec_end = tuple(x + y for x, y in zip((x + text_w, y + text_h), offset)) - cv2.rectangle(img, rec_start, rec_end, text_color_bg, -1) - cv2.putText( - img, - text, - (x, int(y + text_h + font_scale - 1)), - font, - font_scale, - text_color, - font_thickness, - cv2.LINE_AA, - ) - - return text_size - - @staticmethod - def plot_box_and_label(image, lw, box, label='', color=(128, 128, 128), txt_color=(255, 255, 255), font=cv2.FONT_HERSHEY_COMPLEX): - # Add one xyxy box to image with label - p1, p2 = (int(box[0]), int(box[1])), (int(box[2]), int(box[3])) - cv2.rectangle(image, p1, p2, color, thickness=lw, lineType=cv2.LINE_AA) - if label: - tf = max(lw - 1, 1) # font thickness - w, h = cv2.getTextSize(label, 0, fontScale=lw / 3, thickness=tf)[0] # text width, height - outside = p1[1] - h - 3 >= 0 # label fits outside box - p2 = p1[0] + w, p1[1] - h - 3 if outside else p1[1] + h + 3 - cv2.rectangle(image, p1, p2, color, -1, cv2.LINE_AA) # filled - cv2.putText(image, label, (p1[0], p1[1] - 2 if outside else p1[1] + h + 2), font, lw / 3, txt_color, - thickness=tf, lineType=cv2.LINE_AA) - - @staticmethod - def font_check(font='./yolov6/utils/Arial.ttf', size=10): - # Return a PIL TrueType Font, downloading to CONFIG_DIR if necessary - assert osp.exists(font), f'font path not exists: {font}' - try: - return ImageFont.truetype(str(font) if font.exists() else font.name, size) - except Exception as e: # download if missing - return ImageFont.truetype(str(font), size) - - @staticmethod - def box_convert(x): - # Convert boxes with shape [n, 4] from [x1, y1, x2, y2] to [x, y, w, h] where x1y1=top-left, x2y2=bottom-right - y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x) - y[:, 0] = (x[:, 0] + x[:, 2]) / 2 # x center - y[:, 1] = (x[:, 1] + x[:, 3]) / 2 # y center - y[:, 2] = x[:, 2] - x[:, 0] # width - y[:, 3] = x[:, 3] - x[:, 1] # height - return y - - @staticmethod - def generate_colors(i, bgr=False): - hex = ('FF3838', 'FF9D97', 'FF701F', 'FFB21D', 'CFD231', '48F90A', '92CC17', '3DDB86', '1A9334', '00D4BB', - '2C99A8', '00C2FF', '344593', '6473FF', '0018EC', '8438FF', '520085', 'CB38FF', 'FF95C8', 'FF37C7') - palette = [] - for iter in hex: - h = '#' + iter - palette.append(tuple(int(h[1 + i:1 + i + 2], 16) for i in (0, 2, 4))) - num = len(palette) - color = palette[int(i) % num] - return (color[2], color[1], color[0]) if bgr else color - -class CalcFPS: - def __init__(self, nsamples: int = 50): - self.framerate = deque(maxlen=nsamples) - - def update(self, duration: float): - self.framerate.append(duration) - - def accumulate(self): - if len(self.framerate) > 1: - return np.average(self.framerate) - else: - return 0.0 diff --git a/cv/detection/yolov6/pytorch/yolov6/data/data_augment.py b/cv/detection/yolov6/pytorch/yolov6/data/data_augment.py deleted file mode 100644 index 45df88e64..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/data/data_augment.py +++ /dev/null @@ -1,208 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- -# This code is based on -# https://github.com/ultralytics/yolov5/blob/master/utils/dataloaders.py - -import math -import random - -import cv2 -import numpy as np - - -def augment_hsv(im, hgain=0.5, sgain=0.5, vgain=0.5): - '''HSV color-space augmentation.''' - if hgain or sgain or vgain: - r = np.random.uniform(-1, 1, 3) * [hgain, sgain, vgain] + 1 # random gains - hue, sat, val = cv2.split(cv2.cvtColor(im, cv2.COLOR_BGR2HSV)) - dtype = im.dtype # uint8 - - x = np.arange(0, 256, dtype=r.dtype) - lut_hue = ((x * r[0]) % 180).astype(dtype) - lut_sat = np.clip(x * r[1], 0, 255).astype(dtype) - lut_val = np.clip(x * r[2], 0, 255).astype(dtype) - - im_hsv = cv2.merge((cv2.LUT(hue, lut_hue), cv2.LUT(sat, lut_sat), cv2.LUT(val, lut_val))) - cv2.cvtColor(im_hsv, cv2.COLOR_HSV2BGR, dst=im) # no return needed - - -def letterbox(im, new_shape=(640, 640), color=(114, 114, 114), auto=True, scaleup=True, stride=32): - '''Resize and pad image while meeting stride-multiple constraints.''' - shape = im.shape[:2] # current shape [height, width] - if isinstance(new_shape, int): - new_shape = (new_shape, new_shape) - elif isinstance(new_shape, list) and len(new_shape) == 1: - new_shape = (new_shape[0], new_shape[0]) - - # Scale ratio (new / old) - r = min(new_shape[0] / shape[0], new_shape[1] / shape[1]) - if not scaleup: # only scale down, do not scale up (for better val mAP) - r = min(r, 1.0) - - # Compute padding - new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r)) - dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1] # wh padding - - if auto: # minimum rectangle - dw, dh = np.mod(dw, stride), np.mod(dh, stride) # wh padding - - dw /= 2 # divide padding into 2 sides - dh /= 2 - - if shape[::-1] != new_unpad: # resize - im = cv2.resize(im, new_unpad, interpolation=cv2.INTER_LINEAR) - top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1)) - left, right = int(round(dw - 0.1)), int(round(dw + 0.1)) - im = cv2.copyMakeBorder(im, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color) # add border - - return im, r, (left, top) - - -def mixup(im, labels, im2, labels2): - '''Applies MixUp augmentation https://arxiv.org/pdf/1710.09412.pdf.''' - r = np.random.beta(32.0, 32.0) # mixup ratio, alpha=beta=32.0 - im = (im * r + im2 * (1 - r)).astype(np.uint8) - labels = np.concatenate((labels, labels2), 0) - return im, labels - - -def box_candidates(box1, box2, wh_thr=2, ar_thr=20, area_thr=0.1, eps=1e-16): # box1(4,n), box2(4,n) - '''Compute candidate boxes: box1 before augment, box2 after augment, wh_thr (pixels), aspect_ratio_thr, area_ratio.''' - w1, h1 = box1[2] - box1[0], box1[3] - box1[1] - w2, h2 = box2[2] - box2[0], box2[3] - box2[1] - ar = np.maximum(w2 / (h2 + eps), h2 / (w2 + eps)) # aspect ratio - return (w2 > wh_thr) & (h2 > wh_thr) & (w2 * h2 / (w1 * h1 + eps) > area_thr) & (ar < ar_thr) # candidates - - -def random_affine(img, labels=(), degrees=10, translate=.1, scale=.1, shear=10, - new_shape=(640, 640)): - '''Applies Random affine transformation.''' - n = len(labels) - if isinstance(new_shape, int): - height = width = new_shape - else: - height, width = new_shape - - M, s = get_transform_matrix(img.shape[:2], (height, width), degrees, scale, shear, translate) - if (M != np.eye(3)).any(): # image changed - img = cv2.warpAffine(img, M[:2], dsize=(width, height), borderValue=(114, 114, 114)) - - # Transform label coordinates - if n: - new = np.zeros((n, 4)) - - xy = np.ones((n * 4, 3)) - xy[:, :2] = labels[:, [1, 2, 3, 4, 1, 4, 3, 2]].reshape(n * 4, 2) # x1y1, x2y2, x1y2, x2y1 - xy = xy @ M.T # transform - xy = xy[:, :2].reshape(n, 8) # perspective rescale or affine - - # create new boxes - x = xy[:, [0, 2, 4, 6]] - y = xy[:, [1, 3, 5, 7]] - new = np.concatenate((x.min(1), y.min(1), x.max(1), y.max(1))).reshape(4, n).T - - # clip - new[:, [0, 2]] = new[:, [0, 2]].clip(0, width) - new[:, [1, 3]] = new[:, [1, 3]].clip(0, height) - - # filter candidates - i = box_candidates(box1=labels[:, 1:5].T * s, box2=new.T, area_thr=0.1) - labels = labels[i] - labels[:, 1:5] = new[i] - - return img, labels - - -def get_transform_matrix(img_shape, new_shape, degrees, scale, shear, translate): - new_height, new_width = new_shape - # Center - C = np.eye(3) - C[0, 2] = -img_shape[1] / 2 # x translation (pixels) - C[1, 2] = -img_shape[0] / 2 # y translation (pixels) - - # Rotation and Scale - R = np.eye(3) - a = random.uniform(-degrees, degrees) - # a += random.choice([-180, -90, 0, 90]) # add 90deg rotations to small rotations - s = random.uniform(1 - scale, 1 + scale) - # s = 2 ** random.uniform(-scale, scale) - R[:2] = cv2.getRotationMatrix2D(angle=a, center=(0, 0), scale=s) - - # Shear - S = np.eye(3) - S[0, 1] = math.tan(random.uniform(-shear, shear) * math.pi / 180) # x shear (deg) - S[1, 0] = math.tan(random.uniform(-shear, shear) * math.pi / 180) # y shear (deg) - - # Translation - T = np.eye(3) - T[0, 2] = random.uniform(0.5 - translate, 0.5 + translate) * new_width # x translation (pixels) - T[1, 2] = random.uniform(0.5 - translate, 0.5 + translate) * new_height # y transla ion (pixels) - - # Combined rotation matrix - M = T @ S @ R @ C # order of operations (right to left) is IMPORTANT - return M, s - - -def mosaic_augmentation(shape, imgs, hs, ws, labels, hyp, specific_shape = False, target_height=640, target_width=640): - '''Applies Mosaic augmentation.''' - assert len(imgs) == 4, "Mosaic augmentation of current version only supports 4 images." - labels4 = [] - if not specific_shape: - if isinstance(shape, list) or isinstance(shape, np.ndarray): - target_height, target_width = shape - else: - target_height = target_width = shape - - yc, xc = (int(random.uniform(x//2, 3*x//2)) for x in (target_height, target_width) ) # mosaic center x, y - - for i in range(len(imgs)): - # Load image - img, h, w = imgs[i], hs[i], ws[i] - # place img in img4 - if i == 0: # top left - img4 = np.full((target_height * 2, target_width * 2, img.shape[2]), 114, dtype=np.uint8) # base image with 4 tiles - - x1a, y1a, x2a, y2a = max(xc - w, 0), max(yc - h, 0), xc, yc # xmin, ymin, xmax, ymax (large image) - x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h # xmin, ymin, xmax, ymax (small image) - elif i == 1: # top right - x1a, y1a, x2a, y2a = xc, max(yc - h, 0), min(xc + w, target_width * 2), yc - x1b, y1b, x2b, y2b = 0, h - (y2a - y1a), min(w, x2a - x1a), h - elif i == 2: # bottom left - x1a, y1a, x2a, y2a = max(xc - w, 0), yc, xc, min(target_height * 2, yc + h) - x1b, y1b, x2b, y2b = w - (x2a - x1a), 0, w, min(y2a - y1a, h) - elif i == 3: # bottom right - x1a, y1a, x2a, y2a = xc, yc, min(xc + w, target_width * 2), min(target_height * 2, yc + h) - x1b, y1b, x2b, y2b = 0, 0, min(w, x2a - x1a), min(y2a - y1a, h) - - img4[y1a:y2a, x1a:x2a] = img[y1b:y2b, x1b:x2b] # img4[ymin:ymax, xmin:xmax] - padw = x1a - x1b - padh = y1a - y1b - - # Labels - labels_per_img = labels[i].copy() - if labels_per_img.size: - boxes = np.copy(labels_per_img[:, 1:]) - boxes[:, 0] = w * (labels_per_img[:, 1] - labels_per_img[:, 3] / 2) + padw # top left x - boxes[:, 1] = h * (labels_per_img[:, 2] - labels_per_img[:, 4] / 2) + padh # top left y - boxes[:, 2] = w * (labels_per_img[:, 1] + labels_per_img[:, 3] / 2) + padw # bottom right x - boxes[:, 3] = h * (labels_per_img[:, 2] + labels_per_img[:, 4] / 2) + padh # bottom right y - labels_per_img[:, 1:] = boxes - - labels4.append(labels_per_img) - - # Concat/clip labels - labels4 = np.concatenate(labels4, 0) - # for x in (labels4[:, 1:]): - # np.clip(x, 0, 2 * s, out=x) - labels4[:, 1::2] = np.clip(labels4[:, 1::2], 0, 2 * target_width) - labels4[:, 2::2] = np.clip(labels4[:, 2::2], 0, 2 * target_height) - - # Augment - img4, labels4 = random_affine(img4, labels4, - degrees=hyp['degrees'], - translate=hyp['translate'], - scale=hyp['scale'], - shear=hyp['shear'], - new_shape=(target_height, target_width)) - - return img4, labels4 diff --git a/cv/detection/yolov6/pytorch/yolov6/data/data_load.py b/cv/detection/yolov6/pytorch/yolov6/data/data_load.py deleted file mode 100644 index e68e8d710..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/data/data_load.py +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- -# This code is based on -# https://github.com/ultralytics/yolov5/blob/master/utils/dataloaders.py - -import os -import torch.distributed as dist -from torch.utils.data import dataloader, distributed - -from .datasets import TrainValDataset -from yolov6.utils.events import LOGGER -from yolov6.utils.torch_utils import torch_distributed_zero_first - - -def create_dataloader( - path, - img_size, - batch_size, - stride, - hyp=None, - augment=False, - check_images=False, - check_labels=False, - pad=0.0, - rect=False, - rank=-1, - workers=8, - shuffle=False, - data_dict=None, - task="Train", - specific_shape=False, - height=1088, - width=1920 - -): - """Create general dataloader. - - Returns dataloader and dataset - """ - if rect and shuffle: - LOGGER.warning( - "WARNING: --rect is incompatible with DataLoader shuffle, setting shuffle=False" - ) - shuffle = False - with torch_distributed_zero_first(rank): - dataset = TrainValDataset( - path, - img_size, - batch_size, - augment=augment, - hyp=hyp, - rect=rect, - check_images=check_images, - check_labels=check_labels, - stride=int(stride), - pad=pad, - rank=rank, - data_dict=data_dict, - task=task, - specific_shape = specific_shape, - height=height, - width=width - ) - - batch_size = min(batch_size, len(dataset)) - workers = min( - [ - os.cpu_count() // int(os.getenv("WORLD_SIZE", 1)), - batch_size if batch_size > 1 else 0, - workers, - ] - ) # number of workers - # in DDP mode, if GPU number is greater than 1, and set rect=True, - # DistributedSampler will sample from start if the last samples cannot be assigned equally to each - # GPU process, this might cause shape difference in one batch, such as (384,640,3) and (416,640,3) - # will cause exception in collate function of torch.stack. - drop_last = rect and dist.is_initialized() and dist.get_world_size() > 1 - sampler = ( - None if rank == -1 else distributed.DistributedSampler(dataset, shuffle=shuffle, drop_last=drop_last) - ) - return ( - TrainValDataLoader( - dataset, - batch_size=batch_size, - shuffle=shuffle and sampler is None, - num_workers=workers, - sampler=sampler, - pin_memory=True, - collate_fn=TrainValDataset.collate_fn, - ), - dataset, - ) - - -class TrainValDataLoader(dataloader.DataLoader): - """Dataloader that reuses workers - - Uses same syntax as vanilla DataLoader - """ - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - object.__setattr__(self, "batch_sampler", _RepeatSampler(self.batch_sampler)) - self.iterator = super().__iter__() - - def __len__(self): - return len(self.batch_sampler.sampler) - - def __iter__(self): - for i in range(len(self)): - yield next(self.iterator) - - -class _RepeatSampler: - """Sampler that repeats forever - - Args: - sampler (Sampler) - """ - - def __init__(self, sampler): - self.sampler = sampler - - def __iter__(self): - while True: - yield from iter(self.sampler) diff --git a/cv/detection/yolov6/pytorch/yolov6/data/datasets.py b/cv/detection/yolov6/pytorch/yolov6/data/datasets.py deleted file mode 100644 index a5b8bc05e..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/data/datasets.py +++ /dev/null @@ -1,664 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- - -import glob -from io import UnsupportedOperation -import os -import os.path as osp -import random -import json -import time -import hashlib -from pathlib import Path - -from multiprocessing.pool import Pool - -import cv2 -import numpy as np -from tqdm import tqdm -from PIL import ExifTags, Image, ImageOps - -import torch -from torch.utils.data import Dataset -import torch.distributed as dist - -from .data_augment import ( - augment_hsv, - letterbox, - mixup, - random_affine, - mosaic_augmentation, -) -from yolov6.utils.events import LOGGER - - -# Parameters -IMG_FORMATS = ["bmp", "jpg", "jpeg", "png", "tif", "tiff", "dng", "webp", "mpo"] -VID_FORMATS = ["mp4", "mov", "avi", "mkv"] -IMG_FORMATS.extend([f.upper() for f in IMG_FORMATS]) -VID_FORMATS.extend([f.upper() for f in VID_FORMATS]) -# Get orientation exif tag -for k, v in ExifTags.TAGS.items(): - if v == "Orientation": - ORIENTATION = k - break - -def img2label_paths(img_paths): - # Define label paths as a function of image paths - sa, sb = f'{os.sep}images{os.sep}', f'{os.sep}labels{os.sep}' # /images/, /labels/ substrings - return [sb.join(x.rsplit(sa, 1)).rsplit('.', 1)[0] + '.txt' for x in img_paths] - -class TrainValDataset(Dataset): - '''YOLOv6 train_loader/val_loader, loads images and labels for training and validation.''' - def __init__( - self, - img_dir, - img_size=640, - batch_size=16, - augment=False, - hyp=None, - rect=False, - check_images=False, - check_labels=False, - stride=32, - pad=0.0, - rank=-1, - data_dict=None, - task="train", - specific_shape = False, - height=1088, - width=1920 - - ): - assert task.lower() in ("train", "val", "test", "speed"), f"Not supported task: {task}" - t1 = time.time() - self.__dict__.update(locals()) - self.main_process = self.rank in (-1, 0) - self.task = self.task.capitalize() - self.class_names = data_dict["names"] - self.img_paths, self.labels = self.get_imgs_labels(self.img_dir) - self.rect = rect - self.specific_shape = specific_shape - self.target_height = height - self.target_width = width - if self.rect: - shapes = [self.img_info[p]["shape"] for p in self.img_paths] - self.shapes = np.array(shapes, dtype=np.float64) - if dist.is_initialized(): - # in DDP mode, we need to make sure all images within batch_size * gpu_num - # will resized and padded to same shape. - sample_batch_size = self.batch_size * dist.get_world_size() - else: - sample_batch_size = self.batch_size - self.batch_indices = np.floor( - np.arange(len(shapes)) / sample_batch_size - ).astype( - np.int_ - ) # batch indices of each image - - self.sort_files_shapes() - - t2 = time.time() - if self.main_process: - LOGGER.info(f"%.1fs for dataset initialization." % (t2 - t1)) - - def __len__(self): - """Get the length of dataset""" - return len(self.img_paths) - - def __getitem__(self, index): - """Fetching a data sample for a given key. - This function applies mosaic and mixup augments during training. - During validation, letterbox augment is applied. - """ - target_shape = ( - (self.target_height, self.target_width) if self.specific_shape else - self.batch_shapes[self.batch_indices[index]] if self.rect - else self.img_size - ) - - # Mosaic Augmentation - if self.augment and random.random() < self.hyp["mosaic"]: - img, labels = self.get_mosaic(index, target_shape) - shapes = None - - # MixUp augmentation - if random.random() < self.hyp["mixup"]: - img_other, labels_other = self.get_mosaic( - random.randint(0, len(self.img_paths) - 1), target_shape - ) - img, labels = mixup(img, labels, img_other, labels_other) - - else: - # Load image - if self.hyp and "shrink_size" in self.hyp: - img, (h0, w0), (h, w) = self.load_image(index, self.hyp["shrink_size"]) - else: - img, (h0, w0), (h, w) = self.load_image(index) - - # letterbox - img, ratio, pad = letterbox(img, target_shape, auto=False, scaleup=self.augment) - shapes = (h0, w0), ((h * ratio / h0, w * ratio / w0), pad) # for COCO mAP rescaling - - labels = self.labels[index].copy() - if labels.size: - w *= ratio - h *= ratio - # new boxes - boxes = np.copy(labels[:, 1:]) - boxes[:, 0] = ( - w * (labels[:, 1] - labels[:, 3] / 2) + pad[0] - ) # top left x - boxes[:, 1] = ( - h * (labels[:, 2] - labels[:, 4] / 2) + pad[1] - ) # top left y - boxes[:, 2] = ( - w * (labels[:, 1] + labels[:, 3] / 2) + pad[0] - ) # bottom right x - boxes[:, 3] = ( - h * (labels[:, 2] + labels[:, 4] / 2) + pad[1] - ) # bottom right y - labels[:, 1:] = boxes - - if self.augment: - img, labels = random_affine( - img, - labels, - degrees=self.hyp["degrees"], - translate=self.hyp["translate"], - scale=self.hyp["scale"], - shear=self.hyp["shear"], - new_shape=target_shape, - ) - - if len(labels): - h, w = img.shape[:2] - - labels[:, [1, 3]] = labels[:, [1, 3]].clip(0, w - 1e-3) # x1, x2 - labels[:, [2, 4]] = labels[:, [2, 4]].clip(0, h - 1e-3) # y1, y2 - - boxes = np.copy(labels[:, 1:]) - boxes[:, 0] = ((labels[:, 1] + labels[:, 3]) / 2) / w # x center - boxes[:, 1] = ((labels[:, 2] + labels[:, 4]) / 2) / h # y center - boxes[:, 2] = (labels[:, 3] - labels[:, 1]) / w # width - boxes[:, 3] = (labels[:, 4] - labels[:, 2]) / h # height - labels[:, 1:] = boxes - - if self.augment: - img, labels = self.general_augment(img, labels) - - labels_out = torch.zeros((len(labels), 6)) - if len(labels): - labels_out[:, 1:] = torch.from_numpy(labels) - - # Convert - img = img.transpose((2, 0, 1))[::-1] # HWC to CHW, BGR to RGB - img = np.ascontiguousarray(img) - - return torch.from_numpy(img), labels_out, self.img_paths[index], shapes - - def load_image(self, index, shrink_size=None): - """Load image. - This function loads image by cv2, resize original image to target shape(img_size) with keeping ratio. - - Returns: - Image, original shape of image, resized image shape - """ - path = self.img_paths[index] - try: - im = cv2.imread(path) - assert im is not None, f"opencv cannot read image correctly or {path} not exists" - except: - im = cv2.cvtColor(np.asarray(Image.open(path)), cv2.COLOR_RGB2BGR) - assert im is not None, f"Image Not Found {path}, workdir: {os.getcwd()}" - - h0, w0 = im.shape[:2] # origin shape - if self.specific_shape: - # keep ratio resize - ratio = min(self.target_width / w0, self.target_height / h0) - - elif shrink_size: - ratio = (self.img_size - shrink_size) / max(h0, w0) - - else: - ratio = self.img_size / max(h0, w0) - - if ratio != 1: - im = cv2.resize( - im, - (int(w0 * ratio), int(h0 * ratio)), - interpolation=cv2.INTER_AREA - if ratio < 1 and not self.augment - else cv2.INTER_LINEAR, - ) - return im, (h0, w0), im.shape[:2] - - @staticmethod - def collate_fn(batch): - """Merges a list of samples to form a mini-batch of Tensor(s)""" - img, label, path, shapes = zip(*batch) - for i, l in enumerate(label): - l[:, 0] = i # add target image index for build_targets() - return torch.stack(img, 0), torch.cat(label, 0), path, shapes - - def get_imgs_labels(self, img_dirs): - if not isinstance(img_dirs, list): - img_dirs = [img_dirs] - # we store the cache img file in the first directory of img_dirs - valid_img_record = osp.join( - osp.dirname(img_dirs[0]), "." + osp.basename(img_dirs[0]) + "_cache.json" - ) - NUM_THREADS = min(8, os.cpu_count()) - img_paths = [] - for img_dir in img_dirs: - assert osp.exists(img_dir), f"{img_dir} is an invalid directory path!" - img_paths += glob.glob(osp.join(img_dir, "**/*"), recursive=True) - - img_paths = sorted( - p for p in img_paths if p.split(".")[-1].lower() in IMG_FORMATS and os.path.isfile(p) - ) - - assert img_paths, f"No images found in {img_dir}." - img_hash = self.get_hash(img_paths) - LOGGER.info(f'img record infomation path is:{valid_img_record}') - if osp.exists(valid_img_record): - with open(valid_img_record, "r") as f: - cache_info = json.load(f) - if "image_hash" in cache_info and cache_info["image_hash"] == img_hash: - img_info = cache_info["information"] - else: - self.check_images = True - else: - self.check_images = True - - # check images - if self.check_images and self.main_process: - img_info = {} - nc, msgs = 0, [] # number corrupt, messages - LOGGER.info( - f"{self.task}: Checking formats of images with {NUM_THREADS} process(es): " - ) - with Pool(NUM_THREADS) as pool: - pbar = tqdm( - pool.imap(TrainValDataset.check_image, img_paths), - total=len(img_paths), - ) - for img_path, shape_per_img, nc_per_img, msg in pbar: - if nc_per_img == 0: # not corrupted - img_info[img_path] = {"shape": shape_per_img} - nc += nc_per_img - if msg: - msgs.append(msg) - pbar.desc = f"{nc} image(s) corrupted" - pbar.close() - if msgs: - LOGGER.info("\n".join(msgs)) - - cache_info = {"information": img_info, "image_hash": img_hash} - # save valid image paths. - with open(valid_img_record, "w") as f: - json.dump(cache_info, f) - - # check and load anns - - img_paths = list(img_info.keys()) - label_paths = img2label_paths(img_paths) - assert label_paths, f"No labels found." - label_hash = self.get_hash(label_paths) - if "label_hash" not in cache_info or cache_info["label_hash"] != label_hash: - self.check_labels = True - - if self.check_labels: - cache_info["label_hash"] = label_hash - nm, nf, ne, nc, msgs = 0, 0, 0, 0, [] # number corrupt, messages - LOGGER.info( - f"{self.task}: Checking formats of labels with {NUM_THREADS} process(es): " - ) - with Pool(NUM_THREADS) as pool: - pbar = pool.imap( - TrainValDataset.check_label_files, zip(img_paths, label_paths) - ) - pbar = tqdm(pbar, total=len(label_paths)) if self.main_process else pbar - for ( - img_path, - labels_per_file, - nc_per_file, - nm_per_file, - nf_per_file, - ne_per_file, - msg, - ) in pbar: - if nc_per_file == 0: - img_info[img_path]["labels"] = labels_per_file - else: - img_info.pop(img_path) - nc += nc_per_file - nm += nm_per_file - nf += nf_per_file - ne += ne_per_file - if msg: - msgs.append(msg) - if self.main_process: - pbar.desc = f"{nf} label(s) found, {nm} label(s) missing, {ne} label(s) empty, {nc} invalid label files" - if self.main_process: - pbar.close() - with open(valid_img_record, "w") as f: - json.dump(cache_info, f) - if msgs: - LOGGER.info("\n".join(msgs)) - if nf == 0: - LOGGER.warning( - f"WARNING: No labels found in {osp.dirname(img_paths[0])}. " - ) - - if self.task.lower() == "val": - if self.data_dict.get("is_coco", False): # use original json file when evaluating on coco dataset. - assert osp.exists(self.data_dict["anno_path"]), "Eval on coco dataset must provide valid path of the annotation file in config file: data/coco.yaml" - else: - assert ( - self.class_names - ), "Class names is required when converting labels to coco format for evaluating." - save_dir = osp.join(osp.dirname(osp.dirname(img_dirs[0])), "annotations") - if not osp.exists(save_dir): - os.mkdir(save_dir) - save_path = osp.join( - save_dir, "instances_" + osp.basename(img_dirs[0]) + ".json" - ) - TrainValDataset.generate_coco_format_labels( - img_info, self.class_names, save_path - ) - - img_paths, labels = list( - zip( - *[ - ( - img_path, - np.array(info["labels"], dtype=np.float32) - if info["labels"] - else np.zeros((0, 5), dtype=np.float32), - ) - for img_path, info in img_info.items() - ] - ) - ) - self.img_info = img_info - LOGGER.info( - f"{self.task}: Final numbers of valid images: {len(img_paths)}/ labels: {len(labels)}. " - ) - return img_paths, labels - - def get_mosaic(self, index, shape): - """Gets images and labels after mosaic augments""" - indices = [index] + random.choices( - range(0, len(self.img_paths)), k=3 - ) # 3 additional image indices - random.shuffle(indices) - imgs, hs, ws, labels = [], [], [], [] - for index in indices: - img, _, (h, w) = self.load_image(index) - labels_per_img = self.labels[index] - imgs.append(img) - hs.append(h) - ws.append(w) - labels.append(labels_per_img) - img, labels = mosaic_augmentation(shape, imgs, hs, ws, labels, self.hyp, self.specific_shape, self.target_height, self.target_width) - return img, labels - - def general_augment(self, img, labels): - """Gets images and labels after general augment - This function applies hsv, random ud-flip and random lr-flips augments. - """ - nl = len(labels) - - # HSV color-space - augment_hsv( - img, - hgain=self.hyp["hsv_h"], - sgain=self.hyp["hsv_s"], - vgain=self.hyp["hsv_v"], - ) - - # Flip up-down - if random.random() < self.hyp["flipud"]: - img = np.flipud(img) - if nl: - labels[:, 2] = 1 - labels[:, 2] - - # Flip left-right - if random.random() < self.hyp["fliplr"]: - img = np.fliplr(img) - if nl: - labels[:, 1] = 1 - labels[:, 1] - - return img, labels - - def sort_files_shapes(self): - '''Sort by aspect ratio.''' - batch_num = self.batch_indices[-1] + 1 - s = self.shapes # [height, width] - ar = s[:, 1] / s[:, 0] # aspect ratio - irect = ar.argsort() - self.img_paths = [self.img_paths[i] for i in irect] - self.labels = [self.labels[i] for i in irect] - self.shapes = s[irect] # wh - ar = ar[irect] - - # Set training image shapes - shapes = [[1, 1]] * batch_num - for i in range(batch_num): - ari = ar[self.batch_indices == i] - mini, maxi = ari.min(), ari.max() - if maxi < 1: - shapes[i] = [1, maxi] - elif mini > 1: - shapes[i] = [1 / mini, 1] - self.batch_shapes = ( - np.ceil(np.array(shapes) * self.img_size / self.stride + self.pad).astype( - np.int_ - ) - * self.stride - ) - - @staticmethod - def check_image(im_file): - '''Verify an image.''' - nc, msg = 0, "" - try: - im = Image.open(im_file) - im.verify() # PIL verify - im = Image.open(im_file) # need to reload the image after using verify() - shape = (im.height, im.width) # (height, width) - try: - im_exif = im._getexif() - if im_exif and ORIENTATION in im_exif: - rotation = im_exif[ORIENTATION] - if rotation in (6, 8): - shape = (shape[1], shape[0]) - except: - im_exif = None - - assert (shape[0] > 9) & (shape[1] > 9), f"image size {shape} <10 pixels" - assert im.format.lower() in IMG_FORMATS, f"invalid image format {im.format}" - if im.format.lower() in ("jpg", "jpeg"): - with open(im_file, "rb") as f: - f.seek(-2, 2) - if f.read() != b"\xff\xd9": # corrupt JPEG - ImageOps.exif_transpose(Image.open(im_file)).save( - im_file, "JPEG", subsampling=0, quality=100 - ) - msg += f"WARNING: {im_file}: corrupt JPEG restored and saved" - return im_file, shape, nc, msg - except Exception as e: - nc = 1 - msg = f"WARNING: {im_file}: ignoring corrupt image: {e}" - return im_file, None, nc, msg - - @staticmethod - def check_label_files(args): - img_path, lb_path = args - nm, nf, ne, nc, msg = 0, 0, 0, 0, "" # number (missing, found, empty, message - try: - if osp.exists(lb_path): - nf = 1 # label found - with open(lb_path, "r") as f: - labels = [ - x.split() for x in f.read().strip().splitlines() if len(x) - ] - labels = np.array(labels, dtype=np.float32) - if len(labels): - assert all( - len(l) == 5 for l in labels - ), f"{lb_path}: wrong label format." - assert ( - labels >= 0 - ).all(), f"{lb_path}: Label values error: all values in label file must > 0" - assert ( - labels[:, 1:] <= 1 - ).all(), f"{lb_path}: Label values error: all coordinates must be normalized" - - _, indices = np.unique(labels, axis=0, return_index=True) - if len(indices) < len(labels): # duplicate row check - labels = labels[indices] # remove duplicates - msg += f"WARNING: {lb_path}: {len(labels) - len(indices)} duplicate labels removed" - labels = labels.tolist() - else: - ne = 1 # label empty - labels = [] - else: - nm = 1 # label missing - labels = [] - - return img_path, labels, nc, nm, nf, ne, msg - except Exception as e: - nc = 1 - msg = f"WARNING: {lb_path}: ignoring invalid labels: {e}" - return img_path, None, nc, nm, nf, ne, msg - - @staticmethod - def generate_coco_format_labels(img_info, class_names, save_path): - # for evaluation with pycocotools - dataset = {"categories": [], "annotations": [], "images": []} - for i, class_name in enumerate(class_names): - dataset["categories"].append( - {"id": i, "name": class_name, "supercategory": ""} - ) - - ann_id = 0 - LOGGER.info(f"Convert to COCO format") - for i, (img_path, info) in enumerate(tqdm(img_info.items())): - labels = info["labels"] if info["labels"] else [] - img_id = osp.splitext(osp.basename(img_path))[0] - img_h, img_w = info["shape"] - dataset["images"].append( - { - "file_name": os.path.basename(img_path), - "id": img_id, - "width": img_w, - "height": img_h, - } - ) - if labels: - for label in labels: - c, x, y, w, h = label[:5] - # convert x,y,w,h to x1,y1,x2,y2 - x1 = (x - w / 2) * img_w - y1 = (y - h / 2) * img_h - x2 = (x + w / 2) * img_w - y2 = (y + h / 2) * img_h - # cls_id starts from 0 - cls_id = int(c) - w = max(0, x2 - x1) - h = max(0, y2 - y1) - dataset["annotations"].append( - { - "area": h * w, - "bbox": [x1, y1, w, h], - "category_id": cls_id, - "id": ann_id, - "image_id": img_id, - "iscrowd": 0, - # mask - "segmentation": [], - } - ) - ann_id += 1 - - with open(save_path, "w") as f: - json.dump(dataset, f) - LOGGER.info( - f"Convert to COCO format finished. Resutls saved in {save_path}" - ) - - @staticmethod - def get_hash(paths): - """Get the hash value of paths""" - assert isinstance(paths, list), "Only support list currently." - h = hashlib.md5("".join(paths).encode()) - return h.hexdigest() - - -class LoadData: - def __init__(self, path, webcam, webcam_addr): - self.webcam = webcam - self.webcam_addr = webcam_addr - if webcam: # if use web camera - imgp = [] - vidp = [int(webcam_addr) if webcam_addr.isdigit() else webcam_addr] - else: - p = str(Path(path).resolve()) # os-agnostic absolute path - if os.path.isdir(p): - files = sorted(glob.glob(os.path.join(p, '**/*.*'), recursive=True)) # dir - elif os.path.isfile(p): - files = [p] # files - else: - raise FileNotFoundError(f'Invalid path {p}') - imgp = [i for i in files if i.split('.')[-1] in IMG_FORMATS] - vidp = [v for v in files if v.split('.')[-1] in VID_FORMATS] - self.files = imgp + vidp - self.nf = len(self.files) - self.type = 'image' - if len(vidp) > 0: - self.add_video(vidp[0]) # new video - else: - self.cap = None - - # @staticmethod - def checkext(self, path): - if self.webcam: - file_type = 'video' - else: - file_type = 'image' if path.split('.')[-1].lower() in IMG_FORMATS else 'video' - return file_type - - def __iter__(self): - self.count = 0 - return self - - def __next__(self): - if self.count == self.nf: - raise StopIteration - path = self.files[self.count] - if self.checkext(path) == 'video': - self.type = 'video' - ret_val, img = self.cap.read() - while not ret_val: - self.count += 1 - self.cap.release() - if self.count == self.nf: # last video - raise StopIteration - path = self.files[self.count] - self.add_video(path) - ret_val, img = self.cap.read() - else: - # Read image - self.count += 1 - img = cv2.imread(path) # BGR - return img, path, self.cap - - def add_video(self, path): - self.frame = 0 - self.cap = cv2.VideoCapture(path) - self.frames = int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT)) - - def __len__(self): - return self.nf # number of files diff --git a/cv/detection/yolov6/pytorch/yolov6/data/vis_dataset.py b/cv/detection/yolov6/pytorch/yolov6/data/vis_dataset.py deleted file mode 100644 index 09716ae54..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/data/vis_dataset.py +++ /dev/null @@ -1,59 +0,0 @@ -# coding=utf-8 -# Description: visualize yolo label image. - -import argparse -import os -import cv2 -import numpy as np - -IMG_FORMATS = ["bmp", "jpg", "jpeg", "png", "tif", "tiff", "dng", "webp", "mpo"] -IMG_FORMATS.extend([f.upper() for f in IMG_FORMATS]) - - -def main(args): - img_dir, label_dir, class_names = args.img_dir, args.label_dir, args.class_names - - label_map = dict() - for class_id, classname in enumerate(class_names): - label_map[class_id] = classname - - for file in os.listdir(img_dir): - if file.split('.')[-1] not in IMG_FORMATS: - print(f'[Warning]: Non-image file {file}') - continue - img_path = os.path.join(img_dir, file) - label_path = os.path.join(label_dir, file[: file.rindex('.')] + '.txt') - - try: - img_data = cv2.imread(img_path) - height, width, _ = img_data.shape - color = [tuple(np.random.choice(range(256), size=3)) for i in class_names] - thickness = 2 - - with open(label_path, 'r') as f: - for bbox in f: - cls, x_c, y_c, w, h = [float(v) if i > 0 else int(v) for i, v in enumerate(bbox.split('\n')[0].split(' '))] - - x_tl = int((x_c - w / 2) * width) - y_tl = int((y_c - h / 2) * height) - cv2.rectangle(img_data, (x_tl, y_tl), (x_tl + int(w * width), y_tl + int(h * height)), tuple([int(x) for x in color[cls]]), thickness) - cv2.putText(img_data, label_map[cls], (x_tl, y_tl - 10), cv2.FONT_HERSHEY_COMPLEX, 1, tuple([int(x) for x in color[cls]]), thickness) - - cv2.imshow('image', img_data) - cv2.waitKey(0) - except Exception as e: - print(f'[Error]: {e} {img_path}') - print('======All Done!======') - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--img_dir', default='VOCdevkit/voc_07_12/images') - parser.add_argument('--label_dir', default='VOCdevkit/voc_07_12/labels') - parser.add_argument('--class_names', default=['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', - 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']) - - args = parser.parse_args() - print(args) - - main(args) diff --git a/cv/detection/yolov6/pytorch/yolov6/data/voc2yolo.py b/cv/detection/yolov6/pytorch/yolov6/data/voc2yolo.py deleted file mode 100644 index 9019e1fcd..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/data/voc2yolo.py +++ /dev/null @@ -1,100 +0,0 @@ -import xml.etree.ElementTree as ET -from tqdm import tqdm -import os -import shutil -import argparse - -# VOC dataset (refer https://github.com/ultralytics/yolov5/blob/master/data/VOC.yaml) -# VOC2007 trainval: 446MB, 5012 images -# VOC2007 test: 438MB, 4953 images -# VOC2012 trainval: 1.95GB, 17126 images - -VOC_NAMES = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', - 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor'] - - -def convert_label(path, lb_path, year, image_id): - def convert_box(size, box): - dw, dh = 1. / size[0], 1. / size[1] - x, y, w, h = (box[0] + box[1]) / 2.0 - 1, (box[2] + box[3]) / 2.0 - 1, box[1] - box[0], box[3] - box[2] - return x * dw, y * dh, w * dw, h * dh - in_file = open(os.path.join(path, f'VOC{year}/Annotations/{image_id}.xml')) - out_file = open(lb_path, 'w') - tree = ET.parse(in_file) - root = tree.getroot() - size = root.find('size') - w = int(size.find('width').text) - h = int(size.find('height').text) - for obj in root.iter('object'): - cls = obj.find('name').text - if cls in VOC_NAMES and not int(obj.find('difficult').text) == 1: - xmlbox = obj.find('bndbox') - bb = convert_box((w, h), [float(xmlbox.find(x).text) for x in ('xmin', 'xmax', 'ymin', 'ymax')]) - cls_id = VOC_NAMES.index(cls) # class id - out_file.write(" ".join([str(a) for a in (cls_id, *bb)]) + '\n') - - -def gen_voc07_12(voc_path): - ''' - Generate voc07+12 setting dataset: - train: # train images 16551 images - - images/train2012 - - images/train2007 - - images/val2012 - - images/val2007 - val: # val images (relative to 'path') 4952 images - - images/test2007 - ''' - dataset_root = os.path.join(voc_path, 'voc_07_12') - if not os.path.exists(dataset_root): - os.makedirs(dataset_root) - - dataset_settings = {'train': ['train2007', 'val2007', 'train2012', 'val2012'], 'val':['test2007']} - for item in ['images', 'labels']: - for data_type, data_list in dataset_settings.items(): - for data_name in data_list: - ori_path = os.path.join(voc_path, item, data_name) - new_path = os.path.join(dataset_root, item, data_type) - if not os.path.exists(new_path): - os.makedirs(new_path) - - print(f'[INFO]: Copying {ori_path} to {new_path}') - for file in os.listdir(ori_path): - shutil.copy(os.path.join(ori_path, file), new_path) - - -def main(args): - voc_path = args.voc_path - for year, image_set in ('2012', 'train'), ('2012', 'val'), ('2007', 'train'), ('2007', 'val'), ('2007', 'test'): - imgs_path = os.path.join(voc_path, 'images', f'{image_set}') - lbs_path = os.path.join(voc_path, 'labels', f'{image_set}') - - try: - with open(os.path.join(voc_path, f'VOC{year}/ImageSets/Main/{image_set}.txt'), 'r') as f: - image_ids = f.read().strip().split() - if not os.path.exists(imgs_path): - os.makedirs(imgs_path) - if not os.path.exists(lbs_path): - os.makedirs(lbs_path) - - for id in tqdm(image_ids, desc=f'{image_set}{year}'): - f = os.path.join(voc_path, f'VOC{year}/JPEGImages/{id}.jpg') # old img path - lb_path = os.path.join(lbs_path, f'{id}.txt') # new label path - convert_label(voc_path, lb_path, year, id) # convert labels to YOLO format - if os.path.exists(f): - shutil.move(f, imgs_path) # move image - except Exception as e: - print(f'[Warning]: {e} {year}{image_set} convert fail!') - - gen_voc07_12(voc_path) - - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--voc_path', default='VOCdevkit') - - args = parser.parse_args() - print(args) - - main(args) diff --git a/cv/detection/yolov6/pytorch/yolov6/layers/common.py b/cv/detection/yolov6/pytorch/yolov6/layers/common.py deleted file mode 100644 index c69d9d04a..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/layers/common.py +++ /dev/null @@ -1,986 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- -import os -import warnings -import numpy as np -from pathlib import Path -import torch -import torch.nn as nn -import torch.nn.init as init -from torch.nn.parameter import Parameter -from yolov6.utils.general import download_ckpt - - -activation_table = {'relu':nn.ReLU(), - 'silu':nn.SiLU(), - 'hardswish':nn.Hardswish() - } - -class SiLU(nn.Module): - '''Activation of SiLU''' - @staticmethod - def forward(x): - return x * torch.sigmoid(x) - - -class ConvModule(nn.Module): - '''A combination of Conv + BN + Activation''' - def __init__(self, in_channels, out_channels, kernel_size, stride, activation_type, padding=None, groups=1, bias=False): - super().__init__() - if padding is None: - padding = kernel_size // 2 - self.conv = nn.Conv2d( - in_channels, - out_channels, - kernel_size=kernel_size, - stride=stride, - padding=padding, - groups=groups, - bias=bias, - ) - self.bn = nn.BatchNorm2d(out_channels) - if activation_type is not None: - self.act = activation_table.get(activation_type) - self.activation_type = activation_type - - def forward(self, x): - if self.activation_type is None: - return self.bn(self.conv(x)) - return self.act(self.bn(self.conv(x))) - - def forward_fuse(self, x): - if self.activation_type is None: - return self.conv(x) - return self.act(self.conv(x)) - - -class ConvBNReLU(nn.Module): - '''Conv and BN with ReLU activation''' - def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=None, groups=1, bias=False): - super().__init__() - self.block = ConvModule(in_channels, out_channels, kernel_size, stride, 'relu', padding, groups, bias) - - def forward(self, x): - return self.block(x) - - -class ConvBNSiLU(nn.Module): - '''Conv and BN with SiLU activation''' - def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=None, groups=1, bias=False): - super().__init__() - self.block = ConvModule(in_channels, out_channels, kernel_size, stride, 'silu', padding, groups, bias) - - def forward(self, x): - return self.block(x) - - -class ConvBN(nn.Module): - '''Conv and BN without activation''' - def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=None, groups=1, bias=False): - super().__init__() - self.block = ConvModule(in_channels, out_channels, kernel_size, stride, None, padding, groups, bias) - - def forward(self, x): - return self.block(x) - - -class ConvBNHS(nn.Module): - '''Conv and BN with Hardswish activation''' - def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=None, groups=1, bias=False): - super().__init__() - self.block = ConvModule(in_channels, out_channels, kernel_size, stride, 'hardswish', padding, groups, bias) - - def forward(self, x): - return self.block(x) - - -class SPPFModule(nn.Module): - - def __init__(self, in_channels, out_channels, kernel_size=5, block=ConvBNReLU): - super().__init__() - c_ = in_channels // 2 # hidden channels - self.cv1 = block(in_channels, c_, 1, 1) - self.cv2 = block(c_ * 4, out_channels, 1, 1) - self.m = nn.MaxPool2d(kernel_size=kernel_size, stride=1, padding=kernel_size // 2) - - def forward(self, x): - x = self.cv1(x) - with warnings.catch_warnings(): - warnings.simplefilter('ignore') - y1 = self.m(x) - y2 = self.m(y1) - return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1)) - - -class SimSPPF(nn.Module): - '''Simplified SPPF with ReLU activation''' - def __init__(self, in_channels, out_channels, kernel_size=5, block=ConvBNReLU): - super().__init__() - self.sppf = SPPFModule(in_channels, out_channels, kernel_size, block) - - def forward(self, x): - return self.sppf(x) - - -class SPPF(nn.Module): - '''SPPF with SiLU activation''' - def __init__(self, in_channels, out_channels, kernel_size=5, block=ConvBNSiLU): - super().__init__() - self.sppf = SPPFModule(in_channels, out_channels, kernel_size, block) - - def forward(self, x): - return self.sppf(x) - - -class CSPSPPFModule(nn.Module): - # CSP https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, in_channels, out_channels, kernel_size=5, e=0.5, block=ConvBNReLU): - super().__init__() - c_ = int(out_channels * e) # hidden channels - self.cv1 = block(in_channels, c_, 1, 1) - self.cv2 = block(in_channels, c_, 1, 1) - self.cv3 = block(c_, c_, 3, 1) - self.cv4 = block(c_, c_, 1, 1) - - self.m = nn.MaxPool2d(kernel_size=kernel_size, stride=1, padding=kernel_size // 2) - self.cv5 = block(4 * c_, c_, 1, 1) - self.cv6 = block(c_, c_, 3, 1) - self.cv7 = block(2 * c_, out_channels, 1, 1) - - def forward(self, x): - x1 = self.cv4(self.cv3(self.cv1(x))) - y0 = self.cv2(x) - with warnings.catch_warnings(): - warnings.simplefilter('ignore') - y1 = self.m(x1) - y2 = self.m(y1) - y3 = self.cv6(self.cv5(torch.cat([x1, y1, y2, self.m(y2)], 1))) - return self.cv7(torch.cat((y0, y3), dim=1)) - - -class SimCSPSPPF(nn.Module): - '''CSPSPPF with ReLU activation''' - def __init__(self, in_channels, out_channels, kernel_size=5, e=0.5, block=ConvBNReLU): - super().__init__() - self.cspsppf = CSPSPPFModule(in_channels, out_channels, kernel_size, e, block) - - def forward(self, x): - return self.cspsppf(x) - - -class CSPSPPF(nn.Module): - '''CSPSPPF with SiLU activation''' - def __init__(self, in_channels, out_channels, kernel_size=5, e=0.5, block=ConvBNSiLU): - super().__init__() - self.cspsppf = CSPSPPFModule(in_channels, out_channels, kernel_size, e, block) - - def forward(self, x): - return self.cspsppf(x) - - -class Transpose(nn.Module): - '''Normal Transpose, default for upsampling''' - def __init__(self, in_channels, out_channels, kernel_size=2, stride=2): - super().__init__() - self.upsample_transpose = torch.nn.ConvTranspose2d( - in_channels=in_channels, - out_channels=out_channels, - kernel_size=kernel_size, - stride=stride, - bias=True - ) - - def forward(self, x): - return self.upsample_transpose(x) - - -class RepVGGBlock(nn.Module): - '''RepVGGBlock is a basic rep-style block, including training and deploy status - This code is based on https://github.com/DingXiaoH/RepVGG/blob/main/repvgg.py - ''' - def __init__(self, in_channels, out_channels, kernel_size=3, - stride=1, padding=1, dilation=1, groups=1, padding_mode='zeros', deploy=False, use_se=False): - super(RepVGGBlock, self).__init__() - """ Initialization of the class. - Args: - in_channels (int): Number of channels in the input image - out_channels (int): Number of channels produced by the convolution - kernel_size (int or tuple): Size of the convolving kernel - stride (int or tuple, optional): Stride of the convolution. Default: 1 - padding (int or tuple, optional): Zero-padding added to both sides of - the input. Default: 1 - dilation (int or tuple, optional): Spacing between kernel elements. Default: 1 - groups (int, optional): Number of blocked connections from input - channels to output channels. Default: 1 - padding_mode (string, optional): Default: 'zeros' - deploy: Whether to be deploy status or training status. Default: False - use_se: Whether to use se. Default: False - """ - self.deploy = deploy - self.groups = groups - self.in_channels = in_channels - self.out_channels = out_channels - - assert kernel_size == 3 - assert padding == 1 - - padding_11 = padding - kernel_size // 2 - - self.nonlinearity = nn.ReLU() - - if use_se: - raise NotImplementedError("se block not supported yet") - else: - self.se = nn.Identity() - - if deploy: - self.rbr_reparam = nn.Conv2d(in_channels=in_channels, out_channels=out_channels, kernel_size=kernel_size, stride=stride, - padding=padding, dilation=dilation, groups=groups, bias=True, padding_mode=padding_mode) - - else: - self.rbr_identity = nn.BatchNorm2d(num_features=in_channels) if out_channels == in_channels and stride == 1 else None - self.rbr_dense = ConvModule(in_channels=in_channels, out_channels=out_channels, kernel_size=kernel_size, stride=stride, activation_type=None, padding=padding, groups=groups) - self.rbr_1x1 = ConvModule(in_channels=in_channels, out_channels=out_channels, kernel_size=1, stride=stride, activation_type=None, padding=padding_11, groups=groups) - - def forward(self, inputs): - '''Forward process''' - if hasattr(self, 'rbr_reparam'): - return self.nonlinearity(self.se(self.rbr_reparam(inputs))) - - if self.rbr_identity is None: - id_out = 0 - else: - id_out = self.rbr_identity(inputs) - - return self.nonlinearity(self.se(self.rbr_dense(inputs) + self.rbr_1x1(inputs) + id_out)) - - def get_equivalent_kernel_bias(self): - kernel3x3, bias3x3 = self._fuse_bn_tensor(self.rbr_dense) - kernel1x1, bias1x1 = self._fuse_bn_tensor(self.rbr_1x1) - kernelid, biasid = self._fuse_bn_tensor(self.rbr_identity) - return kernel3x3 + self._pad_1x1_to_3x3_tensor(kernel1x1) + kernelid, bias3x3 + bias1x1 + biasid - - def _avg_to_3x3_tensor(self, avgp): - channels = self.in_channels - groups = self.groups - kernel_size = avgp.kernel_size - input_dim = channels // groups - k = torch.zeros((channels, input_dim, kernel_size, kernel_size)) - k[np.arange(channels), np.tile(np.arange(input_dim), groups), :, :] = 1.0 / kernel_size ** 2 - return k - - def _pad_1x1_to_3x3_tensor(self, kernel1x1): - if kernel1x1 is None: - return 0 - else: - return torch.nn.functional.pad(kernel1x1, [1, 1, 1, 1]) - - def _fuse_bn_tensor(self, branch): - if branch is None: - return 0, 0 - if isinstance(branch, ConvModule): - kernel = branch.conv.weight - bias = branch.conv.bias - return kernel, bias - elif isinstance(branch, nn.BatchNorm2d): - if not hasattr(self, 'id_tensor'): - input_dim = self.in_channels // self.groups - kernel_value = np.zeros((self.in_channels, input_dim, 3, 3), dtype=np.float32) - for i in range(self.in_channels): - kernel_value[i, i % input_dim, 1, 1] = 1 - self.id_tensor = torch.from_numpy(kernel_value).to(branch.weight.device) - kernel = self.id_tensor - running_mean = branch.running_mean - running_var = branch.running_var - gamma = branch.weight - beta = branch.bias - eps = branch.eps - std = (running_var + eps).sqrt() - t = (gamma / std).reshape(-1, 1, 1, 1) - return kernel * t, beta - running_mean * gamma / std - - def switch_to_deploy(self): - if hasattr(self, 'rbr_reparam'): - return - kernel, bias = self.get_equivalent_kernel_bias() - self.rbr_reparam = nn.Conv2d(in_channels=self.rbr_dense.conv.in_channels, out_channels=self.rbr_dense.conv.out_channels, - kernel_size=self.rbr_dense.conv.kernel_size, stride=self.rbr_dense.conv.stride, - padding=self.rbr_dense.conv.padding, dilation=self.rbr_dense.conv.dilation, groups=self.rbr_dense.conv.groups, bias=True) - self.rbr_reparam.weight.data = kernel - self.rbr_reparam.bias.data = bias - for para in self.parameters(): - para.detach_() - self.__delattr__('rbr_dense') - self.__delattr__('rbr_1x1') - if hasattr(self, 'rbr_identity'): - self.__delattr__('rbr_identity') - if hasattr(self, 'id_tensor'): - self.__delattr__('id_tensor') - self.deploy = True - - -class QARepVGGBlock(RepVGGBlock): - """ - RepVGGBlock is a basic rep-style block, including training and deploy status - This code is based on https://arxiv.org/abs/2212.01593 - """ - def __init__(self, in_channels, out_channels, kernel_size=3, - stride=1, padding=1, dilation=1, groups=1, padding_mode='zeros', deploy=False, use_se=False): - super(QARepVGGBlock, self).__init__(in_channels, out_channels, kernel_size, stride, padding, dilation, groups, - padding_mode, deploy, use_se) - if not deploy: - self.bn = nn.BatchNorm2d(out_channels) - self.rbr_1x1 = nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride, groups=groups, bias=False) - self.rbr_identity = nn.Identity() if out_channels == in_channels and stride == 1 else None - self._id_tensor = None - - def forward(self, inputs): - if hasattr(self, 'rbr_reparam'): - return self.nonlinearity(self.bn(self.se(self.rbr_reparam(inputs)))) - - if self.rbr_identity is None: - id_out = 0 - else: - id_out = self.rbr_identity(inputs) - - return self.nonlinearity(self.bn(self.se(self.rbr_dense(inputs) + self.rbr_1x1(inputs) + id_out))) - - def get_equivalent_kernel_bias(self): - kernel3x3, bias3x3 = self._fuse_bn_tensor(self.rbr_dense) - kernel = kernel3x3 + self._pad_1x1_to_3x3_tensor(self.rbr_1x1.weight) - bias = bias3x3 - - if self.rbr_identity is not None: - input_dim = self.in_channels // self.groups - kernel_value = np.zeros((self.in_channels, input_dim, 3, 3), dtype=np.float32) - for i in range(self.in_channels): - kernel_value[i, i % input_dim, 1, 1] = 1 - id_tensor = torch.from_numpy(kernel_value).to(self.rbr_1x1.weight.device) - kernel = kernel + id_tensor - return kernel, bias - - def _fuse_extra_bn_tensor(self, kernel, bias, branch): - assert isinstance(branch, nn.BatchNorm2d) - running_mean = branch.running_mean - bias # remove bias - running_var = branch.running_var - gamma = branch.weight - beta = branch.bias - eps = branch.eps - std = (running_var + eps).sqrt() - t = (gamma / std).reshape(-1, 1, 1, 1) - return kernel * t, beta - running_mean * gamma / std - - def switch_to_deploy(self): - if hasattr(self, 'rbr_reparam'): - return - kernel, bias = self.get_equivalent_kernel_bias() - self.rbr_reparam = nn.Conv2d(in_channels=self.rbr_dense.conv.in_channels, out_channels=self.rbr_dense.conv.out_channels, - kernel_size=self.rbr_dense.conv.kernel_size, stride=self.rbr_dense.conv.stride, - padding=self.rbr_dense.conv.padding, dilation=self.rbr_dense.conv.dilation, groups=self.rbr_dense.conv.groups, bias=True) - self.rbr_reparam.weight.data = kernel - self.rbr_reparam.bias.data = bias - for para in self.parameters(): - para.detach_() - self.__delattr__('rbr_dense') - self.__delattr__('rbr_1x1') - if hasattr(self, 'rbr_identity'): - self.__delattr__('rbr_identity') - if hasattr(self, 'id_tensor'): - self.__delattr__('id_tensor') - # keep post bn for QAT - # if hasattr(self, 'bn'): - # self.__delattr__('bn') - self.deploy = True - - -class QARepVGGBlockV2(RepVGGBlock): - """ - RepVGGBlock is a basic rep-style block, including training and deploy status - This code is based on https://arxiv.org/abs/2212.01593 - """ - def __init__(self, in_channels, out_channels, kernel_size=3, - stride=1, padding=1, dilation=1, groups=1, padding_mode='zeros', deploy=False, use_se=False): - super(QARepVGGBlockV2, self).__init__(in_channels, out_channels, kernel_size, stride, padding, dilation, groups, - padding_mode, deploy, use_se) - if not deploy: - self.bn = nn.BatchNorm2d(out_channels) - self.rbr_1x1 = nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride, groups=groups, bias=False) - self.rbr_identity = nn.Identity() if out_channels == in_channels and stride == 1 else None - self.rbr_avg = nn.AvgPool2d(kernel_size=kernel_size, stride=stride, padding=padding) if out_channels == in_channels and stride == 1 else None - self._id_tensor = None - - def forward(self, inputs): - if hasattr(self, 'rbr_reparam'): - return self.nonlinearity(self.bn(self.se(self.rbr_reparam(inputs)))) - - if self.rbr_identity is None: - id_out = 0 - else: - id_out = self.rbr_identity(inputs) - if self.rbr_avg is None: - avg_out = 0 - else: - avg_out = self.rbr_avg(inputs) - - return self.nonlinearity(self.bn(self.se(self.rbr_dense(inputs) + self.rbr_1x1(inputs) + id_out + avg_out))) - - def get_equivalent_kernel_bias(self): - kernel3x3, bias3x3 = self._fuse_bn_tensor(self.rbr_dense) - kernel = kernel3x3 + self._pad_1x1_to_3x3_tensor(self.rbr_1x1.weight) - if self.rbr_avg is not None: - kernelavg = self._avg_to_3x3_tensor(self.rbr_avg) - kernel = kernel + kernelavg.to(self.rbr_1x1.weight.device) - bias = bias3x3 - - if self.rbr_identity is not None: - input_dim = self.in_channels // self.groups - kernel_value = np.zeros((self.in_channels, input_dim, 3, 3), dtype=np.float32) - for i in range(self.in_channels): - kernel_value[i, i % input_dim, 1, 1] = 1 - id_tensor = torch.from_numpy(kernel_value).to(self.rbr_1x1.weight.device) - kernel = kernel + id_tensor - return kernel, bias - - def _fuse_extra_bn_tensor(self, kernel, bias, branch): - assert isinstance(branch, nn.BatchNorm2d) - running_mean = branch.running_mean - bias # remove bias - running_var = branch.running_var - gamma = branch.weight - beta = branch.bias - eps = branch.eps - std = (running_var + eps).sqrt() - t = (gamma / std).reshape(-1, 1, 1, 1) - return kernel * t, beta - running_mean * gamma / std - - def switch_to_deploy(self): - if hasattr(self, 'rbr_reparam'): - return - kernel, bias = self.get_equivalent_kernel_bias() - self.rbr_reparam = nn.Conv2d(in_channels=self.rbr_dense.conv.in_channels, out_channels=self.rbr_dense.conv.out_channels, - kernel_size=self.rbr_dense.conv.kernel_size, stride=self.rbr_dense.conv.stride, - padding=self.rbr_dense.conv.padding, dilation=self.rbr_dense.conv.dilation, groups=self.rbr_dense.conv.groups, bias=True) - self.rbr_reparam.weight.data = kernel - self.rbr_reparam.bias.data = bias - for para in self.parameters(): - para.detach_() - self.__delattr__('rbr_dense') - self.__delattr__('rbr_1x1') - if hasattr(self, 'rbr_identity'): - self.__delattr__('rbr_identity') - if hasattr(self, 'rbr_avg'): - self.__delattr__('rbr_avg') - if hasattr(self, 'id_tensor'): - self.__delattr__('id_tensor') - # keep post bn for QAT - # if hasattr(self, 'bn'): - # self.__delattr__('bn') - self.deploy = True - - -class RealVGGBlock(nn.Module): - - def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=1, - dilation=1, groups=1, padding_mode='zeros', use_se=False, - ): - super(RealVGGBlock, self).__init__() - self.relu = nn.ReLU() - self.conv = nn.Conv2d(in_channels=in_channels, out_channels=out_channels, kernel_size=kernel_size, stride=stride, padding=padding, bias=False) - self.bn = nn.BatchNorm2d(out_channels) - - if use_se: - raise NotImplementedError("se block not supported yet") - else: - self.se = nn.Identity() - - def forward(self, inputs): - out = self.relu(self.se(self.bn(self.conv(inputs)))) - return out - - -class ScaleLayer(torch.nn.Module): - - def __init__(self, num_features, use_bias=True, scale_init=1.0): - super(ScaleLayer, self).__init__() - self.weight = Parameter(torch.Tensor(num_features)) - init.constant_(self.weight, scale_init) - self.num_features = num_features - if use_bias: - self.bias = Parameter(torch.Tensor(num_features)) - init.zeros_(self.bias) - else: - self.bias = None - - def forward(self, inputs): - if self.bias is None: - return inputs * self.weight.view(1, self.num_features, 1, 1) - else: - return inputs * self.weight.view(1, self.num_features, 1, 1) + self.bias.view(1, self.num_features, 1, 1) - - -# A CSLA block is a LinearAddBlock with is_csla=True -class LinearAddBlock(nn.Module): - - def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=1, - dilation=1, groups=1, padding_mode='zeros', use_se=False, is_csla=False, conv_scale_init=1.0): - super(LinearAddBlock, self).__init__() - self.in_channels = in_channels - self.relu = nn.ReLU() - self.conv = nn.Conv2d(in_channels=in_channels, out_channels=out_channels, kernel_size=kernel_size, stride=stride, padding=padding, bias=False) - self.scale_conv = ScaleLayer(num_features=out_channels, use_bias=False, scale_init=conv_scale_init) - self.conv_1x1 = nn.Conv2d(in_channels=in_channels, out_channels=out_channels, kernel_size=1, stride=stride, padding=0, bias=False) - self.scale_1x1 = ScaleLayer(num_features=out_channels, use_bias=False, scale_init=conv_scale_init) - if in_channels == out_channels and stride == 1: - self.scale_identity = ScaleLayer(num_features=out_channels, use_bias=False, scale_init=1.0) - self.bn = nn.BatchNorm2d(out_channels) - if is_csla: # Make them constant - self.scale_1x1.requires_grad_(False) - self.scale_conv.requires_grad_(False) - if use_se: - raise NotImplementedError("se block not supported yet") - else: - self.se = nn.Identity() - - def forward(self, inputs): - out = self.scale_conv(self.conv(inputs)) + self.scale_1x1(self.conv_1x1(inputs)) - if hasattr(self, 'scale_identity'): - out += self.scale_identity(inputs) - out = self.relu(self.se(self.bn(out))) - return out - - -class DetectBackend(nn.Module): - def __init__(self, weights='yolov6s.pt', device=None, dnn=True): - super().__init__() - if not os.path.exists(weights): - download_ckpt(weights) # try to download model from github automatically. - assert isinstance(weights, str) and Path(weights).suffix == '.pt', f'{Path(weights).suffix} format is not supported.' - from yolov6.utils.checkpoint import load_checkpoint - model = load_checkpoint(weights, map_location=device) - stride = int(model.stride.max()) - self.__dict__.update(locals()) # assign all variables to self - - def forward(self, im, val=False): - y, _ = self.model(im) - if isinstance(y, np.ndarray): - y = torch.tensor(y, device=self.device) - return y - - -class RepBlock(nn.Module): - ''' - RepBlock is a stage block with rep-style basic block - ''' - def __init__(self, in_channels, out_channels, n=1, block=RepVGGBlock, basic_block=RepVGGBlock): - super().__init__() - - self.conv1 = block(in_channels, out_channels) - self.block = nn.Sequential(*(block(out_channels, out_channels) for _ in range(n - 1))) if n > 1 else None - if block == BottleRep: - self.conv1 = BottleRep(in_channels, out_channels, basic_block=basic_block, weight=True) - n = n // 2 - self.block = nn.Sequential(*(BottleRep(out_channels, out_channels, basic_block=basic_block, weight=True) for _ in range(n - 1))) if n > 1 else None - - def forward(self, x): - x = self.conv1(x) - if self.block is not None: - x = self.block(x) - return x - - -class BottleRep(nn.Module): - - def __init__(self, in_channels, out_channels, basic_block=RepVGGBlock, weight=False): - super().__init__() - self.conv1 = basic_block(in_channels, out_channels) - self.conv2 = basic_block(out_channels, out_channels) - if in_channels != out_channels: - self.shortcut = False - else: - self.shortcut = True - if weight: - self.alpha = Parameter(torch.ones(1)) - else: - self.alpha = 1.0 - - def forward(self, x): - outputs = self.conv1(x) - outputs = self.conv2(outputs) - return outputs + self.alpha * x if self.shortcut else outputs - - -class BottleRep3(nn.Module): - - def __init__(self, in_channels, out_channels, basic_block=RepVGGBlock, weight=False): - super().__init__() - self.conv1 = basic_block(in_channels, out_channels) - self.conv2 = basic_block(out_channels, out_channels) - self.conv3 = basic_block(out_channels, out_channels) - if in_channels != out_channels: - self.shortcut = False - else: - self.shortcut = True - if weight: - self.alpha = Parameter(torch.ones(1)) - else: - self.alpha = 1.0 - - def forward(self, x): - outputs = self.conv1(x) - outputs = self.conv2(outputs) - outputs = self.conv3(outputs) - return outputs + self.alpha * x if self.shortcut else outputs - - -class BepC3(nn.Module): - '''CSPStackRep Block''' - def __init__(self, in_channels, out_channels, n=1, e=0.5, block=RepVGGBlock): - super().__init__() - c_ = int(out_channels * e) # hidden channels - self.cv1 = ConvBNReLU(in_channels, c_, 1, 1) - self.cv2 = ConvBNReLU(in_channels, c_, 1, 1) - self.cv3 = ConvBNReLU(2 * c_, out_channels, 1, 1) - if block == ConvBNSiLU: - self.cv1 = ConvBNSiLU(in_channels, c_, 1, 1) - self.cv2 = ConvBNSiLU(in_channels, c_, 1, 1) - self.cv3 = ConvBNSiLU(2 * c_, out_channels, 1, 1) - - self.m = RepBlock(in_channels=c_, out_channels=c_, n=n, block=BottleRep, basic_block=block) - - def forward(self, x): - return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), dim=1)) - - -class MBLABlock(nn.Module): - ''' Multi Branch Layer Aggregation Block''' - def __init__(self, in_channels, out_channels, n=1, e=0.5, block=RepVGGBlock): - super().__init__() - n = n // 2 - if n <= 0: - n = 1 - - # max add one branch - if n == 1: - n_list = [0, 1] - else: - extra_branch_steps = 1 - while extra_branch_steps * 2 < n: - extra_branch_steps *= 2 - n_list = [0, extra_branch_steps, n] - branch_num = len(n_list) - - c_ = int(out_channels * e) # hidden channels - self.c = c_ - self.cv1 = ConvModule(in_channels, branch_num * self.c, 1, 1, 'relu', bias=False) - self.cv2 = ConvModule((sum(n_list) + branch_num) * self.c, out_channels, 1, 1,'relu', bias=False) - - if block == ConvBNSiLU: - self.cv1 = ConvModule(in_channels, branch_num * self.c, 1, 1, 'silu', bias=False) - self.cv2 = ConvModule((sum(n_list) + branch_num) * self.c, out_channels, 1, 1,'silu', bias=False) - - self.m = nn.ModuleList() - for n_list_i in n_list[1:]: - self.m.append(nn.Sequential(*(BottleRep3(self.c, self.c, basic_block=block, weight=True) for _ in range(n_list_i)))) - - self.split_num = tuple([self.c]*branch_num) - - def forward(self, x): - y = list(self.cv1(x).split(self.split_num, 1)) - all_y = [y[0]] - for m_idx, m_i in enumerate(self.m): - all_y.append(y[m_idx+1]) - all_y.extend(m(all_y[-1]) for m in m_i) - return self.cv2(torch.cat(all_y, 1)) - - -class BiFusion(nn.Module): - '''BiFusion Block in PAN''' - def __init__(self, in_channels, out_channels): - super().__init__() - self.cv1 = ConvBNReLU(in_channels[0], out_channels, 1, 1) - self.cv2 = ConvBNReLU(in_channels[1], out_channels, 1, 1) - self.cv3 = ConvBNReLU(out_channels * 3, out_channels, 1, 1) - - self.upsample = Transpose( - in_channels=out_channels, - out_channels=out_channels, - ) - self.downsample = ConvBNReLU( - in_channels=out_channels, - out_channels=out_channels, - kernel_size=3, - stride=2 - ) - - def forward(self, x): - x0 = self.upsample(x[0]) - x1 = self.cv1(x[1]) - x2 = self.downsample(self.cv2(x[2])) - return self.cv3(torch.cat((x0, x1, x2), dim=1)) - - -def get_block(mode): - if mode == 'repvgg': - return RepVGGBlock - elif mode == 'qarepvgg': - return QARepVGGBlock - elif mode == 'qarepvggv2': - return QARepVGGBlockV2 - elif mode == 'hyper_search': - return LinearAddBlock - elif mode == 'repopt': - return RealVGGBlock - elif mode == 'conv_relu': - return ConvBNReLU - elif mode == 'conv_silu': - return ConvBNSiLU - else: - raise NotImplementedError("Undefied Repblock choice for mode {}".format(mode)) - - -class SEBlock(nn.Module): - - def __init__(self, channel, reduction=4): - super().__init__() - self.avg_pool = nn.AdaptiveAvgPool2d(1) - self.conv1 = nn.Conv2d( - in_channels=channel, - out_channels=channel // reduction, - kernel_size=1, - stride=1, - padding=0) - self.relu = nn.ReLU() - self.conv2 = nn.Conv2d( - in_channels=channel // reduction, - out_channels=channel, - kernel_size=1, - stride=1, - padding=0) - self.hardsigmoid = nn.Hardsigmoid() - - def forward(self, x): - identity = x - x = self.avg_pool(x) - x = self.conv1(x) - x = self.relu(x) - x = self.conv2(x) - x = self.hardsigmoid(x) - out = identity * x - return out - - -def channel_shuffle(x, groups): - batchsize, num_channels, height, width = x.data.size() - channels_per_group = num_channels // groups - # reshape - x = x.view(batchsize, groups, channels_per_group, height, width) - x = torch.transpose(x, 1, 2).contiguous() - # flatten - x = x.view(batchsize, -1, height, width) - - return x - - -class Lite_EffiBlockS1(nn.Module): - - def __init__(self, - in_channels, - mid_channels, - out_channels, - stride): - super().__init__() - self.conv_pw_1 = ConvBNHS( - in_channels=in_channels // 2, - out_channels=mid_channels, - kernel_size=1, - stride=1, - padding=0, - groups=1) - self.conv_dw_1 = ConvBN( - in_channels=mid_channels, - out_channels=mid_channels, - kernel_size=3, - stride=stride, - padding=1, - groups=mid_channels) - self.se = SEBlock(mid_channels) - self.conv_1 = ConvBNHS( - in_channels=mid_channels, - out_channels=out_channels // 2, - kernel_size=1, - stride=1, - padding=0, - groups=1) - def forward(self, inputs): - x1, x2 = torch.split( - inputs, - split_size_or_sections=[inputs.shape[1] // 2, inputs.shape[1] // 2], - dim=1) - x2 = self.conv_pw_1(x2) - x3 = self.conv_dw_1(x2) - x3 = self.se(x3) - x3 = self.conv_1(x3) - out = torch.cat([x1, x3], axis=1) - return channel_shuffle(out, 2) - - -class Lite_EffiBlockS2(nn.Module): - - def __init__(self, - in_channels, - mid_channels, - out_channels, - stride): - super().__init__() - # branch1 - self.conv_dw_1 = ConvBN( - in_channels=in_channels, - out_channels=in_channels, - kernel_size=3, - stride=stride, - padding=1, - groups=in_channels) - self.conv_1 = ConvBNHS( - in_channels=in_channels, - out_channels=out_channels // 2, - kernel_size=1, - stride=1, - padding=0, - groups=1) - # branch2 - self.conv_pw_2 = ConvBNHS( - in_channels=in_channels, - out_channels=mid_channels // 2, - kernel_size=1, - stride=1, - padding=0, - groups=1) - self.conv_dw_2 = ConvBN( - in_channels=mid_channels // 2, - out_channels=mid_channels // 2, - kernel_size=3, - stride=stride, - padding=1, - groups=mid_channels // 2) - self.se = SEBlock(mid_channels // 2) - self.conv_2 = ConvBNHS( - in_channels=mid_channels // 2, - out_channels=out_channels // 2, - kernel_size=1, - stride=1, - padding=0, - groups=1) - self.conv_dw_3 = ConvBNHS( - in_channels=out_channels, - out_channels=out_channels, - kernel_size=3, - stride=1, - padding=1, - groups=out_channels) - self.conv_pw_3 = ConvBNHS( - in_channels=out_channels, - out_channels=out_channels, - kernel_size=1, - stride=1, - padding=0, - groups=1) - - def forward(self, inputs): - x1 = self.conv_dw_1(inputs) - x1 = self.conv_1(x1) - x2 = self.conv_pw_2(inputs) - x2 = self.conv_dw_2(x2) - x2 = self.se(x2) - x2 = self.conv_2(x2) - out = torch.cat([x1, x2], axis=1) - out = self.conv_dw_3(out) - out = self.conv_pw_3(out) - return out - - -class DPBlock(nn.Module): - - def __init__(self, - in_channel=96, - out_channel=96, - kernel_size=3, - stride=1): - super().__init__() - self.conv_dw_1 = nn.Conv2d( - in_channels=in_channel, - out_channels=out_channel, - kernel_size=kernel_size, - groups=out_channel, - padding=(kernel_size - 1) // 2, - stride=stride) - self.bn_1 = nn.BatchNorm2d(out_channel) - self.act_1 = nn.Hardswish() - self.conv_pw_1 = nn.Conv2d( - in_channels=out_channel, - out_channels=out_channel, - kernel_size=1, - groups=1, - padding=0) - self.bn_2 = nn.BatchNorm2d(out_channel) - self.act_2 = nn.Hardswish() - - def forward(self, x): - x = self.act_1(self.bn_1(self.conv_dw_1(x))) - x = self.act_2(self.bn_2(self.conv_pw_1(x))) - return x - - def forward_fuse(self, x): - x = self.act_1(self.conv_dw_1(x)) - x = self.act_2(self.conv_pw_1(x)) - return x - - -class DarknetBlock(nn.Module): - - def __init__(self, - in_channels, - out_channels, - kernel_size=3, - expansion=0.5): - super().__init__() - hidden_channels = int(out_channels * expansion) - self.conv_1 = ConvBNHS( - in_channels=in_channels, - out_channels=hidden_channels, - kernel_size=1, - stride=1, - padding=0) - self.conv_2 = DPBlock( - in_channel=hidden_channels, - out_channel=out_channels, - kernel_size=kernel_size, - stride=1) - - def forward(self, x): - out = self.conv_1(x) - out = self.conv_2(out) - return out - - -class CSPBlock(nn.Module): - - def __init__(self, - in_channels, - out_channels, - kernel_size=3, - expand_ratio=0.5): - super().__init__() - mid_channels = int(out_channels * expand_ratio) - self.conv_1 = ConvBNHS(in_channels, mid_channels, 1, 1, 0) - self.conv_2 = ConvBNHS(in_channels, mid_channels, 1, 1, 0) - self.conv_3 = ConvBNHS(2 * mid_channels, out_channels, 1, 1, 0) - self.blocks = DarknetBlock(mid_channels, - mid_channels, - kernel_size, - 1.0) - def forward(self, x): - x_1 = self.conv_1(x) - x_1 = self.blocks(x_1) - x_2 = self.conv_2(x) - x = torch.cat((x_1, x_2), axis=1) - x = self.conv_3(x) - return x diff --git a/cv/detection/yolov6/pytorch/yolov6/layers/dbb_transforms.py b/cv/detection/yolov6/pytorch/yolov6/layers/dbb_transforms.py deleted file mode 100644 index cd93d0e23..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/layers/dbb_transforms.py +++ /dev/null @@ -1,50 +0,0 @@ -import torch -import numpy as np -import torch.nn.functional as F - - -def transI_fusebn(kernel, bn): - gamma = bn.weight - std = (bn.running_var + bn.eps).sqrt() - return kernel * ((gamma / std).reshape(-1, 1, 1, 1)), bn.bias - bn.running_mean * gamma / std - - -def transII_addbranch(kernels, biases): - return sum(kernels), sum(biases) - - -def transIII_1x1_kxk(k1, b1, k2, b2, groups): - if groups == 1: - k = F.conv2d(k2, k1.permute(1, 0, 2, 3)) # - b_hat = (k2 * b1.reshape(1, -1, 1, 1)).sum((1, 2, 3)) - else: - k_slices = [] - b_slices = [] - k1_T = k1.permute(1, 0, 2, 3) - k1_group_width = k1.size(0) // groups - k2_group_width = k2.size(0) // groups - for g in range(groups): - k1_T_slice = k1_T[:, g*k1_group_width:(g+1)*k1_group_width, :, :] - k2_slice = k2[g*k2_group_width:(g+1)*k2_group_width, :, :, :] - k_slices.append(F.conv2d(k2_slice, k1_T_slice)) - b_slices.append((k2_slice * b1[g * k1_group_width:(g+1) * k1_group_width].reshape(1, -1, 1, 1)).sum((1, 2, 3))) - k, b_hat = transIV_depthconcat(k_slices, b_slices) - return k, b_hat + b2 - - -def transIV_depthconcat(kernels, biases): - return torch.cat(kernels, dim=0), torch.cat(biases) - - -def transV_avg(channels, kernel_size, groups): - input_dim = channels // groups - k = torch.zeros((channels, input_dim, kernel_size, kernel_size)) - k[np.arange(channels), np.tile(np.arange(input_dim), groups), :, :] = 1.0 / kernel_size ** 2 - return k - - -# This has not been tested with non-square kernels (kernel.size(2) != kernel.size(3)) nor even-size kernels -def transVI_multiscale(kernel, target_kernel_size): - H_pixels_to_pad = (target_kernel_size - kernel.size(2)) // 2 - W_pixels_to_pad = (target_kernel_size - kernel.size(3)) // 2 - return F.pad(kernel, [H_pixels_to_pad, H_pixels_to_pad, W_pixels_to_pad, W_pixels_to_pad]) diff --git a/cv/detection/yolov6/pytorch/yolov6/models/efficientrep.py b/cv/detection/yolov6/pytorch/yolov6/models/efficientrep.py deleted file mode 100644 index 5d0de7cea..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/models/efficientrep.py +++ /dev/null @@ -1,582 +0,0 @@ -from pickle import FALSE -from torch import nn -from yolov6.layers.common import BottleRep, RepVGGBlock, RepBlock, BepC3, SimSPPF, SPPF, SimCSPSPPF, CSPSPPF, ConvBNSiLU, \ - MBLABlock, ConvBNHS, Lite_EffiBlockS2, Lite_EffiBlockS1 - - -class EfficientRep(nn.Module): - '''EfficientRep Backbone - EfficientRep is handcrafted by hardware-aware neural network design. - With rep-style struct, EfficientRep is friendly to high-computation hardware(e.g. GPU). - ''' - - def __init__( - self, - in_channels=3, - channels_list=None, - num_repeats=None, - block=RepVGGBlock, - fuse_P2=False, - cspsppf=False - ): - super().__init__() - - assert channels_list is not None - assert num_repeats is not None - self.fuse_P2 = fuse_P2 - - self.stem = block( - in_channels=in_channels, - out_channels=channels_list[0], - kernel_size=3, - stride=2 - ) - - self.ERBlock_2 = nn.Sequential( - block( - in_channels=channels_list[0], - out_channels=channels_list[1], - kernel_size=3, - stride=2 - ), - RepBlock( - in_channels=channels_list[1], - out_channels=channels_list[1], - n=num_repeats[1], - block=block, - ) - ) - - self.ERBlock_3 = nn.Sequential( - block( - in_channels=channels_list[1], - out_channels=channels_list[2], - kernel_size=3, - stride=2 - ), - RepBlock( - in_channels=channels_list[2], - out_channels=channels_list[2], - n=num_repeats[2], - block=block, - ) - ) - - self.ERBlock_4 = nn.Sequential( - block( - in_channels=channels_list[2], - out_channels=channels_list[3], - kernel_size=3, - stride=2 - ), - RepBlock( - in_channels=channels_list[3], - out_channels=channels_list[3], - n=num_repeats[3], - block=block, - ) - ) - - channel_merge_layer = SPPF if block == ConvBNSiLU else SimSPPF - if cspsppf: - channel_merge_layer = CSPSPPF if block == ConvBNSiLU else SimCSPSPPF - - self.ERBlock_5 = nn.Sequential( - block( - in_channels=channels_list[3], - out_channels=channels_list[4], - kernel_size=3, - stride=2, - ), - RepBlock( - in_channels=channels_list[4], - out_channels=channels_list[4], - n=num_repeats[4], - block=block, - ), - channel_merge_layer( - in_channels=channels_list[4], - out_channels=channels_list[4], - kernel_size=5 - ) - ) - - def forward(self, x): - - outputs = [] - x = self.stem(x) - x = self.ERBlock_2(x) - if self.fuse_P2: - outputs.append(x) - x = self.ERBlock_3(x) - outputs.append(x) - x = self.ERBlock_4(x) - outputs.append(x) - x = self.ERBlock_5(x) - outputs.append(x) - - return tuple(outputs) - - -class EfficientRep6(nn.Module): - '''EfficientRep+P6 Backbone - EfficientRep is handcrafted by hardware-aware neural network design. - With rep-style struct, EfficientRep is friendly to high-computation hardware(e.g. GPU). - ''' - - def __init__( - self, - in_channels=3, - channels_list=None, - num_repeats=None, - block=RepVGGBlock, - fuse_P2=False, - cspsppf=False - ): - super().__init__() - - assert channels_list is not None - assert num_repeats is not None - self.fuse_P2 = fuse_P2 - - self.stem = block( - in_channels=in_channels, - out_channels=channels_list[0], - kernel_size=3, - stride=2 - ) - - self.ERBlock_2 = nn.Sequential( - block( - in_channels=channels_list[0], - out_channels=channels_list[1], - kernel_size=3, - stride=2 - ), - RepBlock( - in_channels=channels_list[1], - out_channels=channels_list[1], - n=num_repeats[1], - block=block, - ) - ) - - self.ERBlock_3 = nn.Sequential( - block( - in_channels=channels_list[1], - out_channels=channels_list[2], - kernel_size=3, - stride=2 - ), - RepBlock( - in_channels=channels_list[2], - out_channels=channels_list[2], - n=num_repeats[2], - block=block, - ) - ) - - self.ERBlock_4 = nn.Sequential( - block( - in_channels=channels_list[2], - out_channels=channels_list[3], - kernel_size=3, - stride=2 - ), - RepBlock( - in_channels=channels_list[3], - out_channels=channels_list[3], - n=num_repeats[3], - block=block, - ) - ) - - self.ERBlock_5 = nn.Sequential( - block( - in_channels=channels_list[3], - out_channels=channels_list[4], - kernel_size=3, - stride=2, - ), - RepBlock( - in_channels=channels_list[4], - out_channels=channels_list[4], - n=num_repeats[4], - block=block, - ) - ) - - channel_merge_layer = SimSPPF if not cspsppf else SimCSPSPPF - - self.ERBlock_6 = nn.Sequential( - block( - in_channels=channels_list[4], - out_channels=channels_list[5], - kernel_size=3, - stride=2, - ), - RepBlock( - in_channels=channels_list[5], - out_channels=channels_list[5], - n=num_repeats[5], - block=block, - ), - channel_merge_layer( - in_channels=channels_list[5], - out_channels=channels_list[5], - kernel_size=5 - ) - ) - - def forward(self, x): - - outputs = [] - x = self.stem(x) - x = self.ERBlock_2(x) - if self.fuse_P2: - outputs.append(x) - x = self.ERBlock_3(x) - outputs.append(x) - x = self.ERBlock_4(x) - outputs.append(x) - x = self.ERBlock_5(x) - outputs.append(x) - x = self.ERBlock_6(x) - outputs.append(x) - - return tuple(outputs) - - -class CSPBepBackbone(nn.Module): - """ - CSPBepBackbone module. - """ - - def __init__( - self, - in_channels=3, - channels_list=None, - num_repeats=None, - block=RepVGGBlock, - csp_e=float(1)/2, - fuse_P2=False, - cspsppf=False, - stage_block_type="BepC3" - ): - super().__init__() - - assert channels_list is not None - assert num_repeats is not None - - if stage_block_type == "BepC3": - stage_block = BepC3 - elif stage_block_type == "MBLABlock": - stage_block = MBLABlock - else: - raise NotImplementedError - - self.fuse_P2 = fuse_P2 - - self.stem = block( - in_channels=in_channels, - out_channels=channels_list[0], - kernel_size=3, - stride=2 - ) - - self.ERBlock_2 = nn.Sequential( - block( - in_channels=channels_list[0], - out_channels=channels_list[1], - kernel_size=3, - stride=2 - ), - stage_block( - in_channels=channels_list[1], - out_channels=channels_list[1], - n=num_repeats[1], - e=csp_e, - block=block, - ) - ) - - self.ERBlock_3 = nn.Sequential( - block( - in_channels=channels_list[1], - out_channels=channels_list[2], - kernel_size=3, - stride=2 - ), - stage_block( - in_channels=channels_list[2], - out_channels=channels_list[2], - n=num_repeats[2], - e=csp_e, - block=block, - ) - ) - - self.ERBlock_4 = nn.Sequential( - block( - in_channels=channels_list[2], - out_channels=channels_list[3], - kernel_size=3, - stride=2 - ), - stage_block( - in_channels=channels_list[3], - out_channels=channels_list[3], - n=num_repeats[3], - e=csp_e, - block=block, - ) - ) - - channel_merge_layer = SPPF if block == ConvBNSiLU else SimSPPF - if cspsppf: - channel_merge_layer = CSPSPPF if block == ConvBNSiLU else SimCSPSPPF - - self.ERBlock_5 = nn.Sequential( - block( - in_channels=channels_list[3], - out_channels=channels_list[4], - kernel_size=3, - stride=2, - ), - stage_block( - in_channels=channels_list[4], - out_channels=channels_list[4], - n=num_repeats[4], - e=csp_e, - block=block, - ), - channel_merge_layer( - in_channels=channels_list[4], - out_channels=channels_list[4], - kernel_size=5 - ) - ) - - def forward(self, x): - - outputs = [] - x = self.stem(x) - x = self.ERBlock_2(x) - if self.fuse_P2: - outputs.append(x) - x = self.ERBlock_3(x) - outputs.append(x) - x = self.ERBlock_4(x) - outputs.append(x) - x = self.ERBlock_5(x) - outputs.append(x) - - return tuple(outputs) - - -class CSPBepBackbone_P6(nn.Module): - """ - CSPBepBackbone+P6 module. - """ - - def __init__( - self, - in_channels=3, - channels_list=None, - num_repeats=None, - block=RepVGGBlock, - csp_e=float(1)/2, - fuse_P2=False, - cspsppf=False, - stage_block_type="BepC3" - ): - super().__init__() - assert channels_list is not None - assert num_repeats is not None - - if stage_block_type == "BepC3": - stage_block = BepC3 - elif stage_block_type == "MBLABlock": - stage_block = MBLABlock - else: - raise NotImplementedError - - self.fuse_P2 = fuse_P2 - - self.stem = block( - in_channels=in_channels, - out_channels=channels_list[0], - kernel_size=3, - stride=2 - ) - - self.ERBlock_2 = nn.Sequential( - block( - in_channels=channels_list[0], - out_channels=channels_list[1], - kernel_size=3, - stride=2 - ), - stage_block( - in_channels=channels_list[1], - out_channels=channels_list[1], - n=num_repeats[1], - e=csp_e, - block=block, - ) - ) - - self.ERBlock_3 = nn.Sequential( - block( - in_channels=channels_list[1], - out_channels=channels_list[2], - kernel_size=3, - stride=2 - ), - stage_block( - in_channels=channels_list[2], - out_channels=channels_list[2], - n=num_repeats[2], - e=csp_e, - block=block, - ) - ) - - self.ERBlock_4 = nn.Sequential( - block( - in_channels=channels_list[2], - out_channels=channels_list[3], - kernel_size=3, - stride=2 - ), - stage_block( - in_channels=channels_list[3], - out_channels=channels_list[3], - n=num_repeats[3], - e=csp_e, - block=block, - ) - ) - - channel_merge_layer = SPPF if block == ConvBNSiLU else SimSPPF - if cspsppf: - channel_merge_layer = CSPSPPF if block == ConvBNSiLU else SimCSPSPPF - - self.ERBlock_5 = nn.Sequential( - block( - in_channels=channels_list[3], - out_channels=channels_list[4], - kernel_size=3, - stride=2, - ), - stage_block( - in_channels=channels_list[4], - out_channels=channels_list[4], - n=num_repeats[4], - e=csp_e, - block=block, - ), - ) - self.ERBlock_6 = nn.Sequential( - block( - in_channels=channels_list[4], - out_channels=channels_list[5], - kernel_size=3, - stride=2, - ), - stage_block( - in_channels=channels_list[5], - out_channels=channels_list[5], - n=num_repeats[5], - e=csp_e, - block=block, - ), - channel_merge_layer( - in_channels=channels_list[5], - out_channels=channels_list[5], - kernel_size=5 - ) - ) - - def forward(self, x): - - outputs = [] - x = self.stem(x) - x = self.ERBlock_2(x) - outputs.append(x) - x = self.ERBlock_3(x) - outputs.append(x) - x = self.ERBlock_4(x) - outputs.append(x) - x = self.ERBlock_5(x) - outputs.append(x) - x = self.ERBlock_6(x) - outputs.append(x) - - return tuple(outputs) - -class Lite_EffiBackbone(nn.Module): - def __init__(self, - in_channels, - mid_channels, - out_channels, - num_repeat=[1, 3, 7, 3] - ): - super().__init__() - out_channels[0]=24 - self.conv_0 = ConvBNHS(in_channels=in_channels, - out_channels=out_channels[0], - kernel_size=3, - stride=2, - padding=1) - - self.lite_effiblock_1 = self.build_block(num_repeat[0], - out_channels[0], - mid_channels[1], - out_channels[1]) - - self.lite_effiblock_2 = self.build_block(num_repeat[1], - out_channels[1], - mid_channels[2], - out_channels[2]) - - self.lite_effiblock_3 = self.build_block(num_repeat[2], - out_channels[2], - mid_channels[3], - out_channels[3]) - - self.lite_effiblock_4 = self.build_block(num_repeat[3], - out_channels[3], - mid_channels[4], - out_channels[4]) - - def forward(self, x): - outputs = [] - x = self.conv_0(x) - x = self.lite_effiblock_1(x) - x = self.lite_effiblock_2(x) - outputs.append(x) - x = self.lite_effiblock_3(x) - outputs.append(x) - x = self.lite_effiblock_4(x) - outputs.append(x) - return tuple(outputs) - - @staticmethod - def build_block(num_repeat, in_channels, mid_channels, out_channels): - block_list = nn.Sequential() - for i in range(num_repeat): - if i == 0: - block = Lite_EffiBlockS2( - in_channels=in_channels, - mid_channels=mid_channels, - out_channels=out_channels, - stride=2) - else: - block = Lite_EffiBlockS1( - in_channels=out_channels, - mid_channels=mid_channels, - out_channels=out_channels, - stride=1) - block_list.add_module(str(i), block) - return block_list diff --git a/cv/detection/yolov6/pytorch/yolov6/models/effidehead.py b/cv/detection/yolov6/pytorch/yolov6/models/effidehead.py deleted file mode 100644 index 55b7b0697..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/models/effidehead.py +++ /dev/null @@ -1,293 +0,0 @@ -import torch -import torch.nn as nn -import torch.nn.functional as F -import math -from yolov6.layers.common import * -from yolov6.assigners.anchor_generator import generate_anchors -from yolov6.utils.general import dist2bbox - - -class Detect(nn.Module): - export = False - '''Efficient Decoupled Head - With hardware-aware degisn, the decoupled head is optimized with - hybridchannels methods. - ''' - def __init__(self, num_classes=80, num_layers=3, inplace=True, head_layers=None, use_dfl=True, reg_max=16): # detection layer - super().__init__() - assert head_layers is not None - self.nc = num_classes # number of classes - self.no = num_classes + 5 # number of outputs per anchor - self.nl = num_layers # number of detection layers - self.grid = [torch.zeros(1)] * num_layers - self.prior_prob = 1e-2 - self.inplace = inplace - stride = [8, 16, 32] if num_layers == 3 else [8, 16, 32, 64] # strides computed during build - self.stride = torch.tensor(stride) - self.use_dfl = use_dfl - self.reg_max = reg_max - self.proj_conv = nn.Conv2d(self.reg_max + 1, 1, 1, bias=False) - self.grid_cell_offset = 0.5 - self.grid_cell_size = 5.0 - - # Init decouple head - self.stems = nn.ModuleList() - self.cls_convs = nn.ModuleList() - self.reg_convs = nn.ModuleList() - self.cls_preds = nn.ModuleList() - self.reg_preds = nn.ModuleList() - - # Efficient decoupled head layers - for i in range(num_layers): - idx = i*5 - self.stems.append(head_layers[idx]) - self.cls_convs.append(head_layers[idx+1]) - self.reg_convs.append(head_layers[idx+2]) - self.cls_preds.append(head_layers[idx+3]) - self.reg_preds.append(head_layers[idx+4]) - - def initialize_biases(self): - - for conv in self.cls_preds: - b = conv.bias.view(-1, ) - b.data.fill_(-math.log((1 - self.prior_prob) / self.prior_prob)) - conv.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) - w = conv.weight - w.data.fill_(0.) - conv.weight = torch.nn.Parameter(w, requires_grad=True) - - for conv in self.reg_preds: - b = conv.bias.view(-1, ) - b.data.fill_(1.0) - conv.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) - w = conv.weight - w.data.fill_(0.) - conv.weight = torch.nn.Parameter(w, requires_grad=True) - - self.proj = nn.Parameter(torch.linspace(0, self.reg_max, self.reg_max + 1), requires_grad=False) - self.proj_conv.weight = nn.Parameter(self.proj.view([1, self.reg_max + 1, 1, 1]).clone().detach(), - requires_grad=False) - - def forward(self, x): - if self.training: - cls_score_list = [] - reg_distri_list = [] - - for i in range(self.nl): - x[i] = self.stems[i](x[i]) - cls_x = x[i] - reg_x = x[i] - cls_feat = self.cls_convs[i](cls_x) - cls_output = self.cls_preds[i](cls_feat) - reg_feat = self.reg_convs[i](reg_x) - reg_output = self.reg_preds[i](reg_feat) - - cls_output = torch.sigmoid(cls_output) - cls_score_list.append(cls_output.flatten(2).permute((0, 2, 1))) - reg_distri_list.append(reg_output.flatten(2).permute((0, 2, 1))) - - cls_score_list = torch.cat(cls_score_list, axis=1) - reg_distri_list = torch.cat(reg_distri_list, axis=1) - - return x, cls_score_list, reg_distri_list - else: - cls_score_list = [] - reg_dist_list = [] - - for i in range(self.nl): - b, _, h, w = x[i].shape - l = h * w - x[i] = self.stems[i](x[i]) - cls_x = x[i] - reg_x = x[i] - cls_feat = self.cls_convs[i](cls_x) - cls_output = self.cls_preds[i](cls_feat) - reg_feat = self.reg_convs[i](reg_x) - reg_output = self.reg_preds[i](reg_feat) - - if self.use_dfl: - reg_output = reg_output.reshape([-1, 4, self.reg_max + 1, l]).permute(0, 2, 1, 3) - reg_output = self.proj_conv(F.softmax(reg_output, dim=1)) - - cls_output = torch.sigmoid(cls_output) - - if self.export: - cls_score_list.append(cls_output) - reg_dist_list.append(reg_output) - else: - cls_score_list.append(cls_output.reshape([b, self.nc, l])) - reg_dist_list.append(reg_output.reshape([b, 4, l])) - - if self.export: - return tuple(torch.cat([cls, reg], 1) for cls, reg in zip(cls_score_list, reg_dist_list)) - - cls_score_list = torch.cat(cls_score_list, axis=-1).permute(0, 2, 1) - reg_dist_list = torch.cat(reg_dist_list, axis=-1).permute(0, 2, 1) - - - anchor_points, stride_tensor = generate_anchors( - x, self.stride, self.grid_cell_size, self.grid_cell_offset, device=x[0].device, is_eval=True, mode='af') - - pred_bboxes = dist2bbox(reg_dist_list, anchor_points, box_format='xywh') - pred_bboxes *= stride_tensor - return torch.cat( - [ - pred_bboxes, - torch.ones((b, pred_bboxes.shape[1], 1), device=pred_bboxes.device, dtype=pred_bboxes.dtype), - cls_score_list - ], - axis=-1) - - -def build_effidehead_layer(channels_list, num_anchors, num_classes, reg_max=16, num_layers=3): - - chx = [6, 8, 10] if num_layers == 3 else [8, 9, 10, 11] - - head_layers = nn.Sequential( - # stem0 - ConvBNSiLU( - in_channels=channels_list[chx[0]], - out_channels=channels_list[chx[0]], - kernel_size=1, - stride=1 - ), - # cls_conv0 - ConvBNSiLU( - in_channels=channels_list[chx[0]], - out_channels=channels_list[chx[0]], - kernel_size=3, - stride=1 - ), - # reg_conv0 - ConvBNSiLU( - in_channels=channels_list[chx[0]], - out_channels=channels_list[chx[0]], - kernel_size=3, - stride=1 - ), - # cls_pred0 - nn.Conv2d( - in_channels=channels_list[chx[0]], - out_channels=num_classes * num_anchors, - kernel_size=1 - ), - # reg_pred0 - nn.Conv2d( - in_channels=channels_list[chx[0]], - out_channels=4 * (reg_max + num_anchors), - kernel_size=1 - ), - # stem1 - ConvBNSiLU( - in_channels=channels_list[chx[1]], - out_channels=channels_list[chx[1]], - kernel_size=1, - stride=1 - ), - # cls_conv1 - ConvBNSiLU( - in_channels=channels_list[chx[1]], - out_channels=channels_list[chx[1]], - kernel_size=3, - stride=1 - ), - # reg_conv1 - ConvBNSiLU( - in_channels=channels_list[chx[1]], - out_channels=channels_list[chx[1]], - kernel_size=3, - stride=1 - ), - # cls_pred1 - nn.Conv2d( - in_channels=channels_list[chx[1]], - out_channels=num_classes * num_anchors, - kernel_size=1 - ), - # reg_pred1 - nn.Conv2d( - in_channels=channels_list[chx[1]], - out_channels=4 * (reg_max + num_anchors), - kernel_size=1 - ), - # stem2 - ConvBNSiLU( - in_channels=channels_list[chx[2]], - out_channels=channels_list[chx[2]], - kernel_size=1, - stride=1 - ), - # cls_conv2 - ConvBNSiLU( - in_channels=channels_list[chx[2]], - out_channels=channels_list[chx[2]], - kernel_size=3, - stride=1 - ), - # reg_conv2 - ConvBNSiLU( - in_channels=channels_list[chx[2]], - out_channels=channels_list[chx[2]], - kernel_size=3, - stride=1 - ), - # cls_pred2 - nn.Conv2d( - in_channels=channels_list[chx[2]], - out_channels=num_classes * num_anchors, - kernel_size=1 - ), - # reg_pred2 - nn.Conv2d( - in_channels=channels_list[chx[2]], - out_channels=4 * (reg_max + num_anchors), - kernel_size=1 - ) - ) - - if num_layers == 4: - head_layers.add_module('stem3', - # stem3 - ConvBNSiLU( - in_channels=channels_list[chx[3]], - out_channels=channels_list[chx[3]], - kernel_size=1, - stride=1 - ) - ) - head_layers.add_module('cls_conv3', - # cls_conv3 - ConvBNSiLU( - in_channels=channels_list[chx[3]], - out_channels=channels_list[chx[3]], - kernel_size=3, - stride=1 - ) - ) - head_layers.add_module('reg_conv3', - # reg_conv3 - ConvBNSiLU( - in_channels=channels_list[chx[3]], - out_channels=channels_list[chx[3]], - kernel_size=3, - stride=1 - ) - ) - head_layers.add_module('cls_pred3', - # cls_pred3 - nn.Conv2d( - in_channels=channels_list[chx[3]], - out_channels=num_classes * num_anchors, - kernel_size=1 - ) - ) - head_layers.add_module('reg_pred3', - # reg_pred3 - nn.Conv2d( - in_channels=channels_list[chx[3]], - out_channels=4 * (reg_max + num_anchors), - kernel_size=1 - ) - ) - - return head_layers diff --git a/cv/detection/yolov6/pytorch/yolov6/models/end2end.py b/cv/detection/yolov6/pytorch/yolov6/models/end2end.py deleted file mode 100644 index c1f102ba6..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/models/end2end.py +++ /dev/null @@ -1,282 +0,0 @@ -import torch -import torch.nn as nn -import random - - -class ORT_NMS(torch.autograd.Function): - '''ONNX-Runtime NMS operation''' - @staticmethod - def forward(ctx, - boxes, - scores, - max_output_boxes_per_class=torch.tensor([100]), - iou_threshold=torch.tensor([0.45]), - score_threshold=torch.tensor([0.25])): - device = boxes.device - batch = scores.shape[0] - num_det = random.randint(0, 100) - batches = torch.randint(0, batch, (num_det,)).sort()[0].to(device) - idxs = torch.arange(100, 100 + num_det).to(device) - zeros = torch.zeros((num_det,), dtype=torch.int64).to(device) - selected_indices = torch.cat([batches[None], zeros[None], idxs[None]], 0).T.contiguous() - selected_indices = selected_indices.to(torch.int64) - return selected_indices - - @staticmethod - def symbolic(g, boxes, scores, max_output_boxes_per_class, iou_threshold, score_threshold): - return g.op("NonMaxSuppression", boxes, scores, max_output_boxes_per_class, iou_threshold, score_threshold) - - -class TRT8_NMS(torch.autograd.Function): - '''TensorRT NMS operation''' - @staticmethod - def forward( - ctx, - boxes, - scores, - background_class=-1, - box_coding=1, - iou_threshold=0.45, - max_output_boxes=100, - plugin_version="1", - score_activation=0, - score_threshold=0.25, - ): - batch_size, num_boxes, num_classes = scores.shape - num_det = torch.randint(0, max_output_boxes, (batch_size, 1), dtype=torch.int32) - det_boxes = torch.randn(batch_size, max_output_boxes, 4) - det_scores = torch.randn(batch_size, max_output_boxes) - det_classes = torch.randint(0, num_classes, (batch_size, max_output_boxes), dtype=torch.int32) - return num_det, det_boxes, det_scores, det_classes - - @staticmethod - def symbolic(g, - boxes, - scores, - background_class=-1, - box_coding=1, - iou_threshold=0.45, - max_output_boxes=100, - plugin_version="1", - score_activation=0, - score_threshold=0.25): - out = g.op("TRT::EfficientNMS_TRT", - boxes, - scores, - background_class_i=background_class, - box_coding_i=box_coding, - iou_threshold_f=iou_threshold, - max_output_boxes_i=max_output_boxes, - plugin_version_s=plugin_version, - score_activation_i=score_activation, - score_threshold_f=score_threshold, - outputs=4) - nums, boxes, scores, classes = out - return nums, boxes, scores, classes - -class TRT7_NMS(torch.autograd.Function): - '''TensorRT NMS operation''' - @staticmethod - def forward( - ctx, - boxes, - scores, - plugin_version="1", - shareLocation=1, - backgroundLabelId=-1, - numClasses=80, - topK=1000, - keepTopK=100, - scoreThreshold=0.25, - iouThreshold=0.45, - isNormalized=0, - clipBoxes=0, - scoreBits=16, - caffeSemantics=1, - ): - batch_size, num_boxes, numClasses = scores.shape - num_det = torch.randint(0, keepTopK, (batch_size, 1), dtype=torch.int32) - det_boxes = torch.randn(batch_size, keepTopK, 4) - det_scores = torch.randn(batch_size, keepTopK) - det_classes = torch.randint(0, numClasses, (batch_size, keepTopK)).float() - return num_det, det_boxes, det_scores, det_classes - @staticmethod - def symbolic(g, - boxes, - scores, - plugin_version='1', - shareLocation=1, - backgroundLabelId=-1, - numClasses=80, - topK=1000, - keepTopK=100, - scoreThreshold=0.25, - iouThreshold=0.45, - isNormalized=0, - clipBoxes=0, - scoreBits=16, - caffeSemantics=1, - ): - out = g.op("TRT::BatchedNMSDynamic_TRT", # BatchedNMS_TRT BatchedNMSDynamic_TRT - boxes, - scores, - shareLocation_i=shareLocation, - plugin_version_s=plugin_version, - backgroundLabelId_i=backgroundLabelId, - numClasses_i=numClasses, - topK_i=topK, - keepTopK_i=keepTopK, - scoreThreshold_f=scoreThreshold, - iouThreshold_f=iouThreshold, - isNormalized_i=isNormalized, - clipBoxes_i=clipBoxes, - scoreBits_i=scoreBits, - caffeSemantics_i=caffeSemantics, - outputs=4) - nums, boxes, scores, classes = out - return nums, boxes, scores, classes - - -class ONNX_ORT(nn.Module): - '''onnx module with ONNX-Runtime NMS operation.''' - def __init__(self, max_obj=100, iou_thres=0.45, score_thres=0.25, device=None): - super().__init__() - self.device = device if device else torch.device("cpu") - self.max_obj = torch.tensor([max_obj]).to(device) - self.iou_threshold = torch.tensor([iou_thres]).to(device) - self.score_threshold = torch.tensor([score_thres]).to(device) - self.convert_matrix = torch.tensor([[1, 0, 1, 0], [0, 1, 0, 1], [-0.5, 0, 0.5, 0], [0, -0.5, 0, 0.5]], - dtype=torch.float32, - device=self.device) - - def forward(self, x): - batch, anchors, _ = x.shape - box = x[:, :, :4] - conf = x[:, :, 4:5] - score = x[:, :, 5:] - score *= conf - - nms_box = box @ self.convert_matrix - nms_score = score.transpose(1, 2).contiguous() - - selected_indices = ORT_NMS.apply(nms_box, nms_score, self.max_obj, self.iou_threshold, self.score_threshold) - batch_inds, cls_inds, box_inds = selected_indices.unbind(1) - selected_score = nms_score[batch_inds, cls_inds, box_inds].unsqueeze(1) - selected_box = nms_box[batch_inds, box_inds, ...] - - dets = torch.cat([selected_box, selected_score], dim=1) - - batched_dets = dets.unsqueeze(0).repeat(batch, 1, 1) - batch_template = torch.arange(0, batch, dtype=batch_inds.dtype, device=batch_inds.device) - batched_dets = batched_dets.where((batch_inds == batch_template.unsqueeze(1)).unsqueeze(-1),batched_dets.new_zeros(1)) - - batched_labels = cls_inds.unsqueeze(0).repeat(batch, 1) - batched_labels = batched_labels.where((batch_inds == batch_template.unsqueeze(1)),batched_labels.new_ones(1) * -1) - - N = batched_dets.shape[0] - - batched_dets = torch.cat((batched_dets, batched_dets.new_zeros((N, 1, 5))), 1) - batched_labels = torch.cat((batched_labels, -batched_labels.new_ones((N, 1))), 1) - - _, topk_inds = batched_dets[:, :, -1].sort(dim=1, descending=True) - - topk_batch_inds = torch.arange(batch, dtype=topk_inds.dtype, device=topk_inds.device).view(-1, 1) - batched_dets = batched_dets[topk_batch_inds, topk_inds, ...] - det_classes = batched_labels[topk_batch_inds, topk_inds, ...] - det_boxes, det_scores = batched_dets.split((4, 1), -1) - det_scores = det_scores.squeeze(-1) - num_det = (det_scores > 0).sum(1, keepdim=True) - return num_det, det_boxes, det_scores, det_classes - -class ONNX_TRT7(nn.Module): - '''onnx module with TensorRT NMS operation.''' - def __init__(self, max_obj=100, iou_thres=0.45, score_thres=0.25, device=None): - super().__init__() - self.device = device if device else torch.device('cpu') - self.shareLocation = 1 - self.backgroundLabelId = -1 - self.numClasses = 80 - self.topK = 1000 - self.keepTopK = max_obj - self.scoreThreshold = score_thres - self.iouThreshold = iou_thres - self.isNormalized = 0 - self.clipBoxes = 0 - self.scoreBits = 16 - self.caffeSemantics = 1 - self.plugin_version = '1' - self.convert_matrix = torch.tensor([[1, 0, 1, 0], [0, 1, 0, 1], [-0.5, 0, 0.5, 0], [0, -0.5, 0, 0.5]], - dtype=torch.float32, - device=self.device) - def forward(self, x): - box = x[:, :, :4] - conf = x[:, :, 4:5] - score = x[:, :, 5:] - score *= conf - box @= self.convert_matrix - box = box.unsqueeze(2) - self.numClasses = int(score.shape[2]) - num_det, det_boxes, det_scores, det_classes = TRT7_NMS.apply(box, score, self.plugin_version, - self.shareLocation, - self.backgroundLabelId, - self.numClasses, - self.topK, - self.keepTopK, - self.scoreThreshold, - self.iouThreshold, - self.isNormalized, - self.clipBoxes, - self.scoreBits, - self.caffeSemantics, - ) - return num_det, det_boxes, det_scores, det_classes.int() - - -class ONNX_TRT8(nn.Module): - '''onnx module with TensorRT NMS operation.''' - def __init__(self, max_obj=100, iou_thres=0.45, score_thres=0.25, device=None): - super().__init__() - self.device = device if device else torch.device('cpu') - self.background_class = -1, - self.box_coding = 1, - self.iou_threshold = iou_thres - self.max_obj = max_obj - self.plugin_version = '1' - self.score_activation = 0 - self.score_threshold = score_thres - - def forward(self, x): - box = x[:, :, :4] - conf = x[:, :, 4:5] - score = x[:, :, 5:] - score *= conf - num_det, det_boxes, det_scores, det_classes = TRT8_NMS.apply(box, score, self.background_class, self.box_coding, - self.iou_threshold, self.max_obj, - self.plugin_version, self.score_activation, - self.score_threshold) - return num_det, det_boxes, det_scores, det_classes - - -class End2End(nn.Module): - '''export onnx or tensorrt model with NMS operation.''' - def __init__(self, model, max_obj=100, iou_thres=0.45, score_thres=0.25, device=None, ort=False, trt_version=8, with_preprocess=False): - super().__init__() - device = device if device else torch.device('cpu') - self.with_preprocess = with_preprocess - self.model = model.to(device) - TRT = ONNX_TRT8 if trt_version >= 8 else ONNX_TRT7 - self.patch_model = ONNX_ORT if ort else TRT - self.end2end = self.patch_model(max_obj, iou_thres, score_thres, device) - self.end2end.eval() - - def forward(self, x): - if self.with_preprocess: - x = x[:,[2,1,0],...] - x = x * (1/255) - x = self.model(x) - if isinstance(x, list): - x = x[0] - else: - x = x - x = self.end2end(x) - return x diff --git a/cv/detection/yolov6/pytorch/yolov6/models/heads/effidehead_distill_ns.py b/cv/detection/yolov6/pytorch/yolov6/models/heads/effidehead_distill_ns.py deleted file mode 100644 index 912bd6c6a..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/models/heads/effidehead_distill_ns.py +++ /dev/null @@ -1,270 +0,0 @@ -import torch -import torch.nn as nn -import torch.nn.functional as F -import math -from yolov6.layers.common import * -from yolov6.assigners.anchor_generator import generate_anchors -from yolov6.utils.general import dist2bbox - - -class Detect(nn.Module): - export = False - '''Efficient Decoupled Head for Cost-free Distillation.(FOR NANO/SMALL MODEL) - ''' - def __init__(self, num_classes=80, num_layers=3, inplace=True, head_layers=None, use_dfl=True, reg_max=16): # detection layer - super().__init__() - assert head_layers is not None - self.nc = num_classes # number of classes - self.no = num_classes + 5 # number of outputs per anchor - self.nl = num_layers # number of detection layers - self.grid = [torch.zeros(1)] * num_layers - self.prior_prob = 1e-2 - self.inplace = inplace - stride = [8, 16, 32] # strides computed during build - self.stride = torch.tensor(stride) - self.use_dfl = use_dfl - self.reg_max = reg_max - self.proj_conv = nn.Conv2d(self.reg_max + 1, 1, 1, bias=False) - self.grid_cell_offset = 0.5 - self.grid_cell_size = 5.0 - - # Init decouple head - self.stems = nn.ModuleList() - self.cls_convs = nn.ModuleList() - self.reg_convs = nn.ModuleList() - self.cls_preds = nn.ModuleList() - self.reg_preds_dist = nn.ModuleList() - self.reg_preds = nn.ModuleList() - - # Efficient decoupled head layers - for i in range(num_layers): - idx = i*6 - self.stems.append(head_layers[idx]) - self.cls_convs.append(head_layers[idx+1]) - self.reg_convs.append(head_layers[idx+2]) - self.cls_preds.append(head_layers[idx+3]) - self.reg_preds_dist.append(head_layers[idx+4]) - self.reg_preds.append(head_layers[idx+5]) - - def initialize_biases(self): - - for conv in self.cls_preds: - b = conv.bias.view(-1, ) - b.data.fill_(-math.log((1 - self.prior_prob) / self.prior_prob)) - conv.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) - w = conv.weight - w.data.fill_(0.) - conv.weight = torch.nn.Parameter(w, requires_grad=True) - - for conv in self.reg_preds_dist: - b = conv.bias.view(-1, ) - b.data.fill_(1.0) - conv.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) - w = conv.weight - w.data.fill_(0.) - conv.weight = torch.nn.Parameter(w, requires_grad=True) - - for conv in self.reg_preds: - b = conv.bias.view(-1, ) - b.data.fill_(1.0) - conv.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) - w = conv.weight - w.data.fill_(0.) - conv.weight = torch.nn.Parameter(w, requires_grad=True) - - self.proj = nn.Parameter(torch.linspace(0, self.reg_max, self.reg_max + 1), requires_grad=False) - self.proj_conv.weight = nn.Parameter(self.proj.view([1, self.reg_max + 1, 1, 1]).clone().detach(), - requires_grad=False) - - def forward(self, x): - if self.training: - cls_score_list = [] - reg_distri_list = [] - reg_lrtb_list = [] - - for i in range(self.nl): - x[i] = self.stems[i](x[i]) - cls_x = x[i] - reg_x = x[i] - cls_feat = self.cls_convs[i](cls_x) - cls_output = self.cls_preds[i](cls_feat) - reg_feat = self.reg_convs[i](reg_x) - reg_output = self.reg_preds_dist[i](reg_feat) - reg_output_lrtb = self.reg_preds[i](reg_feat) - - cls_output = torch.sigmoid(cls_output) - cls_score_list.append(cls_output.flatten(2).permute((0, 2, 1))) - reg_distri_list.append(reg_output.flatten(2).permute((0, 2, 1))) - reg_lrtb_list.append(reg_output_lrtb.flatten(2).permute((0, 2, 1))) - - cls_score_list = torch.cat(cls_score_list, axis=1) - reg_distri_list = torch.cat(reg_distri_list, axis=1) - reg_lrtb_list = torch.cat(reg_lrtb_list, axis=1) - - return x, cls_score_list, reg_distri_list, reg_lrtb_list - else: - cls_score_list = [] - reg_lrtb_list = [] - - for i in range(self.nl): - b, _, h, w = x[i].shape - l = h * w - x[i] = self.stems[i](x[i]) - cls_x = x[i] - reg_x = x[i] - cls_feat = self.cls_convs[i](cls_x) - cls_output = self.cls_preds[i](cls_feat) - reg_feat = self.reg_convs[i](reg_x) - reg_output_lrtb = self.reg_preds[i](reg_feat) - - cls_output = torch.sigmoid(cls_output) - - if self.export: - cls_score_list.append(cls_output) - reg_lrtb_list.append(reg_output_lrtb) - else: - cls_score_list.append(cls_output.reshape([b, self.nc, l])) - reg_lrtb_list.append(reg_output_lrtb.reshape([b, 4, l])) - - if self.export: - return tuple(torch.cat([cls, reg], 1) for cls, reg in zip(cls_score_list, reg_lrtb_list)) - - cls_score_list = torch.cat(cls_score_list, axis=-1).permute(0, 2, 1) - reg_lrtb_list = torch.cat(reg_lrtb_list, axis=-1).permute(0, 2, 1) - - - anchor_points, stride_tensor = generate_anchors( - x, self.stride, self.grid_cell_size, self.grid_cell_offset, device=x[0].device, is_eval=True, mode='af') - - pred_bboxes = dist2bbox(reg_lrtb_list, anchor_points, box_format='xywh') - pred_bboxes *= stride_tensor - return torch.cat( - [ - pred_bboxes, - torch.ones((b, pred_bboxes.shape[1], 1), device=pred_bboxes.device, dtype=pred_bboxes.dtype), - cls_score_list - ], - axis=-1) - - -def build_effidehead_layer(channels_list, num_anchors, num_classes, reg_max=16): - head_layers = nn.Sequential( - # stem0 - ConvBNSiLU( - in_channels=channels_list[6], - out_channels=channels_list[6], - kernel_size=1, - stride=1 - ), - # cls_conv0 - ConvBNSiLU( - in_channels=channels_list[6], - out_channels=channels_list[6], - kernel_size=3, - stride=1 - ), - # reg_conv0 - ConvBNSiLU( - in_channels=channels_list[6], - out_channels=channels_list[6], - kernel_size=3, - stride=1 - ), - # cls_pred0 - nn.Conv2d( - in_channels=channels_list[6], - out_channels=num_classes * num_anchors, - kernel_size=1 - ), - # reg_pred0 - nn.Conv2d( - in_channels=channels_list[6], - out_channels=4 * (reg_max + num_anchors), - kernel_size=1 - ), - # reg_pred0_1 - nn.Conv2d( - in_channels=channels_list[6], - out_channels=4 * (num_anchors), - kernel_size=1 - ), - # stem1 - ConvBNSiLU( - in_channels=channels_list[8], - out_channels=channels_list[8], - kernel_size=1, - stride=1 - ), - # cls_conv1 - ConvBNSiLU( - in_channels=channels_list[8], - out_channels=channels_list[8], - kernel_size=3, - stride=1 - ), - # reg_conv1 - ConvBNSiLU( - in_channels=channels_list[8], - out_channels=channels_list[8], - kernel_size=3, - stride=1 - ), - # cls_pred1 - nn.Conv2d( - in_channels=channels_list[8], - out_channels=num_classes * num_anchors, - kernel_size=1 - ), - # reg_pred1 - nn.Conv2d( - in_channels=channels_list[8], - out_channels=4 * (reg_max + num_anchors), - kernel_size=1 - ), - # reg_pred1_1 - nn.Conv2d( - in_channels=channels_list[8], - out_channels=4 * (num_anchors), - kernel_size=1 - ), - # stem2 - ConvBNSiLU( - in_channels=channels_list[10], - out_channels=channels_list[10], - kernel_size=1, - stride=1 - ), - # cls_conv2 - ConvBNSiLU( - in_channels=channels_list[10], - out_channels=channels_list[10], - kernel_size=3, - stride=1 - ), - # reg_conv2 - ConvBNSiLU( - in_channels=channels_list[10], - out_channels=channels_list[10], - kernel_size=3, - stride=1 - ), - # cls_pred2 - nn.Conv2d( - in_channels=channels_list[10], - out_channels=num_classes * num_anchors, - kernel_size=1 - ), - # reg_pred2 - nn.Conv2d( - in_channels=channels_list[10], - out_channels=4 * (reg_max + num_anchors), - kernel_size=1 - ), - # reg_pred2_1 - nn.Conv2d( - in_channels=channels_list[10], - out_channels=4 * (num_anchors), - kernel_size=1 - ) - ) - return head_layers diff --git a/cv/detection/yolov6/pytorch/yolov6/models/heads/effidehead_fuseab.py b/cv/detection/yolov6/pytorch/yolov6/models/heads/effidehead_fuseab.py deleted file mode 100644 index 718ae3168..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/models/heads/effidehead_fuseab.py +++ /dev/null @@ -1,342 +0,0 @@ -import torch -import torch.nn as nn -import torch.nn.functional as F -import math -from yolov6.layers.common import * -from yolov6.assigners.anchor_generator import generate_anchors -from yolov6.utils.general import dist2bbox - - -class Detect(nn.Module): - export = False - '''Efficient Decoupled Head for fusing anchor-base branches. - ''' - def __init__(self, num_classes=80, anchors=None, num_layers=3, inplace=True, head_layers=None, use_dfl=True, reg_max=16): # detection layer - super().__init__() - assert head_layers is not None - self.nc = num_classes # number of classes - self.no = num_classes + 5 # number of outputs per anchor - self.nl = num_layers # number of detection layers - if isinstance(anchors, (list, tuple)): - self.na = len(anchors[0]) // 2 - else: - self.na = anchors - self.grid = [torch.zeros(1)] * num_layers - self.prior_prob = 1e-2 - self.inplace = inplace - stride = [8, 16, 32] if num_layers == 3 else [8, 16, 32, 64] # strides computed during build - self.stride = torch.tensor(stride) - self.use_dfl = use_dfl - self.reg_max = reg_max - self.proj_conv = nn.Conv2d(self.reg_max + 1, 1, 1, bias=False) - self.grid_cell_offset = 0.5 - self.grid_cell_size = 5.0 - self.anchors_init= ((torch.tensor(anchors) / self.stride[:,None])).reshape(self.nl, self.na, 2) - - # Init decouple head - self.stems = nn.ModuleList() - self.cls_convs = nn.ModuleList() - self.reg_convs = nn.ModuleList() - self.cls_preds = nn.ModuleList() - self.reg_preds = nn.ModuleList() - self.cls_preds_ab = nn.ModuleList() - self.reg_preds_ab = nn.ModuleList() - - # Efficient decoupled head layers - for i in range(num_layers): - idx = i*7 - self.stems.append(head_layers[idx]) - self.cls_convs.append(head_layers[idx+1]) - self.reg_convs.append(head_layers[idx+2]) - self.cls_preds.append(head_layers[idx+3]) - self.reg_preds.append(head_layers[idx+4]) - self.cls_preds_ab.append(head_layers[idx+5]) - self.reg_preds_ab.append(head_layers[idx+6]) - - def initialize_biases(self): - - for conv in self.cls_preds: - b = conv.bias.view(-1, ) - b.data.fill_(-math.log((1 - self.prior_prob) / self.prior_prob)) - conv.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) - w = conv.weight - w.data.fill_(0.) - conv.weight = torch.nn.Parameter(w, requires_grad=True) - - for conv in self.cls_preds_ab: - b = conv.bias.view(-1, ) - b.data.fill_(-math.log((1 - self.prior_prob) / self.prior_prob)) - conv.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) - w = conv.weight - w.data.fill_(0.) - conv.weight = torch.nn.Parameter(w, requires_grad=True) - - for conv in self.reg_preds: - b = conv.bias.view(-1, ) - b.data.fill_(1.0) - conv.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) - w = conv.weight - w.data.fill_(0.) - conv.weight = torch.nn.Parameter(w, requires_grad=True) - - for conv in self.reg_preds_ab: - b = conv.bias.view(-1, ) - b.data.fill_(1.0) - conv.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) - w = conv.weight - w.data.fill_(0.) - conv.weight = torch.nn.Parameter(w, requires_grad=True) - - self.proj = nn.Parameter(torch.linspace(0, self.reg_max, self.reg_max + 1), requires_grad=False) - self.proj_conv.weight = nn.Parameter(self.proj.view([1, self.reg_max + 1, 1, 1]).clone().detach(), - requires_grad=False) - - def forward(self, x): - if self.training: - device = x[0].device - cls_score_list_af = [] - reg_dist_list_af = [] - cls_score_list_ab = [] - reg_dist_list_ab = [] - - for i in range(self.nl): - b, _, h, w = x[i].shape - l = h * w - - x[i] = self.stems[i](x[i]) - cls_x = x[i] - reg_x = x[i] - - cls_feat = self.cls_convs[i](cls_x) - reg_feat = self.reg_convs[i](reg_x) - - #anchor_base - cls_output_ab = self.cls_preds_ab[i](cls_feat) - reg_output_ab = self.reg_preds_ab[i](reg_feat) - - cls_output_ab = torch.sigmoid(cls_output_ab) - cls_output_ab = cls_output_ab.reshape(b, self.na, -1, h, w).permute(0,1,3,4,2) - cls_score_list_ab.append(cls_output_ab.flatten(1,3)) - - reg_output_ab = reg_output_ab.reshape(b, self.na, -1, h, w).permute(0,1,3,4,2) - reg_output_ab[..., 2:4] = ((reg_output_ab[..., 2:4].sigmoid() * 2) ** 2 ) * (self.anchors_init[i].reshape(1, self.na, 1, 1, 2).to(device)) - reg_dist_list_ab.append(reg_output_ab.flatten(1,3)) - - #anchor_free - cls_output_af = self.cls_preds[i](cls_feat) - reg_output_af = self.reg_preds[i](reg_feat) - - cls_output_af = torch.sigmoid(cls_output_af) - cls_score_list_af.append(cls_output_af.flatten(2).permute((0, 2, 1))) - reg_dist_list_af.append(reg_output_af.flatten(2).permute((0, 2, 1))) - - - cls_score_list_ab = torch.cat(cls_score_list_ab, axis=1) - reg_dist_list_ab = torch.cat(reg_dist_list_ab, axis=1) - cls_score_list_af = torch.cat(cls_score_list_af, axis=1) - reg_dist_list_af = torch.cat(reg_dist_list_af, axis=1) - - return x, cls_score_list_ab, reg_dist_list_ab, cls_score_list_af, reg_dist_list_af - - else: - device = x[0].device - cls_score_list_af = [] - reg_dist_list_af = [] - - for i in range(self.nl): - b, _, h, w = x[i].shape - l = h * w - - x[i] = self.stems[i](x[i]) - cls_x = x[i] - reg_x = x[i] - - cls_feat = self.cls_convs[i](cls_x) - reg_feat = self.reg_convs[i](reg_x) - - #anchor_free - cls_output_af = self.cls_preds[i](cls_feat) - reg_output_af = self.reg_preds[i](reg_feat) - - if self.use_dfl: - reg_output_af = reg_output_af.reshape([-1, 4, self.reg_max + 1, l]).permute(0, 2, 1, 3) - reg_output_af = self.proj_conv(F.softmax(reg_output_af, dim=1)) - - cls_output_af = torch.sigmoid(cls_output_af) - - if self.export: - cls_score_list_af.append(cls_output_af) - reg_dist_list_af.append(reg_output_af) - else: - cls_score_list_af.append(cls_output_af.reshape([b, self.nc, l])) - reg_dist_list_af.append(reg_output_af.reshape([b, 4, l])) - - if self.export: - return tuple(torch.cat([cls, reg], 1) for cls, reg in zip(cls_score_list_af, reg_dist_list_af)) - - cls_score_list_af = torch.cat(cls_score_list_af, axis=-1).permute(0, 2, 1) - reg_dist_list_af = torch.cat(reg_dist_list_af, axis=-1).permute(0, 2, 1) - - - #anchor_free - anchor_points_af, stride_tensor_af = generate_anchors( - x, self.stride, self.grid_cell_size, self.grid_cell_offset, device=x[0].device, is_eval=True, mode='af') - - pred_bboxes_af = dist2bbox(reg_dist_list_af, anchor_points_af, box_format='xywh') - pred_bboxes_af *= stride_tensor_af - - pred_bboxes = pred_bboxes_af - cls_score_list = cls_score_list_af - - return torch.cat( - [ - pred_bboxes, - torch.ones((b, pred_bboxes.shape[1], 1), device=pred_bboxes.device, dtype=pred_bboxes.dtype), - cls_score_list - ], - axis=-1) - - -def build_effidehead_layer(channels_list, num_anchors, num_classes, reg_max=16, num_layers=3): - - chx = [6, 8, 10] if num_layers == 3 else [8, 9, 10, 11] - - head_layers = nn.Sequential( - # stem0 - ConvBNSiLU( - in_channels=channels_list[chx[0]], - out_channels=channels_list[chx[0]], - kernel_size=1, - stride=1 - ), - # cls_conv0 - ConvBNSiLU( - in_channels=channels_list[chx[0]], - out_channels=channels_list[chx[0]], - kernel_size=3, - stride=1 - ), - # reg_conv0 - ConvBNSiLU( - in_channels=channels_list[chx[0]], - out_channels=channels_list[chx[0]], - kernel_size=3, - stride=1 - ), - # cls_pred0_af - nn.Conv2d( - in_channels=channels_list[chx[0]], - out_channels=num_classes, - kernel_size=1 - ), - # reg_pred0_af - nn.Conv2d( - in_channels=channels_list[chx[0]], - out_channels=4 * (reg_max + 1), - kernel_size=1 - ), - # cls_pred0_3ab - nn.Conv2d( - in_channels=channels_list[chx[0]], - out_channels=num_classes * num_anchors, - kernel_size=1 - ), - # reg_pred0_3ab - nn.Conv2d( - in_channels=channels_list[chx[0]], - out_channels=4 * num_anchors, - kernel_size=1 - ), - # stem1 - ConvBNSiLU( - in_channels=channels_list[chx[1]], - out_channels=channels_list[chx[1]], - kernel_size=1, - stride=1 - ), - # cls_conv1 - ConvBNSiLU( - in_channels=channels_list[chx[1]], - out_channels=channels_list[chx[1]], - kernel_size=3, - stride=1 - ), - # reg_conv1 - ConvBNSiLU( - in_channels=channels_list[chx[1]], - out_channels=channels_list[chx[1]], - kernel_size=3, - stride=1 - ), - # cls_pred1_af - nn.Conv2d( - in_channels=channels_list[chx[1]], - out_channels=num_classes, - kernel_size=1 - ), - # reg_pred1_af - nn.Conv2d( - in_channels=channels_list[chx[1]], - out_channels=4 * (reg_max + 1), - kernel_size=1 - ), - # cls_pred1_3ab - nn.Conv2d( - in_channels=channels_list[chx[1]], - out_channels=num_classes * num_anchors, - kernel_size=1 - ), - # reg_pred1_3ab - nn.Conv2d( - in_channels=channels_list[chx[1]], - out_channels=4 * num_anchors, - kernel_size=1 - ), - # stem2 - ConvBNSiLU( - in_channels=channels_list[chx[2]], - out_channels=channels_list[chx[2]], - kernel_size=1, - stride=1 - ), - # cls_conv2 - ConvBNSiLU( - in_channels=channels_list[chx[2]], - out_channels=channels_list[chx[2]], - kernel_size=3, - stride=1 - ), - # reg_conv2 - ConvBNSiLU( - in_channels=channels_list[chx[2]], - out_channels=channels_list[chx[2]], - kernel_size=3, - stride=1 - ), - # cls_pred2_af - nn.Conv2d( - in_channels=channels_list[chx[2]], - out_channels=num_classes, - kernel_size=1 - ), - # reg_pred2_af - nn.Conv2d( - in_channels=channels_list[chx[2]], - out_channels=4 * (reg_max + 1), - kernel_size=1 - ), - # cls_pred2_3ab - nn.Conv2d( - in_channels=channels_list[chx[2]], - out_channels=num_classes * num_anchors, - kernel_size=1 - ), - # reg_pred2_3ab - nn.Conv2d( - in_channels=channels_list[chx[2]], - out_channels=4 * num_anchors, - kernel_size=1 - ), - ) - - return head_layers diff --git a/cv/detection/yolov6/pytorch/yolov6/models/heads/effidehead_lite.py b/cv/detection/yolov6/pytorch/yolov6/models/heads/effidehead_lite.py deleted file mode 100644 index dc6f63402..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/models/heads/effidehead_lite.py +++ /dev/null @@ -1,280 +0,0 @@ -import torch -import torch.nn as nn -import torch.nn.functional as F -import math -from yolov6.layers.common import DPBlock -from yolov6.assigners.anchor_generator import generate_anchors -from yolov6.utils.general import dist2bbox - - -class Detect(nn.Module): - export = False - '''Efficient Decoupled Head - With hardware-aware degisn, the decoupled head is optimized with - hybridchannels methods. - ''' - def __init__(self, num_classes=80, num_layers=3, inplace=True, head_layers=None): # detection layer - super().__init__() - assert head_layers is not None - self.nc = num_classes # number of classes - self.no = num_classes + 5 # number of outputs per anchor - self.nl = num_layers # number of detection layers - self.grid = [torch.zeros(1)] * num_layers - self.prior_prob = 1e-2 - self.inplace = inplace - stride = [8, 16, 32] if num_layers == 3 else [8, 16, 32, 64] # strides computed during build - self.stride = torch.tensor(stride) - self.grid_cell_offset = 0.5 - self.grid_cell_size = 5.0 - - # Init decouple head - self.stems = nn.ModuleList() - self.cls_convs = nn.ModuleList() - self.reg_convs = nn.ModuleList() - self.cls_preds = nn.ModuleList() - self.reg_preds = nn.ModuleList() - - # Efficient decoupled head layers - for i in range(num_layers): - idx = i*5 - self.stems.append(head_layers[idx]) - self.cls_convs.append(head_layers[idx+1]) - self.reg_convs.append(head_layers[idx+2]) - self.cls_preds.append(head_layers[idx+3]) - self.reg_preds.append(head_layers[idx+4]) - - def initialize_biases(self): - - for conv in self.cls_preds: - b = conv.bias.view(-1, ) - b.data.fill_(-math.log((1 - self.prior_prob) / self.prior_prob)) - conv.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) - w = conv.weight - w.data.fill_(0.) - conv.weight = torch.nn.Parameter(w, requires_grad=True) - - for conv in self.reg_preds: - b = conv.bias.view(-1, ) - b.data.fill_(1.0) - conv.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) - w = conv.weight - w.data.fill_(0.) - conv.weight = torch.nn.Parameter(w, requires_grad=True) - - def forward(self, x): - if self.training: - cls_score_list = [] - reg_distri_list = [] - - for i in range(self.nl): - x[i] = self.stems[i](x[i]) - cls_x = x[i] - reg_x = x[i] - cls_feat = self.cls_convs[i](cls_x) - cls_output = self.cls_preds[i](cls_feat) - reg_feat = self.reg_convs[i](reg_x) - reg_output = self.reg_preds[i](reg_feat) - - cls_output = torch.sigmoid(cls_output) - cls_score_list.append(cls_output.flatten(2).permute((0, 2, 1))) - reg_distri_list.append(reg_output.flatten(2).permute((0, 2, 1))) - - cls_score_list = torch.cat(cls_score_list, axis=1) - reg_distri_list = torch.cat(reg_distri_list, axis=1) - - return x, cls_score_list, reg_distri_list - else: - cls_score_list = [] - reg_dist_list = [] - - for i in range(self.nl): - b, _, h, w = x[i].shape - l = h * w - x[i] = self.stems[i](x[i]) - cls_x = x[i] - reg_x = x[i] - cls_feat = self.cls_convs[i](cls_x) - cls_output = self.cls_preds[i](cls_feat) - reg_feat = self.reg_convs[i](reg_x) - reg_output = self.reg_preds[i](reg_feat) - - cls_output = torch.sigmoid(cls_output) - - if self.export: - cls_score_list.append(cls_output) - reg_dist_list.append(reg_output) - else: - cls_score_list.append(cls_output.reshape([b, self.nc, l])) - reg_dist_list.append(reg_output.reshape([b, 4, l])) - - - if self.export: - return tuple(torch.cat([cls, reg], 1) for cls, reg in zip(cls_score_list, reg_dist_list)) - - cls_score_list = torch.cat(cls_score_list, axis=-1).permute(0, 2, 1) - reg_dist_list = torch.cat(reg_dist_list, axis=-1).permute(0, 2, 1) - - - anchor_points, stride_tensor = generate_anchors( - x, self.stride, self.grid_cell_size, self.grid_cell_offset, device=x[0].device, is_eval=True, mode='af') - - pred_bboxes = dist2bbox(reg_dist_list, anchor_points, box_format='xywh') - pred_bboxes *= stride_tensor - return torch.cat( - [ - pred_bboxes, - torch.ones((b, pred_bboxes.shape[1], 1), device=pred_bboxes.device, dtype=pred_bboxes.dtype), - cls_score_list - ], - axis=-1) - -def build_effidehead_layer(channels_list, num_anchors, num_classes, num_layers): - - head_layers = nn.Sequential( - # stem0 - DPBlock( - in_channel=channels_list[0], - out_channel=channels_list[0], - kernel_size=5, - stride=1 - ), - # cls_conv0 - DPBlock( - in_channel=channels_list[0], - out_channel=channels_list[0], - kernel_size=5, - stride=1 - ), - # reg_conv0 - DPBlock( - in_channel=channels_list[0], - out_channel=channels_list[0], - kernel_size=5, - stride=1 - ), - # cls_pred0 - nn.Conv2d( - in_channels=channels_list[0], - out_channels=num_classes * num_anchors, - kernel_size=1 - ), - # reg_pred0 - nn.Conv2d( - in_channels=channels_list[0], - out_channels=4 * num_anchors, - kernel_size=1 - ), - # stem1 - DPBlock( - in_channel=channels_list[1], - out_channel=channels_list[1], - kernel_size=5, - stride=1 - ), - # cls_conv1 - DPBlock( - in_channel=channels_list[1], - out_channel=channels_list[1], - kernel_size=5, - stride=1 - ), - # reg_conv1 - DPBlock( - in_channel=channels_list[1], - out_channel=channels_list[1], - kernel_size=5, - stride=1 - ), - # cls_pred1 - nn.Conv2d( - in_channels=channels_list[1], - out_channels=num_classes * num_anchors, - kernel_size=1 - ), - # reg_pred1 - nn.Conv2d( - in_channels=channels_list[1], - out_channels=4 * num_anchors, - kernel_size=1 - ), - # stem2 - DPBlock( - in_channel=channels_list[2], - out_channel=channels_list[2], - kernel_size=5, - stride=1 - ), - # cls_conv2 - DPBlock( - in_channel=channels_list[2], - out_channel=channels_list[2], - kernel_size=5, - stride=1 - ), - # reg_conv2 - DPBlock( - in_channel=channels_list[2], - out_channel=channels_list[2], - kernel_size=5, - stride=1 - ), - # cls_pred2 - nn.Conv2d( - in_channels=channels_list[2], - out_channels=num_classes * num_anchors, - kernel_size=1 - ), - # reg_pred2 - nn.Conv2d( - in_channels=channels_list[2], - out_channels=4 * num_anchors, - kernel_size=1 - ) - ) - - if num_layers == 4: - head_layers.add_module('stem3', - # stem3 - DPBlock( - in_channel=channels_list[3], - out_channel=channels_list[3], - kernel_size=5, - stride=1 - ) - ) - head_layers.add_module('cls_conv3', - # cls_conv3 - DPBlock( - in_channel=channels_list[3], - out_channel=channels_list[3], - kernel_size=5, - stride=1 - ) - ) - head_layers.add_module('reg_conv3', - # reg_conv3 - DPBlock( - in_channel=channels_list[3], - out_channel=channels_list[3], - kernel_size=5, - stride=1 - ) - ) - head_layers.add_module('cls_pred3', - # cls_pred3 - nn.Conv2d( - in_channels=channels_list[3], - out_channels=num_classes * num_anchors, - kernel_size=1 - ) - ) - head_layers.add_module('reg_pred3', - # reg_pred3 - nn.Conv2d( - in_channels=channels_list[3], - out_channels=4 * num_anchors, - kernel_size=1 - ) - ) - - return head_layers diff --git a/cv/detection/yolov6/pytorch/yolov6/models/losses/loss.py b/cv/detection/yolov6/pytorch/yolov6/models/losses/loss.py deleted file mode 100644 index 0b1d39c4b..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/models/losses/loss.py +++ /dev/null @@ -1,273 +0,0 @@ -# Copyright (c) 2023, Shanghai Iluvatar CoreX Semiconductor Co., Ltd. -# All Rights Reserved. -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- - -import torch -import torch.nn as nn -import numpy as np -import torch.nn.functional as F -from yolov6.assigners.anchor_generator import generate_anchors -from yolov6.utils.general import dist2bbox, bbox2dist, xywh2xyxy, box_iou -from yolov6.utils.figure_iou import IOUloss -from yolov6.assigners.atss_assigner import ATSSAssigner -from yolov6.assigners.tal_assigner import TaskAlignedAssigner - -class ComputeLoss: - '''Loss computation func.''' - def __init__(self, - fpn_strides=[8, 16, 32], - grid_cell_size=5.0, - grid_cell_offset=0.5, - num_classes=80, - ori_img_size=640, - warmup_epoch=4, - use_dfl=True, - reg_max=16, - iou_type='giou', - loss_weight={ - 'class': 1.0, - 'iou': 2.5, - 'dfl': 0.5}, - ): - - self.fpn_strides = fpn_strides - self.grid_cell_size = grid_cell_size - self.grid_cell_offset = grid_cell_offset - self.num_classes = num_classes - self.ori_img_size = ori_img_size - - self.warmup_epoch = warmup_epoch - self.warmup_assigner = ATSSAssigner(9, num_classes=self.num_classes) - self.formal_assigner = TaskAlignedAssigner(topk=13, num_classes=self.num_classes, alpha=1.0, beta=6.0) - - self.use_dfl = use_dfl - self.reg_max = reg_max - self.proj = nn.Parameter(torch.linspace(0, self.reg_max, self.reg_max + 1), requires_grad=False) - self.iou_type = iou_type - self.varifocal_loss = VarifocalLoss().cuda() - self.bbox_loss = BboxLoss(self.num_classes, self.reg_max, self.use_dfl, self.iou_type).cuda() - self.loss_weight = loss_weight - - def __call__( - self, - outputs, - targets, - epoch_num, - step_num, - batch_height, - batch_width - ): - - feats, pred_scores, pred_distri = outputs - anchors, anchor_points, n_anchors_list, stride_tensor = \ - generate_anchors(feats, self.fpn_strides, self.grid_cell_size, self.grid_cell_offset, device=feats[0].device) - - assert pred_scores.type() == pred_distri.type() - gt_bboxes_scale = torch.tensor([batch_width, batch_height, batch_width, batch_height]).type_as(pred_scores) - batch_size = pred_scores.shape[0] - - # targets - targets =self.preprocess(targets, batch_size, gt_bboxes_scale) - gt_labels = targets[:, :, :1] - gt_bboxes = targets[:, :, 1:] #xyxy - mask_gt = (gt_bboxes.sum(-1, keepdim=True) > 0).float() - - # pboxes - anchor_points_s = anchor_points / stride_tensor - pred_bboxes = self.bbox_decode(anchor_points_s, pred_distri) #xyxy - - try: - if epoch_num < self.warmup_epoch: - target_labels, target_bboxes, target_scores, fg_mask = \ - self.warmup_assigner( - anchors, - n_anchors_list, - gt_labels, - gt_bboxes, - mask_gt, - pred_bboxes.detach() * stride_tensor) - else: - target_labels, target_bboxes, target_scores, fg_mask = \ - self.formal_assigner( - pred_scores.detach(), - pred_bboxes.detach() * stride_tensor, - anchor_points, - gt_labels, - gt_bboxes, - mask_gt) - - except RuntimeError: - print( - "OOM RuntimeError is raised due to the huge memory cost during label assignment. \ - CPU mode is applied in this batch. If you want to avoid this issue, \ - try to reduce the batch size or image size." - ) - torch.cuda.empty_cache() - print("------------CPU Mode for This Batch-------------") - if epoch_num < self.warmup_epoch: - _anchors = anchors.cpu().float() - _n_anchors_list = n_anchors_list - _gt_labels = gt_labels.cpu().float() - _gt_bboxes = gt_bboxes.cpu().float() - _mask_gt = mask_gt.cpu().float() - _pred_bboxes = pred_bboxes.detach().cpu().float() - _stride_tensor = stride_tensor.cpu().float() - - target_labels, target_bboxes, target_scores, fg_mask = \ - self.warmup_assigner( - _anchors, - _n_anchors_list, - _gt_labels, - _gt_bboxes, - _mask_gt, - _pred_bboxes * _stride_tensor) - - else: - _pred_scores = pred_scores.detach().cpu().float() - _pred_bboxes = pred_bboxes.detach().cpu().float() - _anchor_points = anchor_points.cpu().float() - _gt_labels = gt_labels.cpu().float() - _gt_bboxes = gt_bboxes.cpu().float() - _mask_gt = mask_gt.cpu().float() - _stride_tensor = stride_tensor.cpu().float() - - target_labels, target_bboxes, target_scores, fg_mask = \ - self.formal_assigner( - _pred_scores, - _pred_bboxes * _stride_tensor, - _anchor_points, - _gt_labels, - _gt_bboxes, - _mask_gt) - - target_labels = target_labels.cuda() - target_bboxes = target_bboxes.cuda() - target_scores = target_scores.cuda() - fg_mask = fg_mask.cuda() - #Dynamic release GPU memory - if step_num % 10 == 0: - torch.cuda.empty_cache() - - # rescale bbox - target_bboxes /= stride_tensor - - # cls loss - target_labels = torch.where(fg_mask > 0, target_labels, torch.full_like(target_labels, self.num_classes)) - one_hot_label = F.one_hot(target_labels.long(), self.num_classes + 1)[..., :-1] - loss_cls = self.varifocal_loss(pred_scores, target_scores, one_hot_label) - - target_scores_sum = target_scores.sum() - # avoid devide zero error, devide by zero will cause loss to be inf or nan. - # if target_scores_sum is 0, loss_cls equals to 0 alson - if target_scores_sum > 1: - loss_cls /= target_scores_sum - - # bbox loss - loss_iou, loss_dfl = self.bbox_loss(pred_distri, pred_bboxes, anchor_points_s, target_bboxes, - target_scores, target_scores_sum, fg_mask) - - loss = self.loss_weight['class'] * loss_cls + \ - self.loss_weight['iou'] * loss_iou + \ - self.loss_weight['dfl'] * loss_dfl - - return loss, \ - torch.cat(((self.loss_weight['iou'] * loss_iou).unsqueeze(0), - (self.loss_weight['dfl'] * loss_dfl).unsqueeze(0), - (self.loss_weight['class'] * loss_cls).unsqueeze(0))).detach() - - def preprocess(self, targets, batch_size, scale_tensor): - targets_list = np.zeros((batch_size, 1, 5)).tolist() - for i, item in enumerate(targets.cpu().numpy().tolist()): - targets_list[int(item[0])].append(item[1:]) - max_len = max((len(l) for l in targets_list)) - targets = torch.from_numpy(np.array(list(map(lambda l:l + [[-1,0,0,0,0]]*(max_len - len(l)), targets_list)),dtype=np.float32)[:,1:,:]).to(targets.device) - batch_target = targets[:, :, 1:5].mul_(scale_tensor) - targets[..., 1:] = xywh2xyxy(batch_target) - return targets - - def bbox_decode(self, anchor_points, pred_dist): - if self.use_dfl: - batch_size, n_anchors, _ = pred_dist.shape - pred_dist = F.softmax(pred_dist.view(batch_size, n_anchors, 4, self.reg_max + 1), dim=-1).matmul(self.proj.to(pred_dist.device)) - return dist2bbox(pred_dist, anchor_points) - - -class VarifocalLoss(nn.Module): - def __init__(self): - super(VarifocalLoss, self).__init__() - - def forward(self, pred_score,gt_score, label, alpha=0.75, gamma=2.0): - - weight = alpha * pred_score.pow(gamma) * (1 - label) + gt_score * label - with torch.cuda.amp.autocast(enabled=False): - loss = (F.binary_cross_entropy(pred_score.float(), gt_score.float(), reduction='none') * weight).sum() - - return loss - - -class BboxLoss(nn.Module): - def __init__(self, num_classes, reg_max, use_dfl=False, iou_type='giou'): - super(BboxLoss, self).__init__() - self.num_classes = num_classes - self.iou_loss = IOUloss(box_format='xyxy', iou_type=iou_type, eps=1e-10) - self.reg_max = reg_max - self.use_dfl = use_dfl - - def forward(self, pred_dist, pred_bboxes, anchor_points, - target_bboxes, target_scores, target_scores_sum, fg_mask): - - # select positive samples mask - num_pos = fg_mask.sum() - if num_pos > 0: - # iou loss - bbox_mask = fg_mask.unsqueeze(-1).repeat([1, 1, 4]) - pred_bboxes_pos = torch.masked_select(pred_bboxes, - bbox_mask).reshape([-1, 4]) - target_bboxes_pos = torch.masked_select( - target_bboxes, bbox_mask).reshape([-1, 4]) - bbox_weight = torch.masked_select( - target_scores.sum(-1), fg_mask).unsqueeze(-1) - loss_iou = self.iou_loss(pred_bboxes_pos, - target_bboxes_pos) * bbox_weight - if target_scores_sum > 1: - loss_iou = loss_iou.sum() / target_scores_sum - else: - loss_iou = loss_iou.sum() - - # dfl loss - if self.use_dfl: - dist_mask = fg_mask.unsqueeze(-1).repeat( - [1, 1, (self.reg_max + 1) * 4]) - pred_dist_pos = torch.masked_select( - pred_dist, dist_mask).reshape([-1, 4, self.reg_max + 1]) - target_ltrb = bbox2dist(anchor_points, target_bboxes, self.reg_max) - target_ltrb_pos = torch.masked_select( - target_ltrb, bbox_mask).reshape([-1, 4]) - loss_dfl = self._df_loss(pred_dist_pos, - target_ltrb_pos) * bbox_weight - if target_scores_sum > 1: - loss_dfl = loss_dfl.sum() / target_scores_sum - else: - loss_dfl = loss_dfl.sum() - else: - loss_dfl = pred_dist.sum() * 0. - - else: - loss_iou = pred_dist.sum() * 0. - loss_dfl = pred_dist.sum() * 0. - - return loss_iou, loss_dfl - - def _df_loss(self, pred_dist, target): - target_left = target.to(torch.long) - target_right = target_left + 1 - weight_left = target_right.to(torch.float) - target - weight_right = 1 - weight_left - loss_left = F.cross_entropy( - pred_dist.view(-1, self.reg_max + 1), target_left.view(-1), reduction='none').view( - target_left.shape) * weight_left - loss_right = F.cross_entropy( - pred_dist.view(-1, self.reg_max + 1), target_right.view(-1), reduction='none').view( - target_left.shape) * weight_right - return (loss_left + loss_right).mean(-1, keepdim=True) diff --git a/cv/detection/yolov6/pytorch/yolov6/models/losses/loss_distill.py b/cv/detection/yolov6/pytorch/yolov6/models/losses/loss_distill.py deleted file mode 100644 index afc46ef2e..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/models/losses/loss_distill.py +++ /dev/null @@ -1,362 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- - -import torch -import torch.nn as nn -import numpy as np -import torch.nn.functional as F -from yolov6.assigners.anchor_generator import generate_anchors -from yolov6.utils.general import dist2bbox, bbox2dist, xywh2xyxy -from yolov6.utils.figure_iou import IOUloss -from yolov6.assigners.atss_assigner import ATSSAssigner -from yolov6.assigners.tal_assigner import TaskAlignedAssigner - - -class ComputeLoss: - '''Loss computation func.''' - def __init__(self, - fpn_strides=[8, 16, 32], - grid_cell_size=5.0, - grid_cell_offset=0.5, - num_classes=80, - ori_img_size=640, - warmup_epoch=0, - use_dfl=True, - reg_max=16, - iou_type='giou', - loss_weight={ - 'class': 1.0, - 'iou': 2.5, - 'dfl': 0.5, - 'cwd': 10.0}, - distill_feat = False, - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - } - ): - - self.fpn_strides = fpn_strides - self.grid_cell_size = grid_cell_size - self.grid_cell_offset = grid_cell_offset - self.num_classes = num_classes - self.ori_img_size = ori_img_size - - self.warmup_epoch = warmup_epoch - self.warmup_assigner = ATSSAssigner(9, num_classes=self.num_classes) - self.formal_assigner = TaskAlignedAssigner(topk=13, num_classes=self.num_classes, alpha=1.0, beta=6.0) - - self.use_dfl = use_dfl - self.reg_max = reg_max - self.proj = nn.Parameter(torch.linspace(0, self.reg_max, self.reg_max + 1), requires_grad=False) - self.iou_type = iou_type - self.varifocal_loss = VarifocalLoss().cuda() - self.bbox_loss = BboxLoss(self.num_classes, self.reg_max, self.use_dfl, self.iou_type).cuda() - self.loss_weight = loss_weight - self.distill_feat = distill_feat - self.distill_weight = distill_weight - - def __call__( - self, - outputs, - t_outputs, - s_featmaps, - t_featmaps, - targets, - epoch_num, - max_epoch, - temperature, - step_num, - batch_height, - batch_width - ): - - feats, pred_scores, pred_distri = outputs - t_feats, t_pred_scores, t_pred_distri = t_outputs[0], t_outputs[-2], t_outputs[-1] - anchors, anchor_points, n_anchors_list, stride_tensor = \ - generate_anchors(feats, self.fpn_strides, self.grid_cell_size, self.grid_cell_offset, device=feats[0].device) - t_anchors, t_anchor_points, t_n_anchors_list, t_stride_tensor = \ - generate_anchors(t_feats, self.fpn_strides, self.grid_cell_size, self.grid_cell_offset, device=feats[0].device) - - assert pred_scores.type() == pred_distri.type() - gt_bboxes_scale = torch.tensor([batch_width, batch_height, batch_width, batch_height]).type_as(pred_scores) - batch_size = pred_scores.shape[0] - - # targets - targets =self.preprocess(targets, batch_size, gt_bboxes_scale) - gt_labels = targets[:, :, :1] - gt_bboxes = targets[:, :, 1:] #xyxy - mask_gt = (gt_bboxes.sum(-1, keepdim=True) > 0).float() - - # pboxes - anchor_points_s = anchor_points / stride_tensor - pred_bboxes = self.bbox_decode(anchor_points_s, pred_distri) #xyxy - t_anchor_points_s = t_anchor_points / t_stride_tensor - t_pred_bboxes = self.bbox_decode(t_anchor_points_s, t_pred_distri) #xyxy - - try: - if epoch_num < self.warmup_epoch: - target_labels, target_bboxes, target_scores, fg_mask = \ - self.warmup_assigner( - anchors, - n_anchors_list, - gt_labels, - gt_bboxes, - mask_gt, - pred_bboxes.detach() * stride_tensor) - else: - target_labels, target_bboxes, target_scores, fg_mask = \ - self.formal_assigner( - pred_scores.detach(), - pred_bboxes.detach() * stride_tensor, - anchor_points, - gt_labels, - gt_bboxes, - mask_gt) - - except RuntimeError: - print( - "OOM RuntimeError is raised due to the huge memory cost during label assignment. \ - CPU mode is applied in this batch. If you want to avoid this issue, \ - try to reduce the batch size or image size." - ) - torch.cuda.empty_cache() - print("------------CPU Mode for This Batch-------------") - if epoch_num < self.warmup_epoch: - _anchors = anchors.cpu().float() - _n_anchors_list = n_anchors_list - _gt_labels = gt_labels.cpu().float() - _gt_bboxes = gt_bboxes.cpu().float() - _mask_gt = mask_gt.cpu().float() - _pred_bboxes = pred_bboxes.detach().cpu().float() - _stride_tensor = stride_tensor.cpu().float() - - target_labels, target_bboxes, target_scores, fg_mask = \ - self.warmup_assigner( - _anchors, - _n_anchors_list, - _gt_labels, - _gt_bboxes, - _mask_gt, - _pred_bboxes * _stride_tensor) - - else: - _pred_scores = pred_scores.detach().cpu().float() - _pred_bboxes = pred_bboxes.detach().cpu().float() - _anchor_points = anchor_points.cpu().float() - _gt_labels = gt_labels.cpu().float() - _gt_bboxes = gt_bboxes.cpu().float() - _mask_gt = mask_gt.cpu().float() - _stride_tensor = stride_tensor.cpu().float() - - target_labels, target_bboxes, target_scores, fg_mask = \ - self.formal_assigner( - _pred_scores, - _pred_bboxes * _stride_tensor, - _anchor_points, - _gt_labels, - _gt_bboxes, - _mask_gt) - - target_labels = target_labels.cuda() - target_bboxes = target_bboxes.cuda() - target_scores = target_scores.cuda() - fg_mask = fg_mask.cuda() - - #Dynamic release GPU memory - if step_num % 10 == 0: - torch.cuda.empty_cache() - - # rescale bbox - target_bboxes /= stride_tensor - - # cls loss - target_labels = torch.where(fg_mask > 0, target_labels, torch.full_like(target_labels, self.num_classes)) - one_hot_label = F.one_hot(target_labels.long(), self.num_classes + 1)[..., :-1] - loss_cls = self.varifocal_loss(pred_scores, target_scores, one_hot_label) - - target_scores_sum = target_scores.sum() - # avoid devide zero error, devide by zero will cause loss to be inf or nan. - if target_scores_sum > 0: - loss_cls /= target_scores_sum - - # bbox loss - loss_iou, loss_dfl, d_loss_dfl = self.bbox_loss(pred_distri, pred_bboxes, t_pred_distri, t_pred_bboxes, temperature, anchor_points_s, - target_bboxes, target_scores, target_scores_sum, fg_mask) - - logits_student = pred_scores - logits_teacher = t_pred_scores - distill_num_classes = self.num_classes - d_loss_cls = self.distill_loss_cls(logits_student, logits_teacher, distill_num_classes, temperature) - if self.distill_feat: - d_loss_cw = self.distill_loss_cw(s_featmaps, t_featmaps) - else: - d_loss_cw = torch.tensor(0.).to(feats[0].device) - import math - distill_weightdecay = ((1 - math.cos(epoch_num * math.pi / max_epoch)) / 2) * (0.01- 1) + 1 - d_loss_dfl *= distill_weightdecay - d_loss_cls *= distill_weightdecay - d_loss_cw *= distill_weightdecay - loss_cls_all = loss_cls + d_loss_cls * self.distill_weight['class'] - loss_dfl_all = loss_dfl + d_loss_dfl * self.distill_weight['dfl'] - loss = self.loss_weight['class'] * loss_cls_all + \ - self.loss_weight['iou'] * loss_iou + \ - self.loss_weight['dfl'] * loss_dfl_all + \ - self.loss_weight['cwd'] * d_loss_cw - - return loss, \ - torch.cat(((self.loss_weight['iou'] * loss_iou).unsqueeze(0), - (self.loss_weight['dfl'] * loss_dfl_all).unsqueeze(0), - (self.loss_weight['class'] * loss_cls_all).unsqueeze(0), - (self.loss_weight['cwd'] * d_loss_cw).unsqueeze(0))).detach() - - def distill_loss_cls(self, logits_student, logits_teacher, num_classes, temperature=20): - logits_student = logits_student.view(-1, num_classes) - logits_teacher = logits_teacher.view(-1, num_classes) - pred_student = F.softmax(logits_student / temperature, dim=1) - pred_teacher = F.softmax(logits_teacher / temperature, dim=1) - log_pred_student = torch.log(pred_student) - - d_loss_cls = F.kl_div(log_pred_student, pred_teacher, reduction="sum") - d_loss_cls *= temperature**2 - return d_loss_cls - def distill_loss_cw(self, s_feats, t_feats, temperature=1): - N,C,H,W = s_feats[0].shape - # print(N,C,H,W) - loss_cw = F.kl_div(F.log_softmax(s_feats[0].view(N,C,H*W)/temperature, dim=2), - F.log_softmax(t_feats[0].view(N,C,H*W).detach()/temperature, dim=2), - reduction='sum', - log_target=True) * (temperature * temperature)/ (N*C) - - N,C,H,W = s_feats[1].shape - # print(N,C,H,W) - loss_cw += F.kl_div(F.log_softmax(s_feats[1].view(N,C,H*W)/temperature, dim=2), - F.log_softmax(t_feats[1].view(N,C,H*W).detach()/temperature, dim=2), - reduction='sum', - log_target=True) * (temperature * temperature)/ (N*C) - - N,C,H,W = s_feats[2].shape - # print(N,C,H,W) - loss_cw += F.kl_div(F.log_softmax(s_feats[2].view(N,C,H*W)/temperature, dim=2), - F.log_softmax(t_feats[2].view(N,C,H*W).detach()/temperature, dim=2), - reduction='sum', - log_target=True) * (temperature * temperature)/ (N*C) - # print(loss_cw) - return loss_cw - - def preprocess(self, targets, batch_size, scale_tensor): - targets_list = np.zeros((batch_size, 1, 5)).tolist() - for i, item in enumerate(targets.cpu().numpy().tolist()): - targets_list[int(item[0])].append(item[1:]) - max_len = max((len(l) for l in targets_list)) - targets = torch.from_numpy(np.array(list(map(lambda l:l + [[-1,0,0,0,0]]*(max_len - len(l)), targets_list)))[:,1:,:]).to(targets.device) - batch_target = targets[:, :, 1:5].mul_(scale_tensor) - targets[..., 1:] = xywh2xyxy(batch_target) - return targets - - def bbox_decode(self, anchor_points, pred_dist): - if self.use_dfl: - batch_size, n_anchors, _ = pred_dist.shape - pred_dist = F.softmax(pred_dist.view(batch_size, n_anchors, 4, self.reg_max + 1), dim=-1).matmul(self.proj.to(pred_dist.device)) - return dist2bbox(pred_dist, anchor_points) - - -class VarifocalLoss(nn.Module): - def __init__(self): - super(VarifocalLoss, self).__init__() - - def forward(self, pred_score,gt_score, label, alpha=0.75, gamma=2.0): - - weight = alpha * pred_score.pow(gamma) * (1 - label) + gt_score * label - with torch.cuda.amp.autocast(enabled=False): - loss = (F.binary_cross_entropy(pred_score.float(), gt_score.float(), reduction='none') * weight).sum() - - return loss - - -class BboxLoss(nn.Module): - def __init__(self, num_classes, reg_max, use_dfl=False, iou_type='giou'): - super(BboxLoss, self).__init__() - self.num_classes = num_classes - self.iou_loss = IOUloss(box_format='xyxy', iou_type=iou_type, eps=1e-10) - self.reg_max = reg_max - self.use_dfl = use_dfl - - def forward(self, pred_dist, pred_bboxes, t_pred_dist, t_pred_bboxes, temperature, anchor_points, - target_bboxes, target_scores, target_scores_sum, fg_mask): - # select positive samples mask - num_pos = fg_mask.sum() - if num_pos > 0: - # iou loss - bbox_mask = fg_mask.unsqueeze(-1).repeat([1, 1, 4]) - pred_bboxes_pos = torch.masked_select(pred_bboxes, - bbox_mask).reshape([-1, 4]) - t_pred_bboxes_pos = torch.masked_select(t_pred_bboxes, - bbox_mask).reshape([-1, 4]) - target_bboxes_pos = torch.masked_select( - target_bboxes, bbox_mask).reshape([-1, 4]) - bbox_weight = torch.masked_select( - target_scores.sum(-1), fg_mask).unsqueeze(-1) - loss_iou = self.iou_loss(pred_bboxes_pos, - target_bboxes_pos) * bbox_weight - if target_scores_sum == 0: - loss_iou = loss_iou.sum() - else: - loss_iou = loss_iou.sum() / target_scores_sum - - # dfl loss - if self.use_dfl: - dist_mask = fg_mask.unsqueeze(-1).repeat( - [1, 1, (self.reg_max + 1) * 4]) - pred_dist_pos = torch.masked_select( - pred_dist, dist_mask).reshape([-1, 4, self.reg_max + 1]) - t_pred_dist_pos = torch.masked_select( - t_pred_dist, dist_mask).reshape([-1, 4, self.reg_max + 1]) - target_ltrb = bbox2dist(anchor_points, target_bboxes, self.reg_max) - target_ltrb_pos = torch.masked_select( - target_ltrb, bbox_mask).reshape([-1, 4]) - loss_dfl = self._df_loss(pred_dist_pos, - target_ltrb_pos) * bbox_weight - d_loss_dfl = self.distill_loss_dfl(pred_dist_pos, t_pred_dist_pos, temperature) * bbox_weight - if target_scores_sum == 0: - loss_dfl = loss_dfl.sum() - d_loss_dfl = d_loss_dfl.sum() - else: - loss_dfl = loss_dfl.sum() / target_scores_sum - d_loss_dfl = d_loss_dfl.sum() / target_scores_sum - else: - loss_dfl = pred_dist.sum() * 0. - d_loss_dfl = pred_dist.sum() * 0. - - else: - - loss_iou = pred_dist.sum() * 0. - loss_dfl = pred_dist.sum() * 0. - d_loss_dfl = pred_dist.sum() * 0. - - return loss_iou, loss_dfl, d_loss_dfl - - def _df_loss(self, pred_dist, target): - target_left = target.to(torch.long) - target_right = target_left + 1 - weight_left = target_right.to(torch.float) - target - weight_right = 1 - weight_left - loss_left = F.cross_entropy( - pred_dist.view(-1, self.reg_max + 1), target_left.view(-1), reduction='none').view( - target_left.shape) * weight_left - loss_right = F.cross_entropy( - pred_dist.view(-1, self.reg_max + 1), target_right.view(-1), reduction='none').view( - target_left.shape) * weight_right - return (loss_left + loss_right).mean(-1, keepdim=True) - - def distill_loss_dfl(self, logits_student, logits_teacher, temperature=20): - - logits_student = logits_student.view(-1,17) - logits_teacher = logits_teacher.view(-1,17) - pred_student = F.softmax(logits_student / temperature, dim=1) - pred_teacher = F.softmax(logits_teacher / temperature, dim=1) - log_pred_student = torch.log(pred_student) - - d_loss_dfl = F.kl_div(log_pred_student, pred_teacher, reduction="none").sum(1).mean() - d_loss_dfl *= temperature**2 - return d_loss_dfl diff --git a/cv/detection/yolov6/pytorch/yolov6/models/losses/loss_distill_ns.py b/cv/detection/yolov6/pytorch/yolov6/models/losses/loss_distill_ns.py deleted file mode 100644 index 9a5ba9b78..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/models/losses/loss_distill_ns.py +++ /dev/null @@ -1,350 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- - -import torch -import torch.nn as nn -import numpy as np -import torch.nn.functional as F -from yolov6.assigners.anchor_generator import generate_anchors -from yolov6.utils.general import dist2bbox, bbox2dist, xywh2xyxy -from yolov6.utils.figure_iou import IOUloss -from yolov6.assigners.atss_assigner import ATSSAssigner -from yolov6.assigners.tal_assigner import TaskAlignedAssigner - - -class ComputeLoss: - '''Loss computation func.''' - def __init__(self, - fpn_strides=[8, 16, 32], - grid_cell_size=5.0, - grid_cell_offset=0.5, - num_classes=80, - ori_img_size=640, - warmup_epoch=0, - use_dfl=True, - reg_max=16, - iou_type='giou', - loss_weight={ - 'class': 1.0, - 'iou': 2.5, - 'dfl': 0.5, - 'cwd': 10.0}, - distill_feat = False, - distill_weight={ - 'class': 1.0, - 'dfl': 1.0, - } - ): - - self.fpn_strides = fpn_strides - self.grid_cell_size = grid_cell_size - self.grid_cell_offset = grid_cell_offset - self.num_classes = num_classes - self.ori_img_size = ori_img_size - - self.warmup_epoch = warmup_epoch - self.formal_assigner = TaskAlignedAssigner(topk=13, num_classes=self.num_classes, alpha=1.0, beta=6.0) - - self.use_dfl = use_dfl - self.reg_max = reg_max - self.proj = nn.Parameter(torch.linspace(0, self.reg_max, self.reg_max + 1), requires_grad=False) - self.iou_type = iou_type - self.varifocal_loss = VarifocalLoss().cuda() - self.bbox_loss = BboxLoss(self.num_classes, self.reg_max, self.use_dfl, self.iou_type).cuda() - self.loss_weight = loss_weight - self.distill_feat = distill_feat - self.distill_weight = distill_weight - - def __call__( - self, - outputs, - t_outputs, - s_featmaps, - t_featmaps, - targets, - epoch_num, - max_epoch, - temperature, - step_num, - batch_height, - batch_width - ): - - feats, pred_scores, pred_distri, pred_lrtb = outputs - t_feats, t_pred_scores, t_pred_distri = t_outputs[0], t_outputs[-2], t_outputs[-1] - anchors, anchor_points, n_anchors_list, stride_tensor = \ - generate_anchors(feats, self.fpn_strides, self.grid_cell_size, self.grid_cell_offset, device=feats[0].device) - t_anchors, t_anchor_points, t_n_anchors_list, t_stride_tensor = \ - generate_anchors(t_feats, self.fpn_strides, self.grid_cell_size, self.grid_cell_offset, device=feats[0].device) - - assert pred_scores.type() == pred_distri.type() - gt_bboxes_scale = torch.tensor([batch_width, batch_height, batch_width, batch_height]).type_as(pred_scores) - batch_size = pred_scores.shape[0] - - # targets - targets =self.preprocess(targets, batch_size, gt_bboxes_scale) - gt_labels = targets[:, :, :1] - gt_bboxes = targets[:, :, 1:] #xyxy - mask_gt = (gt_bboxes.sum(-1, keepdim=True) > 0).float() - - # pboxes - anchor_points_s = anchor_points / stride_tensor - pred_bboxes = self.bbox_decode(anchor_points_s, pred_distri) #xyxy #distri branch - pred_bboxes_lrtb = dist2bbox(pred_lrtb, anchor_points_s) #iou branch - t_anchor_points_s = t_anchor_points / t_stride_tensor - t_pred_bboxes = self.bbox_decode(t_anchor_points_s, t_pred_distri) #xyxy - try: - target_labels, target_bboxes, target_scores, fg_mask = \ - self.formal_assigner( - pred_scores.detach(), - pred_bboxes.detach() * stride_tensor, - anchor_points, - gt_labels, - gt_bboxes, - mask_gt) - - except RuntimeError: - print( - "OOM RuntimeError is raised due to the huge memory cost during label assignment. \ - CPU mode is applied in this batch. If you want to avoid this issue, \ - try to reduce the batch size or image size." - ) - torch.cuda.empty_cache() - print("------------CPU Mode for This Batch-------------") - _pred_scores = pred_scores.detach().cpu().float() - _pred_bboxes = pred_bboxes.detach().cpu().float() - _anchor_points = anchor_points.cpu().float() - _gt_labels = gt_labels.cpu().float() - _gt_bboxes = gt_bboxes.cpu().float() - _mask_gt = mask_gt.cpu().float() - _stride_tensor = stride_tensor.cpu().float() - - target_labels, target_bboxes, target_scores, fg_mask = \ - self.formal_assigner( - _pred_scores, - _pred_bboxes * _stride_tensor, - _anchor_points, - _gt_labels, - _gt_bboxes, - _mask_gt) - - target_labels = target_labels.cuda() - target_bboxes = target_bboxes.cuda() - target_scores = target_scores.cuda() - fg_mask = fg_mask.cuda() - - #Dynamic release GPU memory - if step_num % 10 == 0: - torch.cuda.empty_cache() - - # rescale bbox - target_bboxes /= stride_tensor - - # cls loss - target_labels = torch.where(fg_mask > 0, target_labels, torch.full_like(target_labels, self.num_classes)) - one_hot_label = F.one_hot(target_labels.long(), self.num_classes + 1)[..., :-1] - loss_cls = self.varifocal_loss(pred_scores, target_scores, one_hot_label) - - target_scores_sum = target_scores.sum() - # avoid devide zero error, devide by zero will cause loss to be inf or nan. - if target_scores_sum > 0: - loss_cls /= target_scores_sum - - # bbox loss - loss_iou, loss_dfl, d_loss_dfl = self.bbox_loss(pred_distri, - pred_bboxes_lrtb, - pred_bboxes, - t_pred_distri, - t_pred_bboxes, - temperature, - anchor_points_s, - target_bboxes, - target_scores, - target_scores_sum, - fg_mask) - - logits_student = pred_scores - logits_teacher = t_pred_scores - distill_num_classes = self.num_classes - d_loss_cls = self.distill_loss_cls(logits_student, logits_teacher, distill_num_classes, temperature) - if self.distill_feat: - d_loss_cw = self.distill_loss_cw(s_featmaps, t_featmaps) - else: - d_loss_cw = torch.tensor(0.).to(feats[0].device) - import math - distill_weightdecay = ((1 - math.cos(epoch_num * math.pi / max_epoch)) / 2) * (0.01- 1) + 1 - d_loss_dfl *= distill_weightdecay - d_loss_cls *= distill_weightdecay - d_loss_cw *= distill_weightdecay - loss_cls_all = loss_cls + d_loss_cls * self.distill_weight['class'] - loss_dfl_all = loss_dfl + d_loss_dfl * self.distill_weight['dfl'] - loss = self.loss_weight['class'] * loss_cls_all + \ - self.loss_weight['iou'] * loss_iou + \ - self.loss_weight['dfl'] * loss_dfl_all + \ - self.loss_weight['cwd'] * d_loss_cw - - return loss, \ - torch.cat(((self.loss_weight['iou'] * loss_iou).unsqueeze(0), - (self.loss_weight['dfl'] * loss_dfl_all).unsqueeze(0), - (self.loss_weight['class'] * loss_cls_all).unsqueeze(0), - (self.loss_weight['cwd'] * d_loss_cw).unsqueeze(0))).detach() - - def distill_loss_cls(self, logits_student, logits_teacher, num_classes, temperature=20): - logits_student = logits_student.view(-1, num_classes) - logits_teacher = logits_teacher.view(-1, num_classes) - pred_student = F.softmax(logits_student / temperature, dim=1) - pred_teacher = F.softmax(logits_teacher / temperature, dim=1) - log_pred_student = torch.log(pred_student) - - d_loss_cls = F.kl_div(log_pred_student, pred_teacher, reduction="sum") - d_loss_cls *= temperature**2 - return d_loss_cls - - def distill_loss_cw(self, s_feats, t_feats, temperature=1): - N,C,H,W = s_feats[0].shape - # print(N,C,H,W) - loss_cw = F.kl_div(F.log_softmax(s_feats[0].view(N,C,H*W)/temperature, dim=2), - F.log_softmax(t_feats[0].view(N,C,H*W).detach()/temperature, dim=2), - reduction='sum', - log_target=True) * (temperature * temperature)/ (N*C) - - N,C,H,W = s_feats[1].shape - # print(N,C,H,W) - loss_cw += F.kl_div(F.log_softmax(s_feats[1].view(N,C,H*W)/temperature, dim=2), - F.log_softmax(t_feats[1].view(N,C,H*W).detach()/temperature, dim=2), - reduction='sum', - log_target=True) * (temperature * temperature)/ (N*C) - - N,C,H,W = s_feats[2].shape - # print(N,C,H,W) - loss_cw += F.kl_div(F.log_softmax(s_feats[2].view(N,C,H*W)/temperature, dim=2), - F.log_softmax(t_feats[2].view(N,C,H*W).detach()/temperature, dim=2), - reduction='sum', - log_target=True) * (temperature * temperature)/ (N*C) - # print(loss_cw) - return loss_cw - - def preprocess(self, targets, batch_size, scale_tensor): - targets_list = np.zeros((batch_size, 1, 5)).tolist() - for i, item in enumerate(targets.cpu().numpy().tolist()): - targets_list[int(item[0])].append(item[1:]) - max_len = max((len(l) for l in targets_list)) - targets = torch.from_numpy(np.array(list(map(lambda l:l + [[-1,0,0,0,0]]*(max_len - len(l)), targets_list)))[:,1:,:]).to(targets.device) - batch_target = targets[:, :, 1:5].mul_(scale_tensor) - targets[..., 1:] = xywh2xyxy(batch_target) - return targets - - def bbox_decode(self, anchor_points, pred_dist): - if self.use_dfl: - batch_size, n_anchors, _ = pred_dist.shape - pred_dist = F.softmax(pred_dist.view(batch_size, n_anchors, 4, self.reg_max + 1), dim=-1).matmul(self.proj.to(pred_dist.device)) - return dist2bbox(pred_dist, anchor_points) - - -class VarifocalLoss(nn.Module): - def __init__(self): - super(VarifocalLoss, self).__init__() - - def forward(self, pred_score,gt_score, label, alpha=0.75, gamma=2.0): - - weight = alpha * pred_score.pow(gamma) * (1 - label) + gt_score * label - with torch.cuda.amp.autocast(enabled=False): - loss = (F.binary_cross_entropy(pred_score.float(), gt_score.float(), reduction='none') * weight).sum() - - return loss - - -class BboxLoss(nn.Module): - def __init__(self, num_classes, reg_max, use_dfl=False, iou_type='giou'): - super(BboxLoss, self).__init__() - self.num_classes = num_classes - self.iou_loss = IOUloss(box_format='xyxy', iou_type=iou_type, eps=1e-10) - self.reg_max = reg_max - self.use_dfl = use_dfl - - def forward(self, pred_dist, pred_bboxes_lrtb, pred_bboxes, t_pred_dist, t_pred_bboxes, temperature, anchor_points, - target_bboxes, target_scores, target_scores_sum, fg_mask): - # select positive samples mask - num_pos = fg_mask.sum() - if num_pos > 0: - # iou loss - bbox_mask = fg_mask.unsqueeze(-1).repeat([1, 1, 4]) - pred_bboxes_pos = torch.masked_select(pred_bboxes, - bbox_mask).reshape([-1, 4]) - pred_bboxes_lrtb_pos = torch.masked_select(pred_bboxes_lrtb, - bbox_mask).reshape([-1, 4]) - t_pred_bboxes_pos = torch.masked_select(t_pred_bboxes, - bbox_mask).reshape([-1, 4]) - target_bboxes_pos = torch.masked_select( - target_bboxes, bbox_mask).reshape([-1, 4]) - bbox_weight = torch.masked_select( - target_scores.sum(-1), fg_mask).unsqueeze(-1) - loss_iou = self.iou_loss(pred_bboxes_pos, - target_bboxes_pos) * bbox_weight - loss_iou_lrtb = self.iou_loss(pred_bboxes_lrtb_pos, - target_bboxes_pos) * bbox_weight - - if target_scores_sum == 0: - loss_iou = loss_iou.sum() - loss_iou_lrtb = loss_iou_lrtb.sum() - else: - loss_iou = loss_iou.sum() / target_scores_sum - loss_iou_lrtb = loss_iou_lrtb.sum() / target_scores_sum - - # dfl loss - if self.use_dfl: - dist_mask = fg_mask.unsqueeze(-1).repeat( - [1, 1, (self.reg_max + 1) * 4]) - pred_dist_pos = torch.masked_select( - pred_dist, dist_mask).reshape([-1, 4, self.reg_max + 1]) - t_pred_dist_pos = torch.masked_select( - t_pred_dist, dist_mask).reshape([-1, 4, self.reg_max + 1]) - target_ltrb = bbox2dist(anchor_points, target_bboxes, self.reg_max) - target_ltrb_pos = torch.masked_select( - target_ltrb, bbox_mask).reshape([-1, 4]) - loss_dfl = self._df_loss(pred_dist_pos, - target_ltrb_pos) * bbox_weight - d_loss_dfl = self.distill_loss_dfl(pred_dist_pos, t_pred_dist_pos, temperature) * bbox_weight - if target_scores_sum == 0: - loss_dfl = loss_dfl.sum() - d_loss_dfl = d_loss_dfl.sum() - else: - loss_dfl = loss_dfl.sum() / target_scores_sum - d_loss_dfl = d_loss_dfl.sum() / target_scores_sum - else: - loss_dfl = pred_dist.sum() * 0. - d_loss_dfl = pred_dist.sum() * 0. - - else: - - loss_iou = pred_dist.sum() * 0. - loss_dfl = pred_dist.sum() * 0. - d_loss_dfl = pred_dist.sum() * 0. - loss_iou_lrtb = pred_dist.sum() * 0. - - return (loss_iou + loss_iou_lrtb), loss_dfl, d_loss_dfl - - def _df_loss(self, pred_dist, target): - target_left = target.to(torch.long) - target_right = target_left + 1 - weight_left = target_right.to(torch.float) - target - weight_right = 1 - weight_left - loss_left = F.cross_entropy( - pred_dist.view(-1, self.reg_max + 1), target_left.view(-1), reduction='none').view( - target_left.shape) * weight_left - loss_right = F.cross_entropy( - pred_dist.view(-1, self.reg_max + 1), target_right.view(-1), reduction='none').view( - target_left.shape) * weight_right - return (loss_left + loss_right).mean(-1, keepdim=True) - - def distill_loss_dfl(self, logits_student, logits_teacher, temperature=20): - - logits_student = logits_student.view(-1,17) - logits_teacher = logits_teacher.view(-1,17) - pred_student = F.softmax(logits_student / temperature, dim=1) - pred_teacher = F.softmax(logits_teacher / temperature, dim=1) - log_pred_student = torch.log(pred_student) - - d_loss_dfl = F.kl_div(log_pred_student, pred_teacher, reduction="none").sum(1).mean() - d_loss_dfl *= temperature**2 - return d_loss_dfl diff --git a/cv/detection/yolov6/pytorch/yolov6/models/losses/loss_fuseab.py b/cv/detection/yolov6/pytorch/yolov6/models/losses/loss_fuseab.py deleted file mode 100644 index 4ae91f376..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/models/losses/loss_fuseab.py +++ /dev/null @@ -1,243 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- - -import torch -import torch.nn as nn -import numpy as np -import torch.nn.functional as F -from yolov6.assigners.anchor_generator import generate_anchors -from yolov6.utils.general import dist2bbox, bbox2dist, xywh2xyxy, box_iou -from yolov6.utils.figure_iou import IOUloss -from yolov6.assigners.tal_assigner import TaskAlignedAssigner - - -class ComputeLoss: - '''Loss computation func.''' - def __init__(self, - fpn_strides=[8, 16, 32], - grid_cell_size=5.0, - grid_cell_offset=0.5, - num_classes=80, - ori_img_size=640, - warmup_epoch=0, - use_dfl=True, - reg_max=16, - iou_type='giou', - loss_weight={ - 'class': 1.0, - 'iou': 2.5, - 'dfl': 0.5}, - ): - - self.fpn_strides = fpn_strides - self.grid_cell_size = grid_cell_size - self.grid_cell_offset = grid_cell_offset - self.num_classes = num_classes - self.ori_img_size = ori_img_size - - self.warmup_epoch = warmup_epoch - self.formal_assigner = TaskAlignedAssigner(topk=26, num_classes=self.num_classes, alpha=1.0, beta=6.0) - - self.use_dfl = use_dfl - self.reg_max = reg_max - self.proj = nn.Parameter(torch.linspace(0, self.reg_max, self.reg_max + 1), requires_grad=False) - self.iou_type = iou_type - self.varifocal_loss = VarifocalLoss().cuda() - self.bbox_loss = BboxLoss(self.num_classes, self.reg_max, self.use_dfl, self.iou_type).cuda() - self.loss_weight = loss_weight - - def __call__( - self, - outputs, - targets, - epoch_num, - step_num, - batch_height, - batch_width - ): - - feats, pred_scores, pred_distri = outputs - anchors, anchor_points, n_anchors_list, stride_tensor = \ - generate_anchors(feats, self.fpn_strides, self.grid_cell_size, self.grid_cell_offset, device=feats[0].device, is_eval=False, mode='ab') - - assert pred_scores.type() == pred_distri.type() - gt_bboxes_scale = torch.tensor([batch_width, batch_height, batch_width, batch_height]).type_as(pred_scores) - batch_size = pred_scores.shape[0] - - # targets - targets =self.preprocess(targets, batch_size, gt_bboxes_scale) - gt_labels = targets[:, :, :1] - gt_bboxes = targets[:, :, 1:] #xyxy - mask_gt = (gt_bboxes.sum(-1, keepdim=True) > 0).float() - - # pboxes - anchor_points_s = anchor_points / stride_tensor - pred_distri[..., :2] += anchor_points_s - pred_bboxes = xywh2xyxy(pred_distri) - - try: - target_labels, target_bboxes, target_scores, fg_mask = \ - self.formal_assigner( - pred_scores.detach(), - pred_bboxes.detach() * stride_tensor, - anchor_points, - gt_labels, - gt_bboxes, - mask_gt) - - except RuntimeError: - print( - "OOM RuntimeError is raised due to the huge memory cost during label assignment. \ - CPU mode is applied in this batch. If you want to avoid this issue, \ - try to reduce the batch size or image size." - ) - torch.cuda.empty_cache() - print("------------CPU Mode for This Batch-------------") - - _pred_scores = pred_scores.detach().cpu().float() - _pred_bboxes = pred_bboxes.detach().cpu().float() - _anchor_points = anchor_points.cpu().float() - _gt_labels = gt_labels.cpu().float() - _gt_bboxes = gt_bboxes.cpu().float() - _mask_gt = mask_gt.cpu().float() - _stride_tensor = stride_tensor.cpu().float() - - target_labels, target_bboxes, target_scores, fg_mask = \ - self.formal_assigner( - _pred_scores, - _pred_bboxes * _stride_tensor, - _anchor_points, - _gt_labels, - _gt_bboxes, - _mask_gt) - - target_labels = target_labels.cuda() - target_bboxes = target_bboxes.cuda() - target_scores = target_scores.cuda() - fg_mask = fg_mask.cuda() - #Dynamic release GPU memory - if step_num % 10 == 0: - torch.cuda.empty_cache() - - # rescale bbox - target_bboxes /= stride_tensor - - # cls loss - target_labels = torch.where(fg_mask > 0, target_labels, torch.full_like(target_labels, self.num_classes)) - one_hot_label = F.one_hot(target_labels.long(), self.num_classes + 1)[..., :-1] - loss_cls = self.varifocal_loss(pred_scores, target_scores, one_hot_label) - - target_scores_sum = target_scores.sum() - # avoid devide zero error, devide by zero will cause loss to be inf or nan. - # if target_scores_sum is 0, loss_cls equals to 0 alson - if target_scores_sum > 0: - loss_cls /= target_scores_sum - - # bbox loss - loss_iou, loss_dfl = self.bbox_loss(pred_distri, pred_bboxes, anchor_points_s, target_bboxes, - target_scores, target_scores_sum, fg_mask) - - loss = self.loss_weight['class'] * loss_cls + \ - self.loss_weight['iou'] * loss_iou + \ - self.loss_weight['dfl'] * loss_dfl - - return loss, \ - torch.cat(((self.loss_weight['iou'] * loss_iou).unsqueeze(0), - (self.loss_weight['dfl'] * loss_dfl).unsqueeze(0), - (self.loss_weight['class'] * loss_cls).unsqueeze(0))).detach() - - def preprocess(self, targets, batch_size, scale_tensor): - targets_list = np.zeros((batch_size, 1, 5)).tolist() - for i, item in enumerate(targets.cpu().numpy().tolist()): - targets_list[int(item[0])].append(item[1:]) - max_len = max((len(l) for l in targets_list)) - targets = torch.from_numpy(np.array(list(map(lambda l:l + [[-1,0,0,0,0]]*(max_len - len(l)), targets_list)))[:,1:,:]).to(targets.device) - batch_target = targets[:, :, 1:5].mul_(scale_tensor) - targets[..., 1:] = xywh2xyxy(batch_target) - return targets - - def bbox_decode(self, anchor_points, pred_dist): - if self.use_dfl: - batch_size, n_anchors, _ = pred_dist.shape - pred_dist = F.softmax(pred_dist.view(batch_size, n_anchors, 4, self.reg_max + 1), dim=-1).matmul(self.proj.to(pred_dist.device)) - return dist2bbox(pred_dist, anchor_points) - - -class VarifocalLoss(nn.Module): - def __init__(self): - super(VarifocalLoss, self).__init__() - - def forward(self, pred_score,gt_score, label, alpha=0.75, gamma=2.0): - - weight = alpha * pred_score.pow(gamma) * (1 - label) + gt_score * label - with torch.cuda.amp.autocast(enabled=False): - loss = (F.binary_cross_entropy(pred_score.float(), gt_score.float(), reduction='none') * weight).sum() - - return loss - - -class BboxLoss(nn.Module): - def __init__(self, num_classes, reg_max, use_dfl=False, iou_type='giou'): - super(BboxLoss, self).__init__() - self.num_classes = num_classes - self.iou_loss = IOUloss(box_format='xyxy', iou_type=iou_type, eps=1e-10) - self.reg_max = reg_max - self.use_dfl = use_dfl - - def forward(self, pred_dist, pred_bboxes, anchor_points, - target_bboxes, target_scores, target_scores_sum, fg_mask): - - # select positive samples mask - num_pos = fg_mask.sum() - if num_pos > 0: - # iou loss - bbox_mask = fg_mask.unsqueeze(-1).repeat([1, 1, 4]) - pred_bboxes_pos = torch.masked_select(pred_bboxes, - bbox_mask).reshape([-1, 4]) - target_bboxes_pos = torch.masked_select( - target_bboxes, bbox_mask).reshape([-1, 4]) - bbox_weight = torch.masked_select( - target_scores.sum(-1), fg_mask).unsqueeze(-1) - loss_iou = self.iou_loss(pred_bboxes_pos, - target_bboxes_pos) * bbox_weight - if target_scores_sum == 0: - loss_iou = loss_iou.sum() - else: - loss_iou = loss_iou.sum() / target_scores_sum - - # dfl loss - if self.use_dfl: - dist_mask = fg_mask.unsqueeze(-1).repeat( - [1, 1, (self.reg_max + 1) * 4]) - pred_dist_pos = torch.masked_select( - pred_dist, dist_mask).reshape([-1, 4, self.reg_max + 1]) - target_ltrb = bbox2dist(anchor_points, target_bboxes, self.reg_max) - target_ltrb_pos = torch.masked_select( - target_ltrb, bbox_mask).reshape([-1, 4]) - loss_dfl = self._df_loss(pred_dist_pos, - target_ltrb_pos) * bbox_weight - if target_scores_sum == 0: - loss_dfl = loss_dfl.sum() - else: - loss_dfl = loss_dfl.sum() / target_scores_sum - else: - loss_dfl = pred_dist.sum() * 0. - - else: - loss_iou = pred_dist.sum() * 0. - loss_dfl = pred_dist.sum() * 0. - - return loss_iou, loss_dfl - - def _df_loss(self, pred_dist, target): - target_left = target.to(torch.long) - target_right = target_left + 1 - weight_left = target_right.to(torch.float) - target - weight_right = 1 - weight_left - loss_left = F.cross_entropy( - pred_dist.view(-1, self.reg_max + 1), target_left.view(-1), reduction='none').view( - target_left.shape) * weight_left - loss_right = F.cross_entropy( - pred_dist.view(-1, self.reg_max + 1), target_right.view(-1), reduction='none').view( - target_left.shape) * weight_right - return (loss_left + loss_right).mean(-1, keepdim=True) diff --git a/cv/detection/yolov6/pytorch/yolov6/models/reppan.py b/cv/detection/yolov6/pytorch/yolov6/models/reppan.py deleted file mode 100644 index 2114f5212..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/models/reppan.py +++ /dev/null @@ -1,1226 +0,0 @@ -import torch -from torch import nn -from yolov6.layers.common import RepBlock, RepVGGBlock, BottleRep, BepC3, ConvBNReLU, Transpose, BiFusion, \ - MBLABlock, ConvBNHS, CSPBlock, DPBlock - -# _QUANT=False -class RepPANNeck(nn.Module): - """RepPANNeck Module - EfficientRep is the default backbone of this model. - RepPANNeck has the balance of feature fusion ability and hardware efficiency. - """ - - def __init__( - self, - channels_list=None, - num_repeats=None, - block=RepVGGBlock - ): - super().__init__() - - assert channels_list is not None - assert num_repeats is not None - - self.Rep_p4 = RepBlock( - in_channels=channels_list[3] + channels_list[5], - out_channels=channels_list[5], - n=num_repeats[5], - block=block - ) - - self.Rep_p3 = RepBlock( - in_channels=channels_list[2] + channels_list[6], - out_channels=channels_list[6], - n=num_repeats[6], - block=block - ) - - self.Rep_n3 = RepBlock( - in_channels=channels_list[6] + channels_list[7], - out_channels=channels_list[8], - n=num_repeats[7], - block=block - ) - - self.Rep_n4 = RepBlock( - in_channels=channels_list[5] + channels_list[9], - out_channels=channels_list[10], - n=num_repeats[8], - block=block - ) - - self.reduce_layer0 = ConvBNReLU( - in_channels=channels_list[4], - out_channels=channels_list[5], - kernel_size=1, - stride=1 - ) - - self.upsample0 = Transpose( - in_channels=channels_list[5], - out_channels=channels_list[5], - ) - - self.reduce_layer1 = ConvBNReLU( - in_channels=channels_list[5], - out_channels=channels_list[6], - kernel_size=1, - stride=1 - ) - - self.upsample1 = Transpose( - in_channels=channels_list[6], - out_channels=channels_list[6] - ) - - self.downsample2 = ConvBNReLU( - in_channels=channels_list[6], - out_channels=channels_list[7], - kernel_size=3, - stride=2 - ) - - self.downsample1 = ConvBNReLU( - in_channels=channels_list[8], - out_channels=channels_list[9], - kernel_size=3, - stride=2 - ) - - def upsample_enable_quant(self, num_bits, calib_method): - print("Insert fakequant after upsample") - # Insert fakequant after upsample op to build TensorRT engine - from pytorch_quantization import nn as quant_nn - from pytorch_quantization.tensor_quant import QuantDescriptor - conv2d_input_default_desc = QuantDescriptor(num_bits=num_bits, calib_method=calib_method) - self.upsample_feat0_quant = quant_nn.TensorQuantizer(conv2d_input_default_desc) - self.upsample_feat1_quant = quant_nn.TensorQuantizer(conv2d_input_default_desc) - # global _QUANT - self._QUANT = True - - def forward(self, input): - - (x2, x1, x0) = input - - fpn_out0 = self.reduce_layer0(x0) - upsample_feat0 = self.upsample0(fpn_out0) - if hasattr(self, '_QUANT') and self._QUANT is True: - upsample_feat0 = self.upsample_feat0_quant(upsample_feat0) - f_concat_layer0 = torch.cat([upsample_feat0, x1], 1) - f_out0 = self.Rep_p4(f_concat_layer0) - - fpn_out1 = self.reduce_layer1(f_out0) - upsample_feat1 = self.upsample1(fpn_out1) - if hasattr(self, '_QUANT') and self._QUANT is True: - upsample_feat1 = self.upsample_feat1_quant(upsample_feat1) - f_concat_layer1 = torch.cat([upsample_feat1, x2], 1) - pan_out2 = self.Rep_p3(f_concat_layer1) - - down_feat1 = self.downsample2(pan_out2) - p_concat_layer1 = torch.cat([down_feat1, fpn_out1], 1) - pan_out1 = self.Rep_n3(p_concat_layer1) - - down_feat0 = self.downsample1(pan_out1) - p_concat_layer2 = torch.cat([down_feat0, fpn_out0], 1) - pan_out0 = self.Rep_n4(p_concat_layer2) - - outputs = [pan_out2, pan_out1, pan_out0] - - return outputs - - -class RepBiFPANNeck(nn.Module): - """RepBiFPANNeck Module - """ - # [64, 128, 256, 512, 1024] - # [256, 128, 128, 256, 256, 512] - - def __init__( - self, - channels_list=None, - num_repeats=None, - block=RepVGGBlock - ): - super().__init__() - - assert channels_list is not None - assert num_repeats is not None - - self.reduce_layer0 = ConvBNReLU( - in_channels=channels_list[4], # 1024 - out_channels=channels_list[5], # 256 - kernel_size=1, - stride=1 - ) - - self.Bifusion0 = BiFusion( - in_channels=[channels_list[3], channels_list[2]], # 512, 256 - out_channels=channels_list[5], # 256 - ) - self.Rep_p4 = RepBlock( - in_channels=channels_list[5], # 256 - out_channels=channels_list[5], # 256 - n=num_repeats[5], - block=block - ) - - self.reduce_layer1 = ConvBNReLU( - in_channels=channels_list[5], # 256 - out_channels=channels_list[6], # 128 - kernel_size=1, - stride=1 - ) - - self.Bifusion1 = BiFusion( - in_channels=[channels_list[2], channels_list[1]], # 256, 128 - out_channels=channels_list[6], # 128 - ) - - self.Rep_p3 = RepBlock( - in_channels=channels_list[6], # 128 - out_channels=channels_list[6], # 128 - n=num_repeats[6], - block=block - ) - - self.downsample2 = ConvBNReLU( - in_channels=channels_list[6], # 128 - out_channels=channels_list[7], # 128 - kernel_size=3, - stride=2 - ) - - self.Rep_n3 = RepBlock( - in_channels=channels_list[6] + channels_list[7], # 128 + 128 - out_channels=channels_list[8], # 256 - n=num_repeats[7], - block=block - ) - - self.downsample1 = ConvBNReLU( - in_channels=channels_list[8], # 256 - out_channels=channels_list[9], # 256 - kernel_size=3, - stride=2 - ) - - self.Rep_n4 = RepBlock( - in_channels=channels_list[5] + channels_list[9], # 256 + 256 - out_channels=channels_list[10], # 512 - n=num_repeats[8], - block=block - ) - - - def forward(self, input): - - (x3, x2, x1, x0) = input - - fpn_out0 = self.reduce_layer0(x0) - f_concat_layer0 = self.Bifusion0([fpn_out0, x1, x2]) - f_out0 = self.Rep_p4(f_concat_layer0) - - fpn_out1 = self.reduce_layer1(f_out0) - f_concat_layer1 = self.Bifusion1([fpn_out1, x2, x3]) - pan_out2 = self.Rep_p3(f_concat_layer1) - - down_feat1 = self.downsample2(pan_out2) - p_concat_layer1 = torch.cat([down_feat1, fpn_out1], 1) - pan_out1 = self.Rep_n3(p_concat_layer1) - - down_feat0 = self.downsample1(pan_out1) - p_concat_layer2 = torch.cat([down_feat0, fpn_out0], 1) - pan_out0 = self.Rep_n4(p_concat_layer2) - - outputs = [pan_out2, pan_out1, pan_out0] - - return outputs - - -class RepPANNeck6(nn.Module): - """RepPANNeck+P6 Module - EfficientRep is the default backbone of this model. - RepPANNeck has the balance of feature fusion ability and hardware efficiency. - """ - # [64, 128, 256, 512, 768, 1024] - # [512, 256, 128, 256, 512, 1024] - def __init__( - self, - channels_list=None, - num_repeats=None, - block=RepVGGBlock - ): - super().__init__() - - assert channels_list is not None - assert num_repeats is not None - - self.reduce_layer0 = ConvBNReLU( - in_channels=channels_list[5], # 1024 - out_channels=channels_list[6], # 512 - kernel_size=1, - stride=1 - ) - - self.upsample0 = Transpose( - in_channels=channels_list[6], # 512 - out_channels=channels_list[6], # 512 - ) - - self.Rep_p5 = RepBlock( - in_channels=channels_list[4] + channels_list[6], # 768 + 512 - out_channels=channels_list[6], # 512 - n=num_repeats[6], - block=block - ) - - self.reduce_layer1 = ConvBNReLU( - in_channels=channels_list[6], # 512 - out_channels=channels_list[7], # 256 - kernel_size=1, - stride=1 - ) - - self.upsample1 = Transpose( - in_channels=channels_list[7], # 256 - out_channels=channels_list[7] # 256 - ) - - self.Rep_p4 = RepBlock( - in_channels=channels_list[3] + channels_list[7], # 512 + 256 - out_channels=channels_list[7], # 256 - n=num_repeats[7], - block=block - ) - - self.reduce_layer2 = ConvBNReLU( - in_channels=channels_list[7], # 256 - out_channels=channels_list[8], # 128 - kernel_size=1, - stride=1 - ) - - self.upsample2 = Transpose( - in_channels=channels_list[8], # 128 - out_channels=channels_list[8] # 128 - ) - - self.Rep_p3 = RepBlock( - in_channels=channels_list[2] + channels_list[8], # 256 + 128 - out_channels=channels_list[8], # 128 - n=num_repeats[8], - block=block - ) - - self.downsample2 = ConvBNReLU( - in_channels=channels_list[8], # 128 - out_channels=channels_list[8], # 128 - kernel_size=3, - stride=2 - ) - - self.Rep_n4 = RepBlock( - in_channels=channels_list[8] + channels_list[8], # 128 + 128 - out_channels=channels_list[9], # 256 - n=num_repeats[9], - block=block - ) - - self.downsample1 = ConvBNReLU( - in_channels=channels_list[9], # 256 - out_channels=channels_list[9], # 256 - kernel_size=3, - stride=2 - ) - - self.Rep_n5 = RepBlock( - in_channels=channels_list[7] + channels_list[9], # 256 + 256 - out_channels=channels_list[10], # 512 - n=num_repeats[10], - block=block - ) - - self.downsample0 = ConvBNReLU( - in_channels=channels_list[10], # 512 - out_channels=channels_list[10], # 512 - kernel_size=3, - stride=2 - ) - - self.Rep_n6 = RepBlock( - in_channels=channels_list[6] + channels_list[10], # 512 + 512 - out_channels=channels_list[11], # 1024 - n=num_repeats[11], - block=block - ) - - - def forward(self, input): - - (x3, x2, x1, x0) = input - - fpn_out0 = self.reduce_layer0(x0) - upsample_feat0 = self.upsample0(fpn_out0) - f_concat_layer0 = torch.cat([upsample_feat0, x1], 1) - f_out0 = self.Rep_p5(f_concat_layer0) - - fpn_out1 = self.reduce_layer1(f_out0) - upsample_feat1 = self.upsample1(fpn_out1) - f_concat_layer1 = torch.cat([upsample_feat1, x2], 1) - f_out1 = self.Rep_p4(f_concat_layer1) - - fpn_out2 = self.reduce_layer2(f_out1) - upsample_feat2 = self.upsample2(fpn_out2) - f_concat_layer2 = torch.cat([upsample_feat2, x3], 1) - pan_out3 = self.Rep_p3(f_concat_layer2) # P3 - - down_feat2 = self.downsample2(pan_out3) - p_concat_layer2 = torch.cat([down_feat2, fpn_out2], 1) - pan_out2 = self.Rep_n4(p_concat_layer2) # P4 - - down_feat1 = self.downsample1(pan_out2) - p_concat_layer1 = torch.cat([down_feat1, fpn_out1], 1) - pan_out1 = self.Rep_n5(p_concat_layer1) # P5 - - down_feat0 = self.downsample0(pan_out1) - p_concat_layer0 = torch.cat([down_feat0, fpn_out0], 1) - pan_out0 = self.Rep_n6(p_concat_layer0) # P6 - - outputs = [pan_out3, pan_out2, pan_out1, pan_out0] - - return outputs - - -class RepBiFPANNeck6(nn.Module): - """RepBiFPANNeck_P6 Module - """ - # [64, 128, 256, 512, 768, 1024] - # [512, 256, 128, 256, 512, 1024] - - def __init__( - self, - channels_list=None, - num_repeats=None, - block=RepVGGBlock - ): - super().__init__() - - assert channels_list is not None - assert num_repeats is not None - - self.reduce_layer0 = ConvBNReLU( - in_channels=channels_list[5], # 1024 - out_channels=channels_list[6], # 512 - kernel_size=1, - stride=1 - ) - - self.Bifusion0 = BiFusion( - in_channels=[channels_list[4], channels_list[6]], # 768, 512 - out_channels=channels_list[6], # 512 - ) - - self.Rep_p5 = RepBlock( - in_channels=channels_list[6], # 512 - out_channels=channels_list[6], # 512 - n=num_repeats[6], - block=block - ) - - self.reduce_layer1 = ConvBNReLU( - in_channels=channels_list[6], # 512 - out_channels=channels_list[7], # 256 - kernel_size=1, - stride=1 - ) - - self.Bifusion1 = BiFusion( - in_channels=[channels_list[3], channels_list[7]], # 512, 256 - out_channels=channels_list[7], # 256 - ) - - self.Rep_p4 = RepBlock( - in_channels=channels_list[7], # 256 - out_channels=channels_list[7], # 256 - n=num_repeats[7], - block=block - ) - - self.reduce_layer2 = ConvBNReLU( - in_channels=channels_list[7], # 256 - out_channels=channels_list[8], # 128 - kernel_size=1, - stride=1 - ) - - self.Bifusion2 = BiFusion( - in_channels=[channels_list[2], channels_list[8]], # 256, 128 - out_channels=channels_list[8], # 128 - ) - - self.Rep_p3 = RepBlock( - in_channels=channels_list[8], # 128 - out_channels=channels_list[8], # 128 - n=num_repeats[8], - block=block - ) - - self.downsample2 = ConvBNReLU( - in_channels=channels_list[8], # 128 - out_channels=channels_list[8], # 128 - kernel_size=3, - stride=2 - ) - - self.Rep_n4 = RepBlock( - in_channels=channels_list[8] + channels_list[8], # 128 + 128 - out_channels=channels_list[9], # 256 - n=num_repeats[9], - block=block - ) - - self.downsample1 = ConvBNReLU( - in_channels=channels_list[9], # 256 - out_channels=channels_list[9], # 256 - kernel_size=3, - stride=2 - ) - - self.Rep_n5 = RepBlock( - in_channels=channels_list[7] + channels_list[9], # 256 + 256 - out_channels=channels_list[10], # 512 - n=num_repeats[10], - block=block - ) - - self.downsample0 = ConvBNReLU( - in_channels=channels_list[10], # 512 - out_channels=channels_list[10], # 512 - kernel_size=3, - stride=2 - ) - - self.Rep_n6 = RepBlock( - in_channels=channels_list[6] + channels_list[10], # 512 + 512 - out_channels=channels_list[11], # 1024 - n=num_repeats[11], - block=block - ) - - - def forward(self, input): - - (x4, x3, x2, x1, x0) = input - - fpn_out0 = self.reduce_layer0(x0) - f_concat_layer0 = self.Bifusion0([fpn_out0, x1, x2]) - f_out0 = self.Rep_p5(f_concat_layer0) - - fpn_out1 = self.reduce_layer1(f_out0) - f_concat_layer1 = self.Bifusion1([fpn_out1, x2, x3]) - f_out1 = self.Rep_p4(f_concat_layer1) - - fpn_out2 = self.reduce_layer2(f_out1) - f_concat_layer2 = self.Bifusion2([fpn_out2, x3, x4]) - pan_out3 = self.Rep_p3(f_concat_layer2) # P3 - - down_feat2 = self.downsample2(pan_out3) - p_concat_layer2 = torch.cat([down_feat2, fpn_out2], 1) - pan_out2 = self.Rep_n4(p_concat_layer2) # P4 - - down_feat1 = self.downsample1(pan_out2) - p_concat_layer1 = torch.cat([down_feat1, fpn_out1], 1) - pan_out1 = self.Rep_n5(p_concat_layer1) # P5 - - down_feat0 = self.downsample0(pan_out1) - p_concat_layer0 = torch.cat([down_feat0, fpn_out0], 1) - pan_out0 = self.Rep_n6(p_concat_layer0) # P6 - - outputs = [pan_out3, pan_out2, pan_out1, pan_out0] - - return outputs - - -class CSPRepPANNeck(nn.Module): - """ - CSPRepPANNeck module. - """ - - def __init__( - self, - channels_list=None, - num_repeats=None, - block=BottleRep, - csp_e=float(1)/2, - stage_block_type="BepC3" - ): - super().__init__() - - if stage_block_type == "BepC3": - stage_block = BepC3 - elif stage_block_type == "MBLABlock": - stage_block = MBLABlock - else: - raise NotImplementedError - - assert channels_list is not None - assert num_repeats is not None - - self.Rep_p4 = stage_block( - in_channels=channels_list[3] + channels_list[5], # 512 + 256 - out_channels=channels_list[5], # 256 - n=num_repeats[5], - e=csp_e, - block=block - ) - - self.Rep_p3 = stage_block( - in_channels=channels_list[2] + channels_list[6], # 256 + 128 - out_channels=channels_list[6], # 128 - n=num_repeats[6], - e=csp_e, - block=block - ) - - self.Rep_n3 = stage_block( - in_channels=channels_list[6] + channels_list[7], # 128 + 128 - out_channels=channels_list[8], # 256 - n=num_repeats[7], - e=csp_e, - block=block - ) - - self.Rep_n4 = stage_block( - in_channels=channels_list[5] + channels_list[9], # 256 + 256 - out_channels=channels_list[10], # 512 - n=num_repeats[8], - e=csp_e, - block=block - ) - - self.reduce_layer0 = ConvBNReLU( - in_channels=channels_list[4], # 1024 - out_channels=channels_list[5], # 256 - kernel_size=1, - stride=1 - ) - - self.upsample0 = Transpose( - in_channels=channels_list[5], # 256 - out_channels=channels_list[5], # 256 - ) - - self.reduce_layer1 = ConvBNReLU( - in_channels=channels_list[5], # 256 - out_channels=channels_list[6], # 128 - kernel_size=1, - stride=1 - ) - - self.upsample1 = Transpose( - in_channels=channels_list[6], # 128 - out_channels=channels_list[6] # 128 - ) - - self.downsample2 = ConvBNReLU( - in_channels=channels_list[6], # 128 - out_channels=channels_list[7], # 128 - kernel_size=3, - stride=2 - ) - - self.downsample1 = ConvBNReLU( - in_channels=channels_list[8], # 256 - out_channels=channels_list[9], # 256 - kernel_size=3, - stride=2 - ) - - def forward(self, input): - - (x2, x1, x0) = input - - fpn_out0 = self.reduce_layer0(x0) - upsample_feat0 = self.upsample0(fpn_out0) - f_concat_layer0 = torch.cat([upsample_feat0, x1], 1) - f_out0 = self.Rep_p4(f_concat_layer0) - - fpn_out1 = self.reduce_layer1(f_out0) - upsample_feat1 = self.upsample1(fpn_out1) - f_concat_layer1 = torch.cat([upsample_feat1, x2], 1) - pan_out2 = self.Rep_p3(f_concat_layer1) - - down_feat1 = self.downsample2(pan_out2) - p_concat_layer1 = torch.cat([down_feat1, fpn_out1], 1) - pan_out1 = self.Rep_n3(p_concat_layer1) - - down_feat0 = self.downsample1(pan_out1) - p_concat_layer2 = torch.cat([down_feat0, fpn_out0], 1) - pan_out0 = self.Rep_n4(p_concat_layer2) - - outputs = [pan_out2, pan_out1, pan_out0] - - return outputs - - -class CSPRepBiFPANNeck(nn.Module): - """ - CSPRepBiFPANNeck module. - """ - - def __init__( - self, - channels_list=None, - num_repeats=None, - block=BottleRep, - csp_e=float(1)/2, - stage_block_type="BepC3" - ): - super().__init__() - - assert channels_list is not None - assert num_repeats is not None - - if stage_block_type == "BepC3": - stage_block = BepC3 - elif stage_block_type == "MBLABlock": - stage_block = MBLABlock - else: - raise NotImplementedError - - self.reduce_layer0 = ConvBNReLU( - in_channels=channels_list[4], # 1024 - out_channels=channels_list[5], # 256 - kernel_size=1, - stride=1 - ) - - self.Bifusion0 = BiFusion( - in_channels=[channels_list[3], channels_list[2]], # 512, 256 - out_channels=channels_list[5], # 256 - ) - - self.Rep_p4 = stage_block( - in_channels=channels_list[5], # 256 - out_channels=channels_list[5], # 256 - n=num_repeats[5], - e=csp_e, - block=block - ) - - self.reduce_layer1 = ConvBNReLU( - in_channels=channels_list[5], # 256 - out_channels=channels_list[6], # 128 - kernel_size=1, - stride=1 - ) - - self.Bifusion1 = BiFusion( - in_channels=[channels_list[2], channels_list[1]], # 256, 128 - out_channels=channels_list[6], # 128 - ) - - self.Rep_p3 = stage_block( - in_channels=channels_list[6], # 128 - out_channels=channels_list[6], # 128 - n=num_repeats[6], - e=csp_e, - block=block - ) - - self.downsample2 = ConvBNReLU( - in_channels=channels_list[6], # 128 - out_channels=channels_list[7], # 128 - kernel_size=3, - stride=2 - ) - - self.Rep_n3 = stage_block( - in_channels=channels_list[6] + channels_list[7], # 128 + 128 - out_channels=channels_list[8], # 256 - n=num_repeats[7], - e=csp_e, - block=block - ) - - self.downsample1 = ConvBNReLU( - in_channels=channels_list[8], # 256 - out_channels=channels_list[9], # 256 - kernel_size=3, - stride=2 - ) - - - self.Rep_n4 = stage_block( - in_channels=channels_list[5] + channels_list[9], # 256 + 256 - out_channels=channels_list[10], # 512 - n=num_repeats[8], - e=csp_e, - block=block - ) - - - def forward(self, input): - - (x3, x2, x1, x0) = input - - fpn_out0 = self.reduce_layer0(x0) - f_concat_layer0 = self.Bifusion0([fpn_out0, x1, x2]) - f_out0 = self.Rep_p4(f_concat_layer0) - - fpn_out1 = self.reduce_layer1(f_out0) - f_concat_layer1 = self.Bifusion1([fpn_out1, x2, x3]) - pan_out2 = self.Rep_p3(f_concat_layer1) - - down_feat1 = self.downsample2(pan_out2) - p_concat_layer1 = torch.cat([down_feat1, fpn_out1], 1) - pan_out1 = self.Rep_n3(p_concat_layer1) - - down_feat0 = self.downsample1(pan_out1) - p_concat_layer2 = torch.cat([down_feat0, fpn_out0], 1) - pan_out0 = self.Rep_n4(p_concat_layer2) - - outputs = [pan_out2, pan_out1, pan_out0] - - return outputs - - -class CSPRepPANNeck_P6(nn.Module): - """CSPRepPANNeck_P6 Module - """ - # [64, 128, 256, 512, 768, 1024] - # [512, 256, 128, 256, 512, 1024] - def __init__( - self, - channels_list=None, - num_repeats=None, - block=BottleRep, - csp_e=float(1)/2, - stage_block_type="BepC3" - ): - super().__init__() - - assert channels_list is not None - assert num_repeats is not None - - if stage_block_type == "BepC3": - stage_block = BepC3 - elif stage_block_type == "MBLABlock": - stage_block = MBLABlock - else: - raise NotImplementedError - - self.reduce_layer0 = ConvBNReLU( - in_channels=channels_list[5], # 1024 - out_channels=channels_list[6], # 512 - kernel_size=1, - stride=1 - ) - - self.upsample0 = Transpose( - in_channels=channels_list[6], # 512 - out_channels=channels_list[6], # 512 - ) - - self.Rep_p5 = stage_block( - in_channels=channels_list[4] + channels_list[6], # 768 + 512 - out_channels=channels_list[6], # 512 - n=num_repeats[6], - e=csp_e, - block=block - ) - - self.reduce_layer1 = ConvBNReLU( - in_channels=channels_list[6], # 512 - out_channels=channels_list[7], # 256 - kernel_size=1, - stride=1 - ) - - self.upsample1 = Transpose( - in_channels=channels_list[7], # 256 - out_channels=channels_list[7] # 256 - ) - - self.Rep_p4 = stage_block( - in_channels=channels_list[3] + channels_list[7], # 512 + 256 - out_channels=channels_list[7], # 256 - n=num_repeats[7], - e=csp_e, - block=block - ) - - self.reduce_layer2 = ConvBNReLU( - in_channels=channels_list[7], # 256 - out_channels=channels_list[8], # 128 - kernel_size=1, - stride=1 - ) - - self.upsample2 = Transpose( - in_channels=channels_list[8], # 128 - out_channels=channels_list[8] # 128 - ) - - self.Rep_p3 = stage_block( - in_channels=channels_list[2] + channels_list[8], # 256 + 128 - out_channels=channels_list[8], # 128 - n=num_repeats[8], - e=csp_e, - block=block - ) - - self.downsample2 = ConvBNReLU( - in_channels=channels_list[8], # 128 - out_channels=channels_list[8], # 128 - kernel_size=3, - stride=2 - ) - - self.Rep_n4 = stage_block( - in_channels=channels_list[8] + channels_list[8], # 128 + 128 - out_channels=channels_list[9], # 256 - n=num_repeats[9], - e=csp_e, - block=block - ) - - self.downsample1 = ConvBNReLU( - in_channels=channels_list[9], # 256 - out_channels=channels_list[9], # 256 - kernel_size=3, - stride=2 - ) - - self.Rep_n5 = stage_block( - in_channels=channels_list[7] + channels_list[9], # 256 + 256 - out_channels=channels_list[10], # 512 - n=num_repeats[10], - e=csp_e, - block=block - ) - - self.downsample0 = ConvBNReLU( - in_channels=channels_list[10], # 512 - out_channels=channels_list[10], # 512 - kernel_size=3, - stride=2 - ) - - self.Rep_n6 = stage_block( - in_channels=channels_list[6] + channels_list[10], # 512 + 512 - out_channels=channels_list[11], # 1024 - n=num_repeats[11], - e=csp_e, - block=block - ) - - - def forward(self, input): - - (x3, x2, x1, x0) = input - - fpn_out0 = self.reduce_layer0(x0) - upsample_feat0 = self.upsample0(fpn_out0) - f_concat_layer0 = torch.cat([upsample_feat0, x1], 1) - f_out0 = self.Rep_p5(f_concat_layer0) - - fpn_out1 = self.reduce_layer1(f_out0) - upsample_feat1 = self.upsample1(fpn_out1) - f_concat_layer1 = torch.cat([upsample_feat1, x2], 1) - f_out1 = self.Rep_p4(f_concat_layer1) - - fpn_out2 = self.reduce_layer2(f_out1) - upsample_feat2 = self.upsample2(fpn_out2) - f_concat_layer2 = torch.cat([upsample_feat2, x3], 1) - pan_out3 = self.Rep_p3(f_concat_layer2) # P3 - - down_feat2 = self.downsample2(pan_out3) - p_concat_layer2 = torch.cat([down_feat2, fpn_out2], 1) - pan_out2 = self.Rep_n4(p_concat_layer2) # P4 - - down_feat1 = self.downsample1(pan_out2) - p_concat_layer1 = torch.cat([down_feat1, fpn_out1], 1) - pan_out1 = self.Rep_n5(p_concat_layer1) # P5 - - down_feat0 = self.downsample0(pan_out1) - p_concat_layer0 = torch.cat([down_feat0, fpn_out0], 1) - pan_out0 = self.Rep_n6(p_concat_layer0) # P6 - - outputs = [pan_out3, pan_out2, pan_out1, pan_out0] - - return outputs - - -class CSPRepBiFPANNeck_P6(nn.Module): - """CSPRepBiFPANNeck_P6 Module - """ - # [64, 128, 256, 512, 768, 1024] - # [512, 256, 128, 256, 512, 1024] - def __init__( - self, - channels_list=None, - num_repeats=None, - block=BottleRep, - csp_e=float(1)/2, - stage_block_type="BepC3" - ): - super().__init__() - - assert channels_list is not None - assert num_repeats is not None - - if stage_block_type == "BepC3": - stage_block = BepC3 - elif stage_block_type == "MBLABlock": - stage_block = MBLABlock - else: - raise NotImplementedError - - self.reduce_layer0 = ConvBNReLU( - in_channels=channels_list[5], # 1024 - out_channels=channels_list[6], # 512 - kernel_size=1, - stride=1 - ) - - self.Bifusion0 = BiFusion( - in_channels=[channels_list[4], channels_list[6]], # 768, 512 - out_channels=channels_list[6], # 512 - ) - - self.Rep_p5 = stage_block( - in_channels=channels_list[6], # 512 - out_channels=channels_list[6], # 512 - n=num_repeats[6], - e=csp_e, - block=block - ) - - self.reduce_layer1 = ConvBNReLU( - in_channels=channels_list[6], # 512 - out_channels=channels_list[7], # 256 - kernel_size=1, - stride=1 - ) - - self.Bifusion1 = BiFusion( - in_channels=[channels_list[3], channels_list[7]], # 512, 256 - out_channels=channels_list[7], # 256 - ) - - self.Rep_p4 = stage_block( - in_channels=channels_list[7], # 256 - out_channels=channels_list[7], # 256 - n=num_repeats[7], - e=csp_e, - block=block - ) - - self.reduce_layer2 = ConvBNReLU( - in_channels=channels_list[7], # 256 - out_channels=channels_list[8], # 128 - kernel_size=1, - stride=1 - ) - - self.Bifusion2 = BiFusion( - in_channels=[channels_list[2], channels_list[8]], # 256, 128 - out_channels=channels_list[8], # 128 - ) - - self.Rep_p3 = stage_block( - in_channels=channels_list[8], # 128 - out_channels=channels_list[8], # 128 - n=num_repeats[8], - e=csp_e, - block=block - ) - - self.downsample2 = ConvBNReLU( - in_channels=channels_list[8], # 128 - out_channels=channels_list[8], # 128 - kernel_size=3, - stride=2 - ) - - self.Rep_n4 = stage_block( - in_channels=channels_list[8] + channels_list[8], # 128 + 128 - out_channels=channels_list[9], # 256 - n=num_repeats[9], - e=csp_e, - block=block - ) - - self.downsample1 = ConvBNReLU( - in_channels=channels_list[9], # 256 - out_channels=channels_list[9], # 256 - kernel_size=3, - stride=2 - ) - - self.Rep_n5 = stage_block( - in_channels=channels_list[7] + channels_list[9], # 256 + 256 - out_channels=channels_list[10], # 512 - n=num_repeats[10], - e=csp_e, - block=block - ) - - self.downsample0 = ConvBNReLU( - in_channels=channels_list[10], # 512 - out_channels=channels_list[10], # 512 - kernel_size=3, - stride=2 - ) - - self.Rep_n6 = stage_block( - in_channels=channels_list[6] + channels_list[10], # 512 + 512 - out_channels=channels_list[11], # 1024 - n=num_repeats[11], - e=csp_e, - block=block - ) - - - def forward(self, input): - - (x4, x3, x2, x1, x0) = input - - fpn_out0 = self.reduce_layer0(x0) - f_concat_layer0 = self.Bifusion0([fpn_out0, x1, x2]) - f_out0 = self.Rep_p5(f_concat_layer0) - - fpn_out1 = self.reduce_layer1(f_out0) - f_concat_layer1 = self.Bifusion1([fpn_out1, x2, x3]) - f_out1 = self.Rep_p4(f_concat_layer1) - - fpn_out2 = self.reduce_layer2(f_out1) - f_concat_layer2 = self.Bifusion2([fpn_out2, x3, x4]) - pan_out3 = self.Rep_p3(f_concat_layer2) # P3 - - down_feat2 = self.downsample2(pan_out3) - p_concat_layer2 = torch.cat([down_feat2, fpn_out2], 1) - pan_out2 = self.Rep_n4(p_concat_layer2) # P4 - - down_feat1 = self.downsample1(pan_out2) - p_concat_layer1 = torch.cat([down_feat1, fpn_out1], 1) - pan_out1 = self.Rep_n5(p_concat_layer1) # P5 - - down_feat0 = self.downsample0(pan_out1) - p_concat_layer0 = torch.cat([down_feat0, fpn_out0], 1) - pan_out0 = self.Rep_n6(p_concat_layer0) # P6 - - outputs = [pan_out3, pan_out2, pan_out1, pan_out0] - - return outputs - -class Lite_EffiNeck(nn.Module): - - def __init__( - self, - in_channels, - unified_channels, - ): - super().__init__() - self.reduce_layer0 = ConvBNHS( - in_channels=in_channels[0], - out_channels=unified_channels, - kernel_size=1, - stride=1, - padding=0 - ) - self.reduce_layer1 = ConvBNHS( - in_channels=in_channels[1], - out_channels=unified_channels, - kernel_size=1, - stride=1, - padding=0 - ) - self.reduce_layer2 = ConvBNHS( - in_channels=in_channels[2], - out_channels=unified_channels, - kernel_size=1, - stride=1, - padding=0 - ) - self.upsample0 = nn.Upsample(scale_factor=2, mode='nearest') - - self.upsample1 = nn.Upsample(scale_factor=2, mode='nearest') - - self.Csp_p4 = CSPBlock( - in_channels=unified_channels*2, - out_channels=unified_channels, - kernel_size=5 - ) - self.Csp_p3 = CSPBlock( - in_channels=unified_channels*2, - out_channels=unified_channels, - kernel_size=5 - ) - self.Csp_n3 = CSPBlock( - in_channels=unified_channels*2, - out_channels=unified_channels, - kernel_size=5 - ) - self.Csp_n4 = CSPBlock( - in_channels=unified_channels*2, - out_channels=unified_channels, - kernel_size=5 - ) - self.downsample2 = DPBlock( - in_channel=unified_channels, - out_channel=unified_channels, - kernel_size=5, - stride=2 - ) - self.downsample1 = DPBlock( - in_channel=unified_channels, - out_channel=unified_channels, - kernel_size=5, - stride=2 - ) - self.p6_conv_1 = DPBlock( - in_channel=unified_channels, - out_channel=unified_channels, - kernel_size=5, - stride=2 - ) - self.p6_conv_2 = DPBlock( - in_channel=unified_channels, - out_channel=unified_channels, - kernel_size=5, - stride=2 - ) - - def forward(self, input): - - (x2, x1, x0) = input - - fpn_out0 = self.reduce_layer0(x0) #c5 - x1 = self.reduce_layer1(x1) #c4 - x2 = self.reduce_layer2(x2) #c3 - - upsample_feat0 = self.upsample0(fpn_out0) - f_concat_layer0 = torch.cat([upsample_feat0, x1], 1) - f_out1 = self.Csp_p4(f_concat_layer0) - - upsample_feat1 = self.upsample1(f_out1) - f_concat_layer1 = torch.cat([upsample_feat1, x2], 1) - pan_out3 = self.Csp_p3(f_concat_layer1) #p3 - - down_feat1 = self.downsample2(pan_out3) - p_concat_layer1 = torch.cat([down_feat1, f_out1], 1) - pan_out2 = self.Csp_n3(p_concat_layer1) #p4 - - down_feat0 = self.downsample1(pan_out2) - p_concat_layer2 = torch.cat([down_feat0, fpn_out0], 1) - pan_out1 = self.Csp_n4(p_concat_layer2) #p5 - - top_features = self.p6_conv_1(fpn_out0) - pan_out0 = top_features + self.p6_conv_2(pan_out1) #p6 - - - outputs = [pan_out3, pan_out2, pan_out1, pan_out0] - - return outputs diff --git a/cv/detection/yolov6/pytorch/yolov6/models/yolo.py b/cv/detection/yolov6/pytorch/yolov6/models/yolo.py deleted file mode 100644 index 2f37f1b16..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/models/yolo.py +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- -import math -import torch -import torch.nn as nn -import torch.nn.functional as F -from yolov6.layers.common import * -from yolov6.utils.torch_utils import initialize_weights -from yolov6.models.efficientrep import * -from yolov6.models.reppan import * -from yolov6.utils.events import LOGGER - - -class Model(nn.Module): - export = False - '''YOLOv6 model with backbone, neck and head. - The default parts are EfficientRep Backbone, Rep-PAN and - Efficient Decoupled Head. - ''' - def __init__(self, config, channels=3, num_classes=None, fuse_ab=False, distill_ns=False): # model, input channels, number of classes - super().__init__() - # Build network - num_layers = config.model.head.num_layers - self.backbone, self.neck, self.detect = build_network(config, channels, num_classes, num_layers, fuse_ab=fuse_ab, distill_ns=distill_ns) - - # Init Detect head - self.stride = self.detect.stride - self.detect.initialize_biases() - - # Init weights - initialize_weights(self) - - def forward(self, x): - export_mode = torch.onnx.is_in_onnx_export() or self.export - x = self.backbone(x) - x = self.neck(x) - if not export_mode: - featmaps = [] - featmaps.extend(x) - x = self.detect(x) - return x if export_mode is True else [x, featmaps] - - def _apply(self, fn): - self = super()._apply(fn) - self.detect.stride = fn(self.detect.stride) - self.detect.grid = list(map(fn, self.detect.grid)) - return self - - -def make_divisible(x, divisor): - # Upward revision the value x to make it evenly divisible by the divisor. - return math.ceil(x / divisor) * divisor - - -def build_network(config, channels, num_classes, num_layers, fuse_ab=False, distill_ns=False): - depth_mul = config.model.depth_multiple - width_mul = config.model.width_multiple - num_repeat_backbone = config.model.backbone.num_repeats - channels_list_backbone = config.model.backbone.out_channels - fuse_P2 = config.model.backbone.get('fuse_P2') - cspsppf = config.model.backbone.get('cspsppf') - num_repeat_neck = config.model.neck.num_repeats - channels_list_neck = config.model.neck.out_channels - use_dfl = config.model.head.use_dfl - reg_max = config.model.head.reg_max - num_repeat = [(max(round(i * depth_mul), 1) if i > 1 else i) for i in (num_repeat_backbone + num_repeat_neck)] - channels_list = [make_divisible(i * width_mul, 8) for i in (channels_list_backbone + channels_list_neck)] - - block = get_block(config.training_mode) - BACKBONE = eval(config.model.backbone.type) - NECK = eval(config.model.neck.type) - - if 'CSP' in config.model.backbone.type: - - if "stage_block_type" in config.model.backbone: - stage_block_type = config.model.backbone.stage_block_type - else: - stage_block_type = "BepC3" #default - - backbone = BACKBONE( - in_channels=channels, - channels_list=channels_list, - num_repeats=num_repeat, - block=block, - csp_e=config.model.backbone.csp_e, - fuse_P2=fuse_P2, - cspsppf=cspsppf, - stage_block_type=stage_block_type - ) - - neck = NECK( - channels_list=channels_list, - num_repeats=num_repeat, - block=block, - csp_e=config.model.neck.csp_e, - stage_block_type=stage_block_type - ) - else: - backbone = BACKBONE( - in_channels=channels, - channels_list=channels_list, - num_repeats=num_repeat, - block=block, - fuse_P2=fuse_P2, - cspsppf=cspsppf - ) - - neck = NECK( - channels_list=channels_list, - num_repeats=num_repeat, - block=block - ) - - if distill_ns: - from yolov6.models.heads.effidehead_distill_ns import Detect, build_effidehead_layer - if num_layers != 3: - LOGGER.error('ERROR in: Distill mode not fit on n/s models with P6 head.\n') - exit() - head_layers = build_effidehead_layer(channels_list, 1, num_classes, reg_max=reg_max) - head = Detect(num_classes, num_layers, head_layers=head_layers, use_dfl=use_dfl) - - elif fuse_ab: - from yolov6.models.heads.effidehead_fuseab import Detect, build_effidehead_layer - anchors_init = config.model.head.anchors_init - head_layers = build_effidehead_layer(channels_list, 3, num_classes, reg_max=reg_max, num_layers=num_layers) - head = Detect(num_classes, anchors_init, num_layers, head_layers=head_layers, use_dfl=use_dfl) - - else: - from yolov6.models.effidehead import Detect, build_effidehead_layer - head_layers = build_effidehead_layer(channels_list, 1, num_classes, reg_max=reg_max, num_layers=num_layers) - head = Detect(num_classes, num_layers, head_layers=head_layers, use_dfl=use_dfl) - - return backbone, neck, head - - -def build_model(cfg, num_classes, device, fuse_ab=False, distill_ns=False): - model = Model(cfg, channels=3, num_classes=num_classes, fuse_ab=fuse_ab, distill_ns=distill_ns).to(device) - return model diff --git a/cv/detection/yolov6/pytorch/yolov6/models/yolo_lite.py b/cv/detection/yolov6/pytorch/yolov6/models/yolo_lite.py deleted file mode 100644 index e36f98060..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/models/yolo_lite.py +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- -import math -import torch -import torch.nn as nn -import torch.nn.functional as F -from yolov6.layers.common import * -from yolov6.utils.torch_utils import initialize_weights -from yolov6.models.reppan import * -from yolov6.models.efficientrep import * -from yolov6.utils.events import LOGGER -from yolov6.models.heads.effidehead_lite import Detect, build_effidehead_layer - -class Model(nn.Module): - export = False - '''YOLOv6 model with backbone, neck and head. - The default parts are EfficientRep Backbone, Rep-PAN and - Efficient Decoupled Head. - ''' - def __init__(self, config, channels=3, num_classes=None): # model, input channels, number of classes - super().__init__() - # Build network - self.backbone, self.neck, self.detect = build_network(config, channels, num_classes) - - # Init Detect head - self.stride = self.detect.stride - self.detect.initialize_biases() - - # Init weights - initialize_weights(self) - - def forward(self, x): - export_mode = torch.onnx.is_in_onnx_export() or self.export - x = self.backbone(x) - x = self.neck(x) - if not export_mode: - featmaps = [] - featmaps.extend(x) - x = self.detect(x) - return x if export_mode or self.export is True else [x, featmaps] - - def _apply(self, fn): - self = super()._apply(fn) - self.detect.stride = fn(self.detect.stride) - self.detect.grid = list(map(fn, self.detect.grid)) - return self - -def build_network(config, in_channels, num_classes): - width_mul = config.model.width_multiple - - num_repeat_backbone = config.model.backbone.num_repeats - out_channels_backbone = config.model.backbone.out_channels - scale_size_backbone = config.model.backbone.scale_size - in_channels_neck = config.model.neck.in_channels - unified_channels_neck = config.model.neck.unified_channels - in_channels_head = config.model.head.in_channels - num_layers = config.model.head.num_layers - - BACKBONE = eval(config.model.backbone.type) - NECK = eval(config.model.neck.type) - - out_channels_backbone = [make_divisible(i * width_mul) - for i in out_channels_backbone] - mid_channels_backbone = [make_divisible(int(i * scale_size_backbone), divisor=8) - for i in out_channels_backbone] - in_channels_neck = [make_divisible(i * width_mul) - for i in in_channels_neck] - - backbone = BACKBONE(in_channels, - mid_channels_backbone, - out_channels_backbone, - num_repeat=num_repeat_backbone) - neck = NECK(in_channels_neck, unified_channels_neck) - head_layers = build_effidehead_layer(in_channels_head, 1, num_classes, num_layers) - head = Detect(num_classes, num_layers, head_layers=head_layers) - - return backbone, neck, head - - -def build_model(cfg, num_classes, device): - model = Model(cfg, channels=3, num_classes=num_classes).to(device) - return model - -def make_divisible(v, divisor=16): - new_v = max(divisor, int(v + divisor / 2) // divisor * divisor) - if new_v < 0.9 * v: - new_v += divisor - return new_v diff --git a/cv/detection/yolov6/pytorch/yolov6/solver/build.py b/cv/detection/yolov6/pytorch/yolov6/solver/build.py deleted file mode 100644 index 716b0be7c..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/solver/build.py +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- -import os -import math - -import torch -import torch.nn as nn - -from yolov6.utils.events import LOGGER - - -def build_optimizer(cfg, model): - """ Build optimizer from cfg file.""" - g_bnw, g_w, g_b = [], [], [] - for v in model.modules(): - if hasattr(v, 'bias') and isinstance(v.bias, nn.Parameter): - g_b.append(v.bias) - if isinstance(v, nn.BatchNorm2d): - g_bnw.append(v.weight) - elif hasattr(v, 'weight') and isinstance(v.weight, nn.Parameter): - g_w.append(v.weight) - - assert cfg.solver.optim == 'SGD' or 'Adam', 'ERROR: unknown optimizer, use SGD defaulted' - if cfg.solver.optim == 'SGD': - optimizer = torch.optim.SGD(g_bnw, lr=cfg.solver.lr0, momentum=cfg.solver.momentum, nesterov=True) - elif cfg.solver.optim == 'Adam': - optimizer = torch.optim.Adam(g_bnw, lr=cfg.solver.lr0, betas=(cfg.solver.momentum, 0.999)) - - optimizer.add_param_group({'params': g_w, 'weight_decay': cfg.solver.weight_decay}) - optimizer.add_param_group({'params': g_b}) - - del g_bnw, g_w, g_b - return optimizer - - -def build_lr_scheduler(cfg, optimizer, epochs): - """Build learning rate scheduler from cfg file.""" - if cfg.solver.lr_scheduler == 'Cosine': - lf = lambda x: ((1 - math.cos(x * math.pi / epochs)) / 2) * (cfg.solver.lrf - 1) + 1 - elif cfg.solver.lr_scheduler == 'Constant': - lf = lambda x: 1.0 - else: - LOGGER.error('unknown lr scheduler, use Cosine defaulted') - - scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lf) - return scheduler, lf diff --git a/cv/detection/yolov6/pytorch/yolov6/utils/Arial.ttf b/cv/detection/yolov6/pytorch/yolov6/utils/Arial.ttf deleted file mode 100644 index ab68fb197d4479b3b6dec6e85bd5cbaf433a87c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 773236 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
  • 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 threshold, sin_alpha_2, sin_alpha_1) - angle_cost = torch.cos(torch.arcsin(sin_alpha) * 2 - math.pi / 2) - rho_x = (s_cw / cw) ** 2 - rho_y = (s_ch / ch) ** 2 - gamma = angle_cost - 2 - distance_cost = 2 - torch.exp(gamma * rho_x) - torch.exp(gamma * rho_y) - omiga_w = torch.abs(w1 - w2) / torch.max(w1, w2) - omiga_h = torch.abs(h1 - h2) / torch.max(h1, h2) - shape_cost = torch.pow(1 - torch.exp(-1 * omiga_w), 4) + torch.pow(1 - torch.exp(-1 * omiga_h), 4) - iou = iou - 0.5 * (distance_cost + shape_cost) - loss = 1.0 - iou - - if self.reduction == 'sum': - loss = loss.sum() - elif self.reduction == 'mean': - loss = loss.mean() - - return loss - - -def pairwise_bbox_iou(box1, box2, box_format='xywh'): - """Calculate iou. - This code is based on https://github.com/Megvii-BaseDetection/YOLOX/blob/main/yolox/utils/boxes.py - """ - if box_format == 'xyxy': - lt = torch.max(box1[:, None, :2], box2[:, :2]) - rb = torch.min(box1[:, None, 2:], box2[:, 2:]) - area_1 = torch.prod(box1[:, 2:] - box1[:, :2], 1) - area_2 = torch.prod(box2[:, 2:] - box2[:, :2], 1) - - elif box_format == 'xywh': - lt = torch.max( - (box1[:, None, :2] - box1[:, None, 2:] / 2), - (box2[:, :2] - box2[:, 2:] / 2), - ) - rb = torch.min( - (box1[:, None, :2] + box1[:, None, 2:] / 2), - (box2[:, :2] + box2[:, 2:] / 2), - ) - - area_1 = torch.prod(box1[:, 2:], 1) - area_2 = torch.prod(box2[:, 2:], 1) - valid = (lt < rb).type(lt.type()).prod(dim=2) - inter = torch.prod(rb - lt, 2) * valid - return inter / (area_1[:, None] + area_2 - inter) diff --git a/cv/detection/yolov6/pytorch/yolov6/utils/general.py b/cv/detection/yolov6/pytorch/yolov6/utils/general.py deleted file mode 100644 index cb4418cde..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/utils/general.py +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- -import os -import glob -import math -import torch -import requests -import pkg_resources as pkg -from pathlib import Path -from yolov6.utils.events import LOGGER - -def increment_name(path): - '''increase save directory's id''' - path = Path(path) - sep = '' - if path.exists(): - path, suffix = (path.with_suffix(''), path.suffix) if path.is_file() else (path, '') - for n in range(1, 9999): - p = f'{path}{sep}{n}{suffix}' - if not os.path.exists(p): - break - path = Path(p) - return path - - -def find_latest_checkpoint(search_dir='.'): - '''Find the most recent saved checkpoint in search_dir.''' - checkpoint_list = glob.glob(f'{search_dir}/**/last*.pt', recursive=True) - return max(checkpoint_list, key=os.path.getctime) if checkpoint_list else '' - - -def dist2bbox(distance, anchor_points, box_format='xyxy'): - '''Transform distance(ltrb) to box(xywh or xyxy).''' - lt, rb = torch.split(distance, 2, -1) - x1y1 = anchor_points - lt - x2y2 = anchor_points + rb - if box_format == 'xyxy': - bbox = torch.cat([x1y1, x2y2], -1) - elif box_format == 'xywh': - c_xy = (x1y1 + x2y2) / 2 - wh = x2y2 - x1y1 - bbox = torch.cat([c_xy, wh], -1) - return bbox - - -def bbox2dist(anchor_points, bbox, reg_max): - '''Transform bbox(xyxy) to dist(ltrb).''' - x1y1, x2y2 = torch.split(bbox, 2, -1) - lt = anchor_points - x1y1 - rb = x2y2 - anchor_points - dist = torch.cat([lt, rb], -1).clip(0, reg_max - 0.01) - return dist - - -def xywh2xyxy(bboxes): - '''Transform bbox(xywh) to box(xyxy).''' - bboxes[..., 0] = bboxes[..., 0] - bboxes[..., 2] * 0.5 - bboxes[..., 1] = bboxes[..., 1] - bboxes[..., 3] * 0.5 - bboxes[..., 2] = bboxes[..., 0] + bboxes[..., 2] - bboxes[..., 3] = bboxes[..., 1] + bboxes[..., 3] - return bboxes - - -def box_iou(box1, box2): - # https://github.com/pytorch/vision/blob/master/torchvision/ops/boxes.py - """ - Return intersection-over-union (Jaccard index) of boxes. - Both sets of boxes are expected to be in (x1, y1, x2, y2) format. - Arguments: - box1 (Tensor[N, 4]) - box2 (Tensor[M, 4]) - Returns: - iou (Tensor[N, M]): the NxM matrix containing the pairwise - IoU values for every element in boxes1 and boxes2 - """ - - def box_area(box): - # box = 4xn - return (box[2] - box[0]) * (box[3] - box[1]) - - area1 = box_area(box1.T) - area2 = box_area(box2.T) - - # inter(N,M) = (rb(N,M,2) - lt(N,M,2)).clamp(0).prod(2) - inter = (torch.min(box1[:, None, 2:], box2[:, 2:]) - torch.max(box1[:, None, :2], box2[:, :2])).clamp(0).prod(2) - return inter / (area1[:, None] + area2 - inter) # iou = inter / (area1 + area2 - inter) - - -def download_ckpt(path): - """Download checkpoints of the pretrained models""" - basename = os.path.basename(path) - dir = os.path.abspath(os.path.dirname(path)) - os.makedirs(dir, exist_ok=True) - LOGGER.info(f"checkpoint {basename} not exist, try to downloaded it from github.") - # need to update the link with every release - url = f"https://github.com/meituan/YOLOv6/releases/download/0.4.0/{basename}" - LOGGER.warning(f"downloading url is: {url}, pealse make sure the version of the downloading model is correspoing to the code version!") - r = requests.get(url, allow_redirects=True) - assert r.status_code == 200, "Unable to download checkpoints, manually download it" - open(path, 'wb').write(r.content) - LOGGER.info(f"checkpoint {basename} downloaded and saved") - - -def make_divisible(x, divisor): - # Returns x evenly divisible by divisor - return math.ceil(x / divisor) * divisor - - -def check_img_size(imgsz, s=32, floor=0): - # Verify image size is a multiple of stride s in each dimension - if isinstance(imgsz, int): # integer i.e. img_size=640 - new_size = max(make_divisible(imgsz, int(s)), floor) - else: # list i.e. img_size=[640, 480] - new_size = [max(make_divisible(x, int(s)), floor) for x in imgsz] - if new_size != imgsz: - LOGGER.warning(f'--img-size {imgsz} must be multiple of max stride {s}, updating to {new_size}') - return new_size - - -def check_version(current='0.0.0', minimum='0.0.0', name='version ', pinned=False, hard=False, verbose=False): - # Check whether the package's version is match the required version. - current, minimum = (pkg.parse_version(x) for x in (current, minimum)) - result = (current == minimum) if pinned else (current >= minimum) # bool - if hard: - info = f'⚠️ {name}{minimum} is required by YOLOv6, but {name}{current} is currently installed' - assert result, info # assert minimum version requirement - return result diff --git a/cv/detection/yolov6/pytorch/yolov6/utils/metrics.py b/cv/detection/yolov6/pytorch/yolov6/utils/metrics.py deleted file mode 100644 index cbfa130ef..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/utils/metrics.py +++ /dev/null @@ -1,258 +0,0 @@ -# Model validation metrics -# This code is based on -# https://github.com/ultralytics/yolov5/blob/master/utils/metrics.py - -from pathlib import Path - -import matplotlib.pyplot as plt -import numpy as np -import torch -import warnings -from . import general - -def ap_per_class(tp, conf, pred_cls, target_cls, plot=False, save_dir='.', names=()): - """ Compute the average precision, given the recall and precision curves. - Source: https://github.com/rafaelpadilla/Object-Detection-Metrics. - # Arguments - tp: True positives (nparray, nx1 or nx10). - conf: Objectness value from 0-1 (nparray). - pred_cls: Predicted object classes (nparray). - target_cls: True object classes (nparray). - plot: Plot precision-recall curve at mAP@0.5 - save_dir: Plot save directory - # Returns - The average precision as computed in py-faster-rcnn. - """ - - # Sort by objectness - i = np.argsort(-conf) - tp, conf, pred_cls = tp[i], conf[i], pred_cls[i] - - # Find unique classes - unique_classes = np.unique(target_cls) - nc = unique_classes.shape[0] # number of classes, number of detections - - # Create Precision-Recall curve and compute AP for each class - px, py = np.linspace(0, 1, 1000), [] # for plotting - ap, p, r = np.zeros((nc, tp.shape[1])), np.zeros((nc, 1000)), np.zeros((nc, 1000)) - for ci, c in enumerate(unique_classes): - i = pred_cls == c - n_l = (target_cls == c).sum() # number of labels - n_p = i.sum() # number of predictions - - if n_p == 0 or n_l == 0: - continue - else: - # Accumulate FPs and TPs - fpc = (1 - tp[i]).cumsum(0) - tpc = tp[i].cumsum(0) - - # Recall - recall = tpc / (n_l + 1e-16) # recall curve - r[ci] = np.interp(-px, -conf[i], recall[:, 0], left=0) # negative x, xp because xp decreases - - # Precision - precision = tpc / (tpc + fpc) # precision curve - p[ci] = np.interp(-px, -conf[i], precision[:, 0], left=1) # p at pr_score - - # AP from recall-precision curve - for j in range(tp.shape[1]): - ap[ci, j], mpre, mrec = compute_ap(recall[:, j], precision[:, j]) - if plot and j == 0: - py.append(np.interp(px, mrec, mpre)) # precision at mAP@0.5 - - # Compute F1 (harmonic mean of precision and recall) - f1 = 2 * p * r / (p + r + 1e-16) - if plot: - plot_pr_curve(px, py, ap, Path(save_dir) / 'PR_curve.png', names) - plot_mc_curve(px, f1, Path(save_dir) / 'F1_curve.png', names, ylabel='F1') - plot_mc_curve(px, p, Path(save_dir) / 'P_curve.png', names, ylabel='Precision') - plot_mc_curve(px, r, Path(save_dir) / 'R_curve.png', names, ylabel='Recall') - - # i = f1.mean(0).argmax() # max F1 index - # return p[:, i], r[:, i], ap, f1[:, i], unique_classes.astype('int32') - return p, r, ap, f1, unique_classes.astype('int32') - - -def compute_ap(recall, precision): - """ Compute the average precision, given the recall and precision curves - # Arguments - recall: The recall curve (list) - precision: The precision curve (list) - # Returns - Average precision, precision curve, recall curve - """ - - # Append sentinel values to beginning and end - mrec = np.concatenate(([0.], recall, [recall[-1] + 0.01])) - mpre = np.concatenate(([1.], precision, [0.])) - - # Compute the precision envelope - mpre = np.flip(np.maximum.accumulate(np.flip(mpre))) - - # Integrate area under curve - method = 'interp' # methods: 'continuous', 'interp' - if method == 'interp': - x = np.linspace(0, 1, 101) # 101-point interp (COCO) - ap = np.trapz(np.interp(x, mrec, mpre), x) # integrate - else: # 'continuous' - i = np.where(mrec[1:] != mrec[:-1])[0] # points where x axis (recall) changes - ap = np.sum((mrec[i + 1] - mrec[i]) * mpre[i + 1]) # area under curve - - return ap, mpre, mrec - -# Plots ---------------------------------------------------------------------------------------------------------------- - -def plot_pr_curve(px, py, ap, save_dir='pr_curve.png', names=()): - # Precision-recall curve - fig, ax = plt.subplots(1, 1, figsize=(9, 6), tight_layout=True) - py = np.stack(py, axis=1) - - if 0 < len(names) < 21: # display per-class legend if < 21 classes - for i, y in enumerate(py.T): - ax.plot(px, y, linewidth=1, label=f'{names[i]} {ap[i, 0]:.3f}') # plot(recall, precision) - else: - ax.plot(px, py, linewidth=1, color='grey') # plot(recall, precision) - - ax.plot(px, py.mean(1), linewidth=3, color='blue', label='all classes %.3f mAP@0.5' % ap[:, 0].mean()) - ax.set_xlabel('Recall') - ax.set_ylabel('Precision') - ax.set_xlim(0, 1) - ax.set_ylim(0, 1) - plt.legend(bbox_to_anchor=(1.04, 1), loc="upper left") - fig.savefig(Path(save_dir), dpi=250) - - -def plot_mc_curve(px, py, save_dir='mc_curve.png', names=(), xlabel='Confidence', ylabel='Metric'): - # Metric-confidence curve - fig, ax = plt.subplots(1, 1, figsize=(9, 6), tight_layout=True) - - if 0 < len(names) < 21: # display per-class legend if < 21 classes - for i, y in enumerate(py): - ax.plot(px, y, linewidth=1, label=f'{names[i]}') # plot(confidence, metric) - else: - ax.plot(px, py.T, linewidth=1, color='grey') # plot(confidence, metric) - - y = py.mean(0) - ax.plot(px, y, linewidth=3, color='blue', label=f'all classes {y.max():.2f} at {px[y.argmax()]:.3f}') - ax.set_xlabel(xlabel) - ax.set_ylabel(ylabel) - ax.set_xlim(0, 1) - ax.set_ylim(0, 1) - plt.legend(bbox_to_anchor=(1.04, 1), loc="upper left") - fig.savefig(Path(save_dir), dpi=250) - -def process_batch(detections, labels, iouv): - """ - Return correct predictions matrix. Both sets of boxes are in (x1, y1, x2, y2) format. - Arguments: - detections (Array[N, 6]), x1, y1, x2, y2, conf, class - labels (Array[M, 5]), class, x1, y1, x2, y2 - Returns: - correct (Array[N, 10]), for 10 IoU levels - """ - correct = np.zeros((detections.shape[0], iouv.shape[0])).astype(bool) - iou = general.box_iou(labels[:, 1:], detections[:, :4]) - correct_class = labels[:, 0:1] == detections[:, 5] - for i in range(len(iouv)): - x = torch.where((iou >= iouv[i]) & correct_class) # IoU > threshold and classes match - if x[0].shape[0]: - matches = torch.cat((torch.stack(x, 1), iou[x[0], x[1]][:, None]), 1).cpu().numpy() # [label, detect, iou] - if x[0].shape[0] > 1: - matches = matches[matches[:, 2].argsort()[::-1]] - matches = matches[np.unique(matches[:, 1], return_index=True)[1]] - # matches = matches[matches[:, 2].argsort()[::-1]] - matches = matches[np.unique(matches[:, 0], return_index=True)[1]] - correct[matches[:, 1].astype(int), i] = True - return torch.tensor(correct, dtype=torch.bool, device=iouv.device) - -class ConfusionMatrix: - # Updated version of https://github.com/kaanakan/object_detection_confusion_matrix - def __init__(self, nc, conf=0.25, iou_thres=0.45): - self.matrix = np.zeros((nc + 1, nc + 1)) - self.nc = nc # number of classes - self.conf = conf - self.iou_thres = iou_thres - - def process_batch(self, detections, labels): - """ - Return intersection-over-union (Jaccard index) of boxes. - Both sets of boxes are expected to be in (x1, y1, x2, y2) format. - Arguments: - detections (Array[N, 6]), x1, y1, x2, y2, conf, class - labels (Array[M, 5]), class, x1, y1, x2, y2 - Returns: - None, updates confusion matrix accordingly - """ - detections = detections[detections[:, 4] > self.conf] - gt_classes = labels[:, 0].int() - detection_classes = detections[:, 5].int() - iou = general.box_iou(labels[:, 1:], detections[:, :4]) - - x = torch.where(iou > self.iou_thres) - if x[0].shape[0]: - matches = torch.cat((torch.stack(x, 1), iou[x[0], x[1]][:, None]), 1).cpu().numpy() - if x[0].shape[0] > 1: - matches = matches[matches[:, 2].argsort()[::-1]] - matches = matches[np.unique(matches[:, 1], return_index=True)[1]] - matches = matches[matches[:, 2].argsort()[::-1]] - matches = matches[np.unique(matches[:, 0], return_index=True)[1]] - else: - matches = np.zeros((0, 3)) - - n = matches.shape[0] > 0 - m0, m1, _ = matches.transpose().astype(int) - for i, gc in enumerate(gt_classes): - j = m0 == i - if n and sum(j) == 1: - self.matrix[detection_classes[m1[j]], gc] += 1 # correct - else: - self.matrix[self.nc, gc] += 1 # background FP - - if n: - for i, dc in enumerate(detection_classes): - if not any(m1 == i): - self.matrix[dc, self.nc] += 1 # background FN - - def matrix(self): - return self.matrix - - def tp_fp(self): - tp = self.matrix.diagonal() # true positives - fp = self.matrix.sum(1) - tp # false positives - # fn = self.matrix.sum(0) - tp # false negatives (missed detections) - return tp[:-1], fp[:-1] # remove background class - - def plot(self, normalize=True, save_dir='', names=()): - try: - import seaborn as sn - - array = self.matrix / ((self.matrix.sum(0).reshape(1, -1) + 1E-9) if normalize else 1) # normalize columns - array[array < 0.005] = np.nan # don't annotate (would appear as 0.00) - - fig = plt.figure(figsize=(12, 9), tight_layout=True) - nc, nn = self.nc, len(names) # number of classes, names - sn.set(font_scale=1.0 if nc < 50 else 0.8) # for label size - labels = (0 < nn < 99) and (nn == nc) # apply names to ticklabels - with warnings.catch_warnings(): - warnings.simplefilter('ignore') # suppress empty matrix RuntimeWarning: All-NaN slice encountered - sn.heatmap(array, - annot=nc < 30, - annot_kws={ - "size": 8}, - cmap='Blues', - fmt='.2f', - square=True, - vmin=0.0, - xticklabels=names + ['background FP'] if labels else "auto", - yticklabels=names + ['background FN'] if labels else "auto").set_facecolor((1, 1, 1)) - fig.axes[0].set_xlabel('True') - fig.axes[0].set_ylabel('Predicted') - fig.savefig(Path(save_dir) / 'confusion_matrix.png', dpi=250) - plt.close() - except Exception as e: - print(f'WARNING: ConfusionMatrix plot failure: {e}') - - def print(self): - for i in range(self.nc + 1): - print(' '.join(map(str, self.matrix[i]))) diff --git a/cv/detection/yolov6/pytorch/yolov6/utils/nms.py b/cv/detection/yolov6/pytorch/yolov6/utils/nms.py deleted file mode 100644 index 0f8126427..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/utils/nms.py +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- -# The code is based on -# https://github.com/ultralytics/yolov5/blob/master/utils/general.py - -import os -import time -import numpy as np -import cv2 -import torch -import torchvision - - -# Settings -torch.set_printoptions(linewidth=320, precision=5, profile='long') -np.set_printoptions(linewidth=320, formatter={'float_kind': '{:11.5g}'.format}) # format short g, %precision=5 -cv2.setNumThreads(0) # prevent OpenCV from multithreading (incompatible with PyTorch DataLoader) -os.environ['NUMEXPR_MAX_THREADS'] = str(min(os.cpu_count(), 8)) # NumExpr max threads - - -def xywh2xyxy(x): - '''Convert boxes with shape [n, 4] from [x, y, w, h] to [x1, y1, x2, y2] where x1y1 is top-left, x2y2=bottom-right.''' - y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x) - y[:, 0] = x[:, 0] - x[:, 2] / 2 # top left x - y[:, 1] = x[:, 1] - x[:, 3] / 2 # top left y - y[:, 2] = x[:, 0] + x[:, 2] / 2 # bottom right x - y[:, 3] = x[:, 1] + x[:, 3] / 2 # bottom right y - return y - - -def non_max_suppression(prediction, conf_thres=0.25, iou_thres=0.45, classes=None, agnostic=False, multi_label=False, max_det=300): - """Runs Non-Maximum Suppression (NMS) on inference results. - This code is borrowed from: https://github.com/ultralytics/yolov5/blob/47233e1698b89fc437a4fb9463c815e9171be955/utils/general.py#L775 - Args: - prediction: (tensor), with shape [N, 5 + num_classes], N is the number of bboxes. - conf_thres: (float) confidence threshold. - iou_thres: (float) iou threshold. - classes: (None or list[int]), if a list is provided, nms only keep the classes you provide. - agnostic: (bool), when it is set to True, we do class-independent nms, otherwise, different class would do nms respectively. - multi_label: (bool), when it is set to True, one box can have multi labels, otherwise, one box only huave one label. - max_det:(int), max number of output bboxes. - - Returns: - list of detections, echo item is one tensor with shape (num_boxes, 6), 6 is for [xyxy, conf, cls]. - """ - - num_classes = prediction.shape[2] - 5 # number of classes - pred_candidates = torch.logical_and(prediction[..., 4] > conf_thres, torch.max(prediction[..., 5:], axis=-1)[0] > conf_thres) # candidates - # Check the parameters. - assert 0 <= conf_thres <= 1, f'conf_thresh must be in 0.0 to 1.0, however {conf_thres} is provided.' - assert 0 <= iou_thres <= 1, f'iou_thres must be in 0.0 to 1.0, however {iou_thres} is provided.' - - # Function settings. - max_wh = 4096 # maximum box width and height - max_nms = 30000 # maximum number of boxes put into torchvision.ops.nms() - time_limit = 10.0 # quit the function when nms cost time exceed the limit time. - multi_label &= num_classes > 1 # multiple labels per box - - tik = time.time() - output = [torch.zeros((0, 6), device=prediction.device)] * prediction.shape[0] - for img_idx, x in enumerate(prediction): # image index, image inference - x = x[pred_candidates[img_idx]] # confidence - - # If no box remains, skip the next process. - if not x.shape[0]: - continue - - # confidence multiply the objectness - x[:, 5:] *= x[:, 4:5] # conf = obj_conf * cls_conf - - # (center x, center y, width, height) to (x1, y1, x2, y2) - box = xywh2xyxy(x[:, :4]) - - # Detections matrix's shape is (n,6), each row represents (xyxy, conf, cls) - if multi_label: - box_idx, class_idx = (x[:, 5:] > conf_thres).nonzero(as_tuple=False).T - x = torch.cat((box[box_idx], x[box_idx, class_idx + 5, None], class_idx[:, None].float()), 1) - else: # Only keep the class with highest scores. - conf, class_idx = x[:, 5:].max(1, keepdim=True) - x = torch.cat((box, conf, class_idx.float()), 1)[conf.view(-1) > conf_thres] - - # Filter by class, only keep boxes whose category is in classes. - if classes is not None: - x = x[(x[:, 5:6] == torch.tensor(classes, device=x.device)).any(1)] - - # Check shape - num_box = x.shape[0] # number of boxes - if not num_box: # no boxes kept. - continue - elif num_box > max_nms: # excess max boxes' number. - x = x[x[:, 4].argsort(descending=True)[:max_nms]] # sort by confidence - - # Batched NMS - class_offset = x[:, 5:6] * (0 if agnostic else max_wh) # classes - boxes, scores = x[:, :4] + class_offset, x[:, 4] # boxes (offset by class), scores - keep_box_idx = torchvision.ops.nms(boxes, scores, iou_thres) # NMS - if keep_box_idx.shape[0] > max_det: # limit detections - keep_box_idx = keep_box_idx[:max_det] - - output[img_idx] = x[keep_box_idx] - if (time.time() - tik) > time_limit: - print(f'WARNING: NMS cost time exceed the limited {time_limit}s.') - break # time limit exceeded - - return output diff --git a/cv/detection/yolov6/pytorch/yolov6/utils/torch_utils.py b/cv/detection/yolov6/pytorch/yolov6/utils/torch_utils.py deleted file mode 100644 index 6d2b09cf0..000000000 --- a/cv/detection/yolov6/pytorch/yolov6/utils/torch_utils.py +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -*- - -import time -from contextlib import contextmanager -from copy import deepcopy -import torch -import torch.distributed as dist -import torch.nn as nn -import torch.nn.functional as F -from yolov6.utils.events import LOGGER - -try: - import thop # for FLOPs computation -except ImportError: - thop = None - - -@contextmanager -def torch_distributed_zero_first(local_rank: int): - """ - Decorator to make all processes in distributed training wait for each local_master to do something. - """ - if local_rank not in [-1, 0]: - dist.barrier(device_ids=[local_rank]) - yield - if local_rank == 0: - dist.barrier(device_ids=[0]) - - -def time_sync(): - '''Waits for all kernels in all streams on a CUDA device to complete if cuda is available.''' - if torch.cuda.is_available(): - torch.cuda.synchronize() - return time.time() - - -def initialize_weights(model): - for m in model.modules(): - t = type(m) - if t is nn.Conv2d: - pass - elif t is nn.BatchNorm2d: - m.eps = 1e-3 - m.momentum = 0.03 - elif t in [nn.Hardswish, nn.LeakyReLU, nn.ReLU, nn.ReLU6, nn.SiLU]: - m.inplace = True - - -def fuse_conv_and_bn(conv, bn): - '''Fuse convolution and batchnorm layers https://tehnokv.com/posts/fusing-batchnorm-and-conv/.''' - fusedconv = ( - nn.Conv2d( - conv.in_channels, - conv.out_channels, - kernel_size=conv.kernel_size, - stride=conv.stride, - padding=conv.padding, - groups=conv.groups, - bias=True, - ) - .requires_grad_(False) - .to(conv.weight.device) - ) - - # prepare filters - w_conv = conv.weight.clone().view(conv.out_channels, -1) - w_bn = torch.diag(bn.weight.div(torch.sqrt(bn.eps + bn.running_var))) - fusedconv.weight.copy_(torch.mm(w_bn, w_conv).view(fusedconv.weight.shape)) - - # prepare spatial bias - b_conv = ( - torch.zeros(conv.weight.size(0), device=conv.weight.device) - if conv.bias is None - else conv.bias - ) - b_bn = bn.bias - bn.weight.mul(bn.running_mean).div( - torch.sqrt(bn.running_var + bn.eps) - ) - fusedconv.bias.copy_(torch.mm(w_bn, b_conv.reshape(-1, 1)).reshape(-1) + b_bn) - - return fusedconv - - -def fuse_model(model): - '''Fuse convolution and batchnorm layers of the model.''' - from yolov6.layers.common import ConvModule - - for m in model.modules(): - if type(m) is ConvModule and hasattr(m, "bn"): - m.conv = fuse_conv_and_bn(m.conv, m.bn) # update conv - delattr(m, "bn") # remove batchnorm - m.forward = m.forward_fuse # update forward - return model - - -def get_model_info(model, img_size=640): - """Get model Params and GFlops. - Code base on https://github.com/Megvii-BaseDetection/YOLOX/blob/main/yolox/utils/model_utils.py - """ - from thop import profile - stride = 64 #32 - img = torch.zeros((1, 3, stride, stride), device=next(model.parameters()).device) - - flops, params = profile(deepcopy(model), inputs=(img,), verbose=False) - params /= 1e6 - flops /= 1e9 - img_size = img_size if isinstance(img_size, list) else [img_size, img_size] - flops *= img_size[0] * img_size[1] / stride / stride * 2 # Gflops - info = "Params: {:.2f}M, Gflops: {:.2f}".format(params, flops) - return info -- Gitee From e32517ed610c1b3ac5765b1fd14f0bd4313c1eff Mon Sep 17 00:00:00 2001 From: "mingjiang.li" Date: Fri, 13 Sep 2024 15:53:30 +0800 Subject: [PATCH 2/5] move yolov7 Signed-off-by: mingjiang.li --- cv/detection/yolov7/pytorch/.gitignore | 263 --- cv/detection/yolov7/pytorch/LICENSE.md | 674 ------ cv/detection/yolov7/pytorch/README.md | 51 +- .../yolov7/pytorch/cfg/baseline/r50-csp.yaml | 49 - .../yolov7/pytorch/cfg/baseline/x50-csp.yaml | 49 - .../pytorch/cfg/baseline/yolor-csp-x.yaml | 52 - .../pytorch/cfg/baseline/yolor-csp.yaml | 52 - .../yolov7/pytorch/cfg/baseline/yolor-d6.yaml | 63 - .../yolov7/pytorch/cfg/baseline/yolor-e6.yaml | 63 - .../yolov7/pytorch/cfg/baseline/yolor-p6.yaml | 63 - .../yolov7/pytorch/cfg/baseline/yolor-w6.yaml | 63 - .../pytorch/cfg/baseline/yolov3-spp.yaml | 51 - .../yolov7/pytorch/cfg/baseline/yolov3.yaml | 51 - .../pytorch/cfg/baseline/yolov4-csp.yaml | 52 - .../yolov7/pytorch/cfg/deploy/yolov7-d6.yaml | 202 -- .../yolov7/pytorch/cfg/deploy/yolov7-e6.yaml | 180 -- .../yolov7/pytorch/cfg/deploy/yolov7-e6e.yaml | 301 --- .../pytorch/cfg/deploy/yolov7-tiny-silu.yaml | 112 - .../pytorch/cfg/deploy/yolov7-tiny.yaml | 112 - .../yolov7/pytorch/cfg/deploy/yolov7-w6.yaml | 158 -- .../yolov7/pytorch/cfg/deploy/yolov7.yaml | 140 -- .../yolov7/pytorch/cfg/deploy/yolov7x.yaml | 156 -- .../pytorch/cfg/training/yolov7-d6.yaml | 207 -- .../pytorch/cfg/training/yolov7-e6.yaml | 185 -- .../pytorch/cfg/training/yolov7-e6e.yaml | 306 --- .../pytorch/cfg/training/yolov7-tiny.yaml | 112 - .../pytorch/cfg/training/yolov7-w6.yaml | 163 -- .../yolov7/pytorch/cfg/training/yolov7.yaml | 140 -- .../yolov7/pytorch/cfg/training/yolov7x.yaml | 156 -- cv/detection/yolov7/pytorch/data/coco.yaml | 23 - .../pytorch/data/hyp.scratch.custom.yaml | 31 - .../yolov7/pytorch/data/hyp.scratch.p5.yaml | 31 - .../yolov7/pytorch/data/hyp.scratch.p6.yaml | 31 - .../yolov7/pytorch/data/hyp.scratch.tiny.yaml | 31 - .../deploy/triton-inference-server/README.md | 164 -- .../triton-inference-server/boundingbox.py | 33 - .../deploy/triton-inference-server/client.py | 334 --- .../deploy/triton-inference-server/labels.py | 83 - .../triton-inference-server/processing.py | 51 - .../deploy/triton-inference-server/render.py | 110 - cv/detection/yolov7/pytorch/detect.py | 196 -- cv/detection/yolov7/pytorch/hubconf.py | 97 - .../yolov7/pytorch/models/__init__.py | 1 - cv/detection/yolov7/pytorch/models/common.py | 2019 ----------------- .../yolov7/pytorch/models/experimental.py | 272 --- cv/detection/yolov7/pytorch/models/yolo.py | 843 ------- cv/detection/yolov7/pytorch/requirements.txt | 39 - cv/detection/yolov7/pytorch/test.py | 353 --- cv/detection/yolov7/pytorch/train.py | 708 ------ cv/detection/yolov7/pytorch/train_aux.py | 699 ------ cv/detection/yolov7/pytorch/utils/__init__.py | 1 - .../yolov7/pytorch/utils/activations.py | 72 - cv/detection/yolov7/pytorch/utils/add_nms.py | 155 -- .../yolov7/pytorch/utils/autoanchor.py | 160 -- .../yolov7/pytorch/utils/aws/__init__.py | 1 - cv/detection/yolov7/pytorch/utils/aws/mime.sh | 26 - .../yolov7/pytorch/utils/aws/resume.py | 37 - .../yolov7/pytorch/utils/aws/userdata.sh | 27 - cv/detection/yolov7/pytorch/utils/datasets.py | 1320 ----------- cv/detection/yolov7/pytorch/utils/general.py | 892 -------- .../utils/google_app_engine/Dockerfile | 25 - .../additional_requirements.txt | 4 - .../pytorch/utils/google_app_engine/app.yaml | 14 - .../yolov7/pytorch/utils/google_utils.py | 123 - cv/detection/yolov7/pytorch/utils/loss.py | 1697 -------------- cv/detection/yolov7/pytorch/utils/metrics.py | 227 -- cv/detection/yolov7/pytorch/utils/plots.py | 489 ---- .../yolov7/pytorch/utils/torch_utils.py | 374 --- .../pytorch/utils/wandb_logging/__init__.py | 1 - .../utils/wandb_logging/log_dataset.py | 24 - .../utils/wandb_logging/wandb_utils.py | 306 --- 71 files changed, 34 insertions(+), 16316 deletions(-) delete mode 100644 cv/detection/yolov7/pytorch/.gitignore delete mode 100644 cv/detection/yolov7/pytorch/LICENSE.md delete mode 100644 cv/detection/yolov7/pytorch/cfg/baseline/r50-csp.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/baseline/x50-csp.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/baseline/yolor-csp-x.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/baseline/yolor-csp.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/baseline/yolor-d6.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/baseline/yolor-e6.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/baseline/yolor-p6.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/baseline/yolor-w6.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/baseline/yolov3-spp.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/baseline/yolov3.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/baseline/yolov4-csp.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/deploy/yolov7-d6.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/deploy/yolov7-e6.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/deploy/yolov7-e6e.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/deploy/yolov7-tiny-silu.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/deploy/yolov7-tiny.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/deploy/yolov7-w6.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/deploy/yolov7.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/deploy/yolov7x.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/training/yolov7-d6.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/training/yolov7-e6.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/training/yolov7-e6e.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/training/yolov7-tiny.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/training/yolov7-w6.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/training/yolov7.yaml delete mode 100644 cv/detection/yolov7/pytorch/cfg/training/yolov7x.yaml delete mode 100644 cv/detection/yolov7/pytorch/data/coco.yaml delete mode 100644 cv/detection/yolov7/pytorch/data/hyp.scratch.custom.yaml delete mode 100644 cv/detection/yolov7/pytorch/data/hyp.scratch.p5.yaml delete mode 100644 cv/detection/yolov7/pytorch/data/hyp.scratch.p6.yaml delete mode 100644 cv/detection/yolov7/pytorch/data/hyp.scratch.tiny.yaml delete mode 100644 cv/detection/yolov7/pytorch/deploy/triton-inference-server/README.md delete mode 100644 cv/detection/yolov7/pytorch/deploy/triton-inference-server/boundingbox.py delete mode 100644 cv/detection/yolov7/pytorch/deploy/triton-inference-server/client.py delete mode 100644 cv/detection/yolov7/pytorch/deploy/triton-inference-server/labels.py delete mode 100644 cv/detection/yolov7/pytorch/deploy/triton-inference-server/processing.py delete mode 100644 cv/detection/yolov7/pytorch/deploy/triton-inference-server/render.py delete mode 100644 cv/detection/yolov7/pytorch/detect.py delete mode 100644 cv/detection/yolov7/pytorch/hubconf.py delete mode 100644 cv/detection/yolov7/pytorch/models/__init__.py delete mode 100644 cv/detection/yolov7/pytorch/models/common.py delete mode 100644 cv/detection/yolov7/pytorch/models/experimental.py delete mode 100644 cv/detection/yolov7/pytorch/models/yolo.py delete mode 100644 cv/detection/yolov7/pytorch/requirements.txt delete mode 100644 cv/detection/yolov7/pytorch/test.py delete mode 100644 cv/detection/yolov7/pytorch/train.py delete mode 100644 cv/detection/yolov7/pytorch/train_aux.py delete mode 100644 cv/detection/yolov7/pytorch/utils/__init__.py delete mode 100644 cv/detection/yolov7/pytorch/utils/activations.py delete mode 100644 cv/detection/yolov7/pytorch/utils/add_nms.py delete mode 100644 cv/detection/yolov7/pytorch/utils/autoanchor.py delete mode 100644 cv/detection/yolov7/pytorch/utils/aws/__init__.py delete mode 100644 cv/detection/yolov7/pytorch/utils/aws/mime.sh delete mode 100644 cv/detection/yolov7/pytorch/utils/aws/resume.py delete mode 100644 cv/detection/yolov7/pytorch/utils/aws/userdata.sh delete mode 100644 cv/detection/yolov7/pytorch/utils/datasets.py delete mode 100644 cv/detection/yolov7/pytorch/utils/general.py delete mode 100644 cv/detection/yolov7/pytorch/utils/google_app_engine/Dockerfile delete mode 100644 cv/detection/yolov7/pytorch/utils/google_app_engine/additional_requirements.txt delete mode 100644 cv/detection/yolov7/pytorch/utils/google_app_engine/app.yaml delete mode 100644 cv/detection/yolov7/pytorch/utils/google_utils.py delete mode 100644 cv/detection/yolov7/pytorch/utils/loss.py delete mode 100644 cv/detection/yolov7/pytorch/utils/metrics.py delete mode 100644 cv/detection/yolov7/pytorch/utils/plots.py delete mode 100644 cv/detection/yolov7/pytorch/utils/torch_utils.py delete mode 100644 cv/detection/yolov7/pytorch/utils/wandb_logging/__init__.py delete mode 100644 cv/detection/yolov7/pytorch/utils/wandb_logging/log_dataset.py delete mode 100644 cv/detection/yolov7/pytorch/utils/wandb_logging/wandb_utils.py diff --git a/cv/detection/yolov7/pytorch/.gitignore b/cv/detection/yolov7/pytorch/.gitignore deleted file mode 100644 index d1bbbbe39..000000000 --- a/cv/detection/yolov7/pytorch/.gitignore +++ /dev/null @@ -1,263 +0,0 @@ -# Repo-specific GitIgnore ---------------------------------------------------------------------------------------------- -*.jpg -*.jpeg -*.png -*.bmp -*.tif -*.tiff -*.heic -*.JPG -*.JPEG -*.PNG -*.BMP -*.TIF -*.TIFF -*.HEIC -*.mp4 -*.mov -*.MOV -*.avi -*.data -*.json -*.cfg -!setup.cfg -!cfg/yolov3*.cfg - -storage.googleapis.com -runs/* -data/* -data/images/* -!data/*.yaml -!data/hyps -!data/scripts -!data/images -!data/images/zidane.jpg -!data/images/bus.jpg -!data/*.sh - -results*.csv - -# Datasets ------------------------------------------------------------------------------------------------------------- -coco/ -coco128/ -VOC/ - -coco2017labels-segments.zip -test2017.zip -train2017.zip -val2017.zip - -# MATLAB GitIgnore ----------------------------------------------------------------------------------------------------- -*.m~ -*.mat -!targets*.mat - -# Neural Network weights ----------------------------------------------------------------------------------------------- -*.weights -*.pt -*.pb -*.onnx -*.engine -*.mlmodel -*.torchscript -*.tflite -*.h5 -*_saved_model/ -*_web_model/ -*_openvino_model/ -darknet53.conv.74 -yolov3-tiny.conv.15 -*.ptl -*.trt - -# GitHub Python GitIgnore ---------------------------------------------------------------------------------------------- -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -env/ -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -*.egg-info/ -/wandb/ -.installed.cfg -*.egg - - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -.hypothesis/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# pyenv -.python-version - -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -# dotenv -.env - -# virtualenv -.venv* -venv*/ -ENV*/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ - - -# https://github.com/github/gitignore/blob/master/Global/macOS.gitignore ----------------------------------------------- - -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon -Icon? - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - - -# https://github.com/github/gitignore/blob/master/Global/JetBrains.gitignore -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff: -.idea/* -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/dictionaries -.html # Bokeh Plots -.pg # TensorFlow Frozen Graphs -.avi # videos - -# Sensitive or high-churn files: -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml - -# Gradle: -.idea/**/gradle.xml -.idea/**/libraries - -# CMake -cmake-build-debug/ -cmake-build-release/ - -# Mongo Explorer plugin: -.idea/**/mongoSettings.xml - -## File-based project format: -*.iws - -## Plugin-specific files: - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties diff --git a/cv/detection/yolov7/pytorch/LICENSE.md b/cv/detection/yolov7/pytorch/LICENSE.md deleted file mode 100644 index f288702d2..000000000 --- a/cv/detection/yolov7/pytorch/LICENSE.md +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/cv/detection/yolov7/pytorch/README.md b/cv/detection/yolov7/pytorch/README.md index 63f86e603..0457b7fdc 100644 --- a/cv/detection/yolov7/pytorch/README.md +++ b/cv/detection/yolov7/pytorch/README.md @@ -1,10 +1,15 @@ # YOLOv7 ## Model description + Implementation of paper - [YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors](https://arxiv.org/abs/2207.02696) ## Step 1: Installing packages -``` + +```bash +## clone yolov7 and install +git clone https://gitee.com/deep-spark/deepsparkhub-GPL.git +cd deepsparkhub-GPL/cv/detection/yolov7/pytorch/ pip3 install -r requirements.txt ``` @@ -34,18 +39,23 @@ coco2017 ``` Modify the configuration file(data/coco.yaml) + +```bash +vim data/coco.yaml +# path: the root of coco data +# train: the relative path of train images +# val: the relative path of valid images ``` -$ vim data/coco.yaml -$ # path: the root of coco data -$ # train: the relative path of train images -$ # val: the relative path of valid images -``` + The train2017.txt and val2017.txt file you can get from: -``` + +```bash wget https://github.com/ultralytics/yolov5/releases/download/v1.0/coco2017labels.zip ``` + The datasets format as follows: -``` + +```bash coco |- iamges |- train2017 @@ -58,16 +68,19 @@ The datasets format as follows: ``` -## Training +## Step 3: Training -Train the yolov5 model as follows, the train log is saved in ./runs/train/exp +Train the yolov7 model as follows, the train log is saved in ./runs/train/exp ### Single GPU training -``` + +```bash python3 train.py --workers 8 --device 0 --batch-size 32 --data data/coco.yaml --img 640 640 --cfg cfg/training/yolov7.yaml --weights '' --name yolov7 --hyp data/hyp.scratch.p5.yaml ``` + ### Multiple GPU training -``` + +```bash python3 -m torch.distributed.launch --nproc_per_node 4 --master_port 9527 train.py --workers 8 --device 0,1,2,3 --sync-bn --batch-size 64 --data data/coco.yaml --img 640 640 --cfg cfg/training/yolov7.yaml --weights '' --name yolov7 --hyp data/hyp.scratch.p5.yaml ``` @@ -75,26 +88,30 @@ python3 -m torch.distributed.launch --nproc_per_node 4 --master_port 9527 train. [`yolov7_training.pt`](https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7_training.pt) [`yolov7x_training.pt`](https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7x_training.pt) [`yolov7-w6_training.pt`](https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-w6_training.pt) [`yolov7-e6_training.pt`](https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-e6_training.pt) [`yolov7-d6_training.pt`](https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-d6_training.pt) [`yolov7-e6e_training.pt`](https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-e6e_training.pt) -``` +```bash python3 train.py --workers 8 --device 0 --batch-size 32 --data data/custom.yaml --img 640 640 --cfg cfg/training/yolov7-custom.yaml --weights 'yolov7_training.pt' --name yolov7-custom --hyp data/hyp.scratch.custom.yaml ``` ## Inference On video: -``` + +```bash python3 detect.py --weights yolov7.pt --conf 0.25 --img-size 640 --source yourvideo.mp4 ``` On image: -``` + +```bash python3 detect.py --weights yolov7.pt --conf 0.25 --img-size 640 --source inference/images/horses.jpg ``` + ## Results + | Model | Test Size | APtest | AP50test | | :-- | :-: | :-: | :-: | | [**YOLOv7**](https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt) | 640 | **49.4%** | **68.6%** | - ## Reference -https://github.com/WongKinYiu/yolov7 + += [YOLOv7](https://github.com/WongKinYiu/yolov7) diff --git a/cv/detection/yolov7/pytorch/cfg/baseline/r50-csp.yaml b/cv/detection/yolov7/pytorch/cfg/baseline/r50-csp.yaml deleted file mode 100644 index 94559f7d0..000000000 --- a/cv/detection/yolov7/pytorch/cfg/baseline/r50-csp.yaml +++ /dev/null @@ -1,49 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [12,16, 19,36, 40,28] # P3/8 - - [36,75, 76,55, 72,146] # P4/16 - - [142,110, 192,243, 459,401] # P5/32 - -# CSP-ResNet backbone -backbone: - # [from, number, module, args] - [[-1, 1, Stem, [128]], # 0-P1/2 - [-1, 3, ResCSPC, [128]], - [-1, 1, Conv, [256, 3, 2]], # 2-P3/8 - [-1, 4, ResCSPC, [256]], - [-1, 1, Conv, [512, 3, 2]], # 4-P3/8 - [-1, 6, ResCSPC, [512]], - [-1, 1, Conv, [1024, 3, 2]], # 6-P3/8 - [-1, 3, ResCSPC, [1024]], # 7 - ] - -# CSP-Res-PAN head -head: - [[-1, 1, SPPCSPC, [512]], # 8 - [-1, 1, Conv, [256, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [5, 1, Conv, [256, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - [-1, 2, ResCSPB, [256]], # 13 - [-1, 1, Conv, [128, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [3, 1, Conv, [128, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - [-1, 2, ResCSPB, [128]], # 18 - [-1, 1, Conv, [256, 3, 1]], - [-2, 1, Conv, [256, 3, 2]], - [[-1, 13], 1, Concat, [1]], # cat - [-1, 2, ResCSPB, [256]], # 22 - [-1, 1, Conv, [512, 3, 1]], - [-2, 1, Conv, [512, 3, 2]], - [[-1, 8], 1, Concat, [1]], # cat - [-1, 2, ResCSPB, [512]], # 26 - [-1, 1, Conv, [1024, 3, 1]], - - [[19,23,27], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/baseline/x50-csp.yaml b/cv/detection/yolov7/pytorch/cfg/baseline/x50-csp.yaml deleted file mode 100644 index 8de14f81a..000000000 --- a/cv/detection/yolov7/pytorch/cfg/baseline/x50-csp.yaml +++ /dev/null @@ -1,49 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [12,16, 19,36, 40,28] # P3/8 - - [36,75, 76,55, 72,146] # P4/16 - - [142,110, 192,243, 459,401] # P5/32 - -# CSP-ResNeXt backbone -backbone: - # [from, number, module, args] - [[-1, 1, Stem, [128]], # 0-P1/2 - [-1, 3, ResXCSPC, [128]], - [-1, 1, Conv, [256, 3, 2]], # 2-P3/8 - [-1, 4, ResXCSPC, [256]], - [-1, 1, Conv, [512, 3, 2]], # 4-P3/8 - [-1, 6, ResXCSPC, [512]], - [-1, 1, Conv, [1024, 3, 2]], # 6-P3/8 - [-1, 3, ResXCSPC, [1024]], # 7 - ] - -# CSP-ResX-PAN head -head: - [[-1, 1, SPPCSPC, [512]], # 8 - [-1, 1, Conv, [256, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [5, 1, Conv, [256, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - [-1, 2, ResXCSPB, [256]], # 13 - [-1, 1, Conv, [128, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [3, 1, Conv, [128, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - [-1, 2, ResXCSPB, [128]], # 18 - [-1, 1, Conv, [256, 3, 1]], - [-2, 1, Conv, [256, 3, 2]], - [[-1, 13], 1, Concat, [1]], # cat - [-1, 2, ResXCSPB, [256]], # 22 - [-1, 1, Conv, [512, 3, 1]], - [-2, 1, Conv, [512, 3, 2]], - [[-1, 8], 1, Concat, [1]], # cat - [-1, 2, ResXCSPB, [512]], # 26 - [-1, 1, Conv, [1024, 3, 1]], - - [[19,23,27], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/baseline/yolor-csp-x.yaml b/cv/detection/yolov7/pytorch/cfg/baseline/yolor-csp-x.yaml deleted file mode 100644 index 6e234c5c2..000000000 --- a/cv/detection/yolov7/pytorch/cfg/baseline/yolor-csp-x.yaml +++ /dev/null @@ -1,52 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.33 # model depth multiple -width_multiple: 1.25 # layer channel multiple - -# anchors -anchors: - - [12,16, 19,36, 40,28] # P3/8 - - [36,75, 76,55, 72,146] # P4/16 - - [142,110, 192,243, 459,401] # P5/32 - -# CSP-Darknet backbone -backbone: - # [from, number, module, args] - [[-1, 1, Conv, [32, 3, 1]], # 0 - [-1, 1, Conv, [64, 3, 2]], # 1-P1/2 - [-1, 1, Bottleneck, [64]], - [-1, 1, Conv, [128, 3, 2]], # 3-P2/4 - [-1, 2, BottleneckCSPC, [128]], - [-1, 1, Conv, [256, 3, 2]], # 5-P3/8 - [-1, 8, BottleneckCSPC, [256]], - [-1, 1, Conv, [512, 3, 2]], # 7-P4/16 - [-1, 8, BottleneckCSPC, [512]], - [-1, 1, Conv, [1024, 3, 2]], # 9-P5/32 - [-1, 4, BottleneckCSPC, [1024]], # 10 - ] - -# CSP-Dark-PAN head -head: - [[-1, 1, SPPCSPC, [512]], # 11 - [-1, 1, Conv, [256, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [8, 1, Conv, [256, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - [-1, 2, BottleneckCSPB, [256]], # 16 - [-1, 1, Conv, [128, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [6, 1, Conv, [128, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - [-1, 2, BottleneckCSPB, [128]], # 21 - [-1, 1, Conv, [256, 3, 1]], - [-2, 1, Conv, [256, 3, 2]], - [[-1, 16], 1, Concat, [1]], # cat - [-1, 2, BottleneckCSPB, [256]], # 25 - [-1, 1, Conv, [512, 3, 1]], - [-2, 1, Conv, [512, 3, 2]], - [[-1, 11], 1, Concat, [1]], # cat - [-1, 2, BottleneckCSPB, [512]], # 29 - [-1, 1, Conv, [1024, 3, 1]], - - [[22,26,30], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/baseline/yolor-csp.yaml b/cv/detection/yolov7/pytorch/cfg/baseline/yolor-csp.yaml deleted file mode 100644 index 3beecf3dd..000000000 --- a/cv/detection/yolov7/pytorch/cfg/baseline/yolor-csp.yaml +++ /dev/null @@ -1,52 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [12,16, 19,36, 40,28] # P3/8 - - [36,75, 76,55, 72,146] # P4/16 - - [142,110, 192,243, 459,401] # P5/32 - -# CSP-Darknet backbone -backbone: - # [from, number, module, args] - [[-1, 1, Conv, [32, 3, 1]], # 0 - [-1, 1, Conv, [64, 3, 2]], # 1-P1/2 - [-1, 1, Bottleneck, [64]], - [-1, 1, Conv, [128, 3, 2]], # 3-P2/4 - [-1, 2, BottleneckCSPC, [128]], - [-1, 1, Conv, [256, 3, 2]], # 5-P3/8 - [-1, 8, BottleneckCSPC, [256]], - [-1, 1, Conv, [512, 3, 2]], # 7-P4/16 - [-1, 8, BottleneckCSPC, [512]], - [-1, 1, Conv, [1024, 3, 2]], # 9-P5/32 - [-1, 4, BottleneckCSPC, [1024]], # 10 - ] - -# CSP-Dark-PAN head -head: - [[-1, 1, SPPCSPC, [512]], # 11 - [-1, 1, Conv, [256, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [8, 1, Conv, [256, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - [-1, 2, BottleneckCSPB, [256]], # 16 - [-1, 1, Conv, [128, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [6, 1, Conv, [128, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - [-1, 2, BottleneckCSPB, [128]], # 21 - [-1, 1, Conv, [256, 3, 1]], - [-2, 1, Conv, [256, 3, 2]], - [[-1, 16], 1, Concat, [1]], # cat - [-1, 2, BottleneckCSPB, [256]], # 25 - [-1, 1, Conv, [512, 3, 1]], - [-2, 1, Conv, [512, 3, 2]], - [[-1, 11], 1, Concat, [1]], # cat - [-1, 2, BottleneckCSPB, [512]], # 29 - [-1, 1, Conv, [1024, 3, 1]], - - [[22,26,30], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/baseline/yolor-d6.yaml b/cv/detection/yolov7/pytorch/cfg/baseline/yolor-d6.yaml deleted file mode 100644 index 297b0d1c2..000000000 --- a/cv/detection/yolov7/pytorch/cfg/baseline/yolor-d6.yaml +++ /dev/null @@ -1,63 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # expand model depth -width_multiple: 1.25 # expand layer channels - -# anchors -anchors: - - [ 19,27, 44,40, 38,94 ] # P3/8 - - [ 96,68, 86,152, 180,137 ] # P4/16 - - [ 140,301, 303,264, 238,542 ] # P5/32 - - [ 436,615, 739,380, 925,792 ] # P6/64 - -# CSP-Darknet backbone -backbone: - # [from, number, module, args] - [[-1, 1, ReOrg, []], # 0 - [-1, 1, Conv, [64, 3, 1]], # 1-P1/2 - [-1, 1, DownC, [128]], # 2-P2/4 - [-1, 3, BottleneckCSPA, [128]], - [-1, 1, DownC, [256]], # 4-P3/8 - [-1, 15, BottleneckCSPA, [256]], - [-1, 1, DownC, [512]], # 6-P4/16 - [-1, 15, BottleneckCSPA, [512]], - [-1, 1, DownC, [768]], # 8-P5/32 - [-1, 7, BottleneckCSPA, [768]], - [-1, 1, DownC, [1024]], # 10-P6/64 - [-1, 7, BottleneckCSPA, [1024]], # 11 - ] - -# CSP-Dark-PAN head -head: - [[-1, 1, SPPCSPC, [512]], # 12 - [-1, 1, Conv, [384, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [-6, 1, Conv, [384, 1, 1]], # route backbone P5 - [[-1, -2], 1, Concat, [1]], - [-1, 3, BottleneckCSPB, [384]], # 17 - [-1, 1, Conv, [256, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [-13, 1, Conv, [256, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - [-1, 3, BottleneckCSPB, [256]], # 22 - [-1, 1, Conv, [128, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [-20, 1, Conv, [128, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - [-1, 3, BottleneckCSPB, [128]], # 27 - [-1, 1, Conv, [256, 3, 1]], - [-2, 1, DownC, [256]], - [[-1, 22], 1, Concat, [1]], # cat - [-1, 3, BottleneckCSPB, [256]], # 31 - [-1, 1, Conv, [512, 3, 1]], - [-2, 1, DownC, [384]], - [[-1, 17], 1, Concat, [1]], # cat - [-1, 3, BottleneckCSPB, [384]], # 35 - [-1, 1, Conv, [768, 3, 1]], - [-2, 1, DownC, [512]], - [[-1, 12], 1, Concat, [1]], # cat - [-1, 3, BottleneckCSPB, [512]], # 39 - [-1, 1, Conv, [1024, 3, 1]], - - [[28,32,36,40], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5, P6) - ] \ No newline at end of file diff --git a/cv/detection/yolov7/pytorch/cfg/baseline/yolor-e6.yaml b/cv/detection/yolov7/pytorch/cfg/baseline/yolor-e6.yaml deleted file mode 100644 index 58afc5ba1..000000000 --- a/cv/detection/yolov7/pytorch/cfg/baseline/yolor-e6.yaml +++ /dev/null @@ -1,63 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # expand model depth -width_multiple: 1.25 # expand layer channels - -# anchors -anchors: - - [ 19,27, 44,40, 38,94 ] # P3/8 - - [ 96,68, 86,152, 180,137 ] # P4/16 - - [ 140,301, 303,264, 238,542 ] # P5/32 - - [ 436,615, 739,380, 925,792 ] # P6/64 - -# CSP-Darknet backbone -backbone: - # [from, number, module, args] - [[-1, 1, ReOrg, []], # 0 - [-1, 1, Conv, [64, 3, 1]], # 1-P1/2 - [-1, 1, DownC, [128]], # 2-P2/4 - [-1, 3, BottleneckCSPA, [128]], - [-1, 1, DownC, [256]], # 4-P3/8 - [-1, 7, BottleneckCSPA, [256]], - [-1, 1, DownC, [512]], # 6-P4/16 - [-1, 7, BottleneckCSPA, [512]], - [-1, 1, DownC, [768]], # 8-P5/32 - [-1, 3, BottleneckCSPA, [768]], - [-1, 1, DownC, [1024]], # 10-P6/64 - [-1, 3, BottleneckCSPA, [1024]], # 11 - ] - -# CSP-Dark-PAN head -head: - [[-1, 1, SPPCSPC, [512]], # 12 - [-1, 1, Conv, [384, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [-6, 1, Conv, [384, 1, 1]], # route backbone P5 - [[-1, -2], 1, Concat, [1]], - [-1, 3, BottleneckCSPB, [384]], # 17 - [-1, 1, Conv, [256, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [-13, 1, Conv, [256, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - [-1, 3, BottleneckCSPB, [256]], # 22 - [-1, 1, Conv, [128, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [-20, 1, Conv, [128, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - [-1, 3, BottleneckCSPB, [128]], # 27 - [-1, 1, Conv, [256, 3, 1]], - [-2, 1, DownC, [256]], - [[-1, 22], 1, Concat, [1]], # cat - [-1, 3, BottleneckCSPB, [256]], # 31 - [-1, 1, Conv, [512, 3, 1]], - [-2, 1, DownC, [384]], - [[-1, 17], 1, Concat, [1]], # cat - [-1, 3, BottleneckCSPB, [384]], # 35 - [-1, 1, Conv, [768, 3, 1]], - [-2, 1, DownC, [512]], - [[-1, 12], 1, Concat, [1]], # cat - [-1, 3, BottleneckCSPB, [512]], # 39 - [-1, 1, Conv, [1024, 3, 1]], - - [[28,32,36,40], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5, P6) - ] \ No newline at end of file diff --git a/cv/detection/yolov7/pytorch/cfg/baseline/yolor-p6.yaml b/cv/detection/yolov7/pytorch/cfg/baseline/yolor-p6.yaml deleted file mode 100644 index 924cf5cf4..000000000 --- a/cv/detection/yolov7/pytorch/cfg/baseline/yolor-p6.yaml +++ /dev/null @@ -1,63 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # expand model depth -width_multiple: 1.0 # expand layer channels - -# anchors -anchors: - - [ 19,27, 44,40, 38,94 ] # P3/8 - - [ 96,68, 86,152, 180,137 ] # P4/16 - - [ 140,301, 303,264, 238,542 ] # P5/32 - - [ 436,615, 739,380, 925,792 ] # P6/64 - -# CSP-Darknet backbone -backbone: - # [from, number, module, args] - [[-1, 1, ReOrg, []], # 0 - [-1, 1, Conv, [64, 3, 1]], # 1-P1/2 - [-1, 1, Conv, [128, 3, 2]], # 2-P2/4 - [-1, 3, BottleneckCSPA, [128]], - [-1, 1, Conv, [256, 3, 2]], # 4-P3/8 - [-1, 7, BottleneckCSPA, [256]], - [-1, 1, Conv, [384, 3, 2]], # 6-P4/16 - [-1, 7, BottleneckCSPA, [384]], - [-1, 1, Conv, [512, 3, 2]], # 8-P5/32 - [-1, 3, BottleneckCSPA, [512]], - [-1, 1, Conv, [640, 3, 2]], # 10-P6/64 - [-1, 3, BottleneckCSPA, [640]], # 11 - ] - -# CSP-Dark-PAN head -head: - [[-1, 1, SPPCSPC, [320]], # 12 - [-1, 1, Conv, [256, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [-6, 1, Conv, [256, 1, 1]], # route backbone P5 - [[-1, -2], 1, Concat, [1]], - [-1, 3, BottleneckCSPB, [256]], # 17 - [-1, 1, Conv, [192, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [-13, 1, Conv, [192, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - [-1, 3, BottleneckCSPB, [192]], # 22 - [-1, 1, Conv, [128, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [-20, 1, Conv, [128, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - [-1, 3, BottleneckCSPB, [128]], # 27 - [-1, 1, Conv, [256, 3, 1]], - [-2, 1, Conv, [192, 3, 2]], - [[-1, 22], 1, Concat, [1]], # cat - [-1, 3, BottleneckCSPB, [192]], # 31 - [-1, 1, Conv, [384, 3, 1]], - [-2, 1, Conv, [256, 3, 2]], - [[-1, 17], 1, Concat, [1]], # cat - [-1, 3, BottleneckCSPB, [256]], # 35 - [-1, 1, Conv, [512, 3, 1]], - [-2, 1, Conv, [320, 3, 2]], - [[-1, 12], 1, Concat, [1]], # cat - [-1, 3, BottleneckCSPB, [320]], # 39 - [-1, 1, Conv, [640, 3, 1]], - - [[28,32,36,40], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5, P6) - ] \ No newline at end of file diff --git a/cv/detection/yolov7/pytorch/cfg/baseline/yolor-w6.yaml b/cv/detection/yolov7/pytorch/cfg/baseline/yolor-w6.yaml deleted file mode 100644 index a2fc96969..000000000 --- a/cv/detection/yolov7/pytorch/cfg/baseline/yolor-w6.yaml +++ /dev/null @@ -1,63 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # expand model depth -width_multiple: 1.0 # expand layer channels - -# anchors -anchors: - - [ 19,27, 44,40, 38,94 ] # P3/8 - - [ 96,68, 86,152, 180,137 ] # P4/16 - - [ 140,301, 303,264, 238,542 ] # P5/32 - - [ 436,615, 739,380, 925,792 ] # P6/64 - -# CSP-Darknet backbone -backbone: - # [from, number, module, args] - [[-1, 1, ReOrg, []], # 0 - [-1, 1, Conv, [64, 3, 1]], # 1-P1/2 - [-1, 1, Conv, [128, 3, 2]], # 2-P2/4 - [-1, 3, BottleneckCSPA, [128]], - [-1, 1, Conv, [256, 3, 2]], # 4-P3/8 - [-1, 7, BottleneckCSPA, [256]], - [-1, 1, Conv, [512, 3, 2]], # 6-P4/16 - [-1, 7, BottleneckCSPA, [512]], - [-1, 1, Conv, [768, 3, 2]], # 8-P5/32 - [-1, 3, BottleneckCSPA, [768]], - [-1, 1, Conv, [1024, 3, 2]], # 10-P6/64 - [-1, 3, BottleneckCSPA, [1024]], # 11 - ] - -# CSP-Dark-PAN head -head: - [[-1, 1, SPPCSPC, [512]], # 12 - [-1, 1, Conv, [384, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [-6, 1, Conv, [384, 1, 1]], # route backbone P5 - [[-1, -2], 1, Concat, [1]], - [-1, 3, BottleneckCSPB, [384]], # 17 - [-1, 1, Conv, [256, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [-13, 1, Conv, [256, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - [-1, 3, BottleneckCSPB, [256]], # 22 - [-1, 1, Conv, [128, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [-20, 1, Conv, [128, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - [-1, 3, BottleneckCSPB, [128]], # 27 - [-1, 1, Conv, [256, 3, 1]], - [-2, 1, Conv, [256, 3, 2]], - [[-1, 22], 1, Concat, [1]], # cat - [-1, 3, BottleneckCSPB, [256]], # 31 - [-1, 1, Conv, [512, 3, 1]], - [-2, 1, Conv, [384, 3, 2]], - [[-1, 17], 1, Concat, [1]], # cat - [-1, 3, BottleneckCSPB, [384]], # 35 - [-1, 1, Conv, [768, 3, 1]], - [-2, 1, Conv, [512, 3, 2]], - [[-1, 12], 1, Concat, [1]], # cat - [-1, 3, BottleneckCSPB, [512]], # 39 - [-1, 1, Conv, [1024, 3, 1]], - - [[28,32,36,40], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5, P6) - ] \ No newline at end of file diff --git a/cv/detection/yolov7/pytorch/cfg/baseline/yolov3-spp.yaml b/cv/detection/yolov7/pytorch/cfg/baseline/yolov3-spp.yaml deleted file mode 100644 index 38dcc449f..000000000 --- a/cv/detection/yolov7/pytorch/cfg/baseline/yolov3-spp.yaml +++ /dev/null @@ -1,51 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [10,13, 16,30, 33,23] # P3/8 - - [30,61, 62,45, 59,119] # P4/16 - - [116,90, 156,198, 373,326] # P5/32 - -# darknet53 backbone -backbone: - # [from, number, module, args] - [[-1, 1, Conv, [32, 3, 1]], # 0 - [-1, 1, Conv, [64, 3, 2]], # 1-P1/2 - [-1, 1, Bottleneck, [64]], - [-1, 1, Conv, [128, 3, 2]], # 3-P2/4 - [-1, 2, Bottleneck, [128]], - [-1, 1, Conv, [256, 3, 2]], # 5-P3/8 - [-1, 8, Bottleneck, [256]], - [-1, 1, Conv, [512, 3, 2]], # 7-P4/16 - [-1, 8, Bottleneck, [512]], - [-1, 1, Conv, [1024, 3, 2]], # 9-P5/32 - [-1, 4, Bottleneck, [1024]], # 10 - ] - -# YOLOv3-SPP head -head: - [[-1, 1, Bottleneck, [1024, False]], - [-1, 1, SPP, [512, [5, 9, 13]]], - [-1, 1, Conv, [1024, 3, 1]], - [-1, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [1024, 3, 1]], # 15 (P5/32-large) - - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [[-1, 8], 1, Concat, [1]], # cat backbone P4 - [-1, 1, Bottleneck, [512, False]], - [-1, 1, Bottleneck, [512, False]], - [-1, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [512, 3, 1]], # 22 (P4/16-medium) - - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [[-1, 6], 1, Concat, [1]], # cat backbone P3 - [-1, 1, Bottleneck, [256, False]], - [-1, 2, Bottleneck, [256, False]], # 27 (P3/8-small) - - [[27, 22, 15], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/baseline/yolov3.yaml b/cv/detection/yolov7/pytorch/cfg/baseline/yolov3.yaml deleted file mode 100644 index f2e761355..000000000 --- a/cv/detection/yolov7/pytorch/cfg/baseline/yolov3.yaml +++ /dev/null @@ -1,51 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [10,13, 16,30, 33,23] # P3/8 - - [30,61, 62,45, 59,119] # P4/16 - - [116,90, 156,198, 373,326] # P5/32 - -# darknet53 backbone -backbone: - # [from, number, module, args] - [[-1, 1, Conv, [32, 3, 1]], # 0 - [-1, 1, Conv, [64, 3, 2]], # 1-P1/2 - [-1, 1, Bottleneck, [64]], - [-1, 1, Conv, [128, 3, 2]], # 3-P2/4 - [-1, 2, Bottleneck, [128]], - [-1, 1, Conv, [256, 3, 2]], # 5-P3/8 - [-1, 8, Bottleneck, [256]], - [-1, 1, Conv, [512, 3, 2]], # 7-P4/16 - [-1, 8, Bottleneck, [512]], - [-1, 1, Conv, [1024, 3, 2]], # 9-P5/32 - [-1, 4, Bottleneck, [1024]], # 10 - ] - -# YOLOv3 head -head: - [[-1, 1, Bottleneck, [1024, False]], - [-1, 1, Conv, [512, [1, 1]]], - [-1, 1, Conv, [1024, 3, 1]], - [-1, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [1024, 3, 1]], # 15 (P5/32-large) - - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [[-1, 8], 1, Concat, [1]], # cat backbone P4 - [-1, 1, Bottleneck, [512, False]], - [-1, 1, Bottleneck, [512, False]], - [-1, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [512, 3, 1]], # 22 (P4/16-medium) - - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [[-1, 6], 1, Concat, [1]], # cat backbone P3 - [-1, 1, Bottleneck, [256, False]], - [-1, 2, Bottleneck, [256, False]], # 27 (P3/8-small) - - [[27, 22, 15], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/baseline/yolov4-csp.yaml b/cv/detection/yolov7/pytorch/cfg/baseline/yolov4-csp.yaml deleted file mode 100644 index 3c908c786..000000000 --- a/cv/detection/yolov7/pytorch/cfg/baseline/yolov4-csp.yaml +++ /dev/null @@ -1,52 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [12,16, 19,36, 40,28] # P3/8 - - [36,75, 76,55, 72,146] # P4/16 - - [142,110, 192,243, 459,401] # P5/32 - -# CSP-Darknet backbone -backbone: - # [from, number, module, args] - [[-1, 1, Conv, [32, 3, 1]], # 0 - [-1, 1, Conv, [64, 3, 2]], # 1-P1/2 - [-1, 1, Bottleneck, [64]], - [-1, 1, Conv, [128, 3, 2]], # 3-P2/4 - [-1, 2, BottleneckCSPC, [128]], - [-1, 1, Conv, [256, 3, 2]], # 5-P3/8 - [-1, 8, BottleneckCSPC, [256]], - [-1, 1, Conv, [512, 3, 2]], # 7-P4/16 - [-1, 8, BottleneckCSPC, [512]], - [-1, 1, Conv, [1024, 3, 2]], # 9-P5/32 - [-1, 4, BottleneckCSPC, [1024]], # 10 - ] - -# CSP-Dark-PAN head -head: - [[-1, 1, SPPCSPC, [512]], # 11 - [-1, 1, Conv, [256, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [8, 1, Conv, [256, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - [-1, 2, BottleneckCSPB, [256]], # 16 - [-1, 1, Conv, [128, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [6, 1, Conv, [128, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - [-1, 2, BottleneckCSPB, [128]], # 21 - [-1, 1, Conv, [256, 3, 1]], - [-2, 1, Conv, [256, 3, 2]], - [[-1, 16], 1, Concat, [1]], # cat - [-1, 2, BottleneckCSPB, [256]], # 25 - [-1, 1, Conv, [512, 3, 1]], - [-2, 1, Conv, [512, 3, 2]], - [[-1, 11], 1, Concat, [1]], # cat - [-1, 2, BottleneckCSPB, [512]], # 29 - [-1, 1, Conv, [1024, 3, 1]], - - [[22,26,30], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-d6.yaml b/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-d6.yaml deleted file mode 100644 index 75a8cf58b..000000000 --- a/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-d6.yaml +++ /dev/null @@ -1,202 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [ 19,27, 44,40, 38,94 ] # P3/8 - - [ 96,68, 86,152, 180,137 ] # P4/16 - - [ 140,301, 303,264, 238,542 ] # P5/32 - - [ 436,615, 739,380, 925,792 ] # P6/64 - -# yolov7-d6 backbone -backbone: - # [from, number, module, args], - [[-1, 1, ReOrg, []], # 0 - [-1, 1, Conv, [96, 3, 1]], # 1-P1/2 - - [-1, 1, DownC, [192]], # 2-P2/4 - [-1, 1, Conv, [64, 1, 1]], - [-2, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [192, 1, 1]], # 14 - - [-1, 1, DownC, [384]], # 15-P3/8 - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [384, 1, 1]], # 27 - - [-1, 1, DownC, [768]], # 28-P4/16 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [768, 1, 1]], # 40 - - [-1, 1, DownC, [1152]], # 41-P5/32 - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [1152, 1, 1]], # 53 - - [-1, 1, DownC, [1536]], # 54-P6/64 - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [1536, 1, 1]], # 66 - ] - -# yolov7-d6 head -head: - [[-1, 1, SPPCSPC, [768]], # 67 - - [-1, 1, Conv, [576, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [53, 1, Conv, [576, 1, 1]], # route backbone P5 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [576, 1, 1]], # 83 - - [-1, 1, Conv, [384, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [40, 1, Conv, [384, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [384, 1, 1]], # 99 - - [-1, 1, Conv, [192, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [27, 1, Conv, [192, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [192, 1, 1]], # 115 - - [-1, 1, DownC, [384]], - [[-1, 99], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [384, 1, 1]], # 129 - - [-1, 1, DownC, [576]], - [[-1, 83], 1, Concat, [1]], - - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [576, 1, 1]], # 143 - - [-1, 1, DownC, [768]], - [[-1, 67], 1, Concat, [1]], - - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [768, 1, 1]], # 157 - - [115, 1, Conv, [384, 3, 1]], - [129, 1, Conv, [768, 3, 1]], - [143, 1, Conv, [1152, 3, 1]], - [157, 1, Conv, [1536, 3, 1]], - - [[158,159,160,161], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5, P6) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-e6.yaml b/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-e6.yaml deleted file mode 100644 index e68040695..000000000 --- a/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-e6.yaml +++ /dev/null @@ -1,180 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [ 19,27, 44,40, 38,94 ] # P3/8 - - [ 96,68, 86,152, 180,137 ] # P4/16 - - [ 140,301, 303,264, 238,542 ] # P5/32 - - [ 436,615, 739,380, 925,792 ] # P6/64 - -# yolov7-e6 backbone -backbone: - # [from, number, module, args], - [[-1, 1, ReOrg, []], # 0 - [-1, 1, Conv, [80, 3, 1]], # 1-P1/2 - - [-1, 1, DownC, [160]], # 2-P2/4 - [-1, 1, Conv, [64, 1, 1]], - [-2, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [160, 1, 1]], # 12 - - [-1, 1, DownC, [320]], # 13-P3/8 - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 23 - - [-1, 1, DownC, [640]], # 24-P4/16 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [640, 1, 1]], # 34 - - [-1, 1, DownC, [960]], # 35-P5/32 - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [960, 1, 1]], # 45 - - [-1, 1, DownC, [1280]], # 46-P6/64 - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [1280, 1, 1]], # 56 - ] - -# yolov7-e6 head -head: - [[-1, 1, SPPCSPC, [640]], # 57 - - [-1, 1, Conv, [480, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [45, 1, Conv, [480, 1, 1]], # route backbone P5 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [480, 1, 1]], # 71 - - [-1, 1, Conv, [320, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [34, 1, Conv, [320, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 85 - - [-1, 1, Conv, [160, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [23, 1, Conv, [160, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [160, 1, 1]], # 99 - - [-1, 1, DownC, [320]], - [[-1, 85], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 111 - - [-1, 1, DownC, [480]], - [[-1, 71], 1, Concat, [1]], - - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [480, 1, 1]], # 123 - - [-1, 1, DownC, [640]], - [[-1, 57], 1, Concat, [1]], - - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [640, 1, 1]], # 135 - - [99, 1, Conv, [320, 3, 1]], - [111, 1, Conv, [640, 3, 1]], - [123, 1, Conv, [960, 3, 1]], - [135, 1, Conv, [1280, 3, 1]], - - [[136,137,138,139], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5, P6) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-e6e.yaml b/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-e6e.yaml deleted file mode 100644 index 135990d86..000000000 --- a/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-e6e.yaml +++ /dev/null @@ -1,301 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [ 19,27, 44,40, 38,94 ] # P3/8 - - [ 96,68, 86,152, 180,137 ] # P4/16 - - [ 140,301, 303,264, 238,542 ] # P5/32 - - [ 436,615, 739,380, 925,792 ] # P6/64 - -# yolov7-e6e backbone -backbone: - # [from, number, module, args], - [[-1, 1, ReOrg, []], # 0 - [-1, 1, Conv, [80, 3, 1]], # 1-P1/2 - - [-1, 1, DownC, [160]], # 2-P2/4 - [-1, 1, Conv, [64, 1, 1]], - [-2, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [160, 1, 1]], # 12 - [-11, 1, Conv, [64, 1, 1]], - [-12, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [160, 1, 1]], # 22 - [[-1, -11], 1, Shortcut, [1]], # 23 - - [-1, 1, DownC, [320]], # 24-P3/8 - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 34 - [-11, 1, Conv, [128, 1, 1]], - [-12, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 44 - [[-1, -11], 1, Shortcut, [1]], # 45 - - [-1, 1, DownC, [640]], # 46-P4/16 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [640, 1, 1]], # 56 - [-11, 1, Conv, [256, 1, 1]], - [-12, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [640, 1, 1]], # 66 - [[-1, -11], 1, Shortcut, [1]], # 67 - - [-1, 1, DownC, [960]], # 68-P5/32 - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [960, 1, 1]], # 78 - [-11, 1, Conv, [384, 1, 1]], - [-12, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [960, 1, 1]], # 88 - [[-1, -11], 1, Shortcut, [1]], # 89 - - [-1, 1, DownC, [1280]], # 90-P6/64 - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [1280, 1, 1]], # 100 - [-11, 1, Conv, [512, 1, 1]], - [-12, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [1280, 1, 1]], # 110 - [[-1, -11], 1, Shortcut, [1]], # 111 - ] - -# yolov7-e6e head -head: - [[-1, 1, SPPCSPC, [640]], # 112 - - [-1, 1, Conv, [480, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [89, 1, Conv, [480, 1, 1]], # route backbone P5 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [480, 1, 1]], # 126 - [-11, 1, Conv, [384, 1, 1]], - [-12, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [480, 1, 1]], # 136 - [[-1, -11], 1, Shortcut, [1]], # 137 - - [-1, 1, Conv, [320, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [67, 1, Conv, [320, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 151 - [-11, 1, Conv, [256, 1, 1]], - [-12, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 161 - [[-1, -11], 1, Shortcut, [1]], # 162 - - [-1, 1, Conv, [160, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [45, 1, Conv, [160, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [160, 1, 1]], # 176 - [-11, 1, Conv, [128, 1, 1]], - [-12, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [160, 1, 1]], # 186 - [[-1, -11], 1, Shortcut, [1]], # 187 - - [-1, 1, DownC, [320]], - [[-1, 162], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 199 - [-11, 1, Conv, [256, 1, 1]], - [-12, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 209 - [[-1, -11], 1, Shortcut, [1]], # 210 - - [-1, 1, DownC, [480]], - [[-1, 137], 1, Concat, [1]], - - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [480, 1, 1]], # 222 - [-11, 1, Conv, [384, 1, 1]], - [-12, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [480, 1, 1]], # 232 - [[-1, -11], 1, Shortcut, [1]], # 233 - - [-1, 1, DownC, [640]], - [[-1, 112], 1, Concat, [1]], - - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [640, 1, 1]], # 245 - [-11, 1, Conv, [512, 1, 1]], - [-12, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [640, 1, 1]], # 255 - [[-1, -11], 1, Shortcut, [1]], # 256 - - [187, 1, Conv, [320, 3, 1]], - [210, 1, Conv, [640, 3, 1]], - [233, 1, Conv, [960, 3, 1]], - [256, 1, Conv, [1280, 3, 1]], - - [[257,258,259,260], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5, P6) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-tiny-silu.yaml b/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-tiny-silu.yaml deleted file mode 100644 index 9250573ac..000000000 --- a/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-tiny-silu.yaml +++ /dev/null @@ -1,112 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [10,13, 16,30, 33,23] # P3/8 - - [30,61, 62,45, 59,119] # P4/16 - - [116,90, 156,198, 373,326] # P5/32 - -# YOLOv7-tiny backbone -backbone: - # [from, number, module, args] - [[-1, 1, Conv, [32, 3, 2]], # 0-P1/2 - - [-1, 1, Conv, [64, 3, 2]], # 1-P2/4 - - [-1, 1, Conv, [32, 1, 1]], - [-2, 1, Conv, [32, 1, 1]], - [-1, 1, Conv, [32, 3, 1]], - [-1, 1, Conv, [32, 3, 1]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [64, 1, 1]], # 7 - - [-1, 1, MP, []], # 8-P3/8 - [-1, 1, Conv, [64, 1, 1]], - [-2, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [128, 1, 1]], # 14 - - [-1, 1, MP, []], # 15-P4/16 - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1]], # 21 - - [-1, 1, MP, []], # 22-P5/32 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [512, 1, 1]], # 28 - ] - -# YOLOv7-tiny head -head: - [[-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, SP, [5]], - [-2, 1, SP, [9]], - [-3, 1, SP, [13]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1]], - [[-1, -7], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1]], # 37 - - [-1, 1, Conv, [128, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [21, 1, Conv, [128, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [64, 1, 1]], - [-2, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [128, 1, 1]], # 47 - - [-1, 1, Conv, [64, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [14, 1, Conv, [64, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [32, 1, 1]], - [-2, 1, Conv, [32, 1, 1]], - [-1, 1, Conv, [32, 3, 1]], - [-1, 1, Conv, [32, 3, 1]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [64, 1, 1]], # 57 - - [-1, 1, Conv, [128, 3, 2]], - [[-1, 47], 1, Concat, [1]], - - [-1, 1, Conv, [64, 1, 1]], - [-2, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [128, 1, 1]], # 65 - - [-1, 1, Conv, [256, 3, 2]], - [[-1, 37], 1, Concat, [1]], - - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1]], # 73 - - [57, 1, Conv, [128, 3, 1]], - [65, 1, Conv, [256, 3, 1]], - [73, 1, Conv, [512, 3, 1]], - - [[74,75,76], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-tiny.yaml b/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-tiny.yaml deleted file mode 100644 index b09f130b8..000000000 --- a/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-tiny.yaml +++ /dev/null @@ -1,112 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [10,13, 16,30, 33,23] # P3/8 - - [30,61, 62,45, 59,119] # P4/16 - - [116,90, 156,198, 373,326] # P5/32 - -# yolov7-tiny backbone -backbone: - # [from, number, module, args] c2, k=1, s=1, p=None, g=1, act=True - [[-1, 1, Conv, [32, 3, 2, None, 1, nn.LeakyReLU(0.1)]], # 0-P1/2 - - [-1, 1, Conv, [64, 3, 2, None, 1, nn.LeakyReLU(0.1)]], # 1-P2/4 - - [-1, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 7 - - [-1, 1, MP, []], # 8-P3/8 - [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 14 - - [-1, 1, MP, []], # 15-P4/16 - [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 21 - - [-1, 1, MP, []], # 22-P5/32 - [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [512, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 28 - ] - -# yolov7-tiny head -head: - [[-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, SP, [5]], - [-2, 1, SP, [9]], - [-3, 1, SP, [13]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -7], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 37 - - [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [21, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 47 - - [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [14, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 57 - - [-1, 1, Conv, [128, 3, 2, None, 1, nn.LeakyReLU(0.1)]], - [[-1, 47], 1, Concat, [1]], - - [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 65 - - [-1, 1, Conv, [256, 3, 2, None, 1, nn.LeakyReLU(0.1)]], - [[-1, 37], 1, Concat, [1]], - - [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 73 - - [57, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [65, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [73, 1, Conv, [512, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - - [[74,75,76], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-w6.yaml b/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-w6.yaml deleted file mode 100644 index 5637a6152..000000000 --- a/cv/detection/yolov7/pytorch/cfg/deploy/yolov7-w6.yaml +++ /dev/null @@ -1,158 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [ 19,27, 44,40, 38,94 ] # P3/8 - - [ 96,68, 86,152, 180,137 ] # P4/16 - - [ 140,301, 303,264, 238,542 ] # P5/32 - - [ 436,615, 739,380, 925,792 ] # P6/64 - -# yolov7-w6 backbone -backbone: - # [from, number, module, args] - [[-1, 1, ReOrg, []], # 0 - [-1, 1, Conv, [64, 3, 1]], # 1-P1/2 - - [-1, 1, Conv, [128, 3, 2]], # 2-P2/4 - [-1, 1, Conv, [64, 1, 1]], - [-2, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [128, 1, 1]], # 10 - - [-1, 1, Conv, [256, 3, 2]], # 11-P3/8 - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1]], # 19 - - [-1, 1, Conv, [512, 3, 2]], # 20-P4/16 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [512, 1, 1]], # 28 - - [-1, 1, Conv, [768, 3, 2]], # 29-P5/32 - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [768, 1, 1]], # 37 - - [-1, 1, Conv, [1024, 3, 2]], # 38-P6/64 - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [1024, 1, 1]], # 46 - ] - -# yolov7-w6 head -head: - [[-1, 1, SPPCSPC, [512]], # 47 - - [-1, 1, Conv, [384, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [37, 1, Conv, [384, 1, 1]], # route backbone P5 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [384, 1, 1]], # 59 - - [-1, 1, Conv, [256, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [28, 1, Conv, [256, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1]], # 71 - - [-1, 1, Conv, [128, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [19, 1, Conv, [128, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [128, 1, 1]], # 83 - - [-1, 1, Conv, [256, 3, 2]], - [[-1, 71], 1, Concat, [1]], # cat - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1]], # 93 - - [-1, 1, Conv, [384, 3, 2]], - [[-1, 59], 1, Concat, [1]], # cat - - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [384, 1, 1]], # 103 - - [-1, 1, Conv, [512, 3, 2]], - [[-1, 47], 1, Concat, [1]], # cat - - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [512, 1, 1]], # 113 - - [83, 1, Conv, [256, 3, 1]], - [93, 1, Conv, [512, 3, 1]], - [103, 1, Conv, [768, 3, 1]], - [113, 1, Conv, [1024, 3, 1]], - - [[114,115,116,117], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5, P6) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/deploy/yolov7.yaml b/cv/detection/yolov7/pytorch/cfg/deploy/yolov7.yaml deleted file mode 100644 index 201f98da6..000000000 --- a/cv/detection/yolov7/pytorch/cfg/deploy/yolov7.yaml +++ /dev/null @@ -1,140 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [12,16, 19,36, 40,28] # P3/8 - - [36,75, 76,55, 72,146] # P4/16 - - [142,110, 192,243, 459,401] # P5/32 - -# yolov7 backbone -backbone: - # [from, number, module, args] - [[-1, 1, Conv, [32, 3, 1]], # 0 - - [-1, 1, Conv, [64, 3, 2]], # 1-P1/2 - [-1, 1, Conv, [64, 3, 1]], - - [-1, 1, Conv, [128, 3, 2]], # 3-P2/4 - [-1, 1, Conv, [64, 1, 1]], - [-2, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1]], # 11 - - [-1, 1, MP, []], - [-1, 1, Conv, [128, 1, 1]], - [-3, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 2]], - [[-1, -3], 1, Concat, [1]], # 16-P3/8 - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [512, 1, 1]], # 24 - - [-1, 1, MP, []], - [-1, 1, Conv, [256, 1, 1]], - [-3, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 2]], - [[-1, -3], 1, Concat, [1]], # 29-P4/16 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [1024, 1, 1]], # 37 - - [-1, 1, MP, []], - [-1, 1, Conv, [512, 1, 1]], - [-3, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [512, 3, 2]], - [[-1, -3], 1, Concat, [1]], # 42-P5/32 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [1024, 1, 1]], # 50 - ] - -# yolov7 head -head: - [[-1, 1, SPPCSPC, [512]], # 51 - - [-1, 1, Conv, [256, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [37, 1, Conv, [256, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1]], # 63 - - [-1, 1, Conv, [128, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [24, 1, Conv, [128, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [128, 1, 1]], # 75 - - [-1, 1, MP, []], - [-1, 1, Conv, [128, 1, 1]], - [-3, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 2]], - [[-1, -3, 63], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1]], # 88 - - [-1, 1, MP, []], - [-1, 1, Conv, [256, 1, 1]], - [-3, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 2]], - [[-1, -3, 51], 1, Concat, [1]], - - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [512, 1, 1]], # 101 - - [75, 1, RepConv, [256, 3, 1]], - [88, 1, RepConv, [512, 3, 1]], - [101, 1, RepConv, [1024, 3, 1]], - - [[102,103,104], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/deploy/yolov7x.yaml b/cv/detection/yolov7/pytorch/cfg/deploy/yolov7x.yaml deleted file mode 100644 index c1b4acce4..000000000 --- a/cv/detection/yolov7/pytorch/cfg/deploy/yolov7x.yaml +++ /dev/null @@ -1,156 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [12,16, 19,36, 40,28] # P3/8 - - [36,75, 76,55, 72,146] # P4/16 - - [142,110, 192,243, 459,401] # P5/32 - -# yolov7x backbone -backbone: - # [from, number, module, args] - [[-1, 1, Conv, [40, 3, 1]], # 0 - - [-1, 1, Conv, [80, 3, 2]], # 1-P1/2 - [-1, 1, Conv, [80, 3, 1]], - - [-1, 1, Conv, [160, 3, 2]], # 3-P2/4 - [-1, 1, Conv, [64, 1, 1]], - [-2, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 13 - - [-1, 1, MP, []], - [-1, 1, Conv, [160, 1, 1]], - [-3, 1, Conv, [160, 1, 1]], - [-1, 1, Conv, [160, 3, 2]], - [[-1, -3], 1, Concat, [1]], # 18-P3/8 - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [640, 1, 1]], # 28 - - [-1, 1, MP, []], - [-1, 1, Conv, [320, 1, 1]], - [-3, 1, Conv, [320, 1, 1]], - [-1, 1, Conv, [320, 3, 2]], - [[-1, -3], 1, Concat, [1]], # 33-P4/16 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [1280, 1, 1]], # 43 - - [-1, 1, MP, []], - [-1, 1, Conv, [640, 1, 1]], - [-3, 1, Conv, [640, 1, 1]], - [-1, 1, Conv, [640, 3, 2]], - [[-1, -3], 1, Concat, [1]], # 48-P5/32 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [1280, 1, 1]], # 58 - ] - -# yolov7x head -head: - [[-1, 1, SPPCSPC, [640]], # 59 - - [-1, 1, Conv, [320, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [43, 1, Conv, [320, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 73 - - [-1, 1, Conv, [160, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [28, 1, Conv, [160, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [160, 1, 1]], # 87 - - [-1, 1, MP, []], - [-1, 1, Conv, [160, 1, 1]], - [-3, 1, Conv, [160, 1, 1]], - [-1, 1, Conv, [160, 3, 2]], - [[-1, -3, 73], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 102 - - [-1, 1, MP, []], - [-1, 1, Conv, [320, 1, 1]], - [-3, 1, Conv, [320, 1, 1]], - [-1, 1, Conv, [320, 3, 2]], - [[-1, -3, 59], 1, Concat, [1]], - - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [640, 1, 1]], # 117 - - [87, 1, Conv, [320, 3, 1]], - [102, 1, Conv, [640, 3, 1]], - [117, 1, Conv, [1280, 3, 1]], - - [[118,119,120], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/training/yolov7-d6.yaml b/cv/detection/yolov7/pytorch/cfg/training/yolov7-d6.yaml deleted file mode 100644 index 4faedda45..000000000 --- a/cv/detection/yolov7/pytorch/cfg/training/yolov7-d6.yaml +++ /dev/null @@ -1,207 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [ 19,27, 44,40, 38,94 ] # P3/8 - - [ 96,68, 86,152, 180,137 ] # P4/16 - - [ 140,301, 303,264, 238,542 ] # P5/32 - - [ 436,615, 739,380, 925,792 ] # P6/64 - -# yolov7 backbone -backbone: - # [from, number, module, args], - [[-1, 1, ReOrg, []], # 0 - [-1, 1, Conv, [96, 3, 1]], # 1-P1/2 - - [-1, 1, DownC, [192]], # 2-P2/4 - [-1, 1, Conv, [64, 1, 1]], - [-2, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [192, 1, 1]], # 14 - - [-1, 1, DownC, [384]], # 15-P3/8 - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [384, 1, 1]], # 27 - - [-1, 1, DownC, [768]], # 28-P4/16 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [768, 1, 1]], # 40 - - [-1, 1, DownC, [1152]], # 41-P5/32 - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [1152, 1, 1]], # 53 - - [-1, 1, DownC, [1536]], # 54-P6/64 - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [1536, 1, 1]], # 66 - ] - -# yolov7 head -head: - [[-1, 1, SPPCSPC, [768]], # 67 - - [-1, 1, Conv, [576, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [53, 1, Conv, [576, 1, 1]], # route backbone P5 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [576, 1, 1]], # 83 - - [-1, 1, Conv, [384, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [40, 1, Conv, [384, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [384, 1, 1]], # 99 - - [-1, 1, Conv, [192, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [27, 1, Conv, [192, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [192, 1, 1]], # 115 - - [-1, 1, DownC, [384]], - [[-1, 99], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [384, 1, 1]], # 129 - - [-1, 1, DownC, [576]], - [[-1, 83], 1, Concat, [1]], - - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [576, 1, 1]], # 143 - - [-1, 1, DownC, [768]], - [[-1, 67], 1, Concat, [1]], - - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]], - [-1, 1, Conv, [768, 1, 1]], # 157 - - [115, 1, Conv, [384, 3, 1]], - [129, 1, Conv, [768, 3, 1]], - [143, 1, Conv, [1152, 3, 1]], - [157, 1, Conv, [1536, 3, 1]], - - [115, 1, Conv, [384, 3, 1]], - [99, 1, Conv, [768, 3, 1]], - [83, 1, Conv, [1152, 3, 1]], - [67, 1, Conv, [1536, 3, 1]], - - [[158,159,160,161,162,163,164,165], 1, IAuxDetect, [nc, anchors]], # Detect(P3, P4, P5, P6) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/training/yolov7-e6.yaml b/cv/detection/yolov7/pytorch/cfg/training/yolov7-e6.yaml deleted file mode 100644 index 58b27f097..000000000 --- a/cv/detection/yolov7/pytorch/cfg/training/yolov7-e6.yaml +++ /dev/null @@ -1,185 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [ 19,27, 44,40, 38,94 ] # P3/8 - - [ 96,68, 86,152, 180,137 ] # P4/16 - - [ 140,301, 303,264, 238,542 ] # P5/32 - - [ 436,615, 739,380, 925,792 ] # P6/64 - -# yolov7 backbone -backbone: - # [from, number, module, args], - [[-1, 1, ReOrg, []], # 0 - [-1, 1, Conv, [80, 3, 1]], # 1-P1/2 - - [-1, 1, DownC, [160]], # 2-P2/4 - [-1, 1, Conv, [64, 1, 1]], - [-2, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [160, 1, 1]], # 12 - - [-1, 1, DownC, [320]], # 13-P3/8 - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 23 - - [-1, 1, DownC, [640]], # 24-P4/16 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [640, 1, 1]], # 34 - - [-1, 1, DownC, [960]], # 35-P5/32 - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [960, 1, 1]], # 45 - - [-1, 1, DownC, [1280]], # 46-P6/64 - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [1280, 1, 1]], # 56 - ] - -# yolov7 head -head: - [[-1, 1, SPPCSPC, [640]], # 57 - - [-1, 1, Conv, [480, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [45, 1, Conv, [480, 1, 1]], # route backbone P5 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [480, 1, 1]], # 71 - - [-1, 1, Conv, [320, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [34, 1, Conv, [320, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 85 - - [-1, 1, Conv, [160, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [23, 1, Conv, [160, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [160, 1, 1]], # 99 - - [-1, 1, DownC, [320]], - [[-1, 85], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 111 - - [-1, 1, DownC, [480]], - [[-1, 71], 1, Concat, [1]], - - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [480, 1, 1]], # 123 - - [-1, 1, DownC, [640]], - [[-1, 57], 1, Concat, [1]], - - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [640, 1, 1]], # 135 - - [99, 1, Conv, [320, 3, 1]], - [111, 1, Conv, [640, 3, 1]], - [123, 1, Conv, [960, 3, 1]], - [135, 1, Conv, [1280, 3, 1]], - - [99, 1, Conv, [320, 3, 1]], - [85, 1, Conv, [640, 3, 1]], - [71, 1, Conv, [960, 3, 1]], - [57, 1, Conv, [1280, 3, 1]], - - [[136,137,138,139,140,141,142,143], 1, IAuxDetect, [nc, anchors]], # Detect(P3, P4, P5, P6) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/training/yolov7-e6e.yaml b/cv/detection/yolov7/pytorch/cfg/training/yolov7-e6e.yaml deleted file mode 100644 index 3c836619e..000000000 --- a/cv/detection/yolov7/pytorch/cfg/training/yolov7-e6e.yaml +++ /dev/null @@ -1,306 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [ 19,27, 44,40, 38,94 ] # P3/8 - - [ 96,68, 86,152, 180,137 ] # P4/16 - - [ 140,301, 303,264, 238,542 ] # P5/32 - - [ 436,615, 739,380, 925,792 ] # P6/64 - -# yolov7 backbone -backbone: - # [from, number, module, args], - [[-1, 1, ReOrg, []], # 0 - [-1, 1, Conv, [80, 3, 1]], # 1-P1/2 - - [-1, 1, DownC, [160]], # 2-P2/4 - [-1, 1, Conv, [64, 1, 1]], - [-2, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [160, 1, 1]], # 12 - [-11, 1, Conv, [64, 1, 1]], - [-12, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [160, 1, 1]], # 22 - [[-1, -11], 1, Shortcut, [1]], # 23 - - [-1, 1, DownC, [320]], # 24-P3/8 - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 34 - [-11, 1, Conv, [128, 1, 1]], - [-12, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 44 - [[-1, -11], 1, Shortcut, [1]], # 45 - - [-1, 1, DownC, [640]], # 46-P4/16 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [640, 1, 1]], # 56 - [-11, 1, Conv, [256, 1, 1]], - [-12, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [640, 1, 1]], # 66 - [[-1, -11], 1, Shortcut, [1]], # 67 - - [-1, 1, DownC, [960]], # 68-P5/32 - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [960, 1, 1]], # 78 - [-11, 1, Conv, [384, 1, 1]], - [-12, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [960, 1, 1]], # 88 - [[-1, -11], 1, Shortcut, [1]], # 89 - - [-1, 1, DownC, [1280]], # 90-P6/64 - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [1280, 1, 1]], # 100 - [-11, 1, Conv, [512, 1, 1]], - [-12, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [1280, 1, 1]], # 110 - [[-1, -11], 1, Shortcut, [1]], # 111 - ] - -# yolov7 head -head: - [[-1, 1, SPPCSPC, [640]], # 112 - - [-1, 1, Conv, [480, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [89, 1, Conv, [480, 1, 1]], # route backbone P5 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [480, 1, 1]], # 126 - [-11, 1, Conv, [384, 1, 1]], - [-12, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [480, 1, 1]], # 136 - [[-1, -11], 1, Shortcut, [1]], # 137 - - [-1, 1, Conv, [320, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [67, 1, Conv, [320, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 151 - [-11, 1, Conv, [256, 1, 1]], - [-12, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 161 - [[-1, -11], 1, Shortcut, [1]], # 162 - - [-1, 1, Conv, [160, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [45, 1, Conv, [160, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [160, 1, 1]], # 176 - [-11, 1, Conv, [128, 1, 1]], - [-12, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [160, 1, 1]], # 186 - [[-1, -11], 1, Shortcut, [1]], # 187 - - [-1, 1, DownC, [320]], - [[-1, 162], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 199 - [-11, 1, Conv, [256, 1, 1]], - [-12, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 209 - [[-1, -11], 1, Shortcut, [1]], # 210 - - [-1, 1, DownC, [480]], - [[-1, 137], 1, Concat, [1]], - - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [480, 1, 1]], # 222 - [-11, 1, Conv, [384, 1, 1]], - [-12, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [480, 1, 1]], # 232 - [[-1, -11], 1, Shortcut, [1]], # 233 - - [-1, 1, DownC, [640]], - [[-1, 112], 1, Concat, [1]], - - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [640, 1, 1]], # 245 - [-11, 1, Conv, [512, 1, 1]], - [-12, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [640, 1, 1]], # 255 - [[-1, -11], 1, Shortcut, [1]], # 256 - - [187, 1, Conv, [320, 3, 1]], - [210, 1, Conv, [640, 3, 1]], - [233, 1, Conv, [960, 3, 1]], - [256, 1, Conv, [1280, 3, 1]], - - [186, 1, Conv, [320, 3, 1]], - [161, 1, Conv, [640, 3, 1]], - [136, 1, Conv, [960, 3, 1]], - [112, 1, Conv, [1280, 3, 1]], - - [[257,258,259,260,261,262,263,264], 1, IAuxDetect, [nc, anchors]], # Detect(P3, P4, P5, P6) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/training/yolov7-tiny.yaml b/cv/detection/yolov7/pytorch/cfg/training/yolov7-tiny.yaml deleted file mode 100644 index 3679b0d55..000000000 --- a/cv/detection/yolov7/pytorch/cfg/training/yolov7-tiny.yaml +++ /dev/null @@ -1,112 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [10,13, 16,30, 33,23] # P3/8 - - [30,61, 62,45, 59,119] # P4/16 - - [116,90, 156,198, 373,326] # P5/32 - -# yolov7-tiny backbone -backbone: - # [from, number, module, args] c2, k=1, s=1, p=None, g=1, act=True - [[-1, 1, Conv, [32, 3, 2, None, 1, nn.LeakyReLU(0.1)]], # 0-P1/2 - - [-1, 1, Conv, [64, 3, 2, None, 1, nn.LeakyReLU(0.1)]], # 1-P2/4 - - [-1, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 7 - - [-1, 1, MP, []], # 8-P3/8 - [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 14 - - [-1, 1, MP, []], # 15-P4/16 - [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 21 - - [-1, 1, MP, []], # 22-P5/32 - [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [512, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 28 - ] - -# yolov7-tiny head -head: - [[-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, SP, [5]], - [-2, 1, SP, [9]], - [-3, 1, SP, [13]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -7], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 37 - - [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [21, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 47 - - [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [14, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 57 - - [-1, 1, Conv, [128, 3, 2, None, 1, nn.LeakyReLU(0.1)]], - [[-1, 47], 1, Concat, [1]], - - [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 65 - - [-1, 1, Conv, [256, 3, 2, None, 1, nn.LeakyReLU(0.1)]], - [[-1, 37], 1, Concat, [1]], - - [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-2, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [[-1, -2, -3, -4], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 73 - - [57, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [65, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - [73, 1, Conv, [512, 3, 1, None, 1, nn.LeakyReLU(0.1)]], - - [[74,75,76], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/training/yolov7-w6.yaml b/cv/detection/yolov7/pytorch/cfg/training/yolov7-w6.yaml deleted file mode 100644 index 4b9c0131a..000000000 --- a/cv/detection/yolov7/pytorch/cfg/training/yolov7-w6.yaml +++ /dev/null @@ -1,163 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [ 19,27, 44,40, 38,94 ] # P3/8 - - [ 96,68, 86,152, 180,137 ] # P4/16 - - [ 140,301, 303,264, 238,542 ] # P5/32 - - [ 436,615, 739,380, 925,792 ] # P6/64 - -# yolov7 backbone -backbone: - # [from, number, module, args] - [[-1, 1, ReOrg, []], # 0 - [-1, 1, Conv, [64, 3, 1]], # 1-P1/2 - - [-1, 1, Conv, [128, 3, 2]], # 2-P2/4 - [-1, 1, Conv, [64, 1, 1]], - [-2, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [128, 1, 1]], # 10 - - [-1, 1, Conv, [256, 3, 2]], # 11-P3/8 - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1]], # 19 - - [-1, 1, Conv, [512, 3, 2]], # 20-P4/16 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [512, 1, 1]], # 28 - - [-1, 1, Conv, [768, 3, 2]], # 29-P5/32 - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [-1, 1, Conv, [384, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [768, 1, 1]], # 37 - - [-1, 1, Conv, [1024, 3, 2]], # 38-P6/64 - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [1024, 1, 1]], # 46 - ] - -# yolov7 head -head: - [[-1, 1, SPPCSPC, [512]], # 47 - - [-1, 1, Conv, [384, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [37, 1, Conv, [384, 1, 1]], # route backbone P5 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [384, 1, 1]], # 59 - - [-1, 1, Conv, [256, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [28, 1, Conv, [256, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1]], # 71 - - [-1, 1, Conv, [128, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [19, 1, Conv, [128, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [128, 1, 1]], # 83 - - [-1, 1, Conv, [256, 3, 2]], - [[-1, 71], 1, Concat, [1]], # cat - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1]], # 93 - - [-1, 1, Conv, [384, 3, 2]], - [[-1, 59], 1, Concat, [1]], # cat - - [-1, 1, Conv, [384, 1, 1]], - [-2, 1, Conv, [384, 1, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [-1, 1, Conv, [192, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [384, 1, 1]], # 103 - - [-1, 1, Conv, [512, 3, 2]], - [[-1, 47], 1, Concat, [1]], # cat - - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [512, 1, 1]], # 113 - - [83, 1, Conv, [256, 3, 1]], - [93, 1, Conv, [512, 3, 1]], - [103, 1, Conv, [768, 3, 1]], - [113, 1, Conv, [1024, 3, 1]], - - [83, 1, Conv, [320, 3, 1]], - [71, 1, Conv, [640, 3, 1]], - [59, 1, Conv, [960, 3, 1]], - [47, 1, Conv, [1280, 3, 1]], - - [[114,115,116,117,118,119,120,121], 1, IAuxDetect, [nc, anchors]], # Detect(P3, P4, P5, P6) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/training/yolov7.yaml b/cv/detection/yolov7/pytorch/cfg/training/yolov7.yaml deleted file mode 100644 index 9a807e58f..000000000 --- a/cv/detection/yolov7/pytorch/cfg/training/yolov7.yaml +++ /dev/null @@ -1,140 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [12,16, 19,36, 40,28] # P3/8 - - [36,75, 76,55, 72,146] # P4/16 - - [142,110, 192,243, 459,401] # P5/32 - -# yolov7 backbone -backbone: - # [from, number, module, args] - [[-1, 1, Conv, [32, 3, 1]], # 0 - - [-1, 1, Conv, [64, 3, 2]], # 1-P1/2 - [-1, 1, Conv, [64, 3, 1]], - - [-1, 1, Conv, [128, 3, 2]], # 3-P2/4 - [-1, 1, Conv, [64, 1, 1]], - [-2, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1]], # 11 - - [-1, 1, MP, []], - [-1, 1, Conv, [128, 1, 1]], - [-3, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 2]], - [[-1, -3], 1, Concat, [1]], # 16-P3/8 - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [512, 1, 1]], # 24 - - [-1, 1, MP, []], - [-1, 1, Conv, [256, 1, 1]], - [-3, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 2]], - [[-1, -3], 1, Concat, [1]], # 29-P4/16 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [1024, 1, 1]], # 37 - - [-1, 1, MP, []], - [-1, 1, Conv, [512, 1, 1]], - [-3, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [512, 3, 2]], - [[-1, -3], 1, Concat, [1]], # 42-P5/32 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [1024, 1, 1]], # 50 - ] - -# yolov7 head -head: - [[-1, 1, SPPCSPC, [512]], # 51 - - [-1, 1, Conv, [256, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [37, 1, Conv, [256, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1]], # 63 - - [-1, 1, Conv, [128, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [24, 1, Conv, [128, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [128, 1, 1]], # 75 - - [-1, 1, MP, []], - [-1, 1, Conv, [128, 1, 1]], - [-3, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 2]], - [[-1, -3, 63], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [256, 1, 1]], # 88 - - [-1, 1, MP, []], - [-1, 1, Conv, [256, 1, 1]], - [-3, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 2]], - [[-1, -3, 51], 1, Concat, [1]], - - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]], - [-1, 1, Conv, [512, 1, 1]], # 101 - - [75, 1, RepConv, [256, 3, 1]], - [88, 1, RepConv, [512, 3, 1]], - [101, 1, RepConv, [1024, 3, 1]], - - [[102,103,104], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5) - ] diff --git a/cv/detection/yolov7/pytorch/cfg/training/yolov7x.yaml b/cv/detection/yolov7/pytorch/cfg/training/yolov7x.yaml deleted file mode 100644 index 207be8863..000000000 --- a/cv/detection/yolov7/pytorch/cfg/training/yolov7x.yaml +++ /dev/null @@ -1,156 +0,0 @@ -# parameters -nc: 80 # number of classes -depth_multiple: 1.0 # model depth multiple -width_multiple: 1.0 # layer channel multiple - -# anchors -anchors: - - [12,16, 19,36, 40,28] # P3/8 - - [36,75, 76,55, 72,146] # P4/16 - - [142,110, 192,243, 459,401] # P5/32 - -# yolov7 backbone -backbone: - # [from, number, module, args] - [[-1, 1, Conv, [40, 3, 1]], # 0 - - [-1, 1, Conv, [80, 3, 2]], # 1-P1/2 - [-1, 1, Conv, [80, 3, 1]], - - [-1, 1, Conv, [160, 3, 2]], # 3-P2/4 - [-1, 1, Conv, [64, 1, 1]], - [-2, 1, Conv, [64, 1, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [-1, 1, Conv, [64, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 13 - - [-1, 1, MP, []], - [-1, 1, Conv, [160, 1, 1]], - [-3, 1, Conv, [160, 1, 1]], - [-1, 1, Conv, [160, 3, 2]], - [[-1, -3], 1, Concat, [1]], # 18-P3/8 - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [640, 1, 1]], # 28 - - [-1, 1, MP, []], - [-1, 1, Conv, [320, 1, 1]], - [-3, 1, Conv, [320, 1, 1]], - [-1, 1, Conv, [320, 3, 2]], - [[-1, -3], 1, Concat, [1]], # 33-P4/16 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [1280, 1, 1]], # 43 - - [-1, 1, MP, []], - [-1, 1, Conv, [640, 1, 1]], - [-3, 1, Conv, [640, 1, 1]], - [-1, 1, Conv, [640, 3, 2]], - [[-1, -3], 1, Concat, [1]], # 48-P5/32 - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [1280, 1, 1]], # 58 - ] - -# yolov7 head -head: - [[-1, 1, SPPCSPC, [640]], # 59 - - [-1, 1, Conv, [320, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [43, 1, Conv, [320, 1, 1]], # route backbone P4 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 73 - - [-1, 1, Conv, [160, 1, 1]], - [-1, 1, nn.Upsample, [None, 2, 'nearest']], - [28, 1, Conv, [160, 1, 1]], # route backbone P3 - [[-1, -2], 1, Concat, [1]], - - [-1, 1, Conv, [128, 1, 1]], - [-2, 1, Conv, [128, 1, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [-1, 1, Conv, [128, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [160, 1, 1]], # 87 - - [-1, 1, MP, []], - [-1, 1, Conv, [160, 1, 1]], - [-3, 1, Conv, [160, 1, 1]], - [-1, 1, Conv, [160, 3, 2]], - [[-1, -3, 73], 1, Concat, [1]], - - [-1, 1, Conv, [256, 1, 1]], - [-2, 1, Conv, [256, 1, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [-1, 1, Conv, [256, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [320, 1, 1]], # 102 - - [-1, 1, MP, []], - [-1, 1, Conv, [320, 1, 1]], - [-3, 1, Conv, [320, 1, 1]], - [-1, 1, Conv, [320, 3, 2]], - [[-1, -3, 59], 1, Concat, [1]], - - [-1, 1, Conv, [512, 1, 1]], - [-2, 1, Conv, [512, 1, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [-1, 1, Conv, [512, 3, 1]], - [[-1, -3, -5, -7, -8], 1, Concat, [1]], - [-1, 1, Conv, [640, 1, 1]], # 117 - - [87, 1, Conv, [320, 3, 1]], - [102, 1, Conv, [640, 3, 1]], - [117, 1, Conv, [1280, 3, 1]], - - [[118,119,120], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5) - ] diff --git a/cv/detection/yolov7/pytorch/data/coco.yaml b/cv/detection/yolov7/pytorch/data/coco.yaml deleted file mode 100644 index 447c792fe..000000000 --- a/cv/detection/yolov7/pytorch/data/coco.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# COCO 2017 dataset http://cocodataset.org - -# download command/URL (optional) -download: bash ./scripts/get_coco.sh - -# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/] -train: /home/datasets/cv/coco/train2017.txt # 118287 images -val: /home/datasets/cv/coco/val2017.txt # 5000 images -test: /home/datasets/cv/coco/val2017.txt # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794 - -# number of classes -nc: 80 - -# class names -names: [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', - 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', - 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', - 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', - 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', - 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', - 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', - 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', - 'hair drier', 'toothbrush' ] diff --git a/cv/detection/yolov7/pytorch/data/hyp.scratch.custom.yaml b/cv/detection/yolov7/pytorch/data/hyp.scratch.custom.yaml deleted file mode 100644 index 8570d7301..000000000 --- a/cv/detection/yolov7/pytorch/data/hyp.scratch.custom.yaml +++ /dev/null @@ -1,31 +0,0 @@ -lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3) -lrf: 0.1 # final OneCycleLR learning rate (lr0 * lrf) -momentum: 0.937 # SGD momentum/Adam beta1 -weight_decay: 0.0005 # optimizer weight decay 5e-4 -warmup_epochs: 3.0 # warmup epochs (fractions ok) -warmup_momentum: 0.8 # warmup initial momentum -warmup_bias_lr: 0.1 # warmup initial bias lr -box: 0.05 # box loss gain -cls: 0.3 # cls loss gain -cls_pw: 1.0 # cls BCELoss positive_weight -obj: 0.7 # obj loss gain (scale with pixels) -obj_pw: 1.0 # obj BCELoss positive_weight -iou_t: 0.20 # IoU training threshold -anchor_t: 4.0 # anchor-multiple threshold -# anchors: 3 # anchors per output layer (0 to ignore) -fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5) -hsv_h: 0.015 # image HSV-Hue augmentation (fraction) -hsv_s: 0.7 # image HSV-Saturation augmentation (fraction) -hsv_v: 0.4 # image HSV-Value augmentation (fraction) -degrees: 0.0 # image rotation (+/- deg) -translate: 0.2 # image translation (+/- fraction) -scale: 0.5 # image scale (+/- gain) -shear: 0.0 # image shear (+/- deg) -perspective: 0.0 # image perspective (+/- fraction), range 0-0.001 -flipud: 0.0 # image flip up-down (probability) -fliplr: 0.5 # image flip left-right (probability) -mosaic: 1.0 # image mosaic (probability) -mixup: 0.0 # image mixup (probability) -copy_paste: 0.0 # image copy paste (probability) -paste_in: 0.0 # image copy paste (probability), use 0 for faster training -loss_ota: 1 # use ComputeLossOTA, use 0 for faster training \ No newline at end of file diff --git a/cv/detection/yolov7/pytorch/data/hyp.scratch.p5.yaml b/cv/detection/yolov7/pytorch/data/hyp.scratch.p5.yaml deleted file mode 100644 index a409bac3d..000000000 --- a/cv/detection/yolov7/pytorch/data/hyp.scratch.p5.yaml +++ /dev/null @@ -1,31 +0,0 @@ -lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3) -lrf: 0.1 # final OneCycleLR learning rate (lr0 * lrf) -momentum: 0.937 # SGD momentum/Adam beta1 -weight_decay: 0.0005 # optimizer weight decay 5e-4 -warmup_epochs: 3.0 # warmup epochs (fractions ok) -warmup_momentum: 0.8 # warmup initial momentum -warmup_bias_lr: 0.1 # warmup initial bias lr -box: 0.05 # box loss gain -cls: 0.3 # cls loss gain -cls_pw: 1.0 # cls BCELoss positive_weight -obj: 0.7 # obj loss gain (scale with pixels) -obj_pw: 1.0 # obj BCELoss positive_weight -iou_t: 0.20 # IoU training threshold -anchor_t: 4.0 # anchor-multiple threshold -# anchors: 3 # anchors per output layer (0 to ignore) -fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5) -hsv_h: 0.015 # image HSV-Hue augmentation (fraction) -hsv_s: 0.7 # image HSV-Saturation augmentation (fraction) -hsv_v: 0.4 # image HSV-Value augmentation (fraction) -degrees: 0.0 # image rotation (+/- deg) -translate: 0.2 # image translation (+/- fraction) -scale: 0.9 # image scale (+/- gain) -shear: 0.0 # image shear (+/- deg) -perspective: 0.0 # image perspective (+/- fraction), range 0-0.001 -flipud: 0.0 # image flip up-down (probability) -fliplr: 0.5 # image flip left-right (probability) -mosaic: 1.0 # image mosaic (probability) -mixup: 0.15 # image mixup (probability) -copy_paste: 0.0 # image copy paste (probability) -paste_in: 0.15 # image copy paste (probability), use 0 for faster training -loss_ota: 1 # use ComputeLossOTA, use 0 for faster training \ No newline at end of file diff --git a/cv/detection/yolov7/pytorch/data/hyp.scratch.p6.yaml b/cv/detection/yolov7/pytorch/data/hyp.scratch.p6.yaml deleted file mode 100644 index 192d0d5dd..000000000 --- a/cv/detection/yolov7/pytorch/data/hyp.scratch.p6.yaml +++ /dev/null @@ -1,31 +0,0 @@ -lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3) -lrf: 0.2 # final OneCycleLR learning rate (lr0 * lrf) -momentum: 0.937 # SGD momentum/Adam beta1 -weight_decay: 0.0005 # optimizer weight decay 5e-4 -warmup_epochs: 3.0 # warmup epochs (fractions ok) -warmup_momentum: 0.8 # warmup initial momentum -warmup_bias_lr: 0.1 # warmup initial bias lr -box: 0.05 # box loss gain -cls: 0.3 # cls loss gain -cls_pw: 1.0 # cls BCELoss positive_weight -obj: 0.7 # obj loss gain (scale with pixels) -obj_pw: 1.0 # obj BCELoss positive_weight -iou_t: 0.20 # IoU training threshold -anchor_t: 4.0 # anchor-multiple threshold -# anchors: 3 # anchors per output layer (0 to ignore) -fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5) -hsv_h: 0.015 # image HSV-Hue augmentation (fraction) -hsv_s: 0.7 # image HSV-Saturation augmentation (fraction) -hsv_v: 0.4 # image HSV-Value augmentation (fraction) -degrees: 0.0 # image rotation (+/- deg) -translate: 0.2 # image translation (+/- fraction) -scale: 0.9 # image scale (+/- gain) -shear: 0.0 # image shear (+/- deg) -perspective: 0.0 # image perspective (+/- fraction), range 0-0.001 -flipud: 0.0 # image flip up-down (probability) -fliplr: 0.5 # image flip left-right (probability) -mosaic: 1.0 # image mosaic (probability) -mixup: 0.15 # image mixup (probability) -copy_paste: 0.0 # image copy paste (probability) -paste_in: 0.15 # image copy paste (probability), use 0 for faster training -loss_ota: 1 # use ComputeLossOTA, use 0 for faster training \ No newline at end of file diff --git a/cv/detection/yolov7/pytorch/data/hyp.scratch.tiny.yaml b/cv/detection/yolov7/pytorch/data/hyp.scratch.tiny.yaml deleted file mode 100644 index b0dc14ae1..000000000 --- a/cv/detection/yolov7/pytorch/data/hyp.scratch.tiny.yaml +++ /dev/null @@ -1,31 +0,0 @@ -lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3) -lrf: 0.01 # final OneCycleLR learning rate (lr0 * lrf) -momentum: 0.937 # SGD momentum/Adam beta1 -weight_decay: 0.0005 # optimizer weight decay 5e-4 -warmup_epochs: 3.0 # warmup epochs (fractions ok) -warmup_momentum: 0.8 # warmup initial momentum -warmup_bias_lr: 0.1 # warmup initial bias lr -box: 0.05 # box loss gain -cls: 0.5 # cls loss gain -cls_pw: 1.0 # cls BCELoss positive_weight -obj: 1.0 # obj loss gain (scale with pixels) -obj_pw: 1.0 # obj BCELoss positive_weight -iou_t: 0.20 # IoU training threshold -anchor_t: 4.0 # anchor-multiple threshold -# anchors: 3 # anchors per output layer (0 to ignore) -fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5) -hsv_h: 0.015 # image HSV-Hue augmentation (fraction) -hsv_s: 0.7 # image HSV-Saturation augmentation (fraction) -hsv_v: 0.4 # image HSV-Value augmentation (fraction) -degrees: 0.0 # image rotation (+/- deg) -translate: 0.1 # image translation (+/- fraction) -scale: 0.5 # image scale (+/- gain) -shear: 0.0 # image shear (+/- deg) -perspective: 0.0 # image perspective (+/- fraction), range 0-0.001 -flipud: 0.0 # image flip up-down (probability) -fliplr: 0.5 # image flip left-right (probability) -mosaic: 1.0 # image mosaic (probability) -mixup: 0.05 # image mixup (probability) -copy_paste: 0.0 # image copy paste (probability) -paste_in: 0.05 # image copy paste (probability), use 0 for faster training -loss_ota: 1 # use ComputeLossOTA, use 0 for faster training diff --git a/cv/detection/yolov7/pytorch/deploy/triton-inference-server/README.md b/cv/detection/yolov7/pytorch/deploy/triton-inference-server/README.md deleted file mode 100644 index 13af4daa9..000000000 --- a/cv/detection/yolov7/pytorch/deploy/triton-inference-server/README.md +++ /dev/null @@ -1,164 +0,0 @@ -# YOLOv7 on Triton Inference Server - -Instructions to deploy YOLOv7 as TensorRT engine to [Triton Inference Server](https://github.com/NVIDIA/triton-inference-server). - -Triton Inference Server takes care of model deployment with many out-of-the-box benefits, like a GRPC and HTTP interface, automatic scheduling on multiple GPUs, shared memory (even on GPU), dynamic server-side batching, health metrics and memory resource management. - -There are no additional dependencies needed to run this deployment, except a working docker daemon with GPU support. - -## Export TensorRT - -See https://github.com/WongKinYiu/yolov7#export for more info. - -```bash -#install onnx-simplifier not listed in general yolov7 requirements.txt -pip3 install onnx-simplifier - -# Pytorch Yolov7 -> ONNX with grid, EfficientNMS plugin and dynamic batch size -python export.py --weights ./yolov7.pt --grid --end2end --dynamic-batch --simplify --topk-all 100 --iou-thres 0.65 --conf-thres 0.35 --img-size 640 640 -# ONNX -> TensorRT with trtexec and docker -docker run -it --rm --gpus=all nvcr.io/nvidia/tensorrt:22.06-py3 -# Copy onnx -> container: docker cp yolov7.onnx :/workspace/ -# Export with FP16 precision, min batch 1, opt batch 8 and max batch 8 -./tensorrt/bin/trtexec --onnx=yolov7.onnx --minShapes=images:1x3x640x640 --optShapes=images:8x3x640x640 --maxShapes=images:8x3x640x640 --fp16 --workspace=4096 --saveEngine=yolov7-fp16-1x8x8.engine --timingCacheFile=timing.cache -# Test engine -./tensorrt/bin/trtexec --loadEngine=yolov7-fp16-1x8x8.engine -# Copy engine -> host: docker cp :/workspace/yolov7-fp16-1x8x8.engine . -``` - -Example output of test with RTX 3090. - -``` -[I] === Performance summary === -[I] Throughput: 73.4985 qps -[I] Latency: min = 14.8578 ms, max = 15.8344 ms, mean = 15.07 ms, median = 15.0422 ms, percentile(99%) = 15.7443 ms -[I] End-to-End Host Latency: min = 25.8715 ms, max = 28.4102 ms, mean = 26.672 ms, median = 26.6082 ms, percentile(99%) = 27.8314 ms -[I] Enqueue Time: min = 0.793701 ms, max = 1.47144 ms, mean = 1.2008 ms, median = 1.28644 ms, percentile(99%) = 1.38965 ms -[I] H2D Latency: min = 1.50073 ms, max = 1.52454 ms, mean = 1.51225 ms, median = 1.51404 ms, percentile(99%) = 1.51941 ms -[I] GPU Compute Time: min = 13.3386 ms, max = 14.3186 ms, mean = 13.5448 ms, median = 13.5178 ms, percentile(99%) = 14.2151 ms -[I] D2H Latency: min = 0.00878906 ms, max = 0.0172729 ms, mean = 0.0128844 ms, median = 0.0125732 ms, percentile(99%) = 0.0166016 ms -[I] Total Host Walltime: 3.04768 s -[I] Total GPU Compute Time: 3.03404 s -[I] Explanations of the performance metrics are printed in the verbose logs. -``` -Note: 73.5 qps x batch 8 = 588 fps @ ~15ms latency. - -## Model Repository - -See [Triton Model Repository Documentation](https://github.com/triton-inference-server/server/blob/main/docs/model_repository.md#model-repository) for more info. - -```bash -# Create folder structure -mkdir -p triton-deploy/models/yolov7/1/ -touch triton-deploy/models/yolov7/config.pbtxt -# Place model -mv yolov7-fp16-1x8x8.engine triton-deploy/models/yolov7/1/model.plan -``` - -## Model Configuration - -See [Triton Model Configuration Documentation](https://github.com/triton-inference-server/server/blob/main/docs/model_configuration.md#model-configuration) for more info. - -Minimal configuration for `triton-deploy/models/yolov7/config.pbtxt`: - -``` -name: "yolov7" -platform: "tensorrt_plan" -max_batch_size: 8 -dynamic_batching { } -``` - -Example repository: - -```bash -$ tree triton-deploy/ -triton-deploy/ -└── models - └── yolov7 - ├── 1 - │   └── model.plan - └── config.pbtxt - -3 directories, 2 files -``` - -## Start Triton Inference Server - -``` -docker run --gpus all --rm --ipc=host --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 -p8000:8000 -p8001:8001 -p8002:8002 -v$(pwd)/triton-deploy/models:/models nvcr.io/nvidia/tritonserver:22.06-py3 tritonserver --model-repository=/models --strict-model-config=false --log-verbose 1 -``` - -In the log you should see: - -``` -+--------+---------+--------+ -| Model | Version | Status | -+--------+---------+--------+ -| yolov7 | 1 | READY | -+--------+---------+--------+ -``` - -## Performance with Model Analyzer - -See [Triton Model Analyzer Documentation](https://github.com/triton-inference-server/server/blob/main/docs/model_analyzer.md#model-analyzer) for more info. - -Performance numbers @ RTX 3090 + AMD Ryzen 9 5950X - -Example test for 16 concurrent clients using shared memory, each with batch size 1 requests: - -```bash -docker run -it --ipc=host --net=host nvcr.io/nvidia/tritonserver:22.06-py3-sdk /bin/bash - -./install/bin/perf_analyzer -m yolov7 -u 127.0.0.1:8001 -i grpc --shared-memory system --concurrency-range 16 - -# Result (truncated) -Concurrency: 16, throughput: 590.119 infer/sec, latency 27080 usec -``` - -Throughput for 16 clients with batch size 1 is the same as for a single thread running the engine at 16 batch size locally thanks to Triton [Dynamic Batching Strategy](https://github.com/triton-inference-server/server/blob/main/docs/model_configuration.md#dynamic-batcher). Result without dynamic batching (disable in model configuration) considerably worse: - -```bash -# Result (truncated) -Concurrency: 16, throughput: 335.587 infer/sec, latency 47616 usec -``` - -## How to run model in your code - -Example client can be found in client.py. It can run dummy input, images and videos. - -```bash -pip3 install tritonclient[all] opencv-python -python3 client.py image data/dog.jpg -``` - -![exemplary output result](data/dog_result.jpg) - -``` -$ python3 client.py --help -usage: client.py [-h] [-m MODEL] [--width WIDTH] [--height HEIGHT] [-u URL] [-o OUT] [-f FPS] [-i] [-v] [-t CLIENT_TIMEOUT] [-s] [-r ROOT_CERTIFICATES] [-p PRIVATE_KEY] [-x CERTIFICATE_CHAIN] {dummy,image,video} [input] - -positional arguments: - {dummy,image,video} Run mode. 'dummy' will send an emtpy buffer to the server to test if inference works. 'image' will process an image. 'video' will process a video. - input Input file to load from in image or video mode - -optional arguments: - -h, --help show this help message and exit - -m MODEL, --model MODEL - Inference model name, default yolov7 - --width WIDTH Inference model input width, default 640 - --height HEIGHT Inference model input height, default 640 - -u URL, --url URL Inference server URL, default localhost:8001 - -o OUT, --out OUT Write output into file instead of displaying it - -f FPS, --fps FPS Video output fps, default 24.0 FPS - -i, --model-info Print model status, configuration and statistics - -v, --verbose Enable verbose client output - -t CLIENT_TIMEOUT, --client-timeout CLIENT_TIMEOUT - Client timeout in seconds, default no timeout - -s, --ssl Enable SSL encrypted channel to the server - -r ROOT_CERTIFICATES, --root-certificates ROOT_CERTIFICATES - File holding PEM-encoded root certificates, default none - -p PRIVATE_KEY, --private-key PRIVATE_KEY - File holding PEM-encoded private key, default is none - -x CERTIFICATE_CHAIN, --certificate-chain CERTIFICATE_CHAIN - File holding PEM-encoded certicate chain default is none -``` diff --git a/cv/detection/yolov7/pytorch/deploy/triton-inference-server/boundingbox.py b/cv/detection/yolov7/pytorch/deploy/triton-inference-server/boundingbox.py deleted file mode 100644 index 8b95330b8..000000000 --- a/cv/detection/yolov7/pytorch/deploy/triton-inference-server/boundingbox.py +++ /dev/null @@ -1,33 +0,0 @@ -class BoundingBox: - def __init__(self, classID, confidence, x1, x2, y1, y2, image_width, image_height): - self.classID = classID - self.confidence = confidence - self.x1 = x1 - self.x2 = x2 - self.y1 = y1 - self.y2 = y2 - self.u1 = x1 / image_width - self.u2 = x2 / image_width - self.v1 = y1 / image_height - self.v2 = y2 / image_height - - def box(self): - return (self.x1, self.y1, self.x2, self.y2) - - def width(self): - return self.x2 - self.x1 - - def height(self): - return self.y2 - self.y1 - - def center_absolute(self): - return (0.5 * (self.x1 + self.x2), 0.5 * (self.y1 + self.y2)) - - def center_normalized(self): - return (0.5 * (self.u1 + self.u2), 0.5 * (self.v1 + self.v2)) - - def size_absolute(self): - return (self.x2 - self.x1, self.y2 - self.y1) - - def size_normalized(self): - return (self.u2 - self.u1, self.v2 - self.v1) diff --git a/cv/detection/yolov7/pytorch/deploy/triton-inference-server/client.py b/cv/detection/yolov7/pytorch/deploy/triton-inference-server/client.py deleted file mode 100644 index aedca11c7..000000000 --- a/cv/detection/yolov7/pytorch/deploy/triton-inference-server/client.py +++ /dev/null @@ -1,334 +0,0 @@ -#!/usr/bin/env python - -import argparse -import numpy as np -import sys -import cv2 - -import tritonclient.grpc as grpcclient -from tritonclient.utils import InferenceServerException - -from processing import preprocess, postprocess -from render import render_box, render_filled_box, get_text_size, render_text, RAND_COLORS -from labels import COCOLabels - -INPUT_NAMES = ["images"] -OUTPUT_NAMES = ["num_dets", "det_boxes", "det_scores", "det_classes"] - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('mode', - choices=['dummy', 'image', 'video'], - default='dummy', - help='Run mode. \'dummy\' will send an emtpy buffer to the server to test if inference works. \'image\' will process an image. \'video\' will process a video.') - parser.add_argument('input', - type=str, - nargs='?', - help='Input file to load from in image or video mode') - parser.add_argument('-m', - '--model', - type=str, - required=False, - default='yolov7', - help='Inference model name, default yolov7') - parser.add_argument('--width', - type=int, - required=False, - default=640, - help='Inference model input width, default 640') - parser.add_argument('--height', - type=int, - required=False, - default=640, - help='Inference model input height, default 640') - parser.add_argument('-u', - '--url', - type=str, - required=False, - default='localhost:8001', - help='Inference server URL, default localhost:8001') - parser.add_argument('-o', - '--out', - type=str, - required=False, - default='', - help='Write output into file instead of displaying it') - parser.add_argument('-f', - '--fps', - type=float, - required=False, - default=24.0, - help='Video output fps, default 24.0 FPS') - parser.add_argument('-i', - '--model-info', - action="store_true", - required=False, - default=False, - help='Print model status, configuration and statistics') - parser.add_argument('-v', - '--verbose', - action="store_true", - required=False, - default=False, - help='Enable verbose client output') - parser.add_argument('-t', - '--client-timeout', - type=float, - required=False, - default=None, - help='Client timeout in seconds, default no timeout') - parser.add_argument('-s', - '--ssl', - action="store_true", - required=False, - default=False, - help='Enable SSL encrypted channel to the server') - parser.add_argument('-r', - '--root-certificates', - type=str, - required=False, - default=None, - help='File holding PEM-encoded root certificates, default none') - parser.add_argument('-p', - '--private-key', - type=str, - required=False, - default=None, - help='File holding PEM-encoded private key, default is none') - parser.add_argument('-x', - '--certificate-chain', - type=str, - required=False, - default=None, - help='File holding PEM-encoded certicate chain default is none') - - FLAGS = parser.parse_args() - - # Create server context - try: - triton_client = grpcclient.InferenceServerClient( - url=FLAGS.url, - verbose=FLAGS.verbose, - ssl=FLAGS.ssl, - root_certificates=FLAGS.root_certificates, - private_key=FLAGS.private_key, - certificate_chain=FLAGS.certificate_chain) - except Exception as e: - print("context creation failed: " + str(e)) - sys.exit() - - # Health check - if not triton_client.is_server_live(): - print("FAILED : is_server_live") - sys.exit(1) - - if not triton_client.is_server_ready(): - print("FAILED : is_server_ready") - sys.exit(1) - - if not triton_client.is_model_ready(FLAGS.model): - print("FAILED : is_model_ready") - sys.exit(1) - - if FLAGS.model_info: - # Model metadata - try: - metadata = triton_client.get_model_metadata(FLAGS.model) - print(metadata) - except InferenceServerException as ex: - if "Request for unknown model" not in ex.message(): - print("FAILED : get_model_metadata") - print("Got: {}".format(ex.message())) - sys.exit(1) - else: - print("FAILED : get_model_metadata") - sys.exit(1) - - # Model configuration - try: - config = triton_client.get_model_config(FLAGS.model) - if not (config.config.name == FLAGS.model): - print("FAILED: get_model_config") - sys.exit(1) - print(config) - except InferenceServerException as ex: - print("FAILED : get_model_config") - print("Got: {}".format(ex.message())) - sys.exit(1) - - # DUMMY MODE - if FLAGS.mode == 'dummy': - print("Running in 'dummy' mode") - print("Creating emtpy buffer filled with ones...") - inputs = [] - outputs = [] - inputs.append(grpcclient.InferInput(INPUT_NAMES[0], [1, 3, FLAGS.width, FLAGS.height], "FP32")) - inputs[0].set_data_from_numpy(np.ones(shape=(1, 3, FLAGS.width, FLAGS.height), dtype=np.float32)) - outputs.append(grpcclient.InferRequestedOutput(OUTPUT_NAMES[0])) - outputs.append(grpcclient.InferRequestedOutput(OUTPUT_NAMES[1])) - outputs.append(grpcclient.InferRequestedOutput(OUTPUT_NAMES[2])) - outputs.append(grpcclient.InferRequestedOutput(OUTPUT_NAMES[3])) - - print("Invoking inference...") - results = triton_client.infer(model_name=FLAGS.model, - inputs=inputs, - outputs=outputs, - client_timeout=FLAGS.client_timeout) - if FLAGS.model_info: - statistics = triton_client.get_inference_statistics(model_name=FLAGS.model) - if len(statistics.model_stats) != 1: - print("FAILED: get_inference_statistics") - sys.exit(1) - print(statistics) - print("Done") - - for output in OUTPUT_NAMES: - result = results.as_numpy(output) - print(f"Received result buffer \"{output}\" of size {result.shape}") - print(f"Naive buffer sum: {np.sum(result)}") - - # IMAGE MODE - if FLAGS.mode == 'image': - print("Running in 'image' mode") - if not FLAGS.input: - print("FAILED: no input image") - sys.exit(1) - - inputs = [] - outputs = [] - inputs.append(grpcclient.InferInput(INPUT_NAMES[0], [1, 3, FLAGS.width, FLAGS.height], "FP32")) - outputs.append(grpcclient.InferRequestedOutput(OUTPUT_NAMES[0])) - outputs.append(grpcclient.InferRequestedOutput(OUTPUT_NAMES[1])) - outputs.append(grpcclient.InferRequestedOutput(OUTPUT_NAMES[2])) - outputs.append(grpcclient.InferRequestedOutput(OUTPUT_NAMES[3])) - - print("Creating buffer from image file...") - input_image = cv2.imread(str(FLAGS.input)) - if input_image is None: - print(f"FAILED: could not load input image {str(FLAGS.input)}") - sys.exit(1) - input_image_buffer = preprocess(input_image, [FLAGS.width, FLAGS.height]) - input_image_buffer = np.expand_dims(input_image_buffer, axis=0) - - inputs[0].set_data_from_numpy(input_image_buffer) - - print("Invoking inference...") - results = triton_client.infer(model_name=FLAGS.model, - inputs=inputs, - outputs=outputs, - client_timeout=FLAGS.client_timeout) - if FLAGS.model_info: - statistics = triton_client.get_inference_statistics(model_name=FLAGS.model) - if len(statistics.model_stats) != 1: - print("FAILED: get_inference_statistics") - sys.exit(1) - print(statistics) - print("Done") - - for output in OUTPUT_NAMES: - result = results.as_numpy(output) - print(f"Received result buffer \"{output}\" of size {result.shape}") - print(f"Naive buffer sum: {np.sum(result)}") - - num_dets = results.as_numpy(OUTPUT_NAMES[0]) - det_boxes = results.as_numpy(OUTPUT_NAMES[1]) - det_scores = results.as_numpy(OUTPUT_NAMES[2]) - det_classes = results.as_numpy(OUTPUT_NAMES[3]) - detected_objects = postprocess(num_dets, det_boxes, det_scores, det_classes, input_image.shape[1], input_image.shape[0], [FLAGS.width, FLAGS.height]) - print(f"Detected objects: {len(detected_objects)}") - - for box in detected_objects: - print(f"{COCOLabels(box.classID).name}: {box.confidence}") - input_image = render_box(input_image, box.box(), color=tuple(RAND_COLORS[box.classID % 64].tolist())) - size = get_text_size(input_image, f"{COCOLabels(box.classID).name}: {box.confidence:.2f}", normalised_scaling=0.6) - input_image = render_filled_box(input_image, (box.x1 - 3, box.y1 - 3, box.x1 + size[0], box.y1 + size[1]), color=(220, 220, 220)) - input_image = render_text(input_image, f"{COCOLabels(box.classID).name}: {box.confidence:.2f}", (box.x1, box.y1), color=(30, 30, 30), normalised_scaling=0.5) - - if FLAGS.out: - cv2.imwrite(FLAGS.out, input_image) - print(f"Saved result to {FLAGS.out}") - else: - cv2.imshow('image', input_image) - cv2.waitKey(0) - cv2.destroyAllWindows() - - # VIDEO MODE - if FLAGS.mode == 'video': - print("Running in 'video' mode") - if not FLAGS.input: - print("FAILED: no input video") - sys.exit(1) - - inputs = [] - outputs = [] - inputs.append(grpcclient.InferInput(INPUT_NAMES[0], [1, 3, FLAGS.width, FLAGS.height], "FP32")) - outputs.append(grpcclient.InferRequestedOutput(OUTPUT_NAMES[0])) - outputs.append(grpcclient.InferRequestedOutput(OUTPUT_NAMES[1])) - outputs.append(grpcclient.InferRequestedOutput(OUTPUT_NAMES[2])) - outputs.append(grpcclient.InferRequestedOutput(OUTPUT_NAMES[3])) - - print("Opening input video stream...") - cap = cv2.VideoCapture(FLAGS.input) - if not cap.isOpened(): - print(f"FAILED: cannot open video {FLAGS.input}") - sys.exit(1) - - counter = 0 - out = None - print("Invoking inference...") - while True: - ret, frame = cap.read() - if not ret: - print("failed to fetch next frame") - break - - if counter == 0 and FLAGS.out: - print("Opening output video stream...") - fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V') - out = cv2.VideoWriter(FLAGS.out, fourcc, FLAGS.fps, (frame.shape[1], frame.shape[0])) - - input_image_buffer = preprocess(frame, [FLAGS.width, FLAGS.height]) - input_image_buffer = np.expand_dims(input_image_buffer, axis=0) - - inputs[0].set_data_from_numpy(input_image_buffer) - - results = triton_client.infer(model_name=FLAGS.model, - inputs=inputs, - outputs=outputs, - client_timeout=FLAGS.client_timeout) - - num_dets = results.as_numpy("num_dets") - det_boxes = results.as_numpy("det_boxes") - det_scores = results.as_numpy("det_scores") - det_classes = results.as_numpy("det_classes") - detected_objects = postprocess(num_dets, det_boxes, det_scores, det_classes, frame.shape[1], frame.shape[0], [FLAGS.width, FLAGS.height]) - print(f"Frame {counter}: {len(detected_objects)} objects") - counter += 1 - - for box in detected_objects: - print(f"{COCOLabels(box.classID).name}: {box.confidence}") - frame = render_box(frame, box.box(), color=tuple(RAND_COLORS[box.classID % 64].tolist())) - size = get_text_size(frame, f"{COCOLabels(box.classID).name}: {box.confidence:.2f}", normalised_scaling=0.6) - frame = render_filled_box(frame, (box.x1 - 3, box.y1 - 3, box.x1 + size[0], box.y1 + size[1]), color=(220, 220, 220)) - frame = render_text(frame, f"{COCOLabels(box.classID).name}: {box.confidence:.2f}", (box.x1, box.y1), color=(30, 30, 30), normalised_scaling=0.5) - - if FLAGS.out: - out.write(frame) - else: - cv2.imshow('image', frame) - if cv2.waitKey(1) == ord('q'): - break - - if FLAGS.model_info: - statistics = triton_client.get_inference_statistics(model_name=FLAGS.model) - if len(statistics.model_stats) != 1: - print("FAILED: get_inference_statistics") - sys.exit(1) - print(statistics) - print("Done") - - cap.release() - if FLAGS.out: - out.release() - else: - cv2.destroyAllWindows() diff --git a/cv/detection/yolov7/pytorch/deploy/triton-inference-server/labels.py b/cv/detection/yolov7/pytorch/deploy/triton-inference-server/labels.py deleted file mode 100644 index ba6c5c516..000000000 --- a/cv/detection/yolov7/pytorch/deploy/triton-inference-server/labels.py +++ /dev/null @@ -1,83 +0,0 @@ -from enum import Enum - -class COCOLabels(Enum): - PERSON = 0 - BICYCLE = 1 - CAR = 2 - MOTORBIKE = 3 - AEROPLANE = 4 - BUS = 5 - TRAIN = 6 - TRUCK = 7 - BOAT = 8 - TRAFFIC_LIGHT = 9 - FIRE_HYDRANT = 10 - STOP_SIGN = 11 - PARKING_METER = 12 - BENCH = 13 - BIRD = 14 - CAT = 15 - DOG = 16 - HORSE = 17 - SHEEP = 18 - COW = 19 - ELEPHANT = 20 - BEAR = 21 - ZEBRA = 22 - GIRAFFE = 23 - BACKPACK = 24 - UMBRELLA = 25 - HANDBAG = 26 - TIE = 27 - SUITCASE = 28 - FRISBEE = 29 - SKIS = 30 - SNOWBOARD = 31 - SPORTS_BALL = 32 - KITE = 33 - BASEBALL_BAT = 34 - BASEBALL_GLOVE = 35 - SKATEBOARD = 36 - SURFBOARD = 37 - TENNIS_RACKET = 38 - BOTTLE = 39 - WINE_GLASS = 40 - CUP = 41 - FORK = 42 - KNIFE = 43 - SPOON = 44 - BOWL = 45 - BANANA = 46 - APPLE = 47 - SANDWICH = 48 - ORANGE = 49 - BROCCOLI = 50 - CARROT = 51 - HOT_DOG = 52 - PIZZA = 53 - DONUT = 54 - CAKE = 55 - CHAIR = 56 - SOFA = 57 - POTTEDPLANT = 58 - BED = 59 - DININGTABLE = 60 - TOILET = 61 - TVMONITOR = 62 - LAPTOP = 63 - MOUSE = 64 - REMOTE = 65 - KEYBOARD = 66 - CELL_PHONE = 67 - MICROWAVE = 68 - OVEN = 69 - TOASTER = 70 - SINK = 71 - REFRIGERATOR = 72 - BOOK = 73 - CLOCK = 74 - VASE = 75 - SCISSORS = 76 - TEDDY_BEAR = 77 - HAIR_DRIER = 78 - TOOTHBRUSH = 79 diff --git a/cv/detection/yolov7/pytorch/deploy/triton-inference-server/processing.py b/cv/detection/yolov7/pytorch/deploy/triton-inference-server/processing.py deleted file mode 100644 index 3d51c50a3..000000000 --- a/cv/detection/yolov7/pytorch/deploy/triton-inference-server/processing.py +++ /dev/null @@ -1,51 +0,0 @@ -from boundingbox import BoundingBox - -import cv2 -import numpy as np - -def preprocess(img, input_shape, letter_box=True): - if letter_box: - img_h, img_w, _ = img.shape - new_h, new_w = input_shape[0], input_shape[1] - offset_h, offset_w = 0, 0 - if (new_w / img_w) <= (new_h / img_h): - new_h = int(img_h * new_w / img_w) - offset_h = (input_shape[0] - new_h) // 2 - else: - new_w = int(img_w * new_h / img_h) - offset_w = (input_shape[1] - new_w) // 2 - resized = cv2.resize(img, (new_w, new_h)) - img = np.full((input_shape[0], input_shape[1], 3), 127, dtype=np.uint8) - img[offset_h:(offset_h + new_h), offset_w:(offset_w + new_w), :] = resized - else: - img = cv2.resize(img, (input_shape[1], input_shape[0])) - - img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) - img = img.transpose((2, 0, 1)).astype(np.float32) - img /= 255.0 - return img - -def postprocess(num_dets, det_boxes, det_scores, det_classes, img_w, img_h, input_shape, letter_box=True): - boxes = det_boxes[0, :num_dets[0][0]] / np.array([input_shape[0], input_shape[1], input_shape[0], input_shape[1]], dtype=np.float32) - scores = det_scores[0, :num_dets[0][0]] - classes = det_classes[0, :num_dets[0][0]].astype(np.int) - - old_h, old_w = img_h, img_w - offset_h, offset_w = 0, 0 - if letter_box: - if (img_w / input_shape[1]) >= (img_h / input_shape[0]): - old_h = int(input_shape[0] * img_w / input_shape[1]) - offset_h = (old_h - img_h) // 2 - else: - old_w = int(input_shape[1] * img_h / input_shape[0]) - offset_w = (old_w - img_w) // 2 - - boxes = boxes * np.array([old_w, old_h, old_w, old_h], dtype=np.float32) - if letter_box: - boxes -= np.array([offset_w, offset_h, offset_w, offset_h], dtype=np.float32) - boxes = boxes.astype(np.int) - - detected_objects = [] - for box, score, label in zip(boxes, scores, classes): - detected_objects.append(BoundingBox(label, score, box[0], box[2], box[1], box[3], img_w, img_h)) - return detected_objects diff --git a/cv/detection/yolov7/pytorch/deploy/triton-inference-server/render.py b/cv/detection/yolov7/pytorch/deploy/triton-inference-server/render.py deleted file mode 100644 index dea040156..000000000 --- a/cv/detection/yolov7/pytorch/deploy/triton-inference-server/render.py +++ /dev/null @@ -1,110 +0,0 @@ -import numpy as np - -import cv2 - -from math import sqrt - -_LINE_THICKNESS_SCALING = 500.0 - -np.random.seed(0) -RAND_COLORS = np.random.randint(50, 255, (64, 3), "int") # used for class visu -RAND_COLORS[0] = [220, 220, 220] - -def render_box(img, box, color=(200, 200, 200)): - """ - Render a box. Calculates scaling and thickness automatically. - :param img: image to render into - :param box: (x1, y1, x2, y2) - box coordinates - :param color: (b, g, r) - box color - :return: updated image - """ - x1, y1, x2, y2 = box - thickness = int( - round( - (img.shape[0] * img.shape[1]) - / (_LINE_THICKNESS_SCALING * _LINE_THICKNESS_SCALING) - ) - ) - thickness = max(1, thickness) - img = cv2.rectangle( - img, - (int(x1), int(y1)), - (int(x2), int(y2)), - color, - thickness=thickness - ) - return img - -def render_filled_box(img, box, color=(200, 200, 200)): - """ - Render a box. Calculates scaling and thickness automatically. - :param img: image to render into - :param box: (x1, y1, x2, y2) - box coordinates - :param color: (b, g, r) - box color - :return: updated image - """ - x1, y1, x2, y2 = box - img = cv2.rectangle( - img, - (int(x1), int(y1)), - (int(x2), int(y2)), - color, - thickness=cv2.FILLED - ) - return img - -_TEXT_THICKNESS_SCALING = 700.0 -_TEXT_SCALING = 520.0 - - -def get_text_size(img, text, normalised_scaling=1.0): - """ - Get calculated text size (as box width and height) - :param img: image reference, used to determine appropriate text scaling - :param text: text to display - :param normalised_scaling: additional normalised scaling. Default 1.0. - :return: (width, height) - width and height of text box - """ - thickness = int( - round( - (img.shape[0] * img.shape[1]) - / (_TEXT_THICKNESS_SCALING * _TEXT_THICKNESS_SCALING) - ) - * normalised_scaling - ) - thickness = max(1, thickness) - scaling = img.shape[0] / _TEXT_SCALING * normalised_scaling - return cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, scaling, thickness)[0] - - -def render_text(img, text, pos, color=(200, 200, 200), normalised_scaling=1.0): - """ - Render a text into the image. Calculates scaling and thickness automatically. - :param img: image to render into - :param text: text to display - :param pos: (x, y) - upper left coordinates of render position - :param color: (b, g, r) - text color - :param normalised_scaling: additional normalised scaling. Default 1.0. - :return: updated image - """ - x, y = pos - thickness = int( - round( - (img.shape[0] * img.shape[1]) - / (_TEXT_THICKNESS_SCALING * _TEXT_THICKNESS_SCALING) - ) - * normalised_scaling - ) - thickness = max(1, thickness) - scaling = img.shape[0] / _TEXT_SCALING * normalised_scaling - size = get_text_size(img, text, normalised_scaling) - cv2.putText( - img, - text, - (int(x), int(y + size[1])), - cv2.FONT_HERSHEY_SIMPLEX, - scaling, - color, - thickness=thickness, - ) - return img diff --git a/cv/detection/yolov7/pytorch/detect.py b/cv/detection/yolov7/pytorch/detect.py deleted file mode 100644 index 5e0c4416a..000000000 --- a/cv/detection/yolov7/pytorch/detect.py +++ /dev/null @@ -1,196 +0,0 @@ -import argparse -import time -from pathlib import Path - -import cv2 -import torch -import torch.backends.cudnn as cudnn -from numpy import random - -from models.experimental import attempt_load -from utils.datasets import LoadStreams, LoadImages -from utils.general import check_img_size, check_requirements, check_imshow, non_max_suppression, apply_classifier, \ - scale_coords, xyxy2xywh, strip_optimizer, set_logging, increment_path -from utils.plots import plot_one_box -from utils.torch_utils import select_device, load_classifier, time_synchronized, TracedModel - - -def detect(save_img=False): - source, weights, view_img, save_txt, imgsz, trace = opt.source, opt.weights, opt.view_img, opt.save_txt, opt.img_size, not opt.no_trace - save_img = not opt.nosave and not source.endswith('.txt') # save inference images - webcam = source.isnumeric() or source.endswith('.txt') or source.lower().startswith( - ('rtsp://', 'rtmp://', 'http://', 'https://')) - - # Directories - save_dir = Path(increment_path(Path(opt.project) / opt.name, exist_ok=opt.exist_ok)) # increment run - (save_dir / 'labels' if save_txt else save_dir).mkdir(parents=True, exist_ok=True) # make dir - - # Initialize - set_logging() - device = select_device(opt.device) - half = device.type != 'cpu' # half precision only supported on CUDA - - # Load model - model = attempt_load(weights, map_location=device) # load FP32 model - stride = int(model.stride.max()) # model stride - imgsz = check_img_size(imgsz, s=stride) # check img_size - - if trace: - model = TracedModel(model, device, opt.img_size) - - if half: - model.half() # to FP16 - - # Second-stage classifier - classify = False - if classify: - modelc = load_classifier(name='resnet101', n=2) # initialize - modelc.load_state_dict(torch.load('weights/resnet101.pt', map_location=device)['model']).to(device).eval() - - # Set Dataloader - vid_path, vid_writer = None, None - if webcam: - view_img = check_imshow() - cudnn.benchmark = True # set True to speed up constant image size inference - dataset = LoadStreams(source, img_size=imgsz, stride=stride) - else: - dataset = LoadImages(source, img_size=imgsz, stride=stride) - - # Get names and colors - names = model.module.names if hasattr(model, 'module') else model.names - colors = [[random.randint(0, 255) for _ in range(3)] for _ in names] - - # Run inference - if device.type != 'cpu': - model(torch.zeros(1, 3, imgsz, imgsz).to(device).type_as(next(model.parameters()))) # run once - old_img_w = old_img_h = imgsz - old_img_b = 1 - - t0 = time.time() - for path, img, im0s, vid_cap in dataset: - img = torch.from_numpy(img).to(device) - img = img.half() if half else img.float() # uint8 to fp16/32 - img /= 255.0 # 0 - 255 to 0.0 - 1.0 - if img.ndimension() == 3: - img = img.unsqueeze(0) - - # Warmup - if device.type != 'cpu' and (old_img_b != img.shape[0] or old_img_h != img.shape[2] or old_img_w != img.shape[3]): - old_img_b = img.shape[0] - old_img_h = img.shape[2] - old_img_w = img.shape[3] - for i in range(3): - model(img, augment=opt.augment)[0] - - # Inference - t1 = time_synchronized() - with torch.no_grad(): # Calculating gradients would cause a GPU memory leak - pred = model(img, augment=opt.augment)[0] - t2 = time_synchronized() - - # Apply NMS - pred = non_max_suppression(pred, opt.conf_thres, opt.iou_thres, classes=opt.classes, agnostic=opt.agnostic_nms) - t3 = time_synchronized() - - # Apply Classifier - if classify: - pred = apply_classifier(pred, modelc, img, im0s) - - # Process detections - for i, det in enumerate(pred): # detections per image - if webcam: # batch_size >= 1 - p, s, im0, frame = path[i], '%g: ' % i, im0s[i].copy(), dataset.count - else: - p, s, im0, frame = path, '', im0s, getattr(dataset, 'frame', 0) - - p = Path(p) # to Path - save_path = str(save_dir / p.name) # img.jpg - txt_path = str(save_dir / 'labels' / p.stem) + ('' if dataset.mode == 'image' else f'_{frame}') # img.txt - gn = torch.tensor(im0.shape)[[1, 0, 1, 0]] # normalization gain whwh - if len(det): - # Rescale boxes from img_size to im0 size - det[:, :4] = scale_coords(img.shape[2:], det[:, :4], im0.shape).round() - - # Print results - for c in det[:, -1].unique(): - n = (det[:, -1] == c).sum() # detections per class - s += f"{n} {names[int(c)]}{'s' * (n > 1)}, " # add to string - - # Write results - for *xyxy, conf, cls in reversed(det): - if save_txt: # Write to file - xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4)) / gn).view(-1).tolist() # normalized xywh - line = (cls, *xywh, conf) if opt.save_conf else (cls, *xywh) # label format - with open(txt_path + '.txt', 'a') as f: - f.write(('%g ' * len(line)).rstrip() % line + '\n') - - if save_img or view_img: # Add bbox to image - label = f'{names[int(cls)]} {conf:.2f}' - plot_one_box(xyxy, im0, label=label, color=colors[int(cls)], line_thickness=1) - - # Print time (inference + NMS) - print(f'{s}Done. ({(1E3 * (t2 - t1)):.1f}ms) Inference, ({(1E3 * (t3 - t2)):.1f}ms) NMS') - - # Stream results - if view_img: - cv2.imshow(str(p), im0) - cv2.waitKey(1) # 1 millisecond - - # Save results (image with detections) - if save_img: - if dataset.mode == 'image': - cv2.imwrite(save_path, im0) - print(f" The image with the result is saved in: {save_path}") - else: # 'video' or 'stream' - if vid_path != save_path: # new video - vid_path = save_path - if isinstance(vid_writer, cv2.VideoWriter): - vid_writer.release() # release previous video writer - if vid_cap: # video - fps = vid_cap.get(cv2.CAP_PROP_FPS) - w = int(vid_cap.get(cv2.CAP_PROP_FRAME_WIDTH)) - h = int(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) - else: # stream - fps, w, h = 30, im0.shape[1], im0.shape[0] - save_path += '.mp4' - vid_writer = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h)) - vid_writer.write(im0) - - if save_txt or save_img: - s = f"\n{len(list(save_dir.glob('labels/*.txt')))} labels saved to {save_dir / 'labels'}" if save_txt else '' - #print(f"Results saved to {save_dir}{s}") - - print(f'Done. ({time.time() - t0:.3f}s)') - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--weights', nargs='+', type=str, default='yolov7.pt', help='model.pt path(s)') - parser.add_argument('--source', type=str, default='inference/images', help='source') # file/folder, 0 for webcam - parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)') - parser.add_argument('--conf-thres', type=float, default=0.25, help='object confidence threshold') - parser.add_argument('--iou-thres', type=float, default=0.45, help='IOU threshold for NMS') - parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu') - parser.add_argument('--view-img', action='store_true', help='display results') - parser.add_argument('--save-txt', action='store_true', help='save results to *.txt') - parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels') - parser.add_argument('--nosave', action='store_true', help='do not save images/videos') - parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --class 0, or --class 0 2 3') - parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS') - parser.add_argument('--augment', action='store_true', help='augmented inference') - parser.add_argument('--update', action='store_true', help='update all models') - parser.add_argument('--project', default='runs/detect', help='save results to project/name') - parser.add_argument('--name', default='exp', help='save results to project/name') - parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment') - parser.add_argument('--no-trace', action='store_true', help='don`t trace model') - opt = parser.parse_args() - print(opt) - #check_requirements(exclude=('pycocotools', 'thop')) - - with torch.no_grad(): - if opt.update: # update all models (to fix SourceChangeWarning) - for opt.weights in ['yolov7.pt']: - detect() - strip_optimizer(opt.weights) - else: - detect() diff --git a/cv/detection/yolov7/pytorch/hubconf.py b/cv/detection/yolov7/pytorch/hubconf.py deleted file mode 100644 index 50ff257e2..000000000 --- a/cv/detection/yolov7/pytorch/hubconf.py +++ /dev/null @@ -1,97 +0,0 @@ -"""PyTorch Hub models - -Usage: - import torch - model = torch.hub.load('repo', 'model') -""" - -from pathlib import Path - -import torch - -from models.yolo import Model -from utils.general import check_requirements, set_logging -from utils.google_utils import attempt_download -from utils.torch_utils import select_device - -dependencies = ['torch', 'yaml'] -check_requirements(Path(__file__).parent / 'requirements.txt', exclude=('pycocotools', 'thop')) -set_logging() - - -def create(name, pretrained, channels, classes, autoshape): - """Creates a specified model - - Arguments: - name (str): name of model, i.e. 'yolov7' - pretrained (bool): load pretrained weights into the model - channels (int): number of input channels - classes (int): number of model classes - - Returns: - pytorch model - """ - try: - cfg = list((Path(__file__).parent / 'cfg').rglob(f'{name}.yaml'))[0] # model.yaml path - model = Model(cfg, channels, classes) - if pretrained: - fname = f'{name}.pt' # checkpoint filename - attempt_download(fname) # download if not found locally - ckpt = torch.load(fname, map_location=torch.device('cpu')) # load - msd = model.state_dict() # model state_dict - csd = ckpt['model'].float().state_dict() # checkpoint state_dict as FP32 - csd = {k: v for k, v in csd.items() if msd[k].shape == v.shape} # filter - model.load_state_dict(csd, strict=False) # load - if len(ckpt['model'].names) == classes: - model.names = ckpt['model'].names # set class names attribute - if autoshape: - model = model.autoshape() # for file/URI/PIL/cv2/np inputs and NMS - device = select_device('0' if torch.cuda.is_available() else 'cpu') # default to GPU if available - return model.to(device) - - except Exception as e: - s = 'Cache maybe be out of date, try force_reload=True.' - raise Exception(s) from e - - -def custom(path_or_model='path/to/model.pt', autoshape=True): - """custom mode - - Arguments (3 options): - path_or_model (str): 'path/to/model.pt' - path_or_model (dict): torch.load('path/to/model.pt') - path_or_model (nn.Module): torch.load('path/to/model.pt')['model'] - - Returns: - pytorch model - """ - model = torch.load(path_or_model, map_location=torch.device('cpu')) if isinstance(path_or_model, str) else path_or_model # load checkpoint - if isinstance(model, dict): - model = model['ema' if model.get('ema') else 'model'] # load model - - hub_model = Model(model.yaml).to(next(model.parameters()).device) # create - hub_model.load_state_dict(model.float().state_dict()) # load state_dict - hub_model.names = model.names # class names - if autoshape: - hub_model = hub_model.autoshape() # for file/URI/PIL/cv2/np inputs and NMS - device = select_device('0' if torch.cuda.is_available() else 'cpu') # default to GPU if available - return hub_model.to(device) - - -def yolov7(pretrained=True, channels=3, classes=80, autoshape=True): - return create('yolov7', pretrained, channels, classes, autoshape) - - -if __name__ == '__main__': - model = custom(path_or_model='yolov7.pt') # custom example - # model = create(name='yolov7', pretrained=True, channels=3, classes=80, autoshape=True) # pretrained example - - # Verify inference - import numpy as np - from PIL import Image - - imgs = [np.zeros((640, 480, 3))] - - results = model(imgs) # batched inference - results.print() - results.save() diff --git a/cv/detection/yolov7/pytorch/models/__init__.py b/cv/detection/yolov7/pytorch/models/__init__.py deleted file mode 100644 index 84952a816..000000000 --- a/cv/detection/yolov7/pytorch/models/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# init \ No newline at end of file diff --git a/cv/detection/yolov7/pytorch/models/common.py b/cv/detection/yolov7/pytorch/models/common.py deleted file mode 100644 index edb5edc9f..000000000 --- a/cv/detection/yolov7/pytorch/models/common.py +++ /dev/null @@ -1,2019 +0,0 @@ -import math -from copy import copy -from pathlib import Path - -import numpy as np -import pandas as pd -import requests -import torch -import torch.nn as nn -import torch.nn.functional as F -from torchvision.ops import DeformConv2d -from PIL import Image -from torch.cuda import amp - -from utils.datasets import letterbox -from utils.general import non_max_suppression, make_divisible, scale_coords, increment_path, xyxy2xywh -from utils.plots import color_list, plot_one_box -from utils.torch_utils import time_synchronized - - -##### basic #### - -def autopad(k, p=None): # kernel, padding - # Pad to 'same' - if p is None: - p = k // 2 if isinstance(k, int) else [x // 2 for x in k] # auto-pad - return p - - -class MP(nn.Module): - def __init__(self, k=2): - super(MP, self).__init__() - self.m = nn.MaxPool2d(kernel_size=k, stride=k) - - def forward(self, x): - return self.m(x) - - -class SP(nn.Module): - def __init__(self, k=3, s=1): - super(SP, self).__init__() - self.m = nn.MaxPool2d(kernel_size=k, stride=s, padding=k // 2) - - def forward(self, x): - return self.m(x) - - -class ReOrg(nn.Module): - def __init__(self): - super(ReOrg, self).__init__() - - def forward(self, x): # x(b,c,w,h) -> y(b,4c,w/2,h/2) - return torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1) - - -class Concat(nn.Module): - def __init__(self, dimension=1): - super(Concat, self).__init__() - self.d = dimension - - def forward(self, x): - return torch.cat(x, self.d) - - -class Chuncat(nn.Module): - def __init__(self, dimension=1): - super(Chuncat, self).__init__() - self.d = dimension - - def forward(self, x): - x1 = [] - x2 = [] - for xi in x: - xi1, xi2 = xi.chunk(2, self.d) - x1.append(xi1) - x2.append(xi2) - return torch.cat(x1+x2, self.d) - - -class Shortcut(nn.Module): - def __init__(self, dimension=0): - super(Shortcut, self).__init__() - self.d = dimension - - def forward(self, x): - return x[0]+x[1] - - -class Foldcut(nn.Module): - def __init__(self, dimension=0): - super(Foldcut, self).__init__() - self.d = dimension - - def forward(self, x): - x1, x2 = x.chunk(2, self.d) - return x1+x2 - - -class Conv(nn.Module): - # Standard convolution - def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True): # ch_in, ch_out, kernel, stride, padding, groups - super(Conv, self).__init__() - self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p), groups=g, bias=False) - self.bn = nn.BatchNorm2d(c2) - self.act = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity()) - - def forward(self, x): - return self.act(self.bn(self.conv(x))) - - def fuseforward(self, x): - return self.act(self.conv(x)) - - -class RobustConv(nn.Module): - # Robust convolution (use high kernel size 7-11 for: downsampling and other layers). Train for 300 - 450 epochs. - def __init__(self, c1, c2, k=7, s=1, p=None, g=1, act=True, layer_scale_init_value=1e-6): # ch_in, ch_out, kernel, stride, padding, groups - super(RobustConv, self).__init__() - self.conv_dw = Conv(c1, c1, k=k, s=s, p=p, g=c1, act=act) - self.conv1x1 = nn.Conv2d(c1, c2, 1, 1, 0, groups=1, bias=True) - self.gamma = nn.Parameter(layer_scale_init_value * torch.ones(c2)) if layer_scale_init_value > 0 else None - - def forward(self, x): - x = x.to(memory_format=torch.channels_last) - x = self.conv1x1(self.conv_dw(x)) - if self.gamma is not None: - x = x.mul(self.gamma.reshape(1, -1, 1, 1)) - return x - - -class RobustConv2(nn.Module): - # Robust convolution 2 (use [32, 5, 2] or [32, 7, 4] or [32, 11, 8] for one of the paths in CSP). - def __init__(self, c1, c2, k=7, s=4, p=None, g=1, act=True, layer_scale_init_value=1e-6): # ch_in, ch_out, kernel, stride, padding, groups - super(RobustConv2, self).__init__() - self.conv_strided = Conv(c1, c1, k=k, s=s, p=p, g=c1, act=act) - self.conv_deconv = nn.ConvTranspose2d(in_channels=c1, out_channels=c2, kernel_size=s, stride=s, - padding=0, bias=True, dilation=1, groups=1 - ) - self.gamma = nn.Parameter(layer_scale_init_value * torch.ones(c2)) if layer_scale_init_value > 0 else None - - def forward(self, x): - x = self.conv_deconv(self.conv_strided(x)) - if self.gamma is not None: - x = x.mul(self.gamma.reshape(1, -1, 1, 1)) - return x - - -def DWConv(c1, c2, k=1, s=1, act=True): - # Depthwise convolution - return Conv(c1, c2, k, s, g=math.gcd(c1, c2), act=act) - - -class GhostConv(nn.Module): - # Ghost Convolution https://github.com/huawei-noah/ghostnet - def __init__(self, c1, c2, k=1, s=1, g=1, act=True): # ch_in, ch_out, kernel, stride, groups - super(GhostConv, self).__init__() - c_ = c2 // 2 # hidden channels - self.cv1 = Conv(c1, c_, k, s, None, g, act) - self.cv2 = Conv(c_, c_, 5, 1, None, c_, act) - - def forward(self, x): - y = self.cv1(x) - return torch.cat([y, self.cv2(y)], 1) - - -class Stem(nn.Module): - # Stem - def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True): # ch_in, ch_out, kernel, stride, padding, groups - super(Stem, self).__init__() - c_ = int(c2/2) # hidden channels - self.cv1 = Conv(c1, c_, 3, 2) - self.cv2 = Conv(c_, c_, 1, 1) - self.cv3 = Conv(c_, c_, 3, 2) - self.pool = torch.nn.MaxPool2d(2, stride=2) - self.cv4 = Conv(2 * c_, c2, 1, 1) - - def forward(self, x): - x = self.cv1(x) - return self.cv4(torch.cat((self.cv3(self.cv2(x)), self.pool(x)), dim=1)) - - -class DownC(nn.Module): - # Spatial pyramid pooling layer used in YOLOv3-SPP - def __init__(self, c1, c2, n=1, k=2): - super(DownC, self).__init__() - c_ = int(c1) # hidden channels - self.cv1 = Conv(c1, c_, 1, 1) - self.cv2 = Conv(c_, c2//2, 3, k) - self.cv3 = Conv(c1, c2//2, 1, 1) - self.mp = nn.MaxPool2d(kernel_size=k, stride=k) - - def forward(self, x): - return torch.cat((self.cv2(self.cv1(x)), self.cv3(self.mp(x))), dim=1) - - -class SPP(nn.Module): - # Spatial pyramid pooling layer used in YOLOv3-SPP - def __init__(self, c1, c2, k=(5, 9, 13)): - super(SPP, self).__init__() - c_ = c1 // 2 # hidden channels - self.cv1 = Conv(c1, c_, 1, 1) - self.cv2 = Conv(c_ * (len(k) + 1), c2, 1, 1) - self.m = nn.ModuleList([nn.MaxPool2d(kernel_size=x, stride=1, padding=x // 2) for x in k]) - - def forward(self, x): - x = self.cv1(x) - return self.cv2(torch.cat([x] + [m(x) for m in self.m], 1)) - - -class Bottleneck(nn.Module): - # Darknet bottleneck - def __init__(self, c1, c2, shortcut=True, g=1, e=0.5): # ch_in, ch_out, shortcut, groups, expansion - super(Bottleneck, self).__init__() - c_ = int(c2 * e) # hidden channels - self.cv1 = Conv(c1, c_, 1, 1) - self.cv2 = Conv(c_, c2, 3, 1, g=g) - self.add = shortcut and c1 == c2 - - def forward(self, x): - return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x)) - - -class Res(nn.Module): - # ResNet bottleneck - def __init__(self, c1, c2, shortcut=True, g=1, e=0.5): # ch_in, ch_out, shortcut, groups, expansion - super(Res, self).__init__() - c_ = int(c2 * e) # hidden channels - self.cv1 = Conv(c1, c_, 1, 1) - self.cv2 = Conv(c_, c_, 3, 1, g=g) - self.cv3 = Conv(c_, c2, 1, 1) - self.add = shortcut and c1 == c2 - - def forward(self, x): - return x + self.cv3(self.cv2(self.cv1(x))) if self.add else self.cv3(self.cv2(self.cv1(x))) - - -class ResX(Res): - # ResNet bottleneck - def __init__(self, c1, c2, shortcut=True, g=32, e=0.5): # ch_in, ch_out, shortcut, groups, expansion - super().__init__(c1, c2, shortcut, g, e) - c_ = int(c2 * e) # hidden channels - - -class Ghost(nn.Module): - # Ghost Bottleneck https://github.com/huawei-noah/ghostnet - def __init__(self, c1, c2, k=3, s=1): # ch_in, ch_out, kernel, stride - super(Ghost, self).__init__() - c_ = c2 // 2 - self.conv = nn.Sequential(GhostConv(c1, c_, 1, 1), # pw - DWConv(c_, c_, k, s, act=False) if s == 2 else nn.Identity(), # dw - GhostConv(c_, c2, 1, 1, act=False)) # pw-linear - self.shortcut = nn.Sequential(DWConv(c1, c1, k, s, act=False), - Conv(c1, c2, 1, 1, act=False)) if s == 2 else nn.Identity() - - def forward(self, x): - return self.conv(x) + self.shortcut(x) - -##### end of basic ##### - - -##### cspnet ##### - -class SPPCSPC(nn.Module): - # CSP https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5, k=(5, 9, 13)): - super(SPPCSPC, self).__init__() - c_ = int(2 * c2 * e) # hidden channels - self.cv1 = Conv(c1, c_, 1, 1) - self.cv2 = Conv(c1, c_, 1, 1) - self.cv3 = Conv(c_, c_, 3, 1) - self.cv4 = Conv(c_, c_, 1, 1) - self.m = nn.ModuleList([nn.MaxPool2d(kernel_size=x, stride=1, padding=x // 2) for x in k]) - self.cv5 = Conv(4 * c_, c_, 1, 1) - self.cv6 = Conv(c_, c_, 3, 1) - self.cv7 = Conv(2 * c_, c2, 1, 1) - - def forward(self, x): - x1 = self.cv4(self.cv3(self.cv1(x))) - y1 = self.cv6(self.cv5(torch.cat([x1] + [m(x1) for m in self.m], 1))) - y2 = self.cv2(x) - return self.cv7(torch.cat((y1, y2), dim=1)) - -class GhostSPPCSPC(SPPCSPC): - # CSP https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5, k=(5, 9, 13)): - super().__init__(c1, c2, n, shortcut, g, e, k) - c_ = int(2 * c2 * e) # hidden channels - self.cv1 = GhostConv(c1, c_, 1, 1) - self.cv2 = GhostConv(c1, c_, 1, 1) - self.cv3 = GhostConv(c_, c_, 3, 1) - self.cv4 = GhostConv(c_, c_, 1, 1) - self.cv5 = GhostConv(4 * c_, c_, 1, 1) - self.cv6 = GhostConv(c_, c_, 3, 1) - self.cv7 = GhostConv(2 * c_, c2, 1, 1) - - -class GhostStem(Stem): - # Stem - def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True): # ch_in, ch_out, kernel, stride, padding, groups - super().__init__(c1, c2, k, s, p, g, act) - c_ = int(c2/2) # hidden channels - self.cv1 = GhostConv(c1, c_, 3, 2) - self.cv2 = GhostConv(c_, c_, 1, 1) - self.cv3 = GhostConv(c_, c_, 3, 2) - self.cv4 = GhostConv(2 * c_, c2, 1, 1) - - -class BottleneckCSPA(nn.Module): - # CSP https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super(BottleneckCSPA, self).__init__() - c_ = int(c2 * e) # hidden channels - self.cv1 = Conv(c1, c_, 1, 1) - self.cv2 = Conv(c1, c_, 1, 1) - self.cv3 = Conv(2 * c_, c2, 1, 1) - self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) - - def forward(self, x): - y1 = self.m(self.cv1(x)) - y2 = self.cv2(x) - return self.cv3(torch.cat((y1, y2), dim=1)) - - -class BottleneckCSPB(nn.Module): - # CSP https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super(BottleneckCSPB, self).__init__() - c_ = int(c2) # hidden channels - self.cv1 = Conv(c1, c_, 1, 1) - self.cv2 = Conv(c_, c_, 1, 1) - self.cv3 = Conv(2 * c_, c2, 1, 1) - self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) - - def forward(self, x): - x1 = self.cv1(x) - y1 = self.m(x1) - y2 = self.cv2(x1) - return self.cv3(torch.cat((y1, y2), dim=1)) - - -class BottleneckCSPC(nn.Module): - # CSP https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super(BottleneckCSPC, self).__init__() - c_ = int(c2 * e) # hidden channels - self.cv1 = Conv(c1, c_, 1, 1) - self.cv2 = Conv(c1, c_, 1, 1) - self.cv3 = Conv(c_, c_, 1, 1) - self.cv4 = Conv(2 * c_, c2, 1, 1) - self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) - - def forward(self, x): - y1 = self.cv3(self.m(self.cv1(x))) - y2 = self.cv2(x) - return self.cv4(torch.cat((y1, y2), dim=1)) - - -class ResCSPA(BottleneckCSPA): - # CSP https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2 * e) # hidden channels - self.m = nn.Sequential(*[Res(c_, c_, shortcut, g, e=0.5) for _ in range(n)]) - - -class ResCSPB(BottleneckCSPB): - # CSP https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2) # hidden channels - self.m = nn.Sequential(*[Res(c_, c_, shortcut, g, e=0.5) for _ in range(n)]) - - -class ResCSPC(BottleneckCSPC): - # CSP https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2 * e) # hidden channels - self.m = nn.Sequential(*[Res(c_, c_, shortcut, g, e=0.5) for _ in range(n)]) - - -class ResXCSPA(ResCSPA): - # CSP https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=32, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2 * e) # hidden channels - self.m = nn.Sequential(*[Res(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) - - -class ResXCSPB(ResCSPB): - # CSP https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=32, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2) # hidden channels - self.m = nn.Sequential(*[Res(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) - - -class ResXCSPC(ResCSPC): - # CSP https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=32, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2 * e) # hidden channels - self.m = nn.Sequential(*[Res(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) - - -class GhostCSPA(BottleneckCSPA): - # CSP https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2 * e) # hidden channels - self.m = nn.Sequential(*[Ghost(c_, c_) for _ in range(n)]) - - -class GhostCSPB(BottleneckCSPB): - # CSP https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2) # hidden channels - self.m = nn.Sequential(*[Ghost(c_, c_) for _ in range(n)]) - - -class GhostCSPC(BottleneckCSPC): - # CSP https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2 * e) # hidden channels - self.m = nn.Sequential(*[Ghost(c_, c_) for _ in range(n)]) - -##### end of cspnet ##### - - -##### yolor ##### - -class ImplicitA(nn.Module): - def __init__(self, channel, mean=0., std=.02): - super(ImplicitA, self).__init__() - self.channel = channel - self.mean = mean - self.std = std - self.implicit = nn.Parameter(torch.zeros(1, channel, 1, 1)) - nn.init.normal_(self.implicit, mean=self.mean, std=self.std) - - def forward(self, x): - return self.implicit + x - - -class ImplicitM(nn.Module): - def __init__(self, channel, mean=1., std=.02): - super(ImplicitM, self).__init__() - self.channel = channel - self.mean = mean - self.std = std - self.implicit = nn.Parameter(torch.ones(1, channel, 1, 1)) - nn.init.normal_(self.implicit, mean=self.mean, std=self.std) - - def forward(self, x): - return self.implicit * x - -##### end of yolor ##### - - -##### repvgg ##### - -class RepConv(nn.Module): - # Represented convolution - # https://arxiv.org/abs/2101.03697 - - def __init__(self, c1, c2, k=3, s=1, p=None, g=1, act=True, deploy=False): - super(RepConv, self).__init__() - - self.deploy = deploy - self.groups = g - self.in_channels = c1 - self.out_channels = c2 - - assert k == 3 - assert autopad(k, p) == 1 - - padding_11 = autopad(k, p) - k // 2 - - self.act = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity()) - - if deploy: - self.rbr_reparam = nn.Conv2d(c1, c2, k, s, autopad(k, p), groups=g, bias=True) - - else: - self.rbr_identity = (nn.BatchNorm2d(num_features=c1) if c2 == c1 and s == 1 else None) - - self.rbr_dense = nn.Sequential( - nn.Conv2d(c1, c2, k, s, autopad(k, p), groups=g, bias=False), - nn.BatchNorm2d(num_features=c2), - ) - - self.rbr_1x1 = nn.Sequential( - nn.Conv2d( c1, c2, 1, s, padding_11, groups=g, bias=False), - nn.BatchNorm2d(num_features=c2), - ) - - def forward(self, inputs): - if hasattr(self, "rbr_reparam"): - return self.act(self.rbr_reparam(inputs)) - - if self.rbr_identity is None: - id_out = 0 - else: - id_out = self.rbr_identity(inputs) - - return self.act(self.rbr_dense(inputs) + self.rbr_1x1(inputs) + id_out) - - def get_equivalent_kernel_bias(self): - kernel3x3, bias3x3 = self._fuse_bn_tensor(self.rbr_dense) - kernel1x1, bias1x1 = self._fuse_bn_tensor(self.rbr_1x1) - kernelid, biasid = self._fuse_bn_tensor(self.rbr_identity) - return ( - kernel3x3 + self._pad_1x1_to_3x3_tensor(kernel1x1) + kernelid, - bias3x3 + bias1x1 + biasid, - ) - - def _pad_1x1_to_3x3_tensor(self, kernel1x1): - if kernel1x1 is None: - return 0 - else: - return nn.functional.pad(kernel1x1, [1, 1, 1, 1]) - - def _fuse_bn_tensor(self, branch): - if branch is None: - return 0, 0 - if isinstance(branch, nn.Sequential): - kernel = branch[0].weight - running_mean = branch[1].running_mean - running_var = branch[1].running_var - gamma = branch[1].weight - beta = branch[1].bias - eps = branch[1].eps - else: - assert isinstance(branch, nn.BatchNorm2d) - if not hasattr(self, "id_tensor"): - input_dim = self.in_channels // self.groups - kernel_value = np.zeros( - (self.in_channels, input_dim, 3, 3), dtype=np.float32 - ) - for i in range(self.in_channels): - kernel_value[i, i % input_dim, 1, 1] = 1 - self.id_tensor = torch.from_numpy(kernel_value).to(branch.weight.device) - kernel = self.id_tensor - running_mean = branch.running_mean - running_var = branch.running_var - gamma = branch.weight - beta = branch.bias - eps = branch.eps - std = (running_var + eps).sqrt() - t = (gamma / std).reshape(-1, 1, 1, 1) - return kernel * t, beta - running_mean * gamma / std - - def repvgg_convert(self): - kernel, bias = self.get_equivalent_kernel_bias() - return ( - kernel.detach().cpu().numpy(), - bias.detach().cpu().numpy(), - ) - - def fuse_conv_bn(self, conv, bn): - - std = (bn.running_var + bn.eps).sqrt() - bias = bn.bias - bn.running_mean * bn.weight / std - - t = (bn.weight / std).reshape(-1, 1, 1, 1) - weights = conv.weight * t - - bn = nn.Identity() - conv = nn.Conv2d(in_channels = conv.in_channels, - out_channels = conv.out_channels, - kernel_size = conv.kernel_size, - stride=conv.stride, - padding = conv.padding, - dilation = conv.dilation, - groups = conv.groups, - bias = True, - padding_mode = conv.padding_mode) - - conv.weight = torch.nn.Parameter(weights) - conv.bias = torch.nn.Parameter(bias) - return conv - - def fuse_repvgg_block(self): - if self.deploy: - return - print(f"RepConv.fuse_repvgg_block") - - self.rbr_dense = self.fuse_conv_bn(self.rbr_dense[0], self.rbr_dense[1]) - - self.rbr_1x1 = self.fuse_conv_bn(self.rbr_1x1[0], self.rbr_1x1[1]) - rbr_1x1_bias = self.rbr_1x1.bias - weight_1x1_expanded = torch.nn.functional.pad(self.rbr_1x1.weight, [1, 1, 1, 1]) - - # Fuse self.rbr_identity - if (isinstance(self.rbr_identity, nn.BatchNorm2d) or isinstance(self.rbr_identity, nn.modules.batchnorm.SyncBatchNorm)): - # print(f"fuse: rbr_identity == BatchNorm2d or SyncBatchNorm") - identity_conv_1x1 = nn.Conv2d( - in_channels=self.in_channels, - out_channels=self.out_channels, - kernel_size=1, - stride=1, - padding=0, - groups=self.groups, - bias=False) - identity_conv_1x1.weight.data = identity_conv_1x1.weight.data.to(self.rbr_1x1.weight.data.device) - identity_conv_1x1.weight.data = identity_conv_1x1.weight.data.squeeze().squeeze() - # print(f" identity_conv_1x1.weight = {identity_conv_1x1.weight.shape}") - identity_conv_1x1.weight.data.fill_(0.0) - identity_conv_1x1.weight.data.fill_diagonal_(1.0) - identity_conv_1x1.weight.data = identity_conv_1x1.weight.data.unsqueeze(2).unsqueeze(3) - # print(f" identity_conv_1x1.weight = {identity_conv_1x1.weight.shape}") - - identity_conv_1x1 = self.fuse_conv_bn(identity_conv_1x1, self.rbr_identity) - bias_identity_expanded = identity_conv_1x1.bias - weight_identity_expanded = torch.nn.functional.pad(identity_conv_1x1.weight, [1, 1, 1, 1]) - else: - # print(f"fuse: rbr_identity != BatchNorm2d, rbr_identity = {self.rbr_identity}") - bias_identity_expanded = torch.nn.Parameter( torch.zeros_like(rbr_1x1_bias) ) - weight_identity_expanded = torch.nn.Parameter( torch.zeros_like(weight_1x1_expanded) ) - - - #print(f"self.rbr_1x1.weight = {self.rbr_1x1.weight.shape}, ") - #print(f"weight_1x1_expanded = {weight_1x1_expanded.shape}, ") - #print(f"self.rbr_dense.weight = {self.rbr_dense.weight.shape}, ") - - self.rbr_dense.weight = torch.nn.Parameter(self.rbr_dense.weight + weight_1x1_expanded + weight_identity_expanded) - self.rbr_dense.bias = torch.nn.Parameter(self.rbr_dense.bias + rbr_1x1_bias + bias_identity_expanded) - - self.rbr_reparam = self.rbr_dense - self.deploy = True - - if self.rbr_identity is not None: - del self.rbr_identity - self.rbr_identity = None - - if self.rbr_1x1 is not None: - del self.rbr_1x1 - self.rbr_1x1 = None - - if self.rbr_dense is not None: - del self.rbr_dense - self.rbr_dense = None - - -class RepBottleneck(Bottleneck): - # Standard bottleneck - def __init__(self, c1, c2, shortcut=True, g=1, e=0.5): # ch_in, ch_out, shortcut, groups, expansion - super().__init__(c1, c2, shortcut=True, g=1, e=0.5) - c_ = int(c2 * e) # hidden channels - self.cv2 = RepConv(c_, c2, 3, 1, g=g) - - -class RepBottleneckCSPA(BottleneckCSPA): - # CSP Bottleneck https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2 * e) # hidden channels - self.m = nn.Sequential(*[RepBottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) - - -class RepBottleneckCSPB(BottleneckCSPB): - # CSP Bottleneck https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2) # hidden channels - self.m = nn.Sequential(*[RepBottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) - - -class RepBottleneckCSPC(BottleneckCSPC): - # CSP Bottleneck https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2 * e) # hidden channels - self.m = nn.Sequential(*[RepBottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) - - -class RepRes(Res): - # Standard bottleneck - def __init__(self, c1, c2, shortcut=True, g=1, e=0.5): # ch_in, ch_out, shortcut, groups, expansion - super().__init__(c1, c2, shortcut, g, e) - c_ = int(c2 * e) # hidden channels - self.cv2 = RepConv(c_, c_, 3, 1, g=g) - - -class RepResCSPA(ResCSPA): - # CSP Bottleneck https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2 * e) # hidden channels - self.m = nn.Sequential(*[RepRes(c_, c_, shortcut, g, e=0.5) for _ in range(n)]) - - -class RepResCSPB(ResCSPB): - # CSP Bottleneck https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2) # hidden channels - self.m = nn.Sequential(*[RepRes(c_, c_, shortcut, g, e=0.5) for _ in range(n)]) - - -class RepResCSPC(ResCSPC): - # CSP Bottleneck https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2 * e) # hidden channels - self.m = nn.Sequential(*[RepRes(c_, c_, shortcut, g, e=0.5) for _ in range(n)]) - - -class RepResX(ResX): - # Standard bottleneck - def __init__(self, c1, c2, shortcut=True, g=32, e=0.5): # ch_in, ch_out, shortcut, groups, expansion - super().__init__(c1, c2, shortcut, g, e) - c_ = int(c2 * e) # hidden channels - self.cv2 = RepConv(c_, c_, 3, 1, g=g) - - -class RepResXCSPA(ResXCSPA): - # CSP Bottleneck https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=32, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2 * e) # hidden channels - self.m = nn.Sequential(*[RepResX(c_, c_, shortcut, g, e=0.5) for _ in range(n)]) - - -class RepResXCSPB(ResXCSPB): - # CSP Bottleneck https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=False, g=32, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2) # hidden channels - self.m = nn.Sequential(*[RepResX(c_, c_, shortcut, g, e=0.5) for _ in range(n)]) - - -class RepResXCSPC(ResXCSPC): - # CSP Bottleneck https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=32, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super().__init__(c1, c2, n, shortcut, g, e) - c_ = int(c2 * e) # hidden channels - self.m = nn.Sequential(*[RepResX(c_, c_, shortcut, g, e=0.5) for _ in range(n)]) - -##### end of repvgg ##### - - -##### transformer ##### - -class TransformerLayer(nn.Module): - # Transformer layer https://arxiv.org/abs/2010.11929 (LayerNorm layers removed for better performance) - def __init__(self, c, num_heads): - super().__init__() - self.q = nn.Linear(c, c, bias=False) - self.k = nn.Linear(c, c, bias=False) - self.v = nn.Linear(c, c, bias=False) - self.ma = nn.MultiheadAttention(embed_dim=c, num_heads=num_heads) - self.fc1 = nn.Linear(c, c, bias=False) - self.fc2 = nn.Linear(c, c, bias=False) - - def forward(self, x): - x = self.ma(self.q(x), self.k(x), self.v(x))[0] + x - x = self.fc2(self.fc1(x)) + x - return x - - -class TransformerBlock(nn.Module): - # Vision Transformer https://arxiv.org/abs/2010.11929 - def __init__(self, c1, c2, num_heads, num_layers): - super().__init__() - self.conv = None - if c1 != c2: - self.conv = Conv(c1, c2) - self.linear = nn.Linear(c2, c2) # learnable position embedding - self.tr = nn.Sequential(*[TransformerLayer(c2, num_heads) for _ in range(num_layers)]) - self.c2 = c2 - - def forward(self, x): - if self.conv is not None: - x = self.conv(x) - b, _, w, h = x.shape - p = x.flatten(2) - p = p.unsqueeze(0) - p = p.transpose(0, 3) - p = p.squeeze(3) - e = self.linear(p) - x = p + e - - x = self.tr(x) - x = x.unsqueeze(3) - x = x.transpose(0, 3) - x = x.reshape(b, self.c2, w, h) - return x - -##### end of transformer ##### - - -##### yolov5 ##### - -class Focus(nn.Module): - # Focus wh information into c-space - def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True): # ch_in, ch_out, kernel, stride, padding, groups - super(Focus, self).__init__() - self.conv = Conv(c1 * 4, c2, k, s, p, g, act) - # self.contract = Contract(gain=2) - - def forward(self, x): # x(b,c,w,h) -> y(b,4c,w/2,h/2) - return self.conv(torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1)) - # return self.conv(self.contract(x)) - - -class SPPF(nn.Module): - # Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher - def __init__(self, c1, c2, k=5): # equivalent to SPP(k=(5, 9, 13)) - super().__init__() - c_ = c1 // 2 # hidden channels - self.cv1 = Conv(c1, c_, 1, 1) - self.cv2 = Conv(c_ * 4, c2, 1, 1) - self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2) - - def forward(self, x): - x = self.cv1(x) - y1 = self.m(x) - y2 = self.m(y1) - return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1)) - - -class Contract(nn.Module): - # Contract width-height into channels, i.e. x(1,64,80,80) to x(1,256,40,40) - def __init__(self, gain=2): - super().__init__() - self.gain = gain - - def forward(self, x): - N, C, H, W = x.size() # assert (H / s == 0) and (W / s == 0), 'Indivisible gain' - s = self.gain - x = x.view(N, C, H // s, s, W // s, s) # x(1,64,40,2,40,2) - x = x.permute(0, 3, 5, 1, 2, 4).contiguous() # x(1,2,2,64,40,40) - return x.view(N, C * s * s, H // s, W // s) # x(1,256,40,40) - - -class Expand(nn.Module): - # Expand channels into width-height, i.e. x(1,64,80,80) to x(1,16,160,160) - def __init__(self, gain=2): - super().__init__() - self.gain = gain - - def forward(self, x): - N, C, H, W = x.size() # assert C / s ** 2 == 0, 'Indivisible gain' - s = self.gain - x = x.view(N, s, s, C // s ** 2, H, W) # x(1,2,2,16,80,80) - x = x.permute(0, 3, 4, 1, 5, 2).contiguous() # x(1,16,80,2,80,2) - return x.view(N, C // s ** 2, H * s, W * s) # x(1,16,160,160) - - -class NMS(nn.Module): - # Non-Maximum Suppression (NMS) module - conf = 0.25 # confidence threshold - iou = 0.45 # IoU threshold - classes = None # (optional list) filter by class - - def __init__(self): - super(NMS, self).__init__() - - def forward(self, x): - return non_max_suppression(x[0], conf_thres=self.conf, iou_thres=self.iou, classes=self.classes) - - -class autoShape(nn.Module): - # input-robust model wrapper for passing cv2/np/PIL/torch inputs. Includes preprocessing, inference and NMS - conf = 0.25 # NMS confidence threshold - iou = 0.45 # NMS IoU threshold - classes = None # (optional list) filter by class - - def __init__(self, model): - super(autoShape, self).__init__() - self.model = model.eval() - - def autoshape(self): - print('autoShape already enabled, skipping... ') # model already converted to model.autoshape() - return self - - @torch.no_grad() - def forward(self, imgs, size=640, augment=False, profile=False): - # Inference from various sources. For height=640, width=1280, RGB images example inputs are: - # filename: imgs = 'data/samples/zidane.jpg' - # URI: = 'https://github.com/ultralytics/yolov5/releases/download/v1.0/zidane.jpg' - # OpenCV: = cv2.imread('image.jpg')[:,:,::-1] # HWC BGR to RGB x(640,1280,3) - # PIL: = Image.open('image.jpg') # HWC x(640,1280,3) - # numpy: = np.zeros((640,1280,3)) # HWC - # torch: = torch.zeros(16,3,320,640) # BCHW (scaled to size=640, 0-1 values) - # multiple: = [Image.open('image1.jpg'), Image.open('image2.jpg'), ...] # list of images - - t = [time_synchronized()] - p = next(self.model.parameters()) # for device and type - if isinstance(imgs, torch.Tensor): # torch - with amp.autocast(enabled=p.device.type != 'cpu'): - return self.model(imgs.to(p.device).type_as(p), augment, profile) # inference - - # Pre-process - n, imgs = (len(imgs), imgs) if isinstance(imgs, list) else (1, [imgs]) # number of images, list of images - shape0, shape1, files = [], [], [] # image and inference shapes, filenames - for i, im in enumerate(imgs): - f = f'image{i}' # filename - if isinstance(im, str): # filename or uri - im, f = np.asarray(Image.open(requests.get(im, stream=True).raw if im.startswith('http') else im)), im - elif isinstance(im, Image.Image): # PIL Image - im, f = np.asarray(im), getattr(im, 'filename', f) or f - files.append(Path(f).with_suffix('.jpg').name) - if im.shape[0] < 5: # image in CHW - im = im.transpose((1, 2, 0)) # reverse dataloader .transpose(2, 0, 1) - im = im[:, :, :3] if im.ndim == 3 else np.tile(im[:, :, None], 3) # enforce 3ch input - s = im.shape[:2] # HWC - shape0.append(s) # image shape - g = (size / max(s)) # gain - shape1.append([y * g for y in s]) - imgs[i] = im # update - shape1 = [make_divisible(x, int(self.stride.max())) for x in np.stack(shape1, 0).max(0)] # inference shape - x = [letterbox(im, new_shape=shape1, auto=False)[0] for im in imgs] # pad - x = np.stack(x, 0) if n > 1 else x[0][None] # stack - x = np.ascontiguousarray(x.transpose((0, 3, 1, 2))) # BHWC to BCHW - x = torch.from_numpy(x).to(p.device).type_as(p) / 255. # uint8 to fp16/32 - t.append(time_synchronized()) - - with amp.autocast(enabled=p.device.type != 'cpu'): - # Inference - y = self.model(x, augment, profile)[0] # forward - t.append(time_synchronized()) - - # Post-process - y = non_max_suppression(y, conf_thres=self.conf, iou_thres=self.iou, classes=self.classes) # NMS - for i in range(n): - scale_coords(shape1, y[i][:, :4], shape0[i]) - - t.append(time_synchronized()) - return Detections(imgs, y, files, t, self.names, x.shape) - - -class Detections: - # detections class for YOLOv5 inference results - def __init__(self, imgs, pred, files, times=None, names=None, shape=None): - super(Detections, self).__init__() - d = pred[0].device # device - gn = [torch.tensor([*[im.shape[i] for i in [1, 0, 1, 0]], 1., 1.], device=d) for im in imgs] # normalizations - self.imgs = imgs # list of images as numpy arrays - self.pred = pred # list of tensors pred[0] = (xyxy, conf, cls) - self.names = names # class names - self.files = files # image filenames - self.xyxy = pred # xyxy pixels - self.xywh = [xyxy2xywh(x) for x in pred] # xywh pixels - self.xyxyn = [x / g for x, g in zip(self.xyxy, gn)] # xyxy normalized - self.xywhn = [x / g for x, g in zip(self.xywh, gn)] # xywh normalized - self.n = len(self.pred) # number of images (batch size) - self.t = tuple((times[i + 1] - times[i]) * 1000 / self.n for i in range(3)) # timestamps (ms) - self.s = shape # inference BCHW shape - - def display(self, pprint=False, show=False, save=False, render=False, save_dir=''): - colors = color_list() - for i, (img, pred) in enumerate(zip(self.imgs, self.pred)): - str = f'image {i + 1}/{len(self.pred)}: {img.shape[0]}x{img.shape[1]} ' - if pred is not None: - for c in pred[:, -1].unique(): - n = (pred[:, -1] == c).sum() # detections per class - str += f"{n} {self.names[int(c)]}{'s' * (n > 1)}, " # add to string - if show or save or render: - for *box, conf, cls in pred: # xyxy, confidence, class - label = f'{self.names[int(cls)]} {conf:.2f}' - plot_one_box(box, img, label=label, color=colors[int(cls) % 10]) - img = Image.fromarray(img.astype(np.uint8)) if isinstance(img, np.ndarray) else img # from np - if pprint: - print(str.rstrip(', ')) - if show: - img.show(self.files[i]) # show - if save: - f = self.files[i] - img.save(Path(save_dir) / f) # save - print(f"{'Saved' * (i == 0)} {f}", end=',' if i < self.n - 1 else f' to {save_dir}\n') - if render: - self.imgs[i] = np.asarray(img) - - def print(self): - self.display(pprint=True) # print results - print(f'Speed: %.1fms pre-process, %.1fms inference, %.1fms NMS per image at shape {tuple(self.s)}' % self.t) - - def show(self): - self.display(show=True) # show results - - def save(self, save_dir='runs/hub/exp'): - save_dir = increment_path(save_dir, exist_ok=save_dir != 'runs/hub/exp') # increment save_dir - Path(save_dir).mkdir(parents=True, exist_ok=True) - self.display(save=True, save_dir=save_dir) # save results - - def render(self): - self.display(render=True) # render results - return self.imgs - - def pandas(self): - # return detections as pandas DataFrames, i.e. print(results.pandas().xyxy[0]) - new = copy(self) # return copy - ca = 'xmin', 'ymin', 'xmax', 'ymax', 'confidence', 'class', 'name' # xyxy columns - cb = 'xcenter', 'ycenter', 'width', 'height', 'confidence', 'class', 'name' # xywh columns - for k, c in zip(['xyxy', 'xyxyn', 'xywh', 'xywhn'], [ca, ca, cb, cb]): - a = [[x[:5] + [int(x[5]), self.names[int(x[5])]] for x in x.tolist()] for x in getattr(self, k)] # update - setattr(new, k, [pd.DataFrame(x, columns=c) for x in a]) - return new - - def tolist(self): - # return a list of Detections objects, i.e. 'for result in results.tolist():' - x = [Detections([self.imgs[i]], [self.pred[i]], self.names, self.s) for i in range(self.n)] - for d in x: - for k in ['imgs', 'pred', 'xyxy', 'xyxyn', 'xywh', 'xywhn']: - setattr(d, k, getattr(d, k)[0]) # pop out of list - return x - - def __len__(self): - return self.n - - -class Classify(nn.Module): - # Classification head, i.e. x(b,c1,20,20) to x(b,c2) - def __init__(self, c1, c2, k=1, s=1, p=None, g=1): # ch_in, ch_out, kernel, stride, padding, groups - super(Classify, self).__init__() - self.aap = nn.AdaptiveAvgPool2d(1) # to x(b,c1,1,1) - self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p), groups=g) # to x(b,c2,1,1) - self.flat = nn.Flatten() - - def forward(self, x): - z = torch.cat([self.aap(y) for y in (x if isinstance(x, list) else [x])], 1) # cat if list - return self.flat(self.conv(z)) # flatten to x(b,c2) - -##### end of yolov5 ###### - - -##### orepa ##### - -def transI_fusebn(kernel, bn): - gamma = bn.weight - std = (bn.running_var + bn.eps).sqrt() - return kernel * ((gamma / std).reshape(-1, 1, 1, 1)), bn.bias - bn.running_mean * gamma / std - - -class ConvBN(nn.Module): - def __init__(self, in_channels, out_channels, kernel_size, - stride=1, padding=0, dilation=1, groups=1, deploy=False, nonlinear=None): - super().__init__() - if nonlinear is None: - self.nonlinear = nn.Identity() - else: - self.nonlinear = nonlinear - if deploy: - self.conv = nn.Conv2d(in_channels=in_channels, out_channels=out_channels, kernel_size=kernel_size, - stride=stride, padding=padding, dilation=dilation, groups=groups, bias=True) - else: - self.conv = nn.Conv2d(in_channels=in_channels, out_channels=out_channels, kernel_size=kernel_size, - stride=stride, padding=padding, dilation=dilation, groups=groups, bias=False) - self.bn = nn.BatchNorm2d(num_features=out_channels) - - def forward(self, x): - if hasattr(self, 'bn'): - return self.nonlinear(self.bn(self.conv(x))) - else: - return self.nonlinear(self.conv(x)) - - def switch_to_deploy(self): - kernel, bias = transI_fusebn(self.conv.weight, self.bn) - conv = nn.Conv2d(in_channels=self.conv.in_channels, out_channels=self.conv.out_channels, kernel_size=self.conv.kernel_size, - stride=self.conv.stride, padding=self.conv.padding, dilation=self.conv.dilation, groups=self.conv.groups, bias=True) - conv.weight.data = kernel - conv.bias.data = bias - for para in self.parameters(): - para.detach_() - self.__delattr__('conv') - self.__delattr__('bn') - self.conv = conv - -class OREPA_3x3_RepConv(nn.Module): - - def __init__(self, in_channels, out_channels, kernel_size, - stride=1, padding=0, dilation=1, groups=1, - internal_channels_1x1_3x3=None, - deploy=False, nonlinear=None, single_init=False): - super(OREPA_3x3_RepConv, self).__init__() - self.deploy = deploy - - if nonlinear is None: - self.nonlinear = nn.Identity() - else: - self.nonlinear = nonlinear - - self.kernel_size = kernel_size - self.in_channels = in_channels - self.out_channels = out_channels - self.groups = groups - assert padding == kernel_size // 2 - - self.stride = stride - self.padding = padding - self.dilation = dilation - - self.branch_counter = 0 - - self.weight_rbr_origin = nn.Parameter(torch.Tensor(out_channels, int(in_channels/self.groups), kernel_size, kernel_size)) - nn.init.kaiming_uniform_(self.weight_rbr_origin, a=math.sqrt(1.0)) - self.branch_counter += 1 - - - if groups < out_channels: - self.weight_rbr_avg_conv = nn.Parameter(torch.Tensor(out_channels, int(in_channels/self.groups), 1, 1)) - self.weight_rbr_pfir_conv = nn.Parameter(torch.Tensor(out_channels, int(in_channels/self.groups), 1, 1)) - nn.init.kaiming_uniform_(self.weight_rbr_avg_conv, a=1.0) - nn.init.kaiming_uniform_(self.weight_rbr_pfir_conv, a=1.0) - self.weight_rbr_avg_conv.data - self.weight_rbr_pfir_conv.data - self.register_buffer('weight_rbr_avg_avg', torch.ones(kernel_size, kernel_size).mul(1.0/kernel_size/kernel_size)) - self.branch_counter += 1 - - else: - raise NotImplementedError - self.branch_counter += 1 - - if internal_channels_1x1_3x3 is None: - internal_channels_1x1_3x3 = in_channels if groups < out_channels else 2 * in_channels # For mobilenet, it is better to have 2X internal channels - - if internal_channels_1x1_3x3 == in_channels: - self.weight_rbr_1x1_kxk_idconv1 = nn.Parameter(torch.zeros(in_channels, int(in_channels/self.groups), 1, 1)) - id_value = np.zeros((in_channels, int(in_channels/self.groups), 1, 1)) - for i in range(in_channels): - id_value[i, i % int(in_channels/self.groups), 0, 0] = 1 - id_tensor = torch.from_numpy(id_value).type_as(self.weight_rbr_1x1_kxk_idconv1) - self.register_buffer('id_tensor', id_tensor) - - else: - self.weight_rbr_1x1_kxk_conv1 = nn.Parameter(torch.Tensor(internal_channels_1x1_3x3, int(in_channels/self.groups), 1, 1)) - nn.init.kaiming_uniform_(self.weight_rbr_1x1_kxk_conv1, a=math.sqrt(1.0)) - self.weight_rbr_1x1_kxk_conv2 = nn.Parameter(torch.Tensor(out_channels, int(internal_channels_1x1_3x3/self.groups), kernel_size, kernel_size)) - nn.init.kaiming_uniform_(self.weight_rbr_1x1_kxk_conv2, a=math.sqrt(1.0)) - self.branch_counter += 1 - - expand_ratio = 8 - self.weight_rbr_gconv_dw = nn.Parameter(torch.Tensor(in_channels*expand_ratio, 1, kernel_size, kernel_size)) - self.weight_rbr_gconv_pw = nn.Parameter(torch.Tensor(out_channels, in_channels*expand_ratio, 1, 1)) - nn.init.kaiming_uniform_(self.weight_rbr_gconv_dw, a=math.sqrt(1.0)) - nn.init.kaiming_uniform_(self.weight_rbr_gconv_pw, a=math.sqrt(1.0)) - self.branch_counter += 1 - - if out_channels == in_channels and stride == 1: - self.branch_counter += 1 - - self.vector = nn.Parameter(torch.Tensor(self.branch_counter, self.out_channels)) - self.bn = nn.BatchNorm2d(out_channels) - - self.fre_init() - - nn.init.constant_(self.vector[0, :], 0.25) #origin - nn.init.constant_(self.vector[1, :], 0.25) #avg - nn.init.constant_(self.vector[2, :], 0.0) #prior - nn.init.constant_(self.vector[3, :], 0.5) #1x1_kxk - nn.init.constant_(self.vector[4, :], 0.5) #dws_conv - - - def fre_init(self): - prior_tensor = torch.Tensor(self.out_channels, self.kernel_size, self.kernel_size) - half_fg = self.out_channels/2 - for i in range(self.out_channels): - for h in range(3): - for w in range(3): - if i < half_fg: - prior_tensor[i, h, w] = math.cos(math.pi*(h+0.5)*(i+1)/3) - else: - prior_tensor[i, h, w] = math.cos(math.pi*(w+0.5)*(i+1-half_fg)/3) - - self.register_buffer('weight_rbr_prior', prior_tensor) - - def weight_gen(self): - - weight_rbr_origin = torch.einsum('oihw,o->oihw', self.weight_rbr_origin, self.vector[0, :]) - - weight_rbr_avg = torch.einsum('oihw,o->oihw', torch.einsum('oihw,hw->oihw', self.weight_rbr_avg_conv, self.weight_rbr_avg_avg), self.vector[1, :]) - - weight_rbr_pfir = torch.einsum('oihw,o->oihw', torch.einsum('oihw,ohw->oihw', self.weight_rbr_pfir_conv, self.weight_rbr_prior), self.vector[2, :]) - - weight_rbr_1x1_kxk_conv1 = None - if hasattr(self, 'weight_rbr_1x1_kxk_idconv1'): - weight_rbr_1x1_kxk_conv1 = (self.weight_rbr_1x1_kxk_idconv1 + self.id_tensor).squeeze() - elif hasattr(self, 'weight_rbr_1x1_kxk_conv1'): - weight_rbr_1x1_kxk_conv1 = self.weight_rbr_1x1_kxk_conv1.squeeze() - else: - raise NotImplementedError - weight_rbr_1x1_kxk_conv2 = self.weight_rbr_1x1_kxk_conv2 - - if self.groups > 1: - g = self.groups - t, ig = weight_rbr_1x1_kxk_conv1.size() - o, tg, h, w = weight_rbr_1x1_kxk_conv2.size() - weight_rbr_1x1_kxk_conv1 = weight_rbr_1x1_kxk_conv1.view(g, int(t/g), ig) - weight_rbr_1x1_kxk_conv2 = weight_rbr_1x1_kxk_conv2.view(g, int(o/g), tg, h, w) - weight_rbr_1x1_kxk = torch.einsum('gti,gothw->goihw', weight_rbr_1x1_kxk_conv1, weight_rbr_1x1_kxk_conv2).view(o, ig, h, w) - else: - weight_rbr_1x1_kxk = torch.einsum('ti,othw->oihw', weight_rbr_1x1_kxk_conv1, weight_rbr_1x1_kxk_conv2) - - weight_rbr_1x1_kxk = torch.einsum('oihw,o->oihw', weight_rbr_1x1_kxk, self.vector[3, :]) - - weight_rbr_gconv = self.dwsc2full(self.weight_rbr_gconv_dw, self.weight_rbr_gconv_pw, self.in_channels) - weight_rbr_gconv = torch.einsum('oihw,o->oihw', weight_rbr_gconv, self.vector[4, :]) - - weight = weight_rbr_origin + weight_rbr_avg + weight_rbr_1x1_kxk + weight_rbr_pfir + weight_rbr_gconv - - return weight - - def dwsc2full(self, weight_dw, weight_pw, groups): - - t, ig, h, w = weight_dw.size() - o, _, _, _ = weight_pw.size() - tg = int(t/groups) - i = int(ig*groups) - weight_dw = weight_dw.view(groups, tg, ig, h, w) - weight_pw = weight_pw.squeeze().view(o, groups, tg) - - weight_dsc = torch.einsum('gtihw,ogt->ogihw', weight_dw, weight_pw) - return weight_dsc.view(o, i, h, w) - - def forward(self, inputs): - weight = self.weight_gen() - out = F.conv2d(inputs, weight, bias=None, stride=self.stride, padding=self.padding, dilation=self.dilation, groups=self.groups) - - return self.nonlinear(self.bn(out)) - -class RepConv_OREPA(nn.Module): - - def __init__(self, c1, c2, k=3, s=1, padding=1, dilation=1, groups=1, padding_mode='zeros', deploy=False, use_se=False, nonlinear=nn.SiLU()): - super(RepConv_OREPA, self).__init__() - self.deploy = deploy - self.groups = groups - self.in_channels = c1 - self.out_channels = c2 - - self.padding = padding - self.dilation = dilation - self.groups = groups - - assert k == 3 - assert padding == 1 - - padding_11 = padding - k // 2 - - if nonlinear is None: - self.nonlinearity = nn.Identity() - else: - self.nonlinearity = nonlinear - - if use_se: - self.se = SEBlock(self.out_channels, internal_neurons=self.out_channels // 16) - else: - self.se = nn.Identity() - - if deploy: - self.rbr_reparam = nn.Conv2d(in_channels=self.in_channels, out_channels=self.out_channels, kernel_size=k, stride=s, - padding=padding, dilation=dilation, groups=groups, bias=True, padding_mode=padding_mode) - - else: - self.rbr_identity = nn.BatchNorm2d(num_features=self.in_channels) if self.out_channels == self.in_channels and s == 1 else None - self.rbr_dense = OREPA_3x3_RepConv(in_channels=self.in_channels, out_channels=self.out_channels, kernel_size=k, stride=s, padding=padding, groups=groups, dilation=1) - self.rbr_1x1 = ConvBN(in_channels=self.in_channels, out_channels=self.out_channels, kernel_size=1, stride=s, padding=padding_11, groups=groups, dilation=1) - print('RepVGG Block, identity = ', self.rbr_identity) - - - def forward(self, inputs): - if hasattr(self, 'rbr_reparam'): - return self.nonlinearity(self.se(self.rbr_reparam(inputs))) - - if self.rbr_identity is None: - id_out = 0 - else: - id_out = self.rbr_identity(inputs) - - out1 = self.rbr_dense(inputs) - out2 = self.rbr_1x1(inputs) - out3 = id_out - out = out1 + out2 + out3 - - return self.nonlinearity(self.se(out)) - - - # Optional. This improves the accuracy and facilitates quantization. - # 1. Cancel the original weight decay on rbr_dense.conv.weight and rbr_1x1.conv.weight. - # 2. Use like this. - # loss = criterion(....) - # for every RepVGGBlock blk: - # loss += weight_decay_coefficient * 0.5 * blk.get_cust_L2() - # optimizer.zero_grad() - # loss.backward() - - # Not used for OREPA - def get_custom_L2(self): - K3 = self.rbr_dense.weight_gen() - K1 = self.rbr_1x1.conv.weight - t3 = (self.rbr_dense.bn.weight / ((self.rbr_dense.bn.running_var + self.rbr_dense.bn.eps).sqrt())).reshape(-1, 1, 1, 1).detach() - t1 = (self.rbr_1x1.bn.weight / ((self.rbr_1x1.bn.running_var + self.rbr_1x1.bn.eps).sqrt())).reshape(-1, 1, 1, 1).detach() - - l2_loss_circle = (K3 ** 2).sum() - (K3[:, :, 1:2, 1:2] ** 2).sum() # The L2 loss of the "circle" of weights in 3x3 kernel. Use regular L2 on them. - eq_kernel = K3[:, :, 1:2, 1:2] * t3 + K1 * t1 # The equivalent resultant central point of 3x3 kernel. - l2_loss_eq_kernel = (eq_kernel ** 2 / (t3 ** 2 + t1 ** 2)).sum() # Normalize for an L2 coefficient comparable to regular L2. - return l2_loss_eq_kernel + l2_loss_circle - - def get_equivalent_kernel_bias(self): - kernel3x3, bias3x3 = self._fuse_bn_tensor(self.rbr_dense) - kernel1x1, bias1x1 = self._fuse_bn_tensor(self.rbr_1x1) - kernelid, biasid = self._fuse_bn_tensor(self.rbr_identity) - return kernel3x3 + self._pad_1x1_to_3x3_tensor(kernel1x1) + kernelid, bias3x3 + bias1x1 + biasid - - def _pad_1x1_to_3x3_tensor(self, kernel1x1): - if kernel1x1 is None: - return 0 - else: - return torch.nn.functional.pad(kernel1x1, [1,1,1,1]) - - def _fuse_bn_tensor(self, branch): - if branch is None: - return 0, 0 - if not isinstance(branch, nn.BatchNorm2d): - if isinstance(branch, OREPA_3x3_RepConv): - kernel = branch.weight_gen() - elif isinstance(branch, ConvBN): - kernel = branch.conv.weight - else: - raise NotImplementedError - running_mean = branch.bn.running_mean - running_var = branch.bn.running_var - gamma = branch.bn.weight - beta = branch.bn.bias - eps = branch.bn.eps - else: - if not hasattr(self, 'id_tensor'): - input_dim = self.in_channels // self.groups - kernel_value = np.zeros((self.in_channels, input_dim, 3, 3), dtype=np.float32) - for i in range(self.in_channels): - kernel_value[i, i % input_dim, 1, 1] = 1 - self.id_tensor = torch.from_numpy(kernel_value).to(branch.weight.device) - kernel = self.id_tensor - running_mean = branch.running_mean - running_var = branch.running_var - gamma = branch.weight - beta = branch.bias - eps = branch.eps - std = (running_var + eps).sqrt() - t = (gamma / std).reshape(-1, 1, 1, 1) - return kernel * t, beta - running_mean * gamma / std - - def switch_to_deploy(self): - if hasattr(self, 'rbr_reparam'): - return - print(f"RepConv_OREPA.switch_to_deploy") - kernel, bias = self.get_equivalent_kernel_bias() - self.rbr_reparam = nn.Conv2d(in_channels=self.rbr_dense.in_channels, out_channels=self.rbr_dense.out_channels, - kernel_size=self.rbr_dense.kernel_size, stride=self.rbr_dense.stride, - padding=self.rbr_dense.padding, dilation=self.rbr_dense.dilation, groups=self.rbr_dense.groups, bias=True) - self.rbr_reparam.weight.data = kernel - self.rbr_reparam.bias.data = bias - for para in self.parameters(): - para.detach_() - self.__delattr__('rbr_dense') - self.__delattr__('rbr_1x1') - if hasattr(self, 'rbr_identity'): - self.__delattr__('rbr_identity') - -##### end of orepa ##### - - -##### swin transformer ##### - -class WindowAttention(nn.Module): - - def __init__(self, dim, window_size, num_heads, qkv_bias=True, qk_scale=None, attn_drop=0., proj_drop=0.): - - super().__init__() - self.dim = dim - self.window_size = window_size # Wh, Ww - self.num_heads = num_heads - head_dim = dim // num_heads - self.scale = qk_scale or head_dim ** -0.5 - - # define a parameter table of relative position bias - self.relative_position_bias_table = nn.Parameter( - torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1), num_heads)) # 2*Wh-1 * 2*Ww-1, nH - - # get pair-wise relative position index for each token inside the window - coords_h = torch.arange(self.window_size[0]) - coords_w = torch.arange(self.window_size[1]) - coords = torch.stack(torch.meshgrid([coords_h, coords_w])) # 2, Wh, Ww - coords_flatten = torch.flatten(coords, 1) # 2, Wh*Ww - relative_coords = coords_flatten[:, :, None] - coords_flatten[:, None, :] # 2, Wh*Ww, Wh*Ww - relative_coords = relative_coords.permute(1, 2, 0).contiguous() # Wh*Ww, Wh*Ww, 2 - relative_coords[:, :, 0] += self.window_size[0] - 1 # shift to start from 0 - relative_coords[:, :, 1] += self.window_size[1] - 1 - relative_coords[:, :, 0] *= 2 * self.window_size[1] - 1 - relative_position_index = relative_coords.sum(-1) # Wh*Ww, Wh*Ww - self.register_buffer("relative_position_index", relative_position_index) - - self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias) - self.attn_drop = nn.Dropout(attn_drop) - self.proj = nn.Linear(dim, dim) - self.proj_drop = nn.Dropout(proj_drop) - - nn.init.normal_(self.relative_position_bias_table, std=.02) - self.softmax = nn.Softmax(dim=-1) - - def forward(self, x, mask=None): - - B_, N, C = x.shape - qkv = self.qkv(x).reshape(B_, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4) - q, k, v = qkv[0], qkv[1], qkv[2] # make torchscript happy (cannot use tensor as tuple) - - q = q * self.scale - attn = (q @ k.transpose(-2, -1)) - - relative_position_bias = self.relative_position_bias_table[self.relative_position_index.view(-1)].view( - self.window_size[0] * self.window_size[1], self.window_size[0] * self.window_size[1], -1) # Wh*Ww,Wh*Ww,nH - relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous() # nH, Wh*Ww, Wh*Ww - attn = attn + relative_position_bias.unsqueeze(0) - - if mask is not None: - nW = mask.shape[0] - attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze(1).unsqueeze(0) - attn = attn.view(-1, self.num_heads, N, N) - attn = self.softmax(attn) - else: - attn = self.softmax(attn) - - attn = self.attn_drop(attn) - - # print(attn.dtype, v.dtype) - try: - x = (attn @ v).transpose(1, 2).reshape(B_, N, C) - except: - #print(attn.dtype, v.dtype) - x = (attn.half() @ v).transpose(1, 2).reshape(B_, N, C) - x = self.proj(x) - x = self.proj_drop(x) - return x - -class Mlp(nn.Module): - - def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.SiLU, drop=0.): - super().__init__() - out_features = out_features or in_features - hidden_features = hidden_features or in_features - self.fc1 = nn.Linear(in_features, hidden_features) - self.act = act_layer() - self.fc2 = nn.Linear(hidden_features, out_features) - self.drop = nn.Dropout(drop) - - def forward(self, x): - x = self.fc1(x) - x = self.act(x) - x = self.drop(x) - x = self.fc2(x) - x = self.drop(x) - return x - -def window_partition(x, window_size): - - B, H, W, C = x.shape - assert H % window_size == 0, 'feature map h and w can not divide by window size' - x = x.view(B, H // window_size, window_size, W // window_size, window_size, C) - windows = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size, window_size, C) - return windows - -def window_reverse(windows, window_size, H, W): - - B = int(windows.shape[0] / (H * W / window_size / window_size)) - x = windows.view(B, H // window_size, W // window_size, window_size, window_size, -1) - x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1) - return x - - -class SwinTransformerLayer(nn.Module): - - def __init__(self, dim, num_heads, window_size=8, shift_size=0, - mlp_ratio=4., qkv_bias=True, qk_scale=None, drop=0., attn_drop=0., drop_path=0., - act_layer=nn.SiLU, norm_layer=nn.LayerNorm): - super().__init__() - self.dim = dim - self.num_heads = num_heads - self.window_size = window_size - self.shift_size = shift_size - self.mlp_ratio = mlp_ratio - # if min(self.input_resolution) <= self.window_size: - # # if window size is larger than input resolution, we don't partition windows - # self.shift_size = 0 - # self.window_size = min(self.input_resolution) - assert 0 <= self.shift_size < self.window_size, "shift_size must in 0-window_size" - - self.norm1 = norm_layer(dim) - self.attn = WindowAttention( - dim, window_size=(self.window_size, self.window_size), num_heads=num_heads, - qkv_bias=qkv_bias, qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop) - - self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity() - self.norm2 = norm_layer(dim) - mlp_hidden_dim = int(dim * mlp_ratio) - self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop) - - def create_mask(self, H, W): - # calculate attention mask for SW-MSA - img_mask = torch.zeros((1, H, W, 1)) # 1 H W 1 - h_slices = (slice(0, -self.window_size), - slice(-self.window_size, -self.shift_size), - slice(-self.shift_size, None)) - w_slices = (slice(0, -self.window_size), - slice(-self.window_size, -self.shift_size), - slice(-self.shift_size, None)) - cnt = 0 - for h in h_slices: - for w in w_slices: - img_mask[:, h, w, :] = cnt - cnt += 1 - - mask_windows = window_partition(img_mask, self.window_size) # nW, window_size, window_size, 1 - mask_windows = mask_windows.view(-1, self.window_size * self.window_size) - attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2) - attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill(attn_mask == 0, float(0.0)) - - return attn_mask - - def forward(self, x): - # reshape x[b c h w] to x[b l c] - _, _, H_, W_ = x.shape - - Padding = False - if min(H_, W_) < self.window_size or H_ % self.window_size!=0 or W_ % self.window_size!=0: - Padding = True - # print(f'img_size {min(H_, W_)} is less than (or not divided by) window_size {self.window_size}, Padding.') - pad_r = (self.window_size - W_ % self.window_size) % self.window_size - pad_b = (self.window_size - H_ % self.window_size) % self.window_size - x = F.pad(x, (0, pad_r, 0, pad_b)) - - # print('2', x.shape) - B, C, H, W = x.shape - L = H * W - x = x.permute(0, 2, 3, 1).contiguous().view(B, L, C) # b, L, c - - # create mask from init to forward - if self.shift_size > 0: - attn_mask = self.create_mask(H, W).to(x.device) - else: - attn_mask = None - - shortcut = x - x = self.norm1(x) - x = x.view(B, H, W, C) - - # cyclic shift - if self.shift_size > 0: - shifted_x = torch.roll(x, shifts=(-self.shift_size, -self.shift_size), dims=(1, 2)) - else: - shifted_x = x - - # partition windows - x_windows = window_partition(shifted_x, self.window_size) # nW*B, window_size, window_size, C - x_windows = x_windows.view(-1, self.window_size * self.window_size, C) # nW*B, window_size*window_size, C - - # W-MSA/SW-MSA - attn_windows = self.attn(x_windows, mask=attn_mask) # nW*B, window_size*window_size, C - - # merge windows - attn_windows = attn_windows.view(-1, self.window_size, self.window_size, C) - shifted_x = window_reverse(attn_windows, self.window_size, H, W) # B H' W' C - - # reverse cyclic shift - if self.shift_size > 0: - x = torch.roll(shifted_x, shifts=(self.shift_size, self.shift_size), dims=(1, 2)) - else: - x = shifted_x - x = x.view(B, H * W, C) - - # FFN - x = shortcut + self.drop_path(x) - x = x + self.drop_path(self.mlp(self.norm2(x))) - - x = x.permute(0, 2, 1).contiguous().view(-1, C, H, W) # b c h w - - if Padding: - x = x[:, :, :H_, :W_] # reverse padding - - return x - - -class SwinTransformerBlock(nn.Module): - def __init__(self, c1, c2, num_heads, num_layers, window_size=8): - super().__init__() - self.conv = None - if c1 != c2: - self.conv = Conv(c1, c2) - - # remove input_resolution - self.blocks = nn.Sequential(*[SwinTransformerLayer(dim=c2, num_heads=num_heads, window_size=window_size, - shift_size=0 if (i % 2 == 0) else window_size // 2) for i in range(num_layers)]) - - def forward(self, x): - if self.conv is not None: - x = self.conv(x) - x = self.blocks(x) - return x - - -class STCSPA(nn.Module): - # CSP Bottleneck https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super(STCSPA, self).__init__() - c_ = int(c2 * e) # hidden channels - self.cv1 = Conv(c1, c_, 1, 1) - self.cv2 = Conv(c1, c_, 1, 1) - self.cv3 = Conv(2 * c_, c2, 1, 1) - num_heads = c_ // 32 - self.m = SwinTransformerBlock(c_, c_, num_heads, n) - #self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) - - def forward(self, x): - y1 = self.m(self.cv1(x)) - y2 = self.cv2(x) - return self.cv3(torch.cat((y1, y2), dim=1)) - - -class STCSPB(nn.Module): - # CSP Bottleneck https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super(STCSPB, self).__init__() - c_ = int(c2) # hidden channels - self.cv1 = Conv(c1, c_, 1, 1) - self.cv2 = Conv(c_, c_, 1, 1) - self.cv3 = Conv(2 * c_, c2, 1, 1) - num_heads = c_ // 32 - self.m = SwinTransformerBlock(c_, c_, num_heads, n) - #self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) - - def forward(self, x): - x1 = self.cv1(x) - y1 = self.m(x1) - y2 = self.cv2(x1) - return self.cv3(torch.cat((y1, y2), dim=1)) - - -class STCSPC(nn.Module): - # CSP Bottleneck https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super(STCSPC, self).__init__() - c_ = int(c2 * e) # hidden channels - self.cv1 = Conv(c1, c_, 1, 1) - self.cv2 = Conv(c1, c_, 1, 1) - self.cv3 = Conv(c_, c_, 1, 1) - self.cv4 = Conv(2 * c_, c2, 1, 1) - num_heads = c_ // 32 - self.m = SwinTransformerBlock(c_, c_, num_heads, n) - #self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) - - def forward(self, x): - y1 = self.cv3(self.m(self.cv1(x))) - y2 = self.cv2(x) - return self.cv4(torch.cat((y1, y2), dim=1)) - -##### end of swin transformer ##### - - -##### swin transformer v2 ##### - -class WindowAttention_v2(nn.Module): - - def __init__(self, dim, window_size, num_heads, qkv_bias=True, attn_drop=0., proj_drop=0., - pretrained_window_size=[0, 0]): - - super().__init__() - self.dim = dim - self.window_size = window_size # Wh, Ww - self.pretrained_window_size = pretrained_window_size - self.num_heads = num_heads - - self.logit_scale = nn.Parameter(torch.log(10 * torch.ones((num_heads, 1, 1))), requires_grad=True) - - # mlp to generate continuous relative position bias - self.cpb_mlp = nn.Sequential(nn.Linear(2, 512, bias=True), - nn.ReLU(inplace=True), - nn.Linear(512, num_heads, bias=False)) - - # get relative_coords_table - relative_coords_h = torch.arange(-(self.window_size[0] - 1), self.window_size[0], dtype=torch.float32) - relative_coords_w = torch.arange(-(self.window_size[1] - 1), self.window_size[1], dtype=torch.float32) - relative_coords_table = torch.stack( - torch.meshgrid([relative_coords_h, - relative_coords_w])).permute(1, 2, 0).contiguous().unsqueeze(0) # 1, 2*Wh-1, 2*Ww-1, 2 - if pretrained_window_size[0] > 0: - relative_coords_table[:, :, :, 0] /= (pretrained_window_size[0] - 1) - relative_coords_table[:, :, :, 1] /= (pretrained_window_size[1] - 1) - else: - relative_coords_table[:, :, :, 0] /= (self.window_size[0] - 1) - relative_coords_table[:, :, :, 1] /= (self.window_size[1] - 1) - relative_coords_table *= 8 # normalize to -8, 8 - relative_coords_table = torch.sign(relative_coords_table) * torch.log2( - torch.abs(relative_coords_table) + 1.0) / np.log2(8) - - self.register_buffer("relative_coords_table", relative_coords_table) - - # get pair-wise relative position index for each token inside the window - coords_h = torch.arange(self.window_size[0]) - coords_w = torch.arange(self.window_size[1]) - coords = torch.stack(torch.meshgrid([coords_h, coords_w])) # 2, Wh, Ww - coords_flatten = torch.flatten(coords, 1) # 2, Wh*Ww - relative_coords = coords_flatten[:, :, None] - coords_flatten[:, None, :] # 2, Wh*Ww, Wh*Ww - relative_coords = relative_coords.permute(1, 2, 0).contiguous() # Wh*Ww, Wh*Ww, 2 - relative_coords[:, :, 0] += self.window_size[0] - 1 # shift to start from 0 - relative_coords[:, :, 1] += self.window_size[1] - 1 - relative_coords[:, :, 0] *= 2 * self.window_size[1] - 1 - relative_position_index = relative_coords.sum(-1) # Wh*Ww, Wh*Ww - self.register_buffer("relative_position_index", relative_position_index) - - self.qkv = nn.Linear(dim, dim * 3, bias=False) - if qkv_bias: - self.q_bias = nn.Parameter(torch.zeros(dim)) - self.v_bias = nn.Parameter(torch.zeros(dim)) - else: - self.q_bias = None - self.v_bias = None - self.attn_drop = nn.Dropout(attn_drop) - self.proj = nn.Linear(dim, dim) - self.proj_drop = nn.Dropout(proj_drop) - self.softmax = nn.Softmax(dim=-1) - - def forward(self, x, mask=None): - - B_, N, C = x.shape - qkv_bias = None - if self.q_bias is not None: - qkv_bias = torch.cat((self.q_bias, torch.zeros_like(self.v_bias, requires_grad=False), self.v_bias)) - qkv = F.linear(input=x, weight=self.qkv.weight, bias=qkv_bias) - qkv = qkv.reshape(B_, N, 3, self.num_heads, -1).permute(2, 0, 3, 1, 4) - q, k, v = qkv[0], qkv[1], qkv[2] # make torchscript happy (cannot use tensor as tuple) - - # cosine attention - attn = (F.normalize(q, dim=-1) @ F.normalize(k, dim=-1).transpose(-2, -1)) - logit_scale = torch.clamp(self.logit_scale, max=torch.log(torch.tensor(1. / 0.01))).exp() - attn = attn * logit_scale - - relative_position_bias_table = self.cpb_mlp(self.relative_coords_table).view(-1, self.num_heads) - relative_position_bias = relative_position_bias_table[self.relative_position_index.view(-1)].view( - self.window_size[0] * self.window_size[1], self.window_size[0] * self.window_size[1], -1) # Wh*Ww,Wh*Ww,nH - relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous() # nH, Wh*Ww, Wh*Ww - relative_position_bias = 16 * torch.sigmoid(relative_position_bias) - attn = attn + relative_position_bias.unsqueeze(0) - - if mask is not None: - nW = mask.shape[0] - attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze(1).unsqueeze(0) - attn = attn.view(-1, self.num_heads, N, N) - attn = self.softmax(attn) - else: - attn = self.softmax(attn) - - attn = self.attn_drop(attn) - - try: - x = (attn @ v).transpose(1, 2).reshape(B_, N, C) - except: - x = (attn.half() @ v).transpose(1, 2).reshape(B_, N, C) - - x = self.proj(x) - x = self.proj_drop(x) - return x - - def extra_repr(self) -> str: - return f'dim={self.dim}, window_size={self.window_size}, ' \ - f'pretrained_window_size={self.pretrained_window_size}, num_heads={self.num_heads}' - - def flops(self, N): - # calculate flops for 1 window with token length of N - flops = 0 - # qkv = self.qkv(x) - flops += N * self.dim * 3 * self.dim - # attn = (q @ k.transpose(-2, -1)) - flops += self.num_heads * N * (self.dim // self.num_heads) * N - # x = (attn @ v) - flops += self.num_heads * N * N * (self.dim // self.num_heads) - # x = self.proj(x) - flops += N * self.dim * self.dim - return flops - -class Mlp_v2(nn.Module): - def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.SiLU, drop=0.): - super().__init__() - out_features = out_features or in_features - hidden_features = hidden_features or in_features - self.fc1 = nn.Linear(in_features, hidden_features) - self.act = act_layer() - self.fc2 = nn.Linear(hidden_features, out_features) - self.drop = nn.Dropout(drop) - - def forward(self, x): - x = self.fc1(x) - x = self.act(x) - x = self.drop(x) - x = self.fc2(x) - x = self.drop(x) - return x - - -def window_partition_v2(x, window_size): - - B, H, W, C = x.shape - x = x.view(B, H // window_size, window_size, W // window_size, window_size, C) - windows = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size, window_size, C) - return windows - - -def window_reverse_v2(windows, window_size, H, W): - - B = int(windows.shape[0] / (H * W / window_size / window_size)) - x = windows.view(B, H // window_size, W // window_size, window_size, window_size, -1) - x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1) - return x - - -class SwinTransformerLayer_v2(nn.Module): - - def __init__(self, dim, num_heads, window_size=7, shift_size=0, - mlp_ratio=4., qkv_bias=True, drop=0., attn_drop=0., drop_path=0., - act_layer=nn.SiLU, norm_layer=nn.LayerNorm, pretrained_window_size=0): - super().__init__() - self.dim = dim - #self.input_resolution = input_resolution - self.num_heads = num_heads - self.window_size = window_size - self.shift_size = shift_size - self.mlp_ratio = mlp_ratio - #if min(self.input_resolution) <= self.window_size: - # # if window size is larger than input resolution, we don't partition windows - # self.shift_size = 0 - # self.window_size = min(self.input_resolution) - assert 0 <= self.shift_size < self.window_size, "shift_size must in 0-window_size" - - self.norm1 = norm_layer(dim) - self.attn = WindowAttention_v2( - dim, window_size=(self.window_size, self.window_size), num_heads=num_heads, - qkv_bias=qkv_bias, attn_drop=attn_drop, proj_drop=drop, - pretrained_window_size=(pretrained_window_size, pretrained_window_size)) - - self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity() - self.norm2 = norm_layer(dim) - mlp_hidden_dim = int(dim * mlp_ratio) - self.mlp = Mlp_v2(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop) - - def create_mask(self, H, W): - # calculate attention mask for SW-MSA - img_mask = torch.zeros((1, H, W, 1)) # 1 H W 1 - h_slices = (slice(0, -self.window_size), - slice(-self.window_size, -self.shift_size), - slice(-self.shift_size, None)) - w_slices = (slice(0, -self.window_size), - slice(-self.window_size, -self.shift_size), - slice(-self.shift_size, None)) - cnt = 0 - for h in h_slices: - for w in w_slices: - img_mask[:, h, w, :] = cnt - cnt += 1 - - mask_windows = window_partition(img_mask, self.window_size) # nW, window_size, window_size, 1 - mask_windows = mask_windows.view(-1, self.window_size * self.window_size) - attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2) - attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill(attn_mask == 0, float(0.0)) - - return attn_mask - - def forward(self, x): - # reshape x[b c h w] to x[b l c] - _, _, H_, W_ = x.shape - - Padding = False - if min(H_, W_) < self.window_size or H_ % self.window_size!=0 or W_ % self.window_size!=0: - Padding = True - # print(f'img_size {min(H_, W_)} is less than (or not divided by) window_size {self.window_size}, Padding.') - pad_r = (self.window_size - W_ % self.window_size) % self.window_size - pad_b = (self.window_size - H_ % self.window_size) % self.window_size - x = F.pad(x, (0, pad_r, 0, pad_b)) - - # print('2', x.shape) - B, C, H, W = x.shape - L = H * W - x = x.permute(0, 2, 3, 1).contiguous().view(B, L, C) # b, L, c - - # create mask from init to forward - if self.shift_size > 0: - attn_mask = self.create_mask(H, W).to(x.device) - else: - attn_mask = None - - shortcut = x - x = x.view(B, H, W, C) - - # cyclic shift - if self.shift_size > 0: - shifted_x = torch.roll(x, shifts=(-self.shift_size, -self.shift_size), dims=(1, 2)) - else: - shifted_x = x - - # partition windows - x_windows = window_partition_v2(shifted_x, self.window_size) # nW*B, window_size, window_size, C - x_windows = x_windows.view(-1, self.window_size * self.window_size, C) # nW*B, window_size*window_size, C - - # W-MSA/SW-MSA - attn_windows = self.attn(x_windows, mask=attn_mask) # nW*B, window_size*window_size, C - - # merge windows - attn_windows = attn_windows.view(-1, self.window_size, self.window_size, C) - shifted_x = window_reverse_v2(attn_windows, self.window_size, H, W) # B H' W' C - - # reverse cyclic shift - if self.shift_size > 0: - x = torch.roll(shifted_x, shifts=(self.shift_size, self.shift_size), dims=(1, 2)) - else: - x = shifted_x - x = x.view(B, H * W, C) - x = shortcut + self.drop_path(self.norm1(x)) - - # FFN - x = x + self.drop_path(self.norm2(self.mlp(x))) - x = x.permute(0, 2, 1).contiguous().view(-1, C, H, W) # b c h w - - if Padding: - x = x[:, :, :H_, :W_] # reverse padding - - return x - - def extra_repr(self) -> str: - return f"dim={self.dim}, input_resolution={self.input_resolution}, num_heads={self.num_heads}, " \ - f"window_size={self.window_size}, shift_size={self.shift_size}, mlp_ratio={self.mlp_ratio}" - - def flops(self): - flops = 0 - H, W = self.input_resolution - # norm1 - flops += self.dim * H * W - # W-MSA/SW-MSA - nW = H * W / self.window_size / self.window_size - flops += nW * self.attn.flops(self.window_size * self.window_size) - # mlp - flops += 2 * H * W * self.dim * self.dim * self.mlp_ratio - # norm2 - flops += self.dim * H * W - return flops - - -class SwinTransformer2Block(nn.Module): - def __init__(self, c1, c2, num_heads, num_layers, window_size=7): - super().__init__() - self.conv = None - if c1 != c2: - self.conv = Conv(c1, c2) - - # remove input_resolution - self.blocks = nn.Sequential(*[SwinTransformerLayer_v2(dim=c2, num_heads=num_heads, window_size=window_size, - shift_size=0 if (i % 2 == 0) else window_size // 2) for i in range(num_layers)]) - - def forward(self, x): - if self.conv is not None: - x = self.conv(x) - x = self.blocks(x) - return x - - -class ST2CSPA(nn.Module): - # CSP Bottleneck https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super(ST2CSPA, self).__init__() - c_ = int(c2 * e) # hidden channels - self.cv1 = Conv(c1, c_, 1, 1) - self.cv2 = Conv(c1, c_, 1, 1) - self.cv3 = Conv(2 * c_, c2, 1, 1) - num_heads = c_ // 32 - self.m = SwinTransformer2Block(c_, c_, num_heads, n) - #self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) - - def forward(self, x): - y1 = self.m(self.cv1(x)) - y2 = self.cv2(x) - return self.cv3(torch.cat((y1, y2), dim=1)) - - -class ST2CSPB(nn.Module): - # CSP Bottleneck https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super(ST2CSPB, self).__init__() - c_ = int(c2) # hidden channels - self.cv1 = Conv(c1, c_, 1, 1) - self.cv2 = Conv(c_, c_, 1, 1) - self.cv3 = Conv(2 * c_, c2, 1, 1) - num_heads = c_ // 32 - self.m = SwinTransformer2Block(c_, c_, num_heads, n) - #self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) - - def forward(self, x): - x1 = self.cv1(x) - y1 = self.m(x1) - y2 = self.cv2(x1) - return self.cv3(torch.cat((y1, y2), dim=1)) - - -class ST2CSPC(nn.Module): - # CSP Bottleneck https://github.com/WongKinYiu/CrossStagePartialNetworks - def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion - super(ST2CSPC, self).__init__() - c_ = int(c2 * e) # hidden channels - self.cv1 = Conv(c1, c_, 1, 1) - self.cv2 = Conv(c1, c_, 1, 1) - self.cv3 = Conv(c_, c_, 1, 1) - self.cv4 = Conv(2 * c_, c2, 1, 1) - num_heads = c_ // 32 - self.m = SwinTransformer2Block(c_, c_, num_heads, n) - #self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) - - def forward(self, x): - y1 = self.cv3(self.m(self.cv1(x))) - y2 = self.cv2(x) - return self.cv4(torch.cat((y1, y2), dim=1)) - -##### end of swin transformer v2 ##### diff --git a/cv/detection/yolov7/pytorch/models/experimental.py b/cv/detection/yolov7/pytorch/models/experimental.py deleted file mode 100644 index 735d7aa0e..000000000 --- a/cv/detection/yolov7/pytorch/models/experimental.py +++ /dev/null @@ -1,272 +0,0 @@ -import numpy as np -import random -import torch -import torch.nn as nn - -from models.common import Conv, DWConv -from utils.google_utils import attempt_download - - -class CrossConv(nn.Module): - # Cross Convolution Downsample - def __init__(self, c1, c2, k=3, s=1, g=1, e=1.0, shortcut=False): - # ch_in, ch_out, kernel, stride, groups, expansion, shortcut - super(CrossConv, self).__init__() - c_ = int(c2 * e) # hidden channels - self.cv1 = Conv(c1, c_, (1, k), (1, s)) - self.cv2 = Conv(c_, c2, (k, 1), (s, 1), g=g) - self.add = shortcut and c1 == c2 - - def forward(self, x): - return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x)) - - -class Sum(nn.Module): - # Weighted sum of 2 or more layers https://arxiv.org/abs/1911.09070 - def __init__(self, n, weight=False): # n: number of inputs - super(Sum, self).__init__() - self.weight = weight # apply weights boolean - self.iter = range(n - 1) # iter object - if weight: - self.w = nn.Parameter(-torch.arange(1., n) / 2, requires_grad=True) # layer weights - - def forward(self, x): - y = x[0] # no weight - if self.weight: - w = torch.sigmoid(self.w) * 2 - for i in self.iter: - y = y + x[i + 1] * w[i] - else: - for i in self.iter: - y = y + x[i + 1] - return y - - -class MixConv2d(nn.Module): - # Mixed Depthwise Conv https://arxiv.org/abs/1907.09595 - def __init__(self, c1, c2, k=(1, 3), s=1, equal_ch=True): - super(MixConv2d, self).__init__() - groups = len(k) - if equal_ch: # equal c_ per group - i = torch.linspace(0, groups - 1E-6, c2).floor() # c2 indices - c_ = [(i == g).sum() for g in range(groups)] # intermediate channels - else: # equal weight.numel() per group - b = [c2] + [0] * groups - a = np.eye(groups + 1, groups, k=-1) - a -= np.roll(a, 1, axis=1) - a *= np.array(k) ** 2 - a[0] = 1 - c_ = np.linalg.lstsq(a, b, rcond=None)[0].round() # solve for equal weight indices, ax = b - - self.m = nn.ModuleList([nn.Conv2d(c1, int(c_[g]), k[g], s, k[g] // 2, bias=False) for g in range(groups)]) - self.bn = nn.BatchNorm2d(c2) - self.act = nn.LeakyReLU(0.1, inplace=True) - - def forward(self, x): - return x + self.act(self.bn(torch.cat([m(x) for m in self.m], 1))) - - -class Ensemble(nn.ModuleList): - # Ensemble of models - def __init__(self): - super(Ensemble, self).__init__() - - def forward(self, x, augment=False): - y = [] - for module in self: - y.append(module(x, augment)[0]) - # y = torch.stack(y).max(0)[0] # max ensemble - # y = torch.stack(y).mean(0) # mean ensemble - y = torch.cat(y, 1) # nms ensemble - return y, None # inference, train output - - - - - -class ORT_NMS(torch.autograd.Function): - '''ONNX-Runtime NMS operation''' - @staticmethod - def forward(ctx, - boxes, - scores, - max_output_boxes_per_class=torch.tensor([100]), - iou_threshold=torch.tensor([0.45]), - score_threshold=torch.tensor([0.25])): - device = boxes.device - batch = scores.shape[0] - num_det = random.randint(0, 100) - batches = torch.randint(0, batch, (num_det,)).sort()[0].to(device) - idxs = torch.arange(100, 100 + num_det).to(device) - zeros = torch.zeros((num_det,), dtype=torch.int64).to(device) - selected_indices = torch.cat([batches[None], zeros[None], idxs[None]], 0).T.contiguous() - selected_indices = selected_indices.to(torch.int64) - return selected_indices - - @staticmethod - def symbolic(g, boxes, scores, max_output_boxes_per_class, iou_threshold, score_threshold): - return g.op("NonMaxSuppression", boxes, scores, max_output_boxes_per_class, iou_threshold, score_threshold) - - -class TRT_NMS(torch.autograd.Function): - '''TensorRT NMS operation''' - @staticmethod - def forward( - ctx, - boxes, - scores, - background_class=-1, - box_coding=1, - iou_threshold=0.45, - max_output_boxes=100, - plugin_version="1", - score_activation=0, - score_threshold=0.25, - ): - batch_size, num_boxes, num_classes = scores.shape - num_det = torch.randint(0, max_output_boxes, (batch_size, 1), dtype=torch.int32) - det_boxes = torch.randn(batch_size, max_output_boxes, 4) - det_scores = torch.randn(batch_size, max_output_boxes) - det_classes = torch.randint(0, num_classes, (batch_size, max_output_boxes), dtype=torch.int32) - return num_det, det_boxes, det_scores, det_classes - - @staticmethod - def symbolic(g, - boxes, - scores, - background_class=-1, - box_coding=1, - iou_threshold=0.45, - max_output_boxes=100, - plugin_version="1", - score_activation=0, - score_threshold=0.25): - out = g.op("TRT::EfficientNMS_TRT", - boxes, - scores, - background_class_i=background_class, - box_coding_i=box_coding, - iou_threshold_f=iou_threshold, - max_output_boxes_i=max_output_boxes, - plugin_version_s=plugin_version, - score_activation_i=score_activation, - score_threshold_f=score_threshold, - outputs=4) - nums, boxes, scores, classes = out - return nums, boxes, scores, classes - - -class ONNX_ORT(nn.Module): - '''onnx module with ONNX-Runtime NMS operation.''' - def __init__(self, max_obj=100, iou_thres=0.45, score_thres=0.25, max_wh=640, device=None, n_classes=80): - super().__init__() - self.device = device if device else torch.device("cpu") - self.max_obj = torch.tensor([max_obj]).to(device) - self.iou_threshold = torch.tensor([iou_thres]).to(device) - self.score_threshold = torch.tensor([score_thres]).to(device) - self.max_wh = max_wh # if max_wh != 0 : non-agnostic else : agnostic - self.convert_matrix = torch.tensor([[1, 0, 1, 0], [0, 1, 0, 1], [-0.5, 0, 0.5, 0], [0, -0.5, 0, 0.5]], - dtype=torch.float32, - device=self.device) - self.n_classes=n_classes - - def forward(self, x): - boxes = x[:, :, :4] - conf = x[:, :, 4:5] - scores = x[:, :, 5:] - if self.n_classes == 1: - scores = conf # for models with one class, cls_loss is 0 and cls_conf is always 0.5, - # so there is no need to multiplicate. - else: - scores *= conf # conf = obj_conf * cls_conf - boxes @= self.convert_matrix - max_score, category_id = scores.max(2, keepdim=True) - dis = category_id.float() * self.max_wh - nmsbox = boxes + dis - max_score_tp = max_score.transpose(1, 2).contiguous() - selected_indices = ORT_NMS.apply(nmsbox, max_score_tp, self.max_obj, self.iou_threshold, self.score_threshold) - X, Y = selected_indices[:, 0], selected_indices[:, 2] - selected_boxes = boxes[X, Y, :] - selected_categories = category_id[X, Y, :].float() - selected_scores = max_score[X, Y, :] - X = X.unsqueeze(1).float() - return torch.cat([X, selected_boxes, selected_categories, selected_scores], 1) - -class ONNX_TRT(nn.Module): - '''onnx module with TensorRT NMS operation.''' - def __init__(self, max_obj=100, iou_thres=0.45, score_thres=0.25, max_wh=None ,device=None, n_classes=80): - super().__init__() - assert max_wh is None - self.device = device if device else torch.device('cpu') - self.background_class = -1, - self.box_coding = 1, - self.iou_threshold = iou_thres - self.max_obj = max_obj - self.plugin_version = '1' - self.score_activation = 0 - self.score_threshold = score_thres - self.n_classes=n_classes - - def forward(self, x): - boxes = x[:, :, :4] - conf = x[:, :, 4:5] - scores = x[:, :, 5:] - if self.n_classes == 1: - scores = conf # for models with one class, cls_loss is 0 and cls_conf is always 0.5, - # so there is no need to multiplicate. - else: - scores *= conf # conf = obj_conf * cls_conf - num_det, det_boxes, det_scores, det_classes = TRT_NMS.apply(boxes, scores, self.background_class, self.box_coding, - self.iou_threshold, self.max_obj, - self.plugin_version, self.score_activation, - self.score_threshold) - return num_det, det_boxes, det_scores, det_classes - - -class End2End(nn.Module): - '''export onnx or tensorrt model with NMS operation.''' - def __init__(self, model, max_obj=100, iou_thres=0.45, score_thres=0.25, max_wh=None, device=None, n_classes=80): - super().__init__() - device = device if device else torch.device('cpu') - assert isinstance(max_wh,(int)) or max_wh is None - self.model = model.to(device) - self.model.model[-1].end2end = True - self.patch_model = ONNX_TRT if max_wh is None else ONNX_ORT - self.end2end = self.patch_model(max_obj, iou_thres, score_thres, max_wh, device, n_classes) - self.end2end.eval() - - def forward(self, x): - x = self.model(x) - x = self.end2end(x) - return x - - - - - -def attempt_load(weights, map_location=None): - # Loads an ensemble of models weights=[a,b,c] or a single model weights=[a] or weights=a - model = Ensemble() - for w in weights if isinstance(weights, list) else [weights]: - attempt_download(w) - ckpt = torch.load(w, map_location=map_location) # load - model.append(ckpt['ema' if ckpt.get('ema') else 'model'].float().fuse().eval()) # FP32 model - - # Compatibility updates - for m in model.modules(): - if type(m) in [nn.Hardswish, nn.LeakyReLU, nn.ReLU, nn.ReLU6, nn.SiLU]: - m.inplace = True # pytorch 1.7.0 compatibility - elif type(m) is nn.Upsample: - m.recompute_scale_factor = None # torch 1.11.0 compatibility - elif type(m) is Conv: - m._non_persistent_buffers_set = set() # pytorch 1.6.0 compatibility - - if len(model) == 1: - return model[-1] # return model - else: - print('Ensemble created with %s\n' % weights) - for k in ['names', 'stride']: - setattr(model, k, getattr(model[-1], k)) - return model # return ensemble - - diff --git a/cv/detection/yolov7/pytorch/models/yolo.py b/cv/detection/yolov7/pytorch/models/yolo.py deleted file mode 100644 index 95a019c6a..000000000 --- a/cv/detection/yolov7/pytorch/models/yolo.py +++ /dev/null @@ -1,843 +0,0 @@ -import argparse -import logging -import sys -from copy import deepcopy - -sys.path.append('./') # to run '$ python *.py' files in subdirectories -logger = logging.getLogger(__name__) -import torch -from models.common import * -from models.experimental import * -from utils.autoanchor import check_anchor_order -from utils.general import make_divisible, check_file, set_logging -from utils.torch_utils import time_synchronized, fuse_conv_and_bn, model_info, scale_img, initialize_weights, \ - select_device, copy_attr -from utils.loss import SigmoidBin - -try: - import thop # for FLOPS computation -except ImportError: - thop = None - - -class Detect(nn.Module): - stride = None # strides computed during build - export = False # onnx export - end2end = False - include_nms = False - concat = False - - def __init__(self, nc=80, anchors=(), ch=()): # detection layer - super(Detect, self).__init__() - self.nc = nc # number of classes - self.no = nc + 5 # number of outputs per anchor - self.nl = len(anchors) # number of detection layers - self.na = len(anchors[0]) // 2 # number of anchors - self.grid = [torch.zeros(1)] * self.nl # init grid - a = torch.tensor(anchors).float().view(self.nl, -1, 2) - self.register_buffer('anchors', a) # shape(nl,na,2) - self.register_buffer('anchor_grid', a.clone().view(self.nl, 1, -1, 1, 1, 2)) # shape(nl,1,na,1,1,2) - self.m = nn.ModuleList(nn.Conv2d(x, self.no * self.na, 1) for x in ch) # output conv - - def forward(self, x): - # x = x.copy() # for profiling - z = [] # inference output - self.training |= self.export - for i in range(self.nl): - x[i] = self.m[i](x[i]) # conv - bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85) - x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous() - - if not self.training: # inference - if self.grid[i].shape[2:4] != x[i].shape[2:4]: - self.grid[i] = self._make_grid(nx, ny).to(x[i].device) - y = x[i].sigmoid() - if not torch.onnx.is_in_onnx_export(): - y[..., 0:2] = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i] # xy - y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i] # wh - else: - xy, wh, conf = y.split((2, 2, self.nc + 1), 4) # y.tensor_split((2, 4, 5), 4) # torch 1.8.0 - xy = xy * (2. * self.stride[i]) + (self.stride[i] * (self.grid[i] - 0.5)) # new xy - wh = wh ** 2 * (4 * self.anchor_grid[i].data) # new wh - y = torch.cat((xy, wh, conf), 4) - z.append(y.view(bs, -1, self.no)) - - if self.training: - out = x - elif self.end2end: - out = torch.cat(z, 1) - elif self.include_nms: - z = self.convert(z) - out = (z, ) - elif self.concat: - out = torch.cat(z, 1) - else: - out = (torch.cat(z, 1), x) - - return out - - @staticmethod - def _make_grid(nx=20, ny=20): - yv, xv = torch.meshgrid([torch.arange(ny), torch.arange(nx)]) - return torch.stack((xv, yv), 2).view((1, 1, ny, nx, 2)).float() - - def convert(self, z): - z = torch.cat(z, 1) - box = z[:, :, :4] - conf = z[:, :, 4:5] - score = z[:, :, 5:] - score *= conf - convert_matrix = torch.tensor([[1, 0, 1, 0], [0, 1, 0, 1], [-0.5, 0, 0.5, 0], [0, -0.5, 0, 0.5]], - dtype=torch.float32, - device=z.device) - box @= convert_matrix - return (box, score) - - -class IDetect(nn.Module): - stride = None # strides computed during build - export = False # onnx export - end2end = False - include_nms = False - concat = False - - def __init__(self, nc=80, anchors=(), ch=()): # detection layer - super(IDetect, self).__init__() - self.nc = nc # number of classes - self.no = nc + 5 # number of outputs per anchor - self.nl = len(anchors) # number of detection layers - self.na = len(anchors[0]) // 2 # number of anchors - self.grid = [torch.zeros(1)] * self.nl # init grid - a = torch.tensor(anchors).float().view(self.nl, -1, 2) - self.register_buffer('anchors', a) # shape(nl,na,2) - self.register_buffer('anchor_grid', a.clone().view(self.nl, 1, -1, 1, 1, 2)) # shape(nl,1,na,1,1,2) - self.m = nn.ModuleList(nn.Conv2d(x, self.no * self.na, 1) for x in ch) # output conv - - self.ia = nn.ModuleList(ImplicitA(x) for x in ch) - self.im = nn.ModuleList(ImplicitM(self.no * self.na) for _ in ch) - - def forward(self, x): - # x = x.copy() # for profiling - z = [] # inference output - self.training |= self.export - for i in range(self.nl): - x[i] = self.m[i](self.ia[i](x[i])) # conv - x[i] = self.im[i](x[i]) - bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85) - x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous() - - if not self.training: # inference - if self.grid[i].shape[2:4] != x[i].shape[2:4]: - self.grid[i] = self._make_grid(nx, ny).to(x[i].device) - - y = x[i].sigmoid() - y[..., 0:2] = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i] # xy - y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i] # wh - z.append(y.view(bs, -1, self.no)) - - return x if self.training else (torch.cat(z, 1), x) - - def fuseforward(self, x): - # x = x.copy() # for profiling - z = [] # inference output - self.training |= self.export - for i in range(self.nl): - x[i] = self.m[i](x[i]) # conv - bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85) - x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous() - - if not self.training: # inference - if self.grid[i].shape[2:4] != x[i].shape[2:4]: - self.grid[i] = self._make_grid(nx, ny).to(x[i].device) - - y = x[i].sigmoid() - if not torch.onnx.is_in_onnx_export(): - y[..., 0:2] = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i] # xy - y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i] # wh - else: - xy, wh, conf = y.split((2, 2, self.nc + 1), 4) # y.tensor_split((2, 4, 5), 4) # torch 1.8.0 - xy = xy * (2. * self.stride[i]) + (self.stride[i] * (self.grid[i] - 0.5)) # new xy - wh = wh ** 2 * (4 * self.anchor_grid[i].data) # new wh - y = torch.cat((xy, wh, conf), 4) - z.append(y.view(bs, -1, self.no)) - - if self.training: - out = x - elif self.end2end: - out = torch.cat(z, 1) - elif self.include_nms: - z = self.convert(z) - out = (z, ) - elif self.concat: - out = torch.cat(z, 1) - else: - out = (torch.cat(z, 1), x) - - return out - - def fuse(self): - print("IDetect.fuse") - # fuse ImplicitA and Convolution - for i in range(len(self.m)): - c1,c2,_,_ = self.m[i].weight.shape - c1_,c2_, _,_ = self.ia[i].implicit.shape - self.m[i].bias += torch.matmul(self.m[i].weight.reshape(c1,c2),self.ia[i].implicit.reshape(c2_,c1_)).squeeze(1) - - # fuse ImplicitM and Convolution - for i in range(len(self.m)): - c1,c2, _,_ = self.im[i].implicit.shape - self.m[i].bias *= self.im[i].implicit.reshape(c2) - self.m[i].weight *= self.im[i].implicit.transpose(0,1) - - @staticmethod - def _make_grid(nx=20, ny=20): - yv, xv = torch.meshgrid([torch.arange(ny), torch.arange(nx)]) - return torch.stack((xv, yv), 2).view((1, 1, ny, nx, 2)).float() - - def convert(self, z): - z = torch.cat(z, 1) - box = z[:, :, :4] - conf = z[:, :, 4:5] - score = z[:, :, 5:] - score *= conf - convert_matrix = torch.tensor([[1, 0, 1, 0], [0, 1, 0, 1], [-0.5, 0, 0.5, 0], [0, -0.5, 0, 0.5]], - dtype=torch.float32, - device=z.device) - box @= convert_matrix - return (box, score) - - -class IKeypoint(nn.Module): - stride = None # strides computed during build - export = False # onnx export - - def __init__(self, nc=80, anchors=(), nkpt=17, ch=(), inplace=True, dw_conv_kpt=False): # detection layer - super(IKeypoint, self).__init__() - self.nc = nc # number of classes - self.nkpt = nkpt - self.dw_conv_kpt = dw_conv_kpt - self.no_det=(nc + 5) # number of outputs per anchor for box and class - self.no_kpt = 3*self.nkpt ## number of outputs per anchor for keypoints - self.no = self.no_det+self.no_kpt - self.nl = len(anchors) # number of detection layers - self.na = len(anchors[0]) // 2 # number of anchors - self.grid = [torch.zeros(1)] * self.nl # init grid - self.flip_test = False - a = torch.tensor(anchors).float().view(self.nl, -1, 2) - self.register_buffer('anchors', a) # shape(nl,na,2) - self.register_buffer('anchor_grid', a.clone().view(self.nl, 1, -1, 1, 1, 2)) # shape(nl,1,na,1,1,2) - self.m = nn.ModuleList(nn.Conv2d(x, self.no_det * self.na, 1) for x in ch) # output conv - - self.ia = nn.ModuleList(ImplicitA(x) for x in ch) - self.im = nn.ModuleList(ImplicitM(self.no_det * self.na) for _ in ch) - - if self.nkpt is not None: - if self.dw_conv_kpt: #keypoint head is slightly more complex - self.m_kpt = nn.ModuleList( - nn.Sequential(DWConv(x, x, k=3), Conv(x,x), - DWConv(x, x, k=3), Conv(x, x), - DWConv(x, x, k=3), Conv(x,x), - DWConv(x, x, k=3), Conv(x, x), - DWConv(x, x, k=3), Conv(x, x), - DWConv(x, x, k=3), nn.Conv2d(x, self.no_kpt * self.na, 1)) for x in ch) - else: #keypoint head is a single convolution - self.m_kpt = nn.ModuleList(nn.Conv2d(x, self.no_kpt * self.na, 1) for x in ch) - - self.inplace = inplace # use in-place ops (e.g. slice assignment) - - def forward(self, x): - # x = x.copy() # for profiling - z = [] # inference output - self.training |= self.export - for i in range(self.nl): - if self.nkpt is None or self.nkpt==0: - x[i] = self.im[i](self.m[i](self.ia[i](x[i]))) # conv - else : - x[i] = torch.cat((self.im[i](self.m[i](self.ia[i](x[i]))), self.m_kpt[i](x[i])), axis=1) - - bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85) - x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous() - x_det = x[i][..., :6] - x_kpt = x[i][..., 6:] - - if not self.training: # inference - if self.grid[i].shape[2:4] != x[i].shape[2:4]: - self.grid[i] = self._make_grid(nx, ny).to(x[i].device) - kpt_grid_x = self.grid[i][..., 0:1] - kpt_grid_y = self.grid[i][..., 1:2] - - if self.nkpt == 0: - y = x[i].sigmoid() - else: - y = x_det.sigmoid() - - if self.inplace: - xy = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i] # xy - wh = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i].view(1, self.na, 1, 1, 2) # wh - if self.nkpt != 0: - x_kpt[..., 0::3] = (x_kpt[..., ::3] * 2. - 0.5 + kpt_grid_x.repeat(1,1,1,1,17)) * self.stride[i] # xy - x_kpt[..., 1::3] = (x_kpt[..., 1::3] * 2. - 0.5 + kpt_grid_y.repeat(1,1,1,1,17)) * self.stride[i] # xy - #x_kpt[..., 0::3] = (x_kpt[..., ::3] + kpt_grid_x.repeat(1,1,1,1,17)) * self.stride[i] # xy - #x_kpt[..., 1::3] = (x_kpt[..., 1::3] + kpt_grid_y.repeat(1,1,1,1,17)) * self.stride[i] # xy - #print('=============') - #print(self.anchor_grid[i].shape) - #print(self.anchor_grid[i][...,0].unsqueeze(4).shape) - #print(x_kpt[..., 0::3].shape) - #x_kpt[..., 0::3] = ((x_kpt[..., 0::3].tanh() * 2.) ** 3 * self.anchor_grid[i][...,0].unsqueeze(4).repeat(1,1,1,1,self.nkpt)) + kpt_grid_x.repeat(1,1,1,1,17) * self.stride[i] # xy - #x_kpt[..., 1::3] = ((x_kpt[..., 1::3].tanh() * 2.) ** 3 * self.anchor_grid[i][...,1].unsqueeze(4).repeat(1,1,1,1,self.nkpt)) + kpt_grid_y.repeat(1,1,1,1,17) * self.stride[i] # xy - #x_kpt[..., 0::3] = (((x_kpt[..., 0::3].sigmoid() * 4.) ** 2 - 8.) * self.anchor_grid[i][...,0].unsqueeze(4).repeat(1,1,1,1,self.nkpt)) + kpt_grid_x.repeat(1,1,1,1,17) * self.stride[i] # xy - #x_kpt[..., 1::3] = (((x_kpt[..., 1::3].sigmoid() * 4.) ** 2 - 8.) * self.anchor_grid[i][...,1].unsqueeze(4).repeat(1,1,1,1,self.nkpt)) + kpt_grid_y.repeat(1,1,1,1,17) * self.stride[i] # xy - x_kpt[..., 2::3] = x_kpt[..., 2::3].sigmoid() - - y = torch.cat((xy, wh, y[..., 4:], x_kpt), dim = -1) - - else: # for YOLOv5 on AWS Inferentia https://github.com/ultralytics/yolov5/pull/2953 - xy = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i] # xy - wh = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i] # wh - if self.nkpt != 0: - y[..., 6:] = (y[..., 6:] * 2. - 0.5 + self.grid[i].repeat((1,1,1,1,self.nkpt))) * self.stride[i] # xy - y = torch.cat((xy, wh, y[..., 4:]), -1) - - z.append(y.view(bs, -1, self.no)) - - return x if self.training else (torch.cat(z, 1), x) - - @staticmethod - def _make_grid(nx=20, ny=20): - yv, xv = torch.meshgrid([torch.arange(ny), torch.arange(nx)]) - return torch.stack((xv, yv), 2).view((1, 1, ny, nx, 2)).float() - - -class IAuxDetect(nn.Module): - stride = None # strides computed during build - export = False # onnx export - end2end = False - include_nms = False - concat = False - - def __init__(self, nc=80, anchors=(), ch=()): # detection layer - super(IAuxDetect, self).__init__() - self.nc = nc # number of classes - self.no = nc + 5 # number of outputs per anchor - self.nl = len(anchors) # number of detection layers - self.na = len(anchors[0]) // 2 # number of anchors - self.grid = [torch.zeros(1)] * self.nl # init grid - a = torch.tensor(anchors).float().view(self.nl, -1, 2) - self.register_buffer('anchors', a) # shape(nl,na,2) - self.register_buffer('anchor_grid', a.clone().view(self.nl, 1, -1, 1, 1, 2)) # shape(nl,1,na,1,1,2) - self.m = nn.ModuleList(nn.Conv2d(x, self.no * self.na, 1) for x in ch[:self.nl]) # output conv - self.m2 = nn.ModuleList(nn.Conv2d(x, self.no * self.na, 1) for x in ch[self.nl:]) # output conv - - self.ia = nn.ModuleList(ImplicitA(x) for x in ch[:self.nl]) - self.im = nn.ModuleList(ImplicitM(self.no * self.na) for _ in ch[:self.nl]) - - def forward(self, x): - # x = x.copy() # for profiling - z = [] # inference output - self.training |= self.export - for i in range(self.nl): - x[i] = self.m[i](self.ia[i](x[i])) # conv - x[i] = self.im[i](x[i]) - bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85) - x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous() - - x[i+self.nl] = self.m2[i](x[i+self.nl]) - x[i+self.nl] = x[i+self.nl].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous() - - if not self.training: # inference - if self.grid[i].shape[2:4] != x[i].shape[2:4]: - self.grid[i] = self._make_grid(nx, ny).to(x[i].device) - - y = x[i].sigmoid() - if not torch.onnx.is_in_onnx_export(): - y[..., 0:2] = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i] # xy - y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i] # wh - else: - xy, wh, conf = y.split((2, 2, self.nc + 1), 4) # y.tensor_split((2, 4, 5), 4) # torch 1.8.0 - xy = xy * (2. * self.stride[i]) + (self.stride[i] * (self.grid[i] - 0.5)) # new xy - wh = wh ** 2 * (4 * self.anchor_grid[i].data) # new wh - y = torch.cat((xy, wh, conf), 4) - z.append(y.view(bs, -1, self.no)) - - return x if self.training else (torch.cat(z, 1), x[:self.nl]) - - def fuseforward(self, x): - # x = x.copy() # for profiling - z = [] # inference output - self.training |= self.export - for i in range(self.nl): - x[i] = self.m[i](x[i]) # conv - bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85) - x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous() - - if not self.training: # inference - if self.grid[i].shape[2:4] != x[i].shape[2:4]: - self.grid[i] = self._make_grid(nx, ny).to(x[i].device) - - y = x[i].sigmoid() - if not torch.onnx.is_in_onnx_export(): - y[..., 0:2] = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i] # xy - y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i] # wh - else: - xy = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i] # xy - wh = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i].data # wh - y = torch.cat((xy, wh, y[..., 4:]), -1) - z.append(y.view(bs, -1, self.no)) - - if self.training: - out = x - elif self.end2end: - out = torch.cat(z, 1) - elif self.include_nms: - z = self.convert(z) - out = (z, ) - elif self.concat: - out = torch.cat(z, 1) - else: - out = (torch.cat(z, 1), x) - - return out - - def fuse(self): - print("IAuxDetect.fuse") - # fuse ImplicitA and Convolution - for i in range(len(self.m)): - c1,c2,_,_ = self.m[i].weight.shape - c1_,c2_, _,_ = self.ia[i].implicit.shape - self.m[i].bias += torch.matmul(self.m[i].weight.reshape(c1,c2),self.ia[i].implicit.reshape(c2_,c1_)).squeeze(1) - - # fuse ImplicitM and Convolution - for i in range(len(self.m)): - c1,c2, _,_ = self.im[i].implicit.shape - self.m[i].bias *= self.im[i].implicit.reshape(c2) - self.m[i].weight *= self.im[i].implicit.transpose(0,1) - - @staticmethod - def _make_grid(nx=20, ny=20): - yv, xv = torch.meshgrid([torch.arange(ny), torch.arange(nx)]) - return torch.stack((xv, yv), 2).view((1, 1, ny, nx, 2)).float() - - def convert(self, z): - z = torch.cat(z, 1) - box = z[:, :, :4] - conf = z[:, :, 4:5] - score = z[:, :, 5:] - score *= conf - convert_matrix = torch.tensor([[1, 0, 1, 0], [0, 1, 0, 1], [-0.5, 0, 0.5, 0], [0, -0.5, 0, 0.5]], - dtype=torch.float32, - device=z.device) - box @= convert_matrix - return (box, score) - - -class IBin(nn.Module): - stride = None # strides computed during build - export = False # onnx export - - def __init__(self, nc=80, anchors=(), ch=(), bin_count=21): # detection layer - super(IBin, self).__init__() - self.nc = nc # number of classes - self.bin_count = bin_count - - self.w_bin_sigmoid = SigmoidBin(bin_count=self.bin_count, min=0.0, max=4.0) - self.h_bin_sigmoid = SigmoidBin(bin_count=self.bin_count, min=0.0, max=4.0) - # classes, x,y,obj - self.no = nc + 3 + \ - self.w_bin_sigmoid.get_length() + self.h_bin_sigmoid.get_length() # w-bce, h-bce - # + self.x_bin_sigmoid.get_length() + self.y_bin_sigmoid.get_length() - - self.nl = len(anchors) # number of detection layers - self.na = len(anchors[0]) // 2 # number of anchors - self.grid = [torch.zeros(1)] * self.nl # init grid - a = torch.tensor(anchors).float().view(self.nl, -1, 2) - self.register_buffer('anchors', a) # shape(nl,na,2) - self.register_buffer('anchor_grid', a.clone().view(self.nl, 1, -1, 1, 1, 2)) # shape(nl,1,na,1,1,2) - self.m = nn.ModuleList(nn.Conv2d(x, self.no * self.na, 1) for x in ch) # output conv - - self.ia = nn.ModuleList(ImplicitA(x) for x in ch) - self.im = nn.ModuleList(ImplicitM(self.no * self.na) for _ in ch) - - def forward(self, x): - - #self.x_bin_sigmoid.use_fw_regression = True - #self.y_bin_sigmoid.use_fw_regression = True - self.w_bin_sigmoid.use_fw_regression = True - self.h_bin_sigmoid.use_fw_regression = True - - # x = x.copy() # for profiling - z = [] # inference output - self.training |= self.export - for i in range(self.nl): - x[i] = self.m[i](self.ia[i](x[i])) # conv - x[i] = self.im[i](x[i]) - bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85) - x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous() - - if not self.training: # inference - if self.grid[i].shape[2:4] != x[i].shape[2:4]: - self.grid[i] = self._make_grid(nx, ny).to(x[i].device) - - y = x[i].sigmoid() - y[..., 0:2] = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i] # xy - #y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i] # wh - - - #px = (self.x_bin_sigmoid.forward(y[..., 0:12]) + self.grid[i][..., 0]) * self.stride[i] - #py = (self.y_bin_sigmoid.forward(y[..., 12:24]) + self.grid[i][..., 1]) * self.stride[i] - - pw = self.w_bin_sigmoid.forward(y[..., 2:24]) * self.anchor_grid[i][..., 0] - ph = self.h_bin_sigmoid.forward(y[..., 24:46]) * self.anchor_grid[i][..., 1] - - #y[..., 0] = px - #y[..., 1] = py - y[..., 2] = pw - y[..., 3] = ph - - y = torch.cat((y[..., 0:4], y[..., 46:]), dim=-1) - - z.append(y.view(bs, -1, y.shape[-1])) - - return x if self.training else (torch.cat(z, 1), x) - - @staticmethod - def _make_grid(nx=20, ny=20): - yv, xv = torch.meshgrid([torch.arange(ny), torch.arange(nx)]) - return torch.stack((xv, yv), 2).view((1, 1, ny, nx, 2)).float() - - -class Model(nn.Module): - def __init__(self, cfg='yolor-csp-c.yaml', ch=3, nc=None, anchors=None): # model, input channels, number of classes - super(Model, self).__init__() - self.traced = False - if isinstance(cfg, dict): - self.yaml = cfg # model dict - else: # is *.yaml - import yaml # for torch hub - self.yaml_file = Path(cfg).name - with open(cfg) as f: - self.yaml = yaml.load(f, Loader=yaml.SafeLoader) # model dict - - # Define model - ch = self.yaml['ch'] = self.yaml.get('ch', ch) # input channels - if nc and nc != self.yaml['nc']: - logger.info(f"Overriding model.yaml nc={self.yaml['nc']} with nc={nc}") - self.yaml['nc'] = nc # override yaml value - if anchors: - logger.info(f'Overriding model.yaml anchors with anchors={anchors}') - self.yaml['anchors'] = round(anchors) # override yaml value - self.model, self.save = parse_model(deepcopy(self.yaml), ch=[ch]) # model, savelist - self.names = [str(i) for i in range(self.yaml['nc'])] # default names - # print([x.shape for x in self.forward(torch.zeros(1, ch, 64, 64))]) - - # Build strides, anchors - m = self.model[-1] # Detect() - if isinstance(m, Detect): - s = 256 # 2x min stride - m.stride = torch.tensor([s / x.shape[-2] for x in self.forward(torch.zeros(1, ch, s, s))]) # forward - check_anchor_order(m) - m.anchors /= m.stride.view(-1, 1, 1) - self.stride = m.stride - self._initialize_biases() # only run once - # print('Strides: %s' % m.stride.tolist()) - if isinstance(m, IDetect): - s = 256 # 2x min stride - m.stride = torch.tensor([s / x.shape[-2] for x in self.forward(torch.zeros(1, ch, s, s))]) # forward - check_anchor_order(m) - m.anchors /= m.stride.view(-1, 1, 1) - self.stride = m.stride - self._initialize_biases() # only run once - # print('Strides: %s' % m.stride.tolist()) - if isinstance(m, IAuxDetect): - s = 256 # 2x min stride - m.stride = torch.tensor([s / x.shape[-2] for x in self.forward(torch.zeros(1, ch, s, s))[:4]]) # forward - #print(m.stride) - check_anchor_order(m) - m.anchors /= m.stride.view(-1, 1, 1) - self.stride = m.stride - self._initialize_aux_biases() # only run once - # print('Strides: %s' % m.stride.tolist()) - if isinstance(m, IBin): - s = 256 # 2x min stride - m.stride = torch.tensor([s / x.shape[-2] for x in self.forward(torch.zeros(1, ch, s, s))]) # forward - check_anchor_order(m) - m.anchors /= m.stride.view(-1, 1, 1) - self.stride = m.stride - self._initialize_biases_bin() # only run once - # print('Strides: %s' % m.stride.tolist()) - if isinstance(m, IKeypoint): - s = 256 # 2x min stride - m.stride = torch.tensor([s / x.shape[-2] for x in self.forward(torch.zeros(1, ch, s, s))]) # forward - check_anchor_order(m) - m.anchors /= m.stride.view(-1, 1, 1) - self.stride = m.stride - self._initialize_biases_kpt() # only run once - # print('Strides: %s' % m.stride.tolist()) - - # Init weights, biases - initialize_weights(self) - self.info() - logger.info('') - - def forward(self, x, augment=False, profile=False): - if augment: - img_size = x.shape[-2:] # height, width - s = [1, 0.83, 0.67] # scales - f = [None, 3, None] # flips (2-ud, 3-lr) - y = [] # outputs - for si, fi in zip(s, f): - xi = scale_img(x.flip(fi) if fi else x, si, gs=int(self.stride.max())) - yi = self.forward_once(xi)[0] # forward - # cv2.imwrite(f'img_{si}.jpg', 255 * xi[0].cpu().numpy().transpose((1, 2, 0))[:, :, ::-1]) # save - yi[..., :4] /= si # de-scale - if fi == 2: - yi[..., 1] = img_size[0] - yi[..., 1] # de-flip ud - elif fi == 3: - yi[..., 0] = img_size[1] - yi[..., 0] # de-flip lr - y.append(yi) - return torch.cat(y, 1), None # augmented inference, train - else: - return self.forward_once(x, profile) # single-scale inference, train - - def forward_once(self, x, profile=False): - y, dt = [], [] # outputs - for m in self.model: - if m.f != -1: # if not from previous layer - x = y[m.f] if isinstance(m.f, int) else [x if j == -1 else y[j] for j in m.f] # from earlier layers - - if not hasattr(self, 'traced'): - self.traced=False - - if self.traced: - if isinstance(m, Detect) or isinstance(m, IDetect) or isinstance(m, IAuxDetect) or isinstance(m, IKeypoint): - break - - if profile: - c = isinstance(m, (Detect, IDetect, IAuxDetect, IBin)) - o = thop.profile(m, inputs=(x.copy() if c else x,), verbose=False)[0] / 1E9 * 2 if thop else 0 # FLOPS - for _ in range(10): - m(x.copy() if c else x) - t = time_synchronized() - for _ in range(10): - m(x.copy() if c else x) - dt.append((time_synchronized() - t) * 100) - print('%10.1f%10.0f%10.1fms %-40s' % (o, m.np, dt[-1], m.type)) - - x = m(x) # run - - y.append(x if m.i in self.save else None) # save output - - if profile: - print('%.1fms total' % sum(dt)) - return x - - def _initialize_biases(self, cf=None): # initialize biases into Detect(), cf is class frequency - # https://arxiv.org/abs/1708.02002 section 3.3 - # cf = torch.bincount(torch.tensor(np.concatenate(dataset.labels, 0)[:, 0]).long(), minlength=nc) + 1. - m = self.model[-1] # Detect() module - for mi, s in zip(m.m, m.stride): # from - b = mi.bias.view(m.na, -1) # conv.bias(255) to (3,85) - b.data[:, 4] += math.log(8 / (640 / s) ** 2) # obj (8 objects per 640 image) - b.data[:, 5:] += math.log(0.6 / (m.nc - 0.99)) if cf is None else torch.log(cf / cf.sum()) # cls - mi.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) - - def _initialize_aux_biases(self, cf=None): # initialize biases into Detect(), cf is class frequency - # https://arxiv.org/abs/1708.02002 section 3.3 - # cf = torch.bincount(torch.tensor(np.concatenate(dataset.labels, 0)[:, 0]).long(), minlength=nc) + 1. - m = self.model[-1] # Detect() module - for mi, mi2, s in zip(m.m, m.m2, m.stride): # from - b = mi.bias.view(m.na, -1) # conv.bias(255) to (3,85) - b.data[:, 4] += math.log(8 / (640 / s) ** 2) # obj (8 objects per 640 image) - b.data[:, 5:] += math.log(0.6 / (m.nc - 0.99)) if cf is None else torch.log(cf / cf.sum()) # cls - mi.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) - b2 = mi2.bias.view(m.na, -1) # conv.bias(255) to (3,85) - b2.data[:, 4] += math.log(8 / (640 / s) ** 2) # obj (8 objects per 640 image) - b2.data[:, 5:] += math.log(0.6 / (m.nc - 0.99)) if cf is None else torch.log(cf / cf.sum()) # cls - mi2.bias = torch.nn.Parameter(b2.view(-1), requires_grad=True) - - def _initialize_biases_bin(self, cf=None): # initialize biases into Detect(), cf is class frequency - # https://arxiv.org/abs/1708.02002 section 3.3 - # cf = torch.bincount(torch.tensor(np.concatenate(dataset.labels, 0)[:, 0]).long(), minlength=nc) + 1. - m = self.model[-1] # Bin() module - bc = m.bin_count - for mi, s in zip(m.m, m.stride): # from - b = mi.bias.view(m.na, -1) # conv.bias(255) to (3,85) - old = b[:, (0,1,2,bc+3)].data - obj_idx = 2*bc+4 - b[:, :obj_idx].data += math.log(0.6 / (bc + 1 - 0.99)) - b[:, obj_idx].data += math.log(8 / (640 / s) ** 2) # obj (8 objects per 640 image) - b[:, (obj_idx+1):].data += math.log(0.6 / (m.nc - 0.99)) if cf is None else torch.log(cf / cf.sum()) # cls - b[:, (0,1,2,bc+3)].data = old - mi.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) - - def _initialize_biases_kpt(self, cf=None): # initialize biases into Detect(), cf is class frequency - # https://arxiv.org/abs/1708.02002 section 3.3 - # cf = torch.bincount(torch.tensor(np.concatenate(dataset.labels, 0)[:, 0]).long(), minlength=nc) + 1. - m = self.model[-1] # Detect() module - for mi, s in zip(m.m, m.stride): # from - b = mi.bias.view(m.na, -1) # conv.bias(255) to (3,85) - b.data[:, 4] += math.log(8 / (640 / s) ** 2) # obj (8 objects per 640 image) - b.data[:, 5:] += math.log(0.6 / (m.nc - 0.99)) if cf is None else torch.log(cf / cf.sum()) # cls - mi.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) - - def _print_biases(self): - m = self.model[-1] # Detect() module - for mi in m.m: # from - b = mi.bias.detach().view(m.na, -1).T # conv.bias(255) to (3,85) - print(('%6g Conv2d.bias:' + '%10.3g' * 6) % (mi.weight.shape[1], *b[:5].mean(1).tolist(), b[5:].mean())) - - # def _print_weights(self): - # for m in self.model.modules(): - # if type(m) is Bottleneck: - # print('%10.3g' % (m.w.detach().sigmoid() * 2)) # shortcut weights - - def fuse(self): # fuse model Conv2d() + BatchNorm2d() layers - print('Fusing layers... ') - for m in self.model.modules(): - if isinstance(m, RepConv): - #print(f" fuse_repvgg_block") - m.fuse_repvgg_block() - elif isinstance(m, RepConv_OREPA): - #print(f" switch_to_deploy") - m.switch_to_deploy() - elif type(m) is Conv and hasattr(m, 'bn'): - m.conv = fuse_conv_and_bn(m.conv, m.bn) # update conv - delattr(m, 'bn') # remove batchnorm - m.forward = m.fuseforward # update forward - elif isinstance(m, (IDetect, IAuxDetect)): - m.fuse() - m.forward = m.fuseforward - self.info() - return self - - def nms(self, mode=True): # add or remove NMS module - present = type(self.model[-1]) is NMS # last layer is NMS - if mode and not present: - print('Adding NMS... ') - m = NMS() # module - m.f = -1 # from - m.i = self.model[-1].i + 1 # index - self.model.add_module(name='%s' % m.i, module=m) # add - self.eval() - elif not mode and present: - print('Removing NMS... ') - self.model = self.model[:-1] # remove - return self - - def autoshape(self): # add autoShape module - print('Adding autoShape... ') - m = autoShape(self) # wrap model - copy_attr(m, self, include=('yaml', 'nc', 'hyp', 'names', 'stride'), exclude=()) # copy attributes - return m - - def info(self, verbose=False, img_size=640): # print model information - model_info(self, verbose, img_size) - - -def parse_model(d, ch): # model_dict, input_channels(3) - logger.info('\n%3s%18s%3s%10s %-40s%-30s' % ('', 'from', 'n', 'params', 'module', 'arguments')) - anchors, nc, gd, gw = d['anchors'], d['nc'], d['depth_multiple'], d['width_multiple'] - na = (len(anchors[0]) // 2) if isinstance(anchors, list) else anchors # number of anchors - no = na * (nc + 5) # number of outputs = anchors * (classes + 5) - - layers, save, c2 = [], [], ch[-1] # layers, savelist, ch out - for i, (f, n, m, args) in enumerate(d['backbone'] + d['head']): # from, number, module, args - m = eval(m) if isinstance(m, str) else m # eval strings - for j, a in enumerate(args): - try: - args[j] = eval(a) if isinstance(a, str) else a # eval strings - except: - pass - - n = max(round(n * gd), 1) if n > 1 else n # depth gain - if m in [nn.Conv2d, Conv, RobustConv, RobustConv2, DWConv, GhostConv, RepConv, RepConv_OREPA, DownC, - SPP, SPPF, SPPCSPC, GhostSPPCSPC, MixConv2d, Focus, Stem, GhostStem, CrossConv, - Bottleneck, BottleneckCSPA, BottleneckCSPB, BottleneckCSPC, - RepBottleneck, RepBottleneckCSPA, RepBottleneckCSPB, RepBottleneckCSPC, - Res, ResCSPA, ResCSPB, ResCSPC, - RepRes, RepResCSPA, RepResCSPB, RepResCSPC, - ResX, ResXCSPA, ResXCSPB, ResXCSPC, - RepResX, RepResXCSPA, RepResXCSPB, RepResXCSPC, - Ghost, GhostCSPA, GhostCSPB, GhostCSPC, - SwinTransformerBlock, STCSPA, STCSPB, STCSPC, - SwinTransformer2Block, ST2CSPA, ST2CSPB, ST2CSPC]: - c1, c2 = ch[f], args[0] - if c2 != no: # if not output - c2 = make_divisible(c2 * gw, 8) - - args = [c1, c2, *args[1:]] - if m in [DownC, SPPCSPC, GhostSPPCSPC, - BottleneckCSPA, BottleneckCSPB, BottleneckCSPC, - RepBottleneckCSPA, RepBottleneckCSPB, RepBottleneckCSPC, - ResCSPA, ResCSPB, ResCSPC, - RepResCSPA, RepResCSPB, RepResCSPC, - ResXCSPA, ResXCSPB, ResXCSPC, - RepResXCSPA, RepResXCSPB, RepResXCSPC, - GhostCSPA, GhostCSPB, GhostCSPC, - STCSPA, STCSPB, STCSPC, - ST2CSPA, ST2CSPB, ST2CSPC]: - args.insert(2, n) # number of repeats - n = 1 - elif m is nn.BatchNorm2d: - args = [ch[f]] - elif m is Concat: - c2 = sum([ch[x] for x in f]) - elif m is Chuncat: - c2 = sum([ch[x] for x in f]) - elif m is Shortcut: - c2 = ch[f[0]] - elif m is Foldcut: - c2 = ch[f] // 2 - elif m in [Detect, IDetect, IAuxDetect, IBin, IKeypoint]: - args.append([ch[x] for x in f]) - if isinstance(args[1], int): # number of anchors - args[1] = [list(range(args[1] * 2))] * len(f) - elif m is ReOrg: - c2 = ch[f] * 4 - elif m is Contract: - c2 = ch[f] * args[0] ** 2 - elif m is Expand: - c2 = ch[f] // args[0] ** 2 - else: - c2 = ch[f] - - m_ = nn.Sequential(*[m(*args) for _ in range(n)]) if n > 1 else m(*args) # module - t = str(m)[8:-2].replace('__main__.', '') # module type - np = sum([x.numel() for x in m_.parameters()]) # number params - m_.i, m_.f, m_.type, m_.np = i, f, t, np # attach index, 'from' index, type, number params - logger.info('%3s%18s%3s%10.0f %-40s%-30s' % (i, f, n, np, t, args)) # print - save.extend(x % i for x in ([f] if isinstance(f, int) else f) if x != -1) # append to savelist - layers.append(m_) - if i == 0: - ch = [] - ch.append(c2) - return nn.Sequential(*layers), sorted(save) - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--cfg', type=str, default='yolor-csp-c.yaml', help='model.yaml') - parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu') - parser.add_argument('--profile', action='store_true', help='profile model speed') - opt = parser.parse_args() - opt.cfg = check_file(opt.cfg) # check file - set_logging() - device = select_device(opt.device) - - # Create model - model = Model(opt.cfg).to(device) - model.train() - - if opt.profile: - img = torch.rand(1, 3, 640, 640).to(device) - y = model(img, profile=True) - - # Profile - # img = torch.rand(8 if torch.cuda.is_available() else 1, 3, 640, 640).to(device) - # y = model(img, profile=True) - - # Tensorboard - # from torch.utils.tensorboard import SummaryWriter - # tb_writer = SummaryWriter() - # print("Run 'tensorboard --logdir=models/runs' to view tensorboard at http://localhost:6006/") - # tb_writer.add_graph(model.model, img) # add model to tensorboard - # tb_writer.add_image('test', img[0], dataformats='CWH') # add model to tensorboard diff --git a/cv/detection/yolov7/pytorch/requirements.txt b/cv/detection/yolov7/pytorch/requirements.txt deleted file mode 100644 index f4d218218..000000000 --- a/cv/detection/yolov7/pytorch/requirements.txt +++ /dev/null @@ -1,39 +0,0 @@ -# Usage: pip install -r requirements.txt - -# Base ---------------------------------------- -matplotlib>=3.2.2 -numpy>=1.18.5,<1.24.0 -opencv-python>=4.1.1 -Pillow>=7.1.2 -PyYAML>=5.3.1 -requests>=2.23.0 -scipy>=1.4.1 -torch>=1.7.0,!=1.12.0 -torchvision>=0.8.1,!=0.13.0 -tqdm>=4.41.0 -protobuf<4.21.3 - -# Logging ------------------------------------- -tensorboard>=2.4.1 -# wandb - -# Plotting ------------------------------------ -pandas>=1.1.4 -seaborn>=0.11.0 - -# Export -------------------------------------- -# coremltools>=4.1 # CoreML export -# onnx>=1.9.0 # ONNX export -# onnx-simplifier>=0.3.6 # ONNX simplifier -# scikit-learn==0.19.2 # CoreML quantization -# tensorflow>=2.4.1 # TFLite export -# tensorflowjs>=3.9.0 # TF.js export -# openvino-dev # OpenVINO export - -# Extras -------------------------------------- -ipython # interactive notebook -psutil # system utilization -thop # FLOPs computation -# albumentations>=1.0.3 -# pycocotools>=2.0 # COCO mAP -# roboflow diff --git a/cv/detection/yolov7/pytorch/test.py b/cv/detection/yolov7/pytorch/test.py deleted file mode 100644 index 17b48060b..000000000 --- a/cv/detection/yolov7/pytorch/test.py +++ /dev/null @@ -1,353 +0,0 @@ -import argparse -import json -import os -from pathlib import Path -from threading import Thread - -import numpy as np -import torch -import yaml -from tqdm import tqdm - -from models.experimental import attempt_load -from utils.datasets import create_dataloader -from utils.general import coco80_to_coco91_class, check_dataset, check_file, check_img_size, check_requirements, \ - box_iou, non_max_suppression, scale_coords, xyxy2xywh, xywh2xyxy, set_logging, increment_path, colorstr -from utils.metrics import ap_per_class, ConfusionMatrix -from utils.plots import plot_images, output_to_target, plot_study_txt -from utils.torch_utils import select_device, time_synchronized, TracedModel - - -def test(data, - weights=None, - batch_size=32, - imgsz=640, - conf_thres=0.001, - iou_thres=0.6, # for NMS - save_json=False, - single_cls=False, - augment=False, - verbose=False, - model=None, - dataloader=None, - save_dir=Path(''), # for saving images - save_txt=False, # for auto-labelling - save_hybrid=False, # for hybrid auto-labelling - save_conf=False, # save auto-label confidences - plots=True, - wandb_logger=None, - compute_loss=None, - half_precision=True, - trace=False, - is_coco=False, - v5_metric=False): - # Initialize/load model and set device - training = model is not None - if training: # called by train.py - device = next(model.parameters()).device # get model device - - else: # called directly - set_logging() - device = select_device(opt.device, batch_size=batch_size) - - # Directories - save_dir = Path(increment_path(Path(opt.project) / opt.name, exist_ok=opt.exist_ok)) # increment run - (save_dir / 'labels' if save_txt else save_dir).mkdir(parents=True, exist_ok=True) # make dir - - # Load model - model = attempt_load(weights, map_location=device) # load FP32 model - gs = max(int(model.stride.max()), 32) # grid size (max stride) - imgsz = check_img_size(imgsz, s=gs) # check img_size - - if trace: - model = TracedModel(model, device, imgsz) - - # Half - half = device.type != 'cpu' and half_precision # half precision only supported on CUDA - if half: - model.half() - - # Configure - model.eval() - if isinstance(data, str): - is_coco = data.endswith('coco.yaml') - with open(data) as f: - data = yaml.load(f, Loader=yaml.SafeLoader) - check_dataset(data) # check - nc = 1 if single_cls else int(data['nc']) # number of classes - iouv = torch.linspace(0.5, 0.95, 10).to(device) # iou vector for mAP@0.5:0.95 - niou = iouv.numel() - - # Logging - log_imgs = 0 - if wandb_logger and wandb_logger.wandb: - log_imgs = min(wandb_logger.log_imgs, 100) - # Dataloader - if not training: - if device.type != 'cpu': - model(torch.zeros(1, 3, imgsz, imgsz).to(device).type_as(next(model.parameters()))) # run once - task = opt.task if opt.task in ('train', 'val', 'test') else 'val' # path to train/val/test images - dataloader = create_dataloader(data[task], imgsz, batch_size, gs, opt, pad=0.5, rect=True, - prefix=colorstr(f'{task}: '))[0] - - if v5_metric: - print("Testing with YOLOv5 AP metric...") - - seen = 0 - confusion_matrix = ConfusionMatrix(nc=nc) - names = {k: v for k, v in enumerate(model.names if hasattr(model, 'names') else model.module.names)} - coco91class = coco80_to_coco91_class() - s = ('%20s' + '%12s' * 6) % ('Class', 'Images', 'Labels', 'P', 'R', 'mAP@.5', 'mAP@.5:.95') - p, r, f1, mp, mr, map50, map, t0, t1 = 0., 0., 0., 0., 0., 0., 0., 0., 0. - loss = torch.zeros(3, device=device) - jdict, stats, ap, ap_class, wandb_images = [], [], [], [], [] - for batch_i, (img, targets, paths, shapes) in enumerate(tqdm(dataloader, desc=s)): - img = img.to(device, non_blocking=True) - img = img.half() if half else img.float() # uint8 to fp16/32 - img /= 255.0 # 0 - 255 to 0.0 - 1.0 - targets = targets.to(device) - nb, _, height, width = img.shape # batch size, channels, height, width - - with torch.no_grad(): - # Run model - t = time_synchronized() - out, train_out = model(img, augment=augment) # inference and training outputs - t0 += time_synchronized() - t - - # Compute loss - if compute_loss: - loss += compute_loss([x.float() for x in train_out], targets)[1][:3] # box, obj, cls - - # Run NMS - targets[:, 2:] *= torch.Tensor([width, height, width, height]).to(device) # to pixels - lb = [targets[targets[:, 0] == i, 1:] for i in range(nb)] if save_hybrid else [] # for autolabelling - t = time_synchronized() - out = non_max_suppression(out, conf_thres=conf_thres, iou_thres=iou_thres, labels=lb, multi_label=True) - t1 += time_synchronized() - t - - # Statistics per image - for si, pred in enumerate(out): - labels = targets[targets[:, 0] == si, 1:] - nl = len(labels) - tcls = labels[:, 0].tolist() if nl else [] # target class - path = Path(paths[si]) - seen += 1 - - if len(pred) == 0: - if nl: - stats.append((torch.zeros(0, niou, dtype=torch.bool), torch.Tensor(), torch.Tensor(), tcls)) - continue - - # Predictions - predn = pred.clone() - scale_coords(img[si].shape[1:], predn[:, :4], shapes[si][0], shapes[si][1]) # native-space pred - - # Append to text file - if save_txt: - gn = torch.tensor(shapes[si][0])[[1, 0, 1, 0]] # normalization gain whwh - for *xyxy, conf, cls in predn.tolist(): - xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4)) / gn).view(-1).tolist() # normalized xywh - line = (cls, *xywh, conf) if save_conf else (cls, *xywh) # label format - with open(save_dir / 'labels' / (path.stem + '.txt'), 'a') as f: - f.write(('%g ' * len(line)).rstrip() % line + '\n') - - # W&B logging - Media Panel Plots - if len(wandb_images) < log_imgs and wandb_logger.current_epoch > 0: # Check for test operation - if wandb_logger.current_epoch % wandb_logger.bbox_interval == 0: - box_data = [{"position": {"minX": xyxy[0], "minY": xyxy[1], "maxX": xyxy[2], "maxY": xyxy[3]}, - "class_id": int(cls), - "box_caption": "%s %.3f" % (names[cls], conf), - "scores": {"class_score": conf}, - "domain": "pixel"} for *xyxy, conf, cls in pred.tolist()] - boxes = {"predictions": {"box_data": box_data, "class_labels": names}} # inference-space - wandb_images.append(wandb_logger.wandb.Image(img[si], boxes=boxes, caption=path.name)) - wandb_logger.log_training_progress(predn, path, names) if wandb_logger and wandb_logger.wandb_run else None - - # Append to pycocotools JSON dictionary - if save_json: - # [{"image_id": 42, "category_id": 18, "bbox": [258.15, 41.29, 348.26, 243.78], "score": 0.236}, ... - image_id = int(path.stem) if path.stem.isnumeric() else path.stem - box = xyxy2xywh(predn[:, :4]) # xywh - box[:, :2] -= box[:, 2:] / 2 # xy center to top-left corner - for p, b in zip(pred.tolist(), box.tolist()): - jdict.append({'image_id': image_id, - 'category_id': coco91class[int(p[5])] if is_coco else int(p[5]), - 'bbox': [round(x, 3) for x in b], - 'score': round(p[4], 5)}) - - # Assign all predictions as incorrect - correct = torch.zeros(pred.shape[0], niou, dtype=torch.bool, device=device) - if nl: - detected = [] # target indices - tcls_tensor = labels[:, 0] - - # target boxes - tbox = xywh2xyxy(labels[:, 1:5]) - scale_coords(img[si].shape[1:], tbox, shapes[si][0], shapes[si][1]) # native-space labels - if plots: - confusion_matrix.process_batch(predn, torch.cat((labels[:, 0:1], tbox), 1)) - - # Per target class - for cls in torch.unique(tcls_tensor): - ti = (cls == tcls_tensor).nonzero(as_tuple=False).view(-1) # prediction indices - pi = (cls == pred[:, 5]).nonzero(as_tuple=False).view(-1) # target indices - - # Search for detections - if pi.shape[0]: - # Prediction to target ious - ious, i = box_iou(predn[pi, :4], tbox[ti]).max(1) # best ious, indices - - # Append detections - detected_set = set() - for j in (ious > iouv[0]).nonzero(as_tuple=False): - d = ti[i[j]] # detected target - if d.item() not in detected_set: - detected_set.add(d.item()) - detected.append(d) - correct[pi[j]] = ious[j] > iouv # iou_thres is 1xn - if len(detected) == nl: # all targets already located in image - break - - # Append statistics (correct, conf, pcls, tcls) - stats.append((correct.cpu(), pred[:, 4].cpu(), pred[:, 5].cpu(), tcls)) - - # Plot images - if plots and batch_i < 3: - f = save_dir / f'test_batch{batch_i}_labels.jpg' # labels - Thread(target=plot_images, args=(img, targets, paths, f, names), daemon=True).start() - f = save_dir / f'test_batch{batch_i}_pred.jpg' # predictions - Thread(target=plot_images, args=(img, output_to_target(out), paths, f, names), daemon=True).start() - - # Compute statistics - stats = [np.concatenate(x, 0) for x in zip(*stats)] # to numpy - if len(stats) and stats[0].any(): - p, r, ap, f1, ap_class = ap_per_class(*stats, plot=plots, v5_metric=v5_metric, save_dir=save_dir, names=names) - ap50, ap = ap[:, 0], ap.mean(1) # AP@0.5, AP@0.5:0.95 - mp, mr, map50, map = p.mean(), r.mean(), ap50.mean(), ap.mean() - nt = np.bincount(stats[3].astype(np.int64), minlength=nc) # number of targets per class - else: - nt = torch.zeros(1) - - # Print results - pf = '%20s' + '%12i' * 2 + '%12.3g' * 4 # print format - print(pf % ('all', seen, nt.sum(), mp, mr, map50, map)) - - # Print results per class - if (verbose or (nc < 50 and not training)) and nc > 1 and len(stats): - for i, c in enumerate(ap_class): - print(pf % (names[c], seen, nt[c], p[i], r[i], ap50[i], ap[i])) - - # Print speeds - t = tuple(x / seen * 1E3 for x in (t0, t1, t0 + t1)) + (imgsz, imgsz, batch_size) # tuple - if not training: - print('Speed: %.1f/%.1f/%.1f ms inference/NMS/total per %gx%g image at batch-size %g' % t) - - # Plots - if plots: - confusion_matrix.plot(save_dir=save_dir, names=list(names.values())) - if wandb_logger and wandb_logger.wandb: - val_batches = [wandb_logger.wandb.Image(str(f), caption=f.name) for f in sorted(save_dir.glob('test*.jpg'))] - wandb_logger.log({"Validation": val_batches}) - if wandb_images: - wandb_logger.log({"Bounding Box Debugger/Images": wandb_images}) - - # Save JSON - if save_json and len(jdict): - w = Path(weights[0] if isinstance(weights, list) else weights).stem if weights is not None else '' # weights - anno_json = './coco/annotations/instances_val2017.json' # annotations json - pred_json = str(save_dir / f"{w}_predictions.json") # predictions json - print('\nEvaluating pycocotools mAP... saving %s...' % pred_json) - with open(pred_json, 'w') as f: - json.dump(jdict, f) - - try: # https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoEvalDemo.ipynb - from pycocotools.coco import COCO - from pycocotools.cocoeval import COCOeval - - anno = COCO(anno_json) # init annotations api - pred = anno.loadRes(pred_json) # init predictions api - eval = COCOeval(anno, pred, 'bbox') - if is_coco: - eval.params.imgIds = [int(Path(x).stem) for x in dataloader.dataset.img_files] # image IDs to evaluate - eval.evaluate() - eval.accumulate() - eval.summarize() - map, map50 = eval.stats[:2] # update results (mAP@0.5:0.95, mAP@0.5) - except Exception as e: - print(f'pycocotools unable to run: {e}') - - # Return results - model.float() # for training - if not training: - s = f"\n{len(list(save_dir.glob('labels/*.txt')))} labels saved to {save_dir / 'labels'}" if save_txt else '' - print(f"Results saved to {save_dir}{s}") - maps = np.zeros(nc) + map - for i, c in enumerate(ap_class): - maps[c] = ap[i] - return (mp, mr, map50, map, *(loss.cpu() / len(dataloader)).tolist()), maps, t - - -if __name__ == '__main__': - parser = argparse.ArgumentParser(prog='test.py') - parser.add_argument('--weights', nargs='+', type=str, default='yolov7.pt', help='model.pt path(s)') - parser.add_argument('--data', type=str, default='data/coco.yaml', help='*.data path') - parser.add_argument('--batch-size', type=int, default=32, help='size of each image batch') - parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)') - parser.add_argument('--conf-thres', type=float, default=0.001, help='object confidence threshold') - parser.add_argument('--iou-thres', type=float, default=0.65, help='IOU threshold for NMS') - parser.add_argument('--task', default='val', help='train, val, test, speed or study') - parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu') - parser.add_argument('--single-cls', action='store_true', help='treat as single-class dataset') - parser.add_argument('--augment', action='store_true', help='augmented inference') - parser.add_argument('--verbose', action='store_true', help='report mAP by class') - parser.add_argument('--save-txt', action='store_true', help='save results to *.txt') - parser.add_argument('--save-hybrid', action='store_true', help='save label+prediction hybrid results to *.txt') - parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels') - parser.add_argument('--save-json', action='store_true', help='save a cocoapi-compatible JSON results file') - parser.add_argument('--project', default='runs/test', help='save to project/name') - parser.add_argument('--name', default='exp', help='save to project/name') - parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment') - parser.add_argument('--no-trace', action='store_true', help='don`t trace model') - parser.add_argument('--v5-metric', action='store_true', help='assume maximum recall as 1.0 in AP calculation') - opt = parser.parse_args() - opt.save_json |= opt.data.endswith('coco.yaml') - opt.data = check_file(opt.data) # check file - print(opt) - #check_requirements() - - if opt.task in ('train', 'val', 'test'): # run normally - test(opt.data, - opt.weights, - opt.batch_size, - opt.img_size, - opt.conf_thres, - opt.iou_thres, - opt.save_json, - opt.single_cls, - opt.augment, - opt.verbose, - save_txt=opt.save_txt | opt.save_hybrid, - save_hybrid=opt.save_hybrid, - save_conf=opt.save_conf, - trace=not opt.no_trace, - v5_metric=opt.v5_metric - ) - - elif opt.task == 'speed': # speed benchmarks - for w in opt.weights: - test(opt.data, w, opt.batch_size, opt.img_size, 0.25, 0.45, save_json=False, plots=False, v5_metric=opt.v5_metric) - - elif opt.task == 'study': # run over a range of settings and save/plot - # python test.py --task study --data coco.yaml --iou 0.65 --weights yolov7.pt - x = list(range(256, 1536 + 128, 128)) # x axis (image sizes) - for w in opt.weights: - f = f'study_{Path(opt.data).stem}_{Path(w).stem}.txt' # filename to save to - y = [] # y axis - for i in x: # img-size - print(f'\nRunning {f} point {i}...') - r, _, t = test(opt.data, w, opt.batch_size, i, opt.conf_thres, opt.iou_thres, opt.save_json, - plots=False, v5_metric=opt.v5_metric) - y.append(r + t) # results and times - np.savetxt(f, y, fmt='%10.4g') # save - os.system('zip -r study.zip study_*.txt') - plot_study_txt(x=x) # plot diff --git a/cv/detection/yolov7/pytorch/train.py b/cv/detection/yolov7/pytorch/train.py deleted file mode 100644 index f1dfd4d91..000000000 --- a/cv/detection/yolov7/pytorch/train.py +++ /dev/null @@ -1,708 +0,0 @@ -# Copyright (c) 2024, Shanghai Iluvatar CoreX Semiconductor Co., Ltd. -# All Rights Reserved. - -import argparse -import logging -import math -import os -import random -import time -from copy import deepcopy -from pathlib import Path -from threading import Thread - -import numpy as np -import torch.distributed as dist -import torch.nn as nn -import torch.nn.functional as F -import torch.optim as optim -import torch.optim.lr_scheduler as lr_scheduler -import torch.utils.data -import yaml -from torch.cuda import amp -from torch.nn.parallel import DistributedDataParallel as DDP -from torch.utils.tensorboard import SummaryWriter -from tqdm import tqdm - -import test # import test.py to get mAP after each epoch -from models.experimental import attempt_load -from models.yolo import Model -from utils.autoanchor import check_anchors -from utils.datasets import create_dataloader -from utils.general import labels_to_class_weights, increment_path, labels_to_image_weights, init_seeds, \ - fitness, strip_optimizer, get_latest_run, check_dataset, check_file, check_git_status, check_img_size, \ - check_requirements, print_mutation, set_logging, one_cycle, colorstr -from utils.google_utils import attempt_download -from utils.loss import ComputeLoss, ComputeLossOTA -from utils.plots import plot_images, plot_labels, plot_results, plot_evolution -from utils.torch_utils import ModelEMA, select_device, intersect_dicts, torch_distributed_zero_first, is_parallel -from utils.wandb_logging.wandb_utils import WandbLogger, check_wandb_resume - -logger = logging.getLogger(__name__) - - -def train(hyp, opt, device, tb_writer=None): - logger.info(colorstr('hyperparameters: ') + ', '.join(f'{k}={v}' for k, v in hyp.items())) - save_dir, epochs, batch_size, total_batch_size, weights, rank, freeze = \ - Path(opt.save_dir), opt.epochs, opt.batch_size, opt.total_batch_size, opt.weights, opt.global_rank, opt.freeze - - # Directories - wdir = save_dir / 'weights' - wdir.mkdir(parents=True, exist_ok=True) # make dir - last = wdir / 'last.pt' - best = wdir / 'best.pt' - results_file = save_dir / 'results.txt' - - # Save run settings - with open(save_dir / 'hyp.yaml', 'w') as f: - yaml.dump(hyp, f, sort_keys=False) - with open(save_dir / 'opt.yaml', 'w') as f: - yaml.dump(vars(opt), f, sort_keys=False) - - # Configure - plots = not opt.evolve # create plots - cuda = device.type != 'cpu' - init_seeds(2 + rank) - with open(opt.data) as f: - data_dict = yaml.load(f, Loader=yaml.SafeLoader) # data dict - is_coco = opt.data.endswith('coco.yaml') - - # Logging- Doing this before checking the dataset. Might update data_dict - loggers = {'wandb': None} # loggers dict - if rank in [-1, 0]: - opt.hyp = hyp # add hyperparameters - run_id = torch.load(weights, map_location=device).get('wandb_id') if weights.endswith('.pt') and os.path.isfile(weights) else None - wandb_logger = WandbLogger(opt, Path(opt.save_dir).stem, run_id, data_dict) - loggers['wandb'] = wandb_logger.wandb - data_dict = wandb_logger.data_dict - if wandb_logger.wandb: - weights, epochs, hyp = opt.weights, opt.epochs, opt.hyp # WandbLogger might update weights, epochs if resuming - - nc = 1 if opt.single_cls else int(data_dict['nc']) # number of classes - names = ['item'] if opt.single_cls and len(data_dict['names']) != 1 else data_dict['names'] # class names - assert len(names) == nc, '%g names found for nc=%g dataset in %s' % (len(names), nc, opt.data) # check - - # Model - pretrained = weights.endswith('.pt') - if pretrained: - with torch_distributed_zero_first(rank): - attempt_download(weights) # download if not found locally - ckpt = torch.load(weights, map_location=device) # load checkpoint - model = Model(opt.cfg or ckpt['model'].yaml, ch=3, nc=nc, anchors=hyp.get('anchors')).to(device) # create - exclude = ['anchor'] if (opt.cfg or hyp.get('anchors')) and not opt.resume else [] # exclude keys - state_dict = ckpt['model'].float().state_dict() # to FP32 - state_dict = intersect_dicts(state_dict, model.state_dict(), exclude=exclude) # intersect - model.load_state_dict(state_dict, strict=False) # load - logger.info('Transferred %g/%g items from %s' % (len(state_dict), len(model.state_dict()), weights)) # report - else: - model = Model(opt.cfg, ch=3, nc=nc, anchors=hyp.get('anchors')).to(device) # create - with torch_distributed_zero_first(rank): - check_dataset(data_dict) # check - train_path = data_dict['train'] - test_path = data_dict['val'] - - # Freeze - freeze = [f'model.{x}.' for x in (freeze if len(freeze) > 1 else range(freeze[0]))] # parameter names to freeze (full or partial) - for k, v in model.named_parameters(): - v.requires_grad = True # train all layers - if any(x in k for x in freeze): - print('freezing %s' % k) - v.requires_grad = False - - # Optimizer - nbs = 64 # nominal batch size - accumulate = max(round(nbs / total_batch_size), 1) # accumulate loss before optimizing - hyp['weight_decay'] *= total_batch_size * accumulate / nbs # scale weight_decay - logger.info(f"Scaled weight_decay = {hyp['weight_decay']}") - - pg0, pg1, pg2 = [], [], [] # optimizer parameter groups - for k, v in model.named_modules(): - if hasattr(v, 'bias') and isinstance(v.bias, nn.Parameter): - pg2.append(v.bias) # biases - if isinstance(v, nn.BatchNorm2d): - pg0.append(v.weight) # no decay - elif hasattr(v, 'weight') and isinstance(v.weight, nn.Parameter): - pg1.append(v.weight) # apply decay - if hasattr(v, 'im'): - if hasattr(v.im, 'implicit'): - pg0.append(v.im.implicit) - else: - for iv in v.im: - pg0.append(iv.implicit) - if hasattr(v, 'imc'): - if hasattr(v.imc, 'implicit'): - pg0.append(v.imc.implicit) - else: - for iv in v.imc: - pg0.append(iv.implicit) - if hasattr(v, 'imb'): - if hasattr(v.imb, 'implicit'): - pg0.append(v.imb.implicit) - else: - for iv in v.imb: - pg0.append(iv.implicit) - if hasattr(v, 'imo'): - if hasattr(v.imo, 'implicit'): - pg0.append(v.imo.implicit) - else: - for iv in v.imo: - pg0.append(iv.implicit) - if hasattr(v, 'ia'): - if hasattr(v.ia, 'implicit'): - pg0.append(v.ia.implicit) - else: - for iv in v.ia: - pg0.append(iv.implicit) - if hasattr(v, 'attn'): - if hasattr(v.attn, 'logit_scale'): - pg0.append(v.attn.logit_scale) - if hasattr(v.attn, 'q_bias'): - pg0.append(v.attn.q_bias) - if hasattr(v.attn, 'v_bias'): - pg0.append(v.attn.v_bias) - if hasattr(v.attn, 'relative_position_bias_table'): - pg0.append(v.attn.relative_position_bias_table) - if hasattr(v, 'rbr_dense'): - if hasattr(v.rbr_dense, 'weight_rbr_origin'): - pg0.append(v.rbr_dense.weight_rbr_origin) - if hasattr(v.rbr_dense, 'weight_rbr_avg_conv'): - pg0.append(v.rbr_dense.weight_rbr_avg_conv) - if hasattr(v.rbr_dense, 'weight_rbr_pfir_conv'): - pg0.append(v.rbr_dense.weight_rbr_pfir_conv) - if hasattr(v.rbr_dense, 'weight_rbr_1x1_kxk_idconv1'): - pg0.append(v.rbr_dense.weight_rbr_1x1_kxk_idconv1) - if hasattr(v.rbr_dense, 'weight_rbr_1x1_kxk_conv2'): - pg0.append(v.rbr_dense.weight_rbr_1x1_kxk_conv2) - if hasattr(v.rbr_dense, 'weight_rbr_gconv_dw'): - pg0.append(v.rbr_dense.weight_rbr_gconv_dw) - if hasattr(v.rbr_dense, 'weight_rbr_gconv_pw'): - pg0.append(v.rbr_dense.weight_rbr_gconv_pw) - if hasattr(v.rbr_dense, 'vector'): - pg0.append(v.rbr_dense.vector) - - if opt.adam: - optimizer = optim.Adam(pg0, lr=hyp['lr0'], betas=(hyp['momentum'], 0.999)) # adjust beta1 to momentum - else: - optimizer = optim.SGD(pg0, lr=hyp['lr0'], momentum=hyp['momentum'], nesterov=True) - - optimizer.add_param_group({'params': pg1, 'weight_decay': hyp['weight_decay']}) # add pg1 with weight_decay - optimizer.add_param_group({'params': pg2}) # add pg2 (biases) - logger.info('Optimizer groups: %g .bias, %g conv.weight, %g other' % (len(pg2), len(pg1), len(pg0))) - del pg0, pg1, pg2 - - # Scheduler https://arxiv.org/pdf/1812.01187.pdf - # https://pytorch.org/docs/stable/_modules/torch/optim/lr_scheduler.html#OneCycleLR - if opt.linear_lr: - lf = lambda x: (1 - x / (epochs - 1)) * (1.0 - hyp['lrf']) + hyp['lrf'] # linear - else: - lf = one_cycle(1, hyp['lrf'], epochs) # cosine 1->hyp['lrf'] - scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf) - # plot_lr_scheduler(optimizer, scheduler, epochs) - - # EMA - ema = ModelEMA(model) if rank in [-1, 0] else None - - # Resume - start_epoch, best_fitness = 0, 0.0 - if pretrained: - # Optimizer - if ckpt['optimizer'] is not None: - optimizer.load_state_dict(ckpt['optimizer']) - best_fitness = ckpt['best_fitness'] - - # EMA - if ema and ckpt.get('ema'): - ema.ema.load_state_dict(ckpt['ema'].float().state_dict()) - ema.updates = ckpt['updates'] - - # Results - if ckpt.get('training_results') is not None: - results_file.write_text(ckpt['training_results']) # write results.txt - - # Epochs - start_epoch = ckpt['epoch'] + 1 - if opt.resume: - assert start_epoch > 0, '%s training to %g epochs is finished, nothing to resume.' % (weights, epochs) - if epochs < start_epoch: - logger.info('%s has been trained for %g epochs. Fine-tuning for %g additional epochs.' % - (weights, ckpt['epoch'], epochs)) - epochs += ckpt['epoch'] # finetune additional epochs - - del ckpt, state_dict - - # Image sizes - gs = max(int(model.stride.max()), 32) # grid size (max stride) - nl = model.model[-1].nl # number of detection layers (used for scaling hyp['obj']) - imgsz, imgsz_test = [check_img_size(x, gs) for x in opt.img_size] # verify imgsz are gs-multiples - - # DP mode - if cuda and rank == -1 and torch.cuda.device_count() > 1: - model = torch.nn.DataParallel(model) - - # SyncBatchNorm - if opt.sync_bn and cuda and rank != -1: - model = torch.nn.SyncBatchNorm.convert_sync_batchnorm(model).to(device) - logger.info('Using SyncBatchNorm()') - - # Trainloader - dataloader, dataset = create_dataloader(train_path, imgsz, batch_size, gs, opt, - hyp=hyp, augment=True, cache=opt.cache_images, rect=opt.rect, rank=rank, - world_size=opt.world_size, workers=opt.workers, - image_weights=opt.image_weights, quad=opt.quad, prefix=colorstr('train: ')) - mlc = np.concatenate(dataset.labels, 0)[:, 0].max() # max label class - nb = len(dataloader) # number of batches - assert mlc < nc, 'Label class %g exceeds nc=%g in %s. Possible class labels are 0-%g' % (mlc, nc, opt.data, nc - 1) - - # Process 0 - if rank in [-1, 0]: - testloader = create_dataloader(test_path, imgsz_test, batch_size * 2, gs, opt, # testloader - hyp=hyp, cache=opt.cache_images and not opt.notest, rect=True, rank=-1, - world_size=opt.world_size, workers=opt.workers, - pad=0.5, prefix=colorstr('val: '))[0] - - if not opt.resume: - labels = np.concatenate(dataset.labels, 0) - c = torch.tensor(labels[:, 0]) # classes - # cf = torch.bincount(c.long(), minlength=nc) + 1. # frequency - # model._initialize_biases(cf.to(device)) - if plots: - #plot_labels(labels, names, save_dir, loggers) - if tb_writer: - tb_writer.add_histogram('classes', c, 0) - - # Anchors - if not opt.noautoanchor: - check_anchors(dataset, model=model, thr=hyp['anchor_t'], imgsz=imgsz) - model.half().float() # pre-reduce anchor precision - - # DDP mode - if cuda and rank != -1: - model = DDP(model, device_ids=[opt.local_rank], output_device=opt.local_rank, - # nn.MultiheadAttention incompatibility with DDP https://github.com/pytorch/pytorch/issues/26698 - find_unused_parameters=any(isinstance(layer, nn.MultiheadAttention) for layer in model.modules())) - - # Model parameters - hyp['box'] *= 3. / nl # scale to layers - hyp['cls'] *= nc / 80. * 3. / nl # scale to classes and layers - hyp['obj'] *= (imgsz / 640) ** 2 * 3. / nl # scale to image size and layers - hyp['label_smoothing'] = opt.label_smoothing - model.nc = nc # attach number of classes to model - model.hyp = hyp # attach hyperparameters to model - model.gr = 1.0 # iou loss ratio (obj_loss = 1.0 or iou) - model.class_weights = labels_to_class_weights(dataset.labels, nc).to(device) * nc # attach class weights - model.names = names - - # Start training - t0 = time.time() - nw = max(round(hyp['warmup_epochs'] * nb), 1000) # number of warmup iterations, max(3 epochs, 1k iterations) - # nw = min(nw, (epochs - start_epoch) / 2 * nb) # limit warmup to < 1/2 of training - maps = np.zeros(nc) # mAP per class - results = (0, 0, 0, 0, 0, 0, 0) # P, R, mAP@.5, mAP@.5-.95, val_loss(box, obj, cls) - scheduler.last_epoch = start_epoch - 1 # do not move - scaler = amp.GradScaler(enabled=cuda) - compute_loss_ota = ComputeLossOTA(model) # init loss class - compute_loss = ComputeLoss(model) # init loss class - logger.info(f'Image sizes {imgsz} train, {imgsz_test} test\n' - f'Using {dataloader.num_workers} dataloader workers\n' - f'Logging results to {save_dir}\n' - f'Starting training for {epochs} epochs...') - torch.save(model, wdir / 'init.pt') - for epoch in range(start_epoch, epochs): # epoch ------------------------------------------------------------------ - model.train() - - # Update image weights (optional) - if opt.image_weights: - # Generate indices - if rank in [-1, 0]: - cw = model.class_weights.cpu().numpy() * (1 - maps) ** 2 / nc # class weights - iw = labels_to_image_weights(dataset.labels, nc=nc, class_weights=cw) # image weights - dataset.indices = random.choices(range(dataset.n), weights=iw, k=dataset.n) # rand weighted idx - # Broadcast if DDP - if rank != -1: - indices = (torch.tensor(dataset.indices) if rank == 0 else torch.zeros(dataset.n)).int() - dist.broadcast(indices, 0) - if rank != 0: - dataset.indices = indices.cpu().numpy() - - # Update mosaic border - # b = int(random.uniform(0.25 * imgsz, 0.75 * imgsz + gs) // gs * gs) - # dataset.mosaic_border = [b - imgsz, -b] # height, width borders - - mloss = torch.zeros(4, device=device) # mean losses - if rank != -1: - dataloader.sampler.set_epoch(epoch) - pbar = enumerate(dataloader) - logger.info(('\n' + '%10s' * 8) % ('Epoch', 'gpu_mem', 'box', 'obj', 'cls', 'total', 'labels', 'img_size')) - if rank in [-1, 0]: - pbar = tqdm(pbar, total=nb) # progress bar - optimizer.zero_grad() - for i, (imgs, targets, paths, _) in pbar: # batch ------------------------------------------------------------- - ni = i + nb * epoch # number integrated batches (since train start) - imgs = imgs.to(device, non_blocking=True).float() / 255.0 # uint8 to float32, 0-255 to 0.0-1.0 - - # Warmup - if ni <= nw: - xi = [0, nw] # x interp - # model.gr = np.interp(ni, xi, [0.0, 1.0]) # iou loss ratio (obj_loss = 1.0 or iou) - accumulate = max(1, np.interp(ni, xi, [1, nbs / total_batch_size]).round()) - for j, x in enumerate(optimizer.param_groups): - # bias lr falls from 0.1 to lr0, all other lrs rise from 0.0 to lr0 - x['lr'] = np.interp(ni, xi, [hyp['warmup_bias_lr'] if j == 2 else 0.0, x['initial_lr'] * lf(epoch)]) - if 'momentum' in x: - x['momentum'] = np.interp(ni, xi, [hyp['warmup_momentum'], hyp['momentum']]) - - # Multi-scale - if opt.multi_scale: - sz = random.randrange(imgsz * 0.5, imgsz * 1.5 + gs) // gs * gs # size - sf = sz / max(imgs.shape[2:]) # scale factor - if sf != 1: - ns = [math.ceil(x * sf / gs) * gs for x in imgs.shape[2:]] # new shape (stretched to gs-multiple) - imgs = F.interpolate(imgs, size=ns, mode='bilinear', align_corners=False) - - # Forward - with amp.autocast(enabled=cuda): - pred = model(imgs) # forward - if 'loss_ota' not in hyp or hyp['loss_ota'] == 1: - loss, loss_items = compute_loss_ota(pred, targets.to(device), imgs) # loss scaled by batch_size - else: - loss, loss_items = compute_loss(pred, targets.to(device)) # loss scaled by batch_size - if rank != -1: - loss *= opt.world_size # gradient averaged between devices in DDP mode - if opt.quad: - loss *= 4. - - # Backward - scaler.scale(loss).backward() - - # Optimize - if ni % accumulate == 0: - scaler.step(optimizer) # optimizer.step - scaler.update() - optimizer.zero_grad() - if ema: - ema.update(model) - - # Print - if rank in [-1, 0]: - mloss = (mloss * i + loss_items) / (i + 1) # update mean losses - mem = '%.3gG' % (torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0) # (GB) - s = ('%10s' * 2 + '%10.4g' * 6) % ( - '%g/%g' % (epoch, epochs - 1), mem, *mloss, targets.shape[0], imgs.shape[-1]) - pbar.set_description(s) - - # Plot - if plots and ni < 10: - f = save_dir / f'train_batch{ni}.jpg' # filename - Thread(target=plot_images, args=(imgs, targets, paths, f), daemon=True).start() - # if tb_writer: - # tb_writer.add_image(f, result, dataformats='HWC', global_step=epoch) - # tb_writer.add_graph(torch.jit.trace(model, imgs, strict=False), []) # add model graph - elif plots and ni == 10 and wandb_logger.wandb: - wandb_logger.log({"Mosaics": [wandb_logger.wandb.Image(str(x), caption=x.name) for x in - save_dir.glob('train*.jpg') if x.exists()]}) - - # end batch ------------------------------------------------------------------------------------------------ - # end epoch ---------------------------------------------------------------------------------------------------- - - # Scheduler - lr = [x['lr'] for x in optimizer.param_groups] # for tensorboard - scheduler.step() - - # DDP process 0 or single-GPU - if rank in [-1, 0]: - # mAP - ema.update_attr(model, include=['yaml', 'nc', 'hyp', 'gr', 'names', 'stride', 'class_weights']) - final_epoch = epoch + 1 == epochs - if not opt.notest or final_epoch: # Calculate mAP - wandb_logger.current_epoch = epoch + 1 - results, maps, times = test.test(data_dict, - batch_size=batch_size * 2, - imgsz=imgsz_test, - model=ema.ema, - single_cls=opt.single_cls, - dataloader=testloader, - save_dir=save_dir, - verbose=nc < 50 and final_epoch, - plots=plots and final_epoch, - wandb_logger=wandb_logger, - compute_loss=compute_loss, - is_coco=is_coco, - v5_metric=opt.v5_metric) - - # Write - with open(results_file, 'a') as f: - f.write(s + '%10.4g' * 7 % results + '\n') # append metrics, val_loss - if len(opt.name) and opt.bucket: - os.system('gsutil cp %s gs://%s/results/results%s.txt' % (results_file, opt.bucket, opt.name)) - - # Log - tags = ['train/box_loss', 'train/obj_loss', 'train/cls_loss', # train loss - 'metrics/precision', 'metrics/recall', 'metrics/mAP_0.5', 'metrics/mAP_0.5:0.95', - 'val/box_loss', 'val/obj_loss', 'val/cls_loss', # val loss - 'x/lr0', 'x/lr1', 'x/lr2'] # params - for x, tag in zip(list(mloss[:-1]) + list(results) + lr, tags): - if tb_writer: - tb_writer.add_scalar(tag, x, epoch) # tensorboard - if wandb_logger.wandb: - wandb_logger.log({tag: x}) # W&B - - # Update best mAP - fi = fitness(np.array(results).reshape(1, -1)) # weighted combination of [P, R, mAP@.5, mAP@.5-.95] - if fi > best_fitness: - best_fitness = fi - wandb_logger.end_epoch(best_result=best_fitness == fi) - - # Save model - if (not opt.nosave) or (final_epoch and not opt.evolve): # if save - ckpt = {'epoch': epoch, - 'best_fitness': best_fitness, - 'training_results': results_file.read_text(), - 'model': deepcopy(model.module if is_parallel(model) else model).half(), - 'ema': deepcopy(ema.ema).half(), - 'updates': ema.updates, - 'optimizer': optimizer.state_dict(), - 'wandb_id': wandb_logger.wandb_run.id if wandb_logger.wandb else None} - - # Save last, best and delete - torch.save(ckpt, last) - if best_fitness == fi: - torch.save(ckpt, best) - if (best_fitness == fi) and (epoch >= 200): - torch.save(ckpt, wdir / 'best_{:03d}.pt'.format(epoch)) - if epoch == 0: - torch.save(ckpt, wdir / 'epoch_{:03d}.pt'.format(epoch)) - elif ((epoch+1) % 25) == 0: - torch.save(ckpt, wdir / 'epoch_{:03d}.pt'.format(epoch)) - elif epoch >= (epochs-5): - torch.save(ckpt, wdir / 'epoch_{:03d}.pt'.format(epoch)) - if wandb_logger.wandb: - if ((epoch + 1) % opt.save_period == 0 and not final_epoch) and opt.save_period != -1: - wandb_logger.log_model( - last.parent, opt, epoch, fi, best_model=best_fitness == fi) - del ckpt - - # end epoch ---------------------------------------------------------------------------------------------------- - # end training - if rank in [-1, 0]: - # Plots - if plots: - plot_results(save_dir=save_dir) # save as results.png - if wandb_logger.wandb: - files = ['results.png', 'confusion_matrix.png', *[f'{x}_curve.png' for x in ('F1', 'PR', 'P', 'R')]] - wandb_logger.log({"Results": [wandb_logger.wandb.Image(str(save_dir / f), caption=f) for f in files - if (save_dir / f).exists()]}) - # Test best.pt - logger.info('%g epochs completed in %.3f hours.\n' % (epoch - start_epoch + 1, (time.time() - t0) / 3600)) - if opt.data.endswith('coco.yaml') and nc == 80: # if COCO - for m in (last, best) if best.exists() else (last): # speed, mAP tests - results, _, _ = test.test(opt.data, - batch_size=batch_size * 2, - imgsz=imgsz_test, - conf_thres=0.001, - iou_thres=0.7, - model=attempt_load(m, device).half(), - single_cls=opt.single_cls, - dataloader=testloader, - save_dir=save_dir, - save_json=True, - plots=False, - is_coco=is_coco, - v5_metric=opt.v5_metric) - - # Strip optimizers - final = best if best.exists() else last # final model - for f in last, best: - if f.exists(): - strip_optimizer(f) # strip optimizers - if opt.bucket: - os.system(f'gsutil cp {final} gs://{opt.bucket}/weights') # upload - if wandb_logger.wandb and not opt.evolve: # Log the stripped model - wandb_logger.wandb.log_artifact(str(final), type='model', - name='run_' + wandb_logger.wandb_run.id + '_model', - aliases=['last', 'best', 'stripped']) - wandb_logger.finish_run() - else: - dist.destroy_process_group() - torch.cuda.empty_cache() - return results - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--weights', type=str, default='yolo7.pt', help='initial weights path') - parser.add_argument('--cfg', type=str, default='', help='model.yaml path') - parser.add_argument('--data', type=str, default='data/coco.yaml', help='data.yaml path') - parser.add_argument('--hyp', type=str, default='data/hyp.scratch.p5.yaml', help='hyperparameters path') - parser.add_argument('--epochs', type=int, default=300) - parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs') - parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes') - parser.add_argument('--rect', action='store_true', help='rectangular training') - parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training') - parser.add_argument('--nosave', action='store_true', help='only save final checkpoint') - parser.add_argument('--notest', action='store_true', help='only test final epoch') - parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check') - parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters') - parser.add_argument('--bucket', type=str, default='', help='gsutil bucket') - parser.add_argument('--cache-images', action='store_true', help='cache images for faster training') - parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training') - parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu') - parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%') - parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class') - parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer') - parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode') - parser.add_argument('--local_rank', '--local-rank', type=int, default=-1, help='DDP parameter, do not modify') - parser.add_argument('--workers', type=int, default=8, help='maximum number of dataloader workers') - parser.add_argument('--project', default='runs/train', help='save to project/name') - parser.add_argument('--entity', default=None, help='W&B entity') - parser.add_argument('--name', default='exp', help='save to project/name') - parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment') - parser.add_argument('--quad', action='store_true', help='quad dataloader') - parser.add_argument('--linear-lr', action='store_true', help='linear LR') - parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon') - parser.add_argument('--upload_dataset', action='store_true', help='Upload dataset as W&B artifact table') - parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval for W&B') - parser.add_argument('--save_period', type=int, default=-1, help='Log model after every "save_period" epoch') - parser.add_argument('--artifact_alias', type=str, default="latest", help='version of dataset artifact to be used') - parser.add_argument('--freeze', nargs='+', type=int, default=[0], help='Freeze layers: backbone of yolov7=50, first3=0 1 2') - parser.add_argument('--v5-metric', action='store_true', help='assume maximum recall as 1.0 in AP calculation') - opt = parser.parse_args() - - # Set DDP variables - opt.world_size = int(os.environ['WORLD_SIZE']) if 'WORLD_SIZE' in os.environ else 1 - opt.global_rank = int(os.environ['RANK']) if 'RANK' in os.environ else -1 - set_logging(opt.global_rank) - #if opt.global_rank in [-1, 0]: - # check_git_status() - # check_requirements() - - # Resume - wandb_run = check_wandb_resume(opt) - if opt.resume and not wandb_run: # resume an interrupted run - ckpt = opt.resume if isinstance(opt.resume, str) else get_latest_run() # specified or most recent path - assert os.path.isfile(ckpt), 'ERROR: --resume checkpoint does not exist' - apriori = opt.global_rank, opt.local_rank - with open(Path(ckpt).parent.parent / 'opt.yaml') as f: - opt = argparse.Namespace(**yaml.load(f, Loader=yaml.SafeLoader)) # replace - opt.cfg, opt.weights, opt.resume, opt.batch_size, opt.global_rank, opt.local_rank = '', ckpt, True, opt.total_batch_size, *apriori # reinstate - logger.info('Resuming training from %s' % ckpt) - else: - # opt.hyp = opt.hyp or ('hyp.finetune.yaml' if opt.weights else 'hyp.scratch.yaml') - opt.data, opt.cfg, opt.hyp = check_file(opt.data), check_file(opt.cfg), check_file(opt.hyp) # check files - assert len(opt.cfg) or len(opt.weights), 'either --cfg or --weights must be specified' - opt.img_size.extend([opt.img_size[-1]] * (2 - len(opt.img_size))) # extend to 2 sizes (train, test) - opt.name = 'evolve' if opt.evolve else opt.name - opt.save_dir = increment_path(Path(opt.project) / opt.name, exist_ok=opt.exist_ok | opt.evolve) # increment run - - # DDP mode - opt.total_batch_size = opt.batch_size - device = select_device(opt.device, batch_size=opt.batch_size) - if opt.local_rank != -1: - assert torch.cuda.device_count() > opt.local_rank - torch.cuda.set_device(opt.local_rank) - device = torch.device('cuda', opt.local_rank) - dist.init_process_group(backend='nccl', init_method='env://') # distributed backend - assert opt.batch_size % opt.world_size == 0, '--batch-size must be multiple of CUDA device count' - opt.batch_size = opt.total_batch_size // opt.world_size - - # Hyperparameters - with open(opt.hyp) as f: - hyp = yaml.load(f, Loader=yaml.SafeLoader) # load hyps - - # Train - logger.info(opt) - if not opt.evolve: - tb_writer = None # init loggers - if opt.global_rank in [-1, 0]: - prefix = colorstr('tensorboard: ') - logger.info(f"{prefix}Start with 'tensorboard --logdir {opt.project}', view at http://localhost:6006/") - tb_writer = SummaryWriter(opt.save_dir) # Tensorboard - train(hyp, opt, device, tb_writer) - - # Evolve hyperparameters (optional) - else: - # Hyperparameter evolution metadata (mutation scale 0-1, lower_limit, upper_limit) - meta = {'lr0': (1, 1e-5, 1e-1), # initial learning rate (SGD=1E-2, Adam=1E-3) - 'lrf': (1, 0.01, 1.0), # final OneCycleLR learning rate (lr0 * lrf) - 'momentum': (0.3, 0.6, 0.98), # SGD momentum/Adam beta1 - 'weight_decay': (1, 0.0, 0.001), # optimizer weight decay - 'warmup_epochs': (1, 0.0, 5.0), # warmup epochs (fractions ok) - 'warmup_momentum': (1, 0.0, 0.95), # warmup initial momentum - 'warmup_bias_lr': (1, 0.0, 0.2), # warmup initial bias lr - 'box': (1, 0.02, 0.2), # box loss gain - 'cls': (1, 0.2, 4.0), # cls loss gain - 'cls_pw': (1, 0.5, 2.0), # cls BCELoss positive_weight - 'obj': (1, 0.2, 4.0), # obj loss gain (scale with pixels) - 'obj_pw': (1, 0.5, 2.0), # obj BCELoss positive_weight - 'iou_t': (0, 0.1, 0.7), # IoU training threshold - 'anchor_t': (1, 2.0, 8.0), # anchor-multiple threshold - 'anchors': (2, 2.0, 10.0), # anchors per output grid (0 to ignore) - 'fl_gamma': (0, 0.0, 2.0), # focal loss gamma (efficientDet default gamma=1.5) - 'hsv_h': (1, 0.0, 0.1), # image HSV-Hue augmentation (fraction) - 'hsv_s': (1, 0.0, 0.9), # image HSV-Saturation augmentation (fraction) - 'hsv_v': (1, 0.0, 0.9), # image HSV-Value augmentation (fraction) - 'degrees': (1, 0.0, 45.0), # image rotation (+/- deg) - 'translate': (1, 0.0, 0.9), # image translation (+/- fraction) - 'scale': (1, 0.0, 0.9), # image scale (+/- gain) - 'shear': (1, 0.0, 10.0), # image shear (+/- deg) - 'perspective': (0, 0.0, 0.001), # image perspective (+/- fraction), range 0-0.001 - 'flipud': (1, 0.0, 1.0), # image flip up-down (probability) - 'fliplr': (0, 0.0, 1.0), # image flip left-right (probability) - 'mosaic': (1, 0.0, 1.0), # image mixup (probability) - 'mixup': (1, 0.0, 1.0), # image mixup (probability) - 'copy_paste': (1, 0.0, 1.0), # segment copy-paste (probability) - 'paste_in': (1, 0.0, 1.0)} # segment copy-paste (probability) - - with open(opt.hyp, errors='ignore') as f: - hyp = yaml.safe_load(f) # load hyps dict - if 'anchors' not in hyp: # anchors commented in hyp.yaml - hyp['anchors'] = 3 - - assert opt.local_rank == -1, 'DDP mode not implemented for --evolve' - opt.notest, opt.nosave = True, True # only test/save final epoch - # ei = [isinstance(x, (int, float)) for x in hyp.values()] # evolvable indices - yaml_file = Path(opt.save_dir) / 'hyp_evolved.yaml' # save best result here - if opt.bucket: - os.system('gsutil cp gs://%s/evolve.txt .' % opt.bucket) # download evolve.txt if exists - - for _ in range(300): # generations to evolve - if Path('evolve.txt').exists(): # if evolve.txt exists: select best hyps and mutate - # Select parent(s) - parent = 'single' # parent selection method: 'single' or 'weighted' - x = np.loadtxt('evolve.txt', ndmin=2) - n = min(5, len(x)) # number of previous results to consider - x = x[np.argsort(-fitness(x))][:n] # top n mutations - w = fitness(x) - fitness(x).min() # weights - if parent == 'single' or len(x) == 1: - # x = x[random.randint(0, n - 1)] # random selection - x = x[random.choices(range(n), weights=w)[0]] # weighted selection - elif parent == 'weighted': - x = (x * w.reshape(n, 1)).sum(0) / w.sum() # weighted combination - - # Mutate - mp, s = 0.8, 0.2 # mutation probability, sigma - npr = np.random - npr.seed(int(time.time())) - g = np.array([x[0] for x in meta.values()]) # gains 0-1 - ng = len(meta) - v = np.ones(ng) - while all(v == 1): # mutate until a change occurs (prevent duplicates) - v = (g * (npr.random(ng) < mp) * npr.randn(ng) * npr.random() * s + 1).clip(0.3, 3.0) - for i, k in enumerate(hyp.keys()): # plt.hist(v.ravel(), 300) - hyp[k] = float(x[i + 7] * v[i]) # mutate - - # Constrain to limits - for k, v in meta.items(): - hyp[k] = max(hyp[k], v[1]) # lower limit - hyp[k] = min(hyp[k], v[2]) # upper limit - hyp[k] = round(hyp[k], 5) # significant digits - - # Train mutation - results = train(hyp.copy(), opt, device) - - # Write mutation results - print_mutation(hyp.copy(), results, yaml_file, opt.bucket) - - # Plot results - plot_evolution(yaml_file) - print(f'Hyperparameter evolution complete. Best results saved as: {yaml_file}\n' - f'Command to train a new model with these hyperparameters: $ python train.py --hyp {yaml_file}') diff --git a/cv/detection/yolov7/pytorch/train_aux.py b/cv/detection/yolov7/pytorch/train_aux.py deleted file mode 100644 index 0e8053f85..000000000 --- a/cv/detection/yolov7/pytorch/train_aux.py +++ /dev/null @@ -1,699 +0,0 @@ -import argparse -import logging -import math -import os -import random -import time -from copy import deepcopy -from pathlib import Path -from threading import Thread - -import numpy as np -import torch.distributed as dist -import torch.nn as nn -import torch.nn.functional as F -import torch.optim as optim -import torch.optim.lr_scheduler as lr_scheduler -import torch.utils.data -import yaml -from torch.cuda import amp -from torch.nn.parallel import DistributedDataParallel as DDP -from torch.utils.tensorboard import SummaryWriter -from tqdm import tqdm - -import test # import test.py to get mAP after each epoch -from models.experimental import attempt_load -from models.yolo import Model -from utils.autoanchor import check_anchors -from utils.datasets import create_dataloader -from utils.general import labels_to_class_weights, increment_path, labels_to_image_weights, init_seeds, \ - fitness, strip_optimizer, get_latest_run, check_dataset, check_file, check_git_status, check_img_size, \ - check_requirements, print_mutation, set_logging, one_cycle, colorstr -from utils.google_utils import attempt_download -from utils.loss import ComputeLoss, ComputeLossAuxOTA -from utils.plots import plot_images, plot_labels, plot_results, plot_evolution -from utils.torch_utils import ModelEMA, select_device, intersect_dicts, torch_distributed_zero_first, is_parallel -from utils.wandb_logging.wandb_utils import WandbLogger, check_wandb_resume - -logger = logging.getLogger(__name__) - - -def train(hyp, opt, device, tb_writer=None): - logger.info(colorstr('hyperparameters: ') + ', '.join(f'{k}={v}' for k, v in hyp.items())) - save_dir, epochs, batch_size, total_batch_size, weights, rank = \ - Path(opt.save_dir), opt.epochs, opt.batch_size, opt.total_batch_size, opt.weights, opt.global_rank - - # Directories - wdir = save_dir / 'weights' - wdir.mkdir(parents=True, exist_ok=True) # make dir - last = wdir / 'last.pt' - best = wdir / 'best.pt' - results_file = save_dir / 'results.txt' - - # Save run settings - with open(save_dir / 'hyp.yaml', 'w') as f: - yaml.dump(hyp, f, sort_keys=False) - with open(save_dir / 'opt.yaml', 'w') as f: - yaml.dump(vars(opt), f, sort_keys=False) - - # Configure - plots = not opt.evolve # create plots - cuda = device.type != 'cpu' - init_seeds(2 + rank) - with open(opt.data) as f: - data_dict = yaml.load(f, Loader=yaml.SafeLoader) # data dict - is_coco = opt.data.endswith('coco.yaml') - - # Logging- Doing this before checking the dataset. Might update data_dict - loggers = {'wandb': None} # loggers dict - if rank in [-1, 0]: - opt.hyp = hyp # add hyperparameters - run_id = torch.load(weights).get('wandb_id') if weights.endswith('.pt') and os.path.isfile(weights) else None - wandb_logger = WandbLogger(opt, Path(opt.save_dir).stem, run_id, data_dict) - loggers['wandb'] = wandb_logger.wandb - data_dict = wandb_logger.data_dict - if wandb_logger.wandb: - weights, epochs, hyp = opt.weights, opt.epochs, opt.hyp # WandbLogger might update weights, epochs if resuming - - nc = 1 if opt.single_cls else int(data_dict['nc']) # number of classes - names = ['item'] if opt.single_cls and len(data_dict['names']) != 1 else data_dict['names'] # class names - assert len(names) == nc, '%g names found for nc=%g dataset in %s' % (len(names), nc, opt.data) # check - - # Model - pretrained = weights.endswith('.pt') - if pretrained: - with torch_distributed_zero_first(rank): - attempt_download(weights) # download if not found locally - ckpt = torch.load(weights, map_location=device) # load checkpoint - model = Model(opt.cfg or ckpt['model'].yaml, ch=3, nc=nc, anchors=hyp.get('anchors')).to(device) # create - exclude = ['anchor'] if (opt.cfg or hyp.get('anchors')) and not opt.resume else [] # exclude keys - state_dict = ckpt['model'].float().state_dict() # to FP32 - state_dict = intersect_dicts(state_dict, model.state_dict(), exclude=exclude) # intersect - model.load_state_dict(state_dict, strict=False) # load - logger.info('Transferred %g/%g items from %s' % (len(state_dict), len(model.state_dict()), weights)) # report - else: - model = Model(opt.cfg, ch=3, nc=nc, anchors=hyp.get('anchors')).to(device) # create - with torch_distributed_zero_first(rank): - check_dataset(data_dict) # check - train_path = data_dict['train'] - test_path = data_dict['val'] - - # Freeze - freeze = [] # parameter names to freeze (full or partial) - for k, v in model.named_parameters(): - v.requires_grad = True # train all layers - if any(x in k for x in freeze): - print('freezing %s' % k) - v.requires_grad = False - - # Optimizer - nbs = 64 # nominal batch size - accumulate = max(round(nbs / total_batch_size), 1) # accumulate loss before optimizing - hyp['weight_decay'] *= total_batch_size * accumulate / nbs # scale weight_decay - logger.info(f"Scaled weight_decay = {hyp['weight_decay']}") - - pg0, pg1, pg2 = [], [], [] # optimizer parameter groups - for k, v in model.named_modules(): - if hasattr(v, 'bias') and isinstance(v.bias, nn.Parameter): - pg2.append(v.bias) # biases - if isinstance(v, nn.BatchNorm2d): - pg0.append(v.weight) # no decay - elif hasattr(v, 'weight') and isinstance(v.weight, nn.Parameter): - pg1.append(v.weight) # apply decay - if hasattr(v, 'im'): - if hasattr(v.im, 'implicit'): - pg0.append(v.im.implicit) - else: - for iv in v.im: - pg0.append(iv.implicit) - if hasattr(v, 'imc'): - if hasattr(v.imc, 'implicit'): - pg0.append(v.imc.implicit) - else: - for iv in v.imc: - pg0.append(iv.implicit) - if hasattr(v, 'imb'): - if hasattr(v.imb, 'implicit'): - pg0.append(v.imb.implicit) - else: - for iv in v.imb: - pg0.append(iv.implicit) - if hasattr(v, 'imo'): - if hasattr(v.imo, 'implicit'): - pg0.append(v.imo.implicit) - else: - for iv in v.imo: - pg0.append(iv.implicit) - if hasattr(v, 'ia'): - if hasattr(v.ia, 'implicit'): - pg0.append(v.ia.implicit) - else: - for iv in v.ia: - pg0.append(iv.implicit) - if hasattr(v, 'attn'): - if hasattr(v.attn, 'logit_scale'): - pg0.append(v.attn.logit_scale) - if hasattr(v.attn, 'q_bias'): - pg0.append(v.attn.q_bias) - if hasattr(v.attn, 'v_bias'): - pg0.append(v.attn.v_bias) - if hasattr(v.attn, 'relative_position_bias_table'): - pg0.append(v.attn.relative_position_bias_table) - if hasattr(v, 'rbr_dense'): - if hasattr(v.rbr_dense, 'weight_rbr_origin'): - pg0.append(v.rbr_dense.weight_rbr_origin) - if hasattr(v.rbr_dense, 'weight_rbr_avg_conv'): - pg0.append(v.rbr_dense.weight_rbr_avg_conv) - if hasattr(v.rbr_dense, 'weight_rbr_pfir_conv'): - pg0.append(v.rbr_dense.weight_rbr_pfir_conv) - if hasattr(v.rbr_dense, 'weight_rbr_1x1_kxk_idconv1'): - pg0.append(v.rbr_dense.weight_rbr_1x1_kxk_idconv1) - if hasattr(v.rbr_dense, 'weight_rbr_1x1_kxk_conv2'): - pg0.append(v.rbr_dense.weight_rbr_1x1_kxk_conv2) - if hasattr(v.rbr_dense, 'weight_rbr_gconv_dw'): - pg0.append(v.rbr_dense.weight_rbr_gconv_dw) - if hasattr(v.rbr_dense, 'weight_rbr_gconv_pw'): - pg0.append(v.rbr_dense.weight_rbr_gconv_pw) - if hasattr(v.rbr_dense, 'vector'): - pg0.append(v.rbr_dense.vector) - - if opt.adam: - optimizer = optim.Adam(pg0, lr=hyp['lr0'], betas=(hyp['momentum'], 0.999)) # adjust beta1 to momentum - else: - optimizer = optim.SGD(pg0, lr=hyp['lr0'], momentum=hyp['momentum'], nesterov=True) - - optimizer.add_param_group({'params': pg1, 'weight_decay': hyp['weight_decay']}) # add pg1 with weight_decay - optimizer.add_param_group({'params': pg2}) # add pg2 (biases) - logger.info('Optimizer groups: %g .bias, %g conv.weight, %g other' % (len(pg2), len(pg1), len(pg0))) - del pg0, pg1, pg2 - - # Scheduler https://arxiv.org/pdf/1812.01187.pdf - # https://pytorch.org/docs/stable/_modules/torch/optim/lr_scheduler.html#OneCycleLR - if opt.linear_lr: - lf = lambda x: (1 - x / (epochs - 1)) * (1.0 - hyp['lrf']) + hyp['lrf'] # linear - else: - lf = one_cycle(1, hyp['lrf'], epochs) # cosine 1->hyp['lrf'] - scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf) - # plot_lr_scheduler(optimizer, scheduler, epochs) - - # EMA - ema = ModelEMA(model) if rank in [-1, 0] else None - - # Resume - start_epoch, best_fitness = 0, 0.0 - if pretrained: - # Optimizer - if ckpt['optimizer'] is not None: - optimizer.load_state_dict(ckpt['optimizer']) - best_fitness = ckpt['best_fitness'] - - # EMA - if ema and ckpt.get('ema'): - ema.ema.load_state_dict(ckpt['ema'].float().state_dict()) - ema.updates = ckpt['updates'] - - # Results - if ckpt.get('training_results') is not None: - results_file.write_text(ckpt['training_results']) # write results.txt - - # Epochs - start_epoch = ckpt['epoch'] + 1 - if opt.resume: - assert start_epoch > 0, '%s training to %g epochs is finished, nothing to resume.' % (weights, epochs) - if epochs < start_epoch: - logger.info('%s has been trained for %g epochs. Fine-tuning for %g additional epochs.' % - (weights, ckpt['epoch'], epochs)) - epochs += ckpt['epoch'] # finetune additional epochs - - del ckpt, state_dict - - # Image sizes - gs = max(int(model.stride.max()), 32) # grid size (max stride) - nl = model.model[-1].nl # number of detection layers (used for scaling hyp['obj']) - imgsz, imgsz_test = [check_img_size(x, gs) for x in opt.img_size] # verify imgsz are gs-multiples - - # DP mode - if cuda and rank == -1 and torch.cuda.device_count() > 1: - model = torch.nn.DataParallel(model) - - # SyncBatchNorm - if opt.sync_bn and cuda and rank != -1: - model = torch.nn.SyncBatchNorm.convert_sync_batchnorm(model).to(device) - logger.info('Using SyncBatchNorm()') - - # Trainloader - dataloader, dataset = create_dataloader(train_path, imgsz, batch_size, gs, opt, - hyp=hyp, augment=True, cache=opt.cache_images, rect=opt.rect, rank=rank, - world_size=opt.world_size, workers=opt.workers, - image_weights=opt.image_weights, quad=opt.quad, prefix=colorstr('train: ')) - mlc = np.concatenate(dataset.labels, 0)[:, 0].max() # max label class - nb = len(dataloader) # number of batches - assert mlc < nc, 'Label class %g exceeds nc=%g in %s. Possible class labels are 0-%g' % (mlc, nc, opt.data, nc - 1) - - # Process 0 - if rank in [-1, 0]: - testloader = create_dataloader(test_path, imgsz_test, batch_size * 2, gs, opt, # testloader - hyp=hyp, cache=opt.cache_images and not opt.notest, rect=True, rank=-1, - world_size=opt.world_size, workers=opt.workers, - pad=0.5, prefix=colorstr('val: '))[0] - - if not opt.resume: - labels = np.concatenate(dataset.labels, 0) - c = torch.tensor(labels[:, 0]) # classes - # cf = torch.bincount(c.long(), minlength=nc) + 1. # frequency - # model._initialize_biases(cf.to(device)) - if plots: - #plot_labels(labels, names, save_dir, loggers) - if tb_writer: - tb_writer.add_histogram('classes', c, 0) - - # Anchors - if not opt.noautoanchor: - check_anchors(dataset, model=model, thr=hyp['anchor_t'], imgsz=imgsz) - model.half().float() # pre-reduce anchor precision - - # DDP mode - if cuda and rank != -1: - model = DDP(model, device_ids=[opt.local_rank], output_device=opt.local_rank, - # nn.MultiheadAttention incompatibility with DDP https://github.com/pytorch/pytorch/issues/26698 - find_unused_parameters=any(isinstance(layer, nn.MultiheadAttention) for layer in model.modules())) - - # Model parameters - hyp['box'] *= 3. / nl # scale to layers - hyp['cls'] *= nc / 80. * 3. / nl # scale to classes and layers - hyp['obj'] *= (imgsz / 640) ** 2 * 3. / nl # scale to image size and layers - hyp['label_smoothing'] = opt.label_smoothing - model.nc = nc # attach number of classes to model - model.hyp = hyp # attach hyperparameters to model - model.gr = 1.0 # iou loss ratio (obj_loss = 1.0 or iou) - model.class_weights = labels_to_class_weights(dataset.labels, nc).to(device) * nc # attach class weights - model.names = names - - # Start training - t0 = time.time() - nw = max(round(hyp['warmup_epochs'] * nb), 1000) # number of warmup iterations, max(3 epochs, 1k iterations) - # nw = min(nw, (epochs - start_epoch) / 2 * nb) # limit warmup to < 1/2 of training - maps = np.zeros(nc) # mAP per class - results = (0, 0, 0, 0, 0, 0, 0) # P, R, mAP@.5, mAP@.5-.95, val_loss(box, obj, cls) - scheduler.last_epoch = start_epoch - 1 # do not move - scaler = amp.GradScaler(enabled=cuda) - compute_loss_ota = ComputeLossAuxOTA(model) # init loss class - compute_loss = ComputeLoss(model) # init loss class - logger.info(f'Image sizes {imgsz} train, {imgsz_test} test\n' - f'Using {dataloader.num_workers} dataloader workers\n' - f'Logging results to {save_dir}\n' - f'Starting training for {epochs} epochs...') - torch.save(model, wdir / 'init.pt') - for epoch in range(start_epoch, epochs): # epoch ------------------------------------------------------------------ - model.train() - - # Update image weights (optional) - if opt.image_weights: - # Generate indices - if rank in [-1, 0]: - cw = model.class_weights.cpu().numpy() * (1 - maps) ** 2 / nc # class weights - iw = labels_to_image_weights(dataset.labels, nc=nc, class_weights=cw) # image weights - dataset.indices = random.choices(range(dataset.n), weights=iw, k=dataset.n) # rand weighted idx - # Broadcast if DDP - if rank != -1: - indices = (torch.tensor(dataset.indices) if rank == 0 else torch.zeros(dataset.n)).int() - dist.broadcast(indices, 0) - if rank != 0: - dataset.indices = indices.cpu().numpy() - - # Update mosaic border - # b = int(random.uniform(0.25 * imgsz, 0.75 * imgsz + gs) // gs * gs) - # dataset.mosaic_border = [b - imgsz, -b] # height, width borders - - mloss = torch.zeros(4, device=device) # mean losses - if rank != -1: - dataloader.sampler.set_epoch(epoch) - pbar = enumerate(dataloader) - logger.info(('\n' + '%10s' * 8) % ('Epoch', 'gpu_mem', 'box', 'obj', 'cls', 'total', 'labels', 'img_size')) - if rank in [-1, 0]: - pbar = tqdm(pbar, total=nb) # progress bar - optimizer.zero_grad() - for i, (imgs, targets, paths, _) in pbar: # batch ------------------------------------------------------------- - ni = i + nb * epoch # number integrated batches (since train start) - imgs = imgs.to(device, non_blocking=True).float() / 255.0 # uint8 to float32, 0-255 to 0.0-1.0 - - # Warmup - if ni <= nw: - xi = [0, nw] # x interp - # model.gr = np.interp(ni, xi, [0.0, 1.0]) # iou loss ratio (obj_loss = 1.0 or iou) - accumulate = max(1, np.interp(ni, xi, [1, nbs / total_batch_size]).round()) - for j, x in enumerate(optimizer.param_groups): - # bias lr falls from 0.1 to lr0, all other lrs rise from 0.0 to lr0 - x['lr'] = np.interp(ni, xi, [hyp['warmup_bias_lr'] if j == 2 else 0.0, x['initial_lr'] * lf(epoch)]) - if 'momentum' in x: - x['momentum'] = np.interp(ni, xi, [hyp['warmup_momentum'], hyp['momentum']]) - - # Multi-scale - if opt.multi_scale: - sz = random.randrange(imgsz * 0.5, imgsz * 1.5 + gs) // gs * gs # size - sf = sz / max(imgs.shape[2:]) # scale factor - if sf != 1: - ns = [math.ceil(x * sf / gs) * gs for x in imgs.shape[2:]] # new shape (stretched to gs-multiple) - imgs = F.interpolate(imgs, size=ns, mode='bilinear', align_corners=False) - - # Forward - with amp.autocast(enabled=cuda): - pred = model(imgs) # forward - loss, loss_items = compute_loss_ota(pred, targets.to(device), imgs) # loss scaled by batch_size - if rank != -1: - loss *= opt.world_size # gradient averaged between devices in DDP mode - if opt.quad: - loss *= 4. - - # Backward - scaler.scale(loss).backward() - - # Optimize - if ni % accumulate == 0: - scaler.step(optimizer) # optimizer.step - scaler.update() - optimizer.zero_grad() - if ema: - ema.update(model) - - # Print - if rank in [-1, 0]: - mloss = (mloss * i + loss_items) / (i + 1) # update mean losses - mem = '%.3gG' % (torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0) # (GB) - s = ('%10s' * 2 + '%10.4g' * 6) % ( - '%g/%g' % (epoch, epochs - 1), mem, *mloss, targets.shape[0], imgs.shape[-1]) - pbar.set_description(s) - - # Plot - if plots and ni < 10: - f = save_dir / f'train_batch{ni}.jpg' # filename - Thread(target=plot_images, args=(imgs, targets, paths, f), daemon=True).start() - # if tb_writer: - # tb_writer.add_image(f, result, dataformats='HWC', global_step=epoch) - # tb_writer.add_graph(torch.jit.trace(model, imgs, strict=False), []) # add model graph - elif plots and ni == 10 and wandb_logger.wandb: - wandb_logger.log({"Mosaics": [wandb_logger.wandb.Image(str(x), caption=x.name) for x in - save_dir.glob('train*.jpg') if x.exists()]}) - - # end batch ------------------------------------------------------------------------------------------------ - # end epoch ---------------------------------------------------------------------------------------------------- - - # Scheduler - lr = [x['lr'] for x in optimizer.param_groups] # for tensorboard - scheduler.step() - - # DDP process 0 or single-GPU - if rank in [-1, 0]: - # mAP - ema.update_attr(model, include=['yaml', 'nc', 'hyp', 'gr', 'names', 'stride', 'class_weights']) - final_epoch = epoch + 1 == epochs - if not opt.notest or final_epoch: # Calculate mAP - wandb_logger.current_epoch = epoch + 1 - results, maps, times = test.test(data_dict, - batch_size=batch_size * 2, - imgsz=imgsz_test, - model=ema.ema, - single_cls=opt.single_cls, - dataloader=testloader, - save_dir=save_dir, - verbose=nc < 50 and final_epoch, - plots=plots and final_epoch, - wandb_logger=wandb_logger, - compute_loss=compute_loss, - is_coco=is_coco, - v5_metric=opt.v5_metric) - - # Write - with open(results_file, 'a') as f: - f.write(s + '%10.4g' * 7 % results + '\n') # append metrics, val_loss - if len(opt.name) and opt.bucket: - os.system('gsutil cp %s gs://%s/results/results%s.txt' % (results_file, opt.bucket, opt.name)) - - # Log - tags = ['train/box_loss', 'train/obj_loss', 'train/cls_loss', # train loss - 'metrics/precision', 'metrics/recall', 'metrics/mAP_0.5', 'metrics/mAP_0.5:0.95', - 'val/box_loss', 'val/obj_loss', 'val/cls_loss', # val loss - 'x/lr0', 'x/lr1', 'x/lr2'] # params - for x, tag in zip(list(mloss[:-1]) + list(results) + lr, tags): - if tb_writer: - tb_writer.add_scalar(tag, x, epoch) # tensorboard - if wandb_logger.wandb: - wandb_logger.log({tag: x}) # W&B - - # Update best mAP - fi = fitness(np.array(results).reshape(1, -1)) # weighted combination of [P, R, mAP@.5, mAP@.5-.95] - if fi > best_fitness: - best_fitness = fi - wandb_logger.end_epoch(best_result=best_fitness == fi) - - # Save model - if (not opt.nosave) or (final_epoch and not opt.evolve): # if save - ckpt = {'epoch': epoch, - 'best_fitness': best_fitness, - 'training_results': results_file.read_text(), - 'model': deepcopy(model.module if is_parallel(model) else model).half(), - 'ema': deepcopy(ema.ema).half(), - 'updates': ema.updates, - 'optimizer': optimizer.state_dict(), - 'wandb_id': wandb_logger.wandb_run.id if wandb_logger.wandb else None} - - # Save last, best and delete - torch.save(ckpt, last) - if best_fitness == fi: - torch.save(ckpt, best) - if (best_fitness == fi) and (epoch >= 200): - torch.save(ckpt, wdir / 'best_{:03d}.pt'.format(epoch)) - if epoch == 0: - torch.save(ckpt, wdir / 'epoch_{:03d}.pt'.format(epoch)) - elif ((epoch+1) % 25) == 0: - torch.save(ckpt, wdir / 'epoch_{:03d}.pt'.format(epoch)) - elif epoch >= (epochs-5): - torch.save(ckpt, wdir / 'epoch_{:03d}.pt'.format(epoch)) - if wandb_logger.wandb: - if ((epoch + 1) % opt.save_period == 0 and not final_epoch) and opt.save_period != -1: - wandb_logger.log_model( - last.parent, opt, epoch, fi, best_model=best_fitness == fi) - del ckpt - - # end epoch ---------------------------------------------------------------------------------------------------- - # end training - if rank in [-1, 0]: - # Plots - if plots: - plot_results(save_dir=save_dir) # save as results.png - if wandb_logger.wandb: - files = ['results.png', 'confusion_matrix.png', *[f'{x}_curve.png' for x in ('F1', 'PR', 'P', 'R')]] - wandb_logger.log({"Results": [wandb_logger.wandb.Image(str(save_dir / f), caption=f) for f in files - if (save_dir / f).exists()]}) - # Test best.pt - logger.info('%g epochs completed in %.3f hours.\n' % (epoch - start_epoch + 1, (time.time() - t0) / 3600)) - if opt.data.endswith('coco.yaml') and nc == 80: # if COCO - for m in (last, best) if best.exists() else (last): # speed, mAP tests - results, _, _ = test.test(opt.data, - batch_size=batch_size * 2, - imgsz=imgsz_test, - conf_thres=0.001, - iou_thres=0.7, - model=attempt_load(m, device).half(), - single_cls=opt.single_cls, - dataloader=testloader, - save_dir=save_dir, - save_json=True, - plots=False, - is_coco=is_coco, - v5_metric=opt.v5_metric) - - # Strip optimizers - final = best if best.exists() else last # final model - for f in last, best: - if f.exists(): - strip_optimizer(f) # strip optimizers - if opt.bucket: - os.system(f'gsutil cp {final} gs://{opt.bucket}/weights') # upload - if wandb_logger.wandb and not opt.evolve: # Log the stripped model - wandb_logger.wandb.log_artifact(str(final), type='model', - name='run_' + wandb_logger.wandb_run.id + '_model', - aliases=['last', 'best', 'stripped']) - wandb_logger.finish_run() - else: - dist.destroy_process_group() - torch.cuda.empty_cache() - return results - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--weights', type=str, default='yolo7.pt', help='initial weights path') - parser.add_argument('--cfg', type=str, default='', help='model.yaml path') - parser.add_argument('--data', type=str, default='data/coco.yaml', help='data.yaml path') - parser.add_argument('--hyp', type=str, default='data/hyp.scratch.p5.yaml', help='hyperparameters path') - parser.add_argument('--epochs', type=int, default=300) - parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs') - parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes') - parser.add_argument('--rect', action='store_true', help='rectangular training') - parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training') - parser.add_argument('--nosave', action='store_true', help='only save final checkpoint') - parser.add_argument('--notest', action='store_true', help='only test final epoch') - parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check') - parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters') - parser.add_argument('--bucket', type=str, default='', help='gsutil bucket') - parser.add_argument('--cache-images', action='store_true', help='cache images for faster training') - parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training') - parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu') - parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%') - parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class') - parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer') - parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode') - parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify') - parser.add_argument('--workers', type=int, default=8, help='maximum number of dataloader workers') - parser.add_argument('--project', default='runs/train', help='save to project/name') - parser.add_argument('--entity', default=None, help='W&B entity') - parser.add_argument('--name', default='exp', help='save to project/name') - parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment') - parser.add_argument('--quad', action='store_true', help='quad dataloader') - parser.add_argument('--linear-lr', action='store_true', help='linear LR') - parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon') - parser.add_argument('--upload_dataset', action='store_true', help='Upload dataset as W&B artifact table') - parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval for W&B') - parser.add_argument('--save_period', type=int, default=-1, help='Log model after every "save_period" epoch') - parser.add_argument('--artifact_alias', type=str, default="latest", help='version of dataset artifact to be used') - parser.add_argument('--v5-metric', action='store_true', help='assume maximum recall as 1.0 in AP calculation') - opt = parser.parse_args() - - # Set DDP variables - opt.world_size = int(os.environ['WORLD_SIZE']) if 'WORLD_SIZE' in os.environ else 1 - opt.global_rank = int(os.environ['RANK']) if 'RANK' in os.environ else -1 - set_logging(opt.global_rank) - #if opt.global_rank in [-1, 0]: - # check_git_status() - # check_requirements() - - # Resume - wandb_run = check_wandb_resume(opt) - if opt.resume and not wandb_run: # resume an interrupted run - ckpt = opt.resume if isinstance(opt.resume, str) else get_latest_run() # specified or most recent path - assert os.path.isfile(ckpt), 'ERROR: --resume checkpoint does not exist' - apriori = opt.global_rank, opt.local_rank - with open(Path(ckpt).parent.parent / 'opt.yaml') as f: - opt = argparse.Namespace(**yaml.load(f, Loader=yaml.SafeLoader)) # replace - opt.cfg, opt.weights, opt.resume, opt.batch_size, opt.global_rank, opt.local_rank = '', ckpt, True, opt.total_batch_size, *apriori # reinstate - logger.info('Resuming training from %s' % ckpt) - else: - # opt.hyp = opt.hyp or ('hyp.finetune.yaml' if opt.weights else 'hyp.scratch.yaml') - opt.data, opt.cfg, opt.hyp = check_file(opt.data), check_file(opt.cfg), check_file(opt.hyp) # check files - assert len(opt.cfg) or len(opt.weights), 'either --cfg or --weights must be specified' - opt.img_size.extend([opt.img_size[-1]] * (2 - len(opt.img_size))) # extend to 2 sizes (train, test) - opt.name = 'evolve' if opt.evolve else opt.name - opt.save_dir = increment_path(Path(opt.project) / opt.name, exist_ok=opt.exist_ok | opt.evolve) # increment run - - # DDP mode - opt.total_batch_size = opt.batch_size - device = select_device(opt.device, batch_size=opt.batch_size) - if opt.local_rank != -1: - assert torch.cuda.device_count() > opt.local_rank - torch.cuda.set_device(opt.local_rank) - device = torch.device('cuda', opt.local_rank) - dist.init_process_group(backend='nccl', init_method='env://') # distributed backend - assert opt.batch_size % opt.world_size == 0, '--batch-size must be multiple of CUDA device count' - opt.batch_size = opt.total_batch_size // opt.world_size - - # Hyperparameters - with open(opt.hyp) as f: - hyp = yaml.load(f, Loader=yaml.SafeLoader) # load hyps - - # Train - logger.info(opt) - if not opt.evolve: - tb_writer = None # init loggers - if opt.global_rank in [-1, 0]: - prefix = colorstr('tensorboard: ') - logger.info(f"{prefix}Start with 'tensorboard --logdir {opt.project}', view at http://localhost:6006/") - tb_writer = SummaryWriter(opt.save_dir) # Tensorboard - train(hyp, opt, device, tb_writer) - - # Evolve hyperparameters (optional) - else: - # Hyperparameter evolution metadata (mutation scale 0-1, lower_limit, upper_limit) - meta = {'lr0': (1, 1e-5, 1e-1), # initial learning rate (SGD=1E-2, Adam=1E-3) - 'lrf': (1, 0.01, 1.0), # final OneCycleLR learning rate (lr0 * lrf) - 'momentum': (0.3, 0.6, 0.98), # SGD momentum/Adam beta1 - 'weight_decay': (1, 0.0, 0.001), # optimizer weight decay - 'warmup_epochs': (1, 0.0, 5.0), # warmup epochs (fractions ok) - 'warmup_momentum': (1, 0.0, 0.95), # warmup initial momentum - 'warmup_bias_lr': (1, 0.0, 0.2), # warmup initial bias lr - 'box': (1, 0.02, 0.2), # box loss gain - 'cls': (1, 0.2, 4.0), # cls loss gain - 'cls_pw': (1, 0.5, 2.0), # cls BCELoss positive_weight - 'obj': (1, 0.2, 4.0), # obj loss gain (scale with pixels) - 'obj_pw': (1, 0.5, 2.0), # obj BCELoss positive_weight - 'iou_t': (0, 0.1, 0.7), # IoU training threshold - 'anchor_t': (1, 2.0, 8.0), # anchor-multiple threshold - 'anchors': (2, 2.0, 10.0), # anchors per output grid (0 to ignore) - 'fl_gamma': (0, 0.0, 2.0), # focal loss gamma (efficientDet default gamma=1.5) - 'hsv_h': (1, 0.0, 0.1), # image HSV-Hue augmentation (fraction) - 'hsv_s': (1, 0.0, 0.9), # image HSV-Saturation augmentation (fraction) - 'hsv_v': (1, 0.0, 0.9), # image HSV-Value augmentation (fraction) - 'degrees': (1, 0.0, 45.0), # image rotation (+/- deg) - 'translate': (1, 0.0, 0.9), # image translation (+/- fraction) - 'scale': (1, 0.0, 0.9), # image scale (+/- gain) - 'shear': (1, 0.0, 10.0), # image shear (+/- deg) - 'perspective': (0, 0.0, 0.001), # image perspective (+/- fraction), range 0-0.001 - 'flipud': (1, 0.0, 1.0), # image flip up-down (probability) - 'fliplr': (0, 0.0, 1.0), # image flip left-right (probability) - 'mosaic': (1, 0.0, 1.0), # image mixup (probability) - 'mixup': (1, 0.0, 1.0)} # image mixup (probability) - - with open(opt.hyp, errors='ignore') as f: - hyp = yaml.safe_load(f) # load hyps dict - if 'anchors' not in hyp: # anchors commented in hyp.yaml - hyp['anchors'] = 3 - - assert opt.local_rank == -1, 'DDP mode not implemented for --evolve' - opt.notest, opt.nosave = True, True # only test/save final epoch - # ei = [isinstance(x, (int, float)) for x in hyp.values()] # evolvable indices - yaml_file = Path(opt.save_dir) / 'hyp_evolved.yaml' # save best result here - if opt.bucket: - os.system('gsutil cp gs://%s/evolve.txt .' % opt.bucket) # download evolve.txt if exists - - for _ in range(300): # generations to evolve - if Path('evolve.txt').exists(): # if evolve.txt exists: select best hyps and mutate - # Select parent(s) - parent = 'single' # parent selection method: 'single' or 'weighted' - x = np.loadtxt('evolve.txt', ndmin=2) - n = min(5, len(x)) # number of previous results to consider - x = x[np.argsort(-fitness(x))][:n] # top n mutations - w = fitness(x) - fitness(x).min() # weights - if parent == 'single' or len(x) == 1: - # x = x[random.randint(0, n - 1)] # random selection - x = x[random.choices(range(n), weights=w)[0]] # weighted selection - elif parent == 'weighted': - x = (x * w.reshape(n, 1)).sum(0) / w.sum() # weighted combination - - # Mutate - mp, s = 0.8, 0.2 # mutation probability, sigma - npr = np.random - npr.seed(int(time.time())) - g = np.array([x[0] for x in meta.values()]) # gains 0-1 - ng = len(meta) - v = np.ones(ng) - while all(v == 1): # mutate until a change occurs (prevent duplicates) - v = (g * (npr.random(ng) < mp) * npr.randn(ng) * npr.random() * s + 1).clip(0.3, 3.0) - for i, k in enumerate(hyp.keys()): # plt.hist(v.ravel(), 300) - hyp[k] = float(x[i + 7] * v[i]) # mutate - - # Constrain to limits - for k, v in meta.items(): - hyp[k] = max(hyp[k], v[1]) # lower limit - hyp[k] = min(hyp[k], v[2]) # upper limit - hyp[k] = round(hyp[k], 5) # significant digits - - # Train mutation - results = train(hyp.copy(), opt, device) - - # Write mutation results - print_mutation(hyp.copy(), results, yaml_file, opt.bucket) - - # Plot results - plot_evolution(yaml_file) - print(f'Hyperparameter evolution complete. Best results saved as: {yaml_file}\n' - f'Command to train a new model with these hyperparameters: $ python train.py --hyp {yaml_file}') diff --git a/cv/detection/yolov7/pytorch/utils/__init__.py b/cv/detection/yolov7/pytorch/utils/__init__.py deleted file mode 100644 index 84952a816..000000000 --- a/cv/detection/yolov7/pytorch/utils/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# init \ No newline at end of file diff --git a/cv/detection/yolov7/pytorch/utils/activations.py b/cv/detection/yolov7/pytorch/utils/activations.py deleted file mode 100644 index aa3ddf071..000000000 --- a/cv/detection/yolov7/pytorch/utils/activations.py +++ /dev/null @@ -1,72 +0,0 @@ -# Activation functions - -import torch -import torch.nn as nn -import torch.nn.functional as F - - -# SiLU https://arxiv.org/pdf/1606.08415.pdf ---------------------------------------------------------------------------- -class SiLU(nn.Module): # export-friendly version of nn.SiLU() - @staticmethod - def forward(x): - return x * torch.sigmoid(x) - - -class Hardswish(nn.Module): # export-friendly version of nn.Hardswish() - @staticmethod - def forward(x): - # return x * F.hardsigmoid(x) # for torchscript and CoreML - return x * F.hardtanh(x + 3, 0., 6.) / 6. # for torchscript, CoreML and ONNX - - -class MemoryEfficientSwish(nn.Module): - class F(torch.autograd.Function): - @staticmethod - def forward(ctx, x): - ctx.save_for_backward(x) - return x * torch.sigmoid(x) - - @staticmethod - def backward(ctx, grad_output): - x = ctx.saved_tensors[0] - sx = torch.sigmoid(x) - return grad_output * (sx * (1 + x * (1 - sx))) - - def forward(self, x): - return self.F.apply(x) - - -# Mish https://github.com/digantamisra98/Mish -------------------------------------------------------------------------- -class Mish(nn.Module): - @staticmethod - def forward(x): - return x * F.softplus(x).tanh() - - -class MemoryEfficientMish(nn.Module): - class F(torch.autograd.Function): - @staticmethod - def forward(ctx, x): - ctx.save_for_backward(x) - return x.mul(torch.tanh(F.softplus(x))) # x * tanh(ln(1 + exp(x))) - - @staticmethod - def backward(ctx, grad_output): - x = ctx.saved_tensors[0] - sx = torch.sigmoid(x) - fx = F.softplus(x).tanh() - return grad_output * (fx + x * sx * (1 - fx * fx)) - - def forward(self, x): - return self.F.apply(x) - - -# FReLU https://arxiv.org/abs/2007.11824 ------------------------------------------------------------------------------- -class FReLU(nn.Module): - def __init__(self, c1, k=3): # ch_in, kernel - super().__init__() - self.conv = nn.Conv2d(c1, c1, k, 1, 1, groups=c1, bias=False) - self.bn = nn.BatchNorm2d(c1) - - def forward(self, x): - return torch.max(x, self.bn(self.conv(x))) diff --git a/cv/detection/yolov7/pytorch/utils/add_nms.py b/cv/detection/yolov7/pytorch/utils/add_nms.py deleted file mode 100644 index 0a1f7976a..000000000 --- a/cv/detection/yolov7/pytorch/utils/add_nms.py +++ /dev/null @@ -1,155 +0,0 @@ -import numpy as np -import onnx -from onnx import shape_inference -try: - import onnx_graphsurgeon as gs -except Exception as e: - print('Import onnx_graphsurgeon failure: %s' % e) - -import logging - -LOGGER = logging.getLogger(__name__) - -class RegisterNMS(object): - def __init__( - self, - onnx_model_path: str, - precision: str = "fp32", - ): - - self.graph = gs.import_onnx(onnx.load(onnx_model_path)) - assert self.graph - LOGGER.info("ONNX graph created successfully") - # Fold constants via ONNX-GS that PyTorch2ONNX may have missed - self.graph.fold_constants() - self.precision = precision - self.batch_size = 1 - def infer(self): - """ - Sanitize the graph by cleaning any unconnected nodes, do a topological resort, - and fold constant inputs values. When possible, run shape inference on the - ONNX graph to determine tensor shapes. - """ - for _ in range(3): - count_before = len(self.graph.nodes) - - self.graph.cleanup().toposort() - try: - for node in self.graph.nodes: - for o in node.outputs: - o.shape = None - model = gs.export_onnx(self.graph) - model = shape_inference.infer_shapes(model) - self.graph = gs.import_onnx(model) - except Exception as e: - LOGGER.info(f"Shape inference could not be performed at this time:\n{e}") - try: - self.graph.fold_constants(fold_shapes=True) - except TypeError as e: - LOGGER.error( - "This version of ONNX GraphSurgeon does not support folding shapes, " - f"please upgrade your onnx_graphsurgeon module. Error:\n{e}" - ) - raise - - count_after = len(self.graph.nodes) - if count_before == count_after: - # No new folding occurred in this iteration, so we can stop for now. - break - - def save(self, output_path): - """ - Save the ONNX model to the given location. - Args: - output_path: Path pointing to the location where to write - out the updated ONNX model. - """ - self.graph.cleanup().toposort() - model = gs.export_onnx(self.graph) - onnx.save(model, output_path) - LOGGER.info(f"Saved ONNX model to {output_path}") - - def register_nms( - self, - *, - score_thresh: float = 0.25, - nms_thresh: float = 0.45, - detections_per_img: int = 100, - ): - """ - Register the ``EfficientNMS_TRT`` plugin node. - NMS expects these shapes for its input tensors: - - box_net: [batch_size, number_boxes, 4] - - class_net: [batch_size, number_boxes, number_labels] - Args: - score_thresh (float): The scalar threshold for score (low scoring boxes are removed). - nms_thresh (float): The scalar threshold for IOU (new boxes that have high IOU - overlap with previously selected boxes are removed). - detections_per_img (int): Number of best detections to keep after NMS. - """ - - self.infer() - # Find the concat node at the end of the network - op_inputs = self.graph.outputs - op = "EfficientNMS_TRT" - attrs = { - "plugin_version": "1", - "background_class": -1, # no background class - "max_output_boxes": detections_per_img, - "score_threshold": score_thresh, - "iou_threshold": nms_thresh, - "score_activation": False, - "box_coding": 0, - } - - if self.precision == "fp32": - dtype_output = np.float32 - elif self.precision == "fp16": - dtype_output = np.float16 - else: - raise NotImplementedError(f"Currently not supports precision: {self.precision}") - - # NMS Outputs - output_num_detections = gs.Variable( - name="num_dets", - dtype=np.int32, - shape=[self.batch_size, 1], - ) # A scalar indicating the number of valid detections per batch image. - output_boxes = gs.Variable( - name="det_boxes", - dtype=dtype_output, - shape=[self.batch_size, detections_per_img, 4], - ) - output_scores = gs.Variable( - name="det_scores", - dtype=dtype_output, - shape=[self.batch_size, detections_per_img], - ) - output_labels = gs.Variable( - name="det_classes", - dtype=np.int32, - shape=[self.batch_size, detections_per_img], - ) - - op_outputs = [output_num_detections, output_boxes, output_scores, output_labels] - - # Create the NMS Plugin node with the selected inputs. The outputs of the node will also - # become the final outputs of the graph. - self.graph.layer(op=op, name="batched_nms", inputs=op_inputs, outputs=op_outputs, attrs=attrs) - LOGGER.info(f"Created NMS plugin '{op}' with attributes: {attrs}") - - self.graph.outputs = op_outputs - - self.infer() - - def save(self, output_path): - """ - Save the ONNX model to the given location. - Args: - output_path: Path pointing to the location where to write - out the updated ONNX model. - """ - self.graph.cleanup().toposort() - model = gs.export_onnx(self.graph) - onnx.save(model, output_path) - LOGGER.info(f"Saved ONNX model to {output_path}") diff --git a/cv/detection/yolov7/pytorch/utils/autoanchor.py b/cv/detection/yolov7/pytorch/utils/autoanchor.py deleted file mode 100644 index f491032e5..000000000 --- a/cv/detection/yolov7/pytorch/utils/autoanchor.py +++ /dev/null @@ -1,160 +0,0 @@ -# Auto-anchor utils - -import numpy as np -import torch -import yaml -from scipy.cluster.vq import kmeans -from tqdm import tqdm - -from utils.general import colorstr - - -def check_anchor_order(m): - # Check anchor order against stride order for YOLO Detect() module m, and correct if necessary - a = m.anchor_grid.prod(-1).view(-1) # anchor area - da = a[-1] - a[0] # delta a - ds = m.stride[-1] - m.stride[0] # delta s - if da.sign() != ds.sign(): # same order - print('Reversing anchor order') - m.anchors[:] = m.anchors.flip(0) - m.anchor_grid[:] = m.anchor_grid.flip(0) - - -def check_anchors(dataset, model, thr=4.0, imgsz=640): - # Check anchor fit to data, recompute if necessary - prefix = colorstr('autoanchor: ') - print(f'\n{prefix}Analyzing anchors... ', end='') - m = model.module.model[-1] if hasattr(model, 'module') else model.model[-1] # Detect() - shapes = imgsz * dataset.shapes / dataset.shapes.max(1, keepdims=True) - scale = np.random.uniform(0.9, 1.1, size=(shapes.shape[0], 1)) # augment scale - wh = torch.tensor(np.concatenate([l[:, 3:5] * s for s, l in zip(shapes * scale, dataset.labels)])).float() # wh - - def metric(k): # compute metric - r = wh[:, None] / k[None] - x = torch.min(r, 1. / r).min(2)[0] # ratio metric - best = x.max(1)[0] # best_x - aat = (x > 1. / thr).float().sum(1).mean() # anchors above threshold - bpr = (best > 1. / thr).float().mean() # best possible recall - return bpr, aat - - anchors = m.anchor_grid.clone().cpu().view(-1, 2) # current anchors - bpr, aat = metric(anchors) - print(f'anchors/target = {aat:.2f}, Best Possible Recall (BPR) = {bpr:.4f}', end='') - if bpr < 0.98: # threshold to recompute - print('. Attempting to improve anchors, please wait...') - na = m.anchor_grid.numel() // 2 # number of anchors - try: - anchors = kmean_anchors(dataset, n=na, img_size=imgsz, thr=thr, gen=1000, verbose=False) - except Exception as e: - print(f'{prefix}ERROR: {e}') - new_bpr = metric(anchors)[0] - if new_bpr > bpr: # replace anchors - anchors = torch.tensor(anchors, device=m.anchors.device).type_as(m.anchors) - m.anchor_grid[:] = anchors.clone().view_as(m.anchor_grid) # for inference - check_anchor_order(m) - m.anchors[:] = anchors.clone().view_as(m.anchors) / m.stride.to(m.anchors.device).view(-1, 1, 1) # loss - print(f'{prefix}New anchors saved to model. Update model *.yaml to use these anchors in the future.') - else: - print(f'{prefix}Original anchors better than new anchors. Proceeding with original anchors.') - print('') # newline - - -def kmean_anchors(path='./data/coco.yaml', n=9, img_size=640, thr=4.0, gen=1000, verbose=True): - """ Creates kmeans-evolved anchors from training dataset - - Arguments: - path: path to dataset *.yaml, or a loaded dataset - n: number of anchors - img_size: image size used for training - thr: anchor-label wh ratio threshold hyperparameter hyp['anchor_t'] used for training, default=4.0 - gen: generations to evolve anchors using genetic algorithm - verbose: print all results - - Return: - k: kmeans evolved anchors - - Usage: - from utils.autoanchor import *; _ = kmean_anchors() - """ - thr = 1. / thr - prefix = colorstr('autoanchor: ') - - def metric(k, wh): # compute metrics - r = wh[:, None] / k[None] - x = torch.min(r, 1. / r).min(2)[0] # ratio metric - # x = wh_iou(wh, torch.tensor(k)) # iou metric - return x, x.max(1)[0] # x, best_x - - def anchor_fitness(k): # mutation fitness - _, best = metric(torch.tensor(k, dtype=torch.float32), wh) - return (best * (best > thr).float()).mean() # fitness - - def print_results(k): - k = k[np.argsort(k.prod(1))] # sort small to large - x, best = metric(k, wh0) - bpr, aat = (best > thr).float().mean(), (x > thr).float().mean() * n # best possible recall, anch > thr - print(f'{prefix}thr={thr:.2f}: {bpr:.4f} best possible recall, {aat:.2f} anchors past thr') - print(f'{prefix}n={n}, img_size={img_size}, metric_all={x.mean():.3f}/{best.mean():.3f}-mean/best, ' - f'past_thr={x[x > thr].mean():.3f}-mean: ', end='') - for i, x in enumerate(k): - print('%i,%i' % (round(x[0]), round(x[1])), end=', ' if i < len(k) - 1 else '\n') # use in *.cfg - return k - - if isinstance(path, str): # *.yaml file - with open(path) as f: - data_dict = yaml.load(f, Loader=yaml.SafeLoader) # model dict - from utils.datasets import LoadImagesAndLabels - dataset = LoadImagesAndLabels(data_dict['train'], augment=True, rect=True) - else: - dataset = path # dataset - - # Get label wh - shapes = img_size * dataset.shapes / dataset.shapes.max(1, keepdims=True) - wh0 = np.concatenate([l[:, 3:5] * s for s, l in zip(shapes, dataset.labels)]) # wh - - # Filter - i = (wh0 < 3.0).any(1).sum() - if i: - print(f'{prefix}WARNING: Extremely small objects found. {i} of {len(wh0)} labels are < 3 pixels in size.') - wh = wh0[(wh0 >= 2.0).any(1)] # filter > 2 pixels - # wh = wh * (np.random.rand(wh.shape[0], 1) * 0.9 + 0.1) # multiply by random scale 0-1 - - # Kmeans calculation - print(f'{prefix}Running kmeans for {n} anchors on {len(wh)} points...') - s = wh.std(0) # sigmas for whitening - k, dist = kmeans(wh / s, n, iter=30) # points, mean distance - assert len(k) == n, print(f'{prefix}ERROR: scipy.cluster.vq.kmeans requested {n} points but returned only {len(k)}') - k *= s - wh = torch.tensor(wh, dtype=torch.float32) # filtered - wh0 = torch.tensor(wh0, dtype=torch.float32) # unfiltered - k = print_results(k) - - # Plot - # k, d = [None] * 20, [None] * 20 - # for i in tqdm(range(1, 21)): - # k[i-1], d[i-1] = kmeans(wh / s, i) # points, mean distance - # fig, ax = plt.subplots(1, 2, figsize=(14, 7), tight_layout=True) - # ax = ax.ravel() - # ax[0].plot(np.arange(1, 21), np.array(d) ** 2, marker='.') - # fig, ax = plt.subplots(1, 2, figsize=(14, 7)) # plot wh - # ax[0].hist(wh[wh[:, 0]<100, 0],400) - # ax[1].hist(wh[wh[:, 1]<100, 1],400) - # fig.savefig('wh.png', dpi=200) - - # Evolve - npr = np.random - f, sh, mp, s = anchor_fitness(k), k.shape, 0.9, 0.1 # fitness, generations, mutation prob, sigma - pbar = tqdm(range(gen), desc=f'{prefix}Evolving anchors with Genetic Algorithm:') # progress bar - for _ in pbar: - v = np.ones(sh) - while (v == 1).all(): # mutate until a change occurs (prevent duplicates) - v = ((npr.random(sh) < mp) * npr.random() * npr.randn(*sh) * s + 1).clip(0.3, 3.0) - kg = (k.copy() * v).clip(min=2.0) - fg = anchor_fitness(kg) - if fg > f: - f, k = fg, kg.copy() - pbar.desc = f'{prefix}Evolving anchors with Genetic Algorithm: fitness = {f:.4f}' - if verbose: - print_results(k) - - return print_results(k) diff --git a/cv/detection/yolov7/pytorch/utils/aws/__init__.py b/cv/detection/yolov7/pytorch/utils/aws/__init__.py deleted file mode 100644 index e9691f241..000000000 --- a/cv/detection/yolov7/pytorch/utils/aws/__init__.py +++ /dev/null @@ -1 +0,0 @@ -#init \ No newline at end of file diff --git a/cv/detection/yolov7/pytorch/utils/aws/mime.sh b/cv/detection/yolov7/pytorch/utils/aws/mime.sh deleted file mode 100644 index c319a83cf..000000000 --- a/cv/detection/yolov7/pytorch/utils/aws/mime.sh +++ /dev/null @@ -1,26 +0,0 @@ -# AWS EC2 instance startup 'MIME' script https://aws.amazon.com/premiumsupport/knowledge-center/execute-user-data-ec2/ -# This script will run on every instance restart, not only on first start -# --- DO NOT COPY ABOVE COMMENTS WHEN PASTING INTO USERDATA --- - -Content-Type: multipart/mixed; boundary="//" -MIME-Version: 1.0 - ---// -Content-Type: text/cloud-config; charset="us-ascii" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Content-Disposition: attachment; filename="cloud-config.txt" - -#cloud-config -cloud_final_modules: -- [scripts-user, always] - ---// -Content-Type: text/x-shellscript; charset="us-ascii" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Content-Disposition: attachment; filename="userdata.txt" - -#!/bin/bash -# --- paste contents of userdata.sh here --- ---// diff --git a/cv/detection/yolov7/pytorch/utils/aws/resume.py b/cv/detection/yolov7/pytorch/utils/aws/resume.py deleted file mode 100644 index 338685b19..000000000 --- a/cv/detection/yolov7/pytorch/utils/aws/resume.py +++ /dev/null @@ -1,37 +0,0 @@ -# Resume all interrupted trainings in yolor/ dir including DDP trainings -# Usage: $ python utils/aws/resume.py - -import os -import sys -from pathlib import Path - -import torch -import yaml - -sys.path.append('./') # to run '$ python *.py' files in subdirectories - -port = 0 # --master_port -path = Path('').resolve() -for last in path.rglob('*/**/last.pt'): - ckpt = torch.load(last) - if ckpt['optimizer'] is None: - continue - - # Load opt.yaml - with open(last.parent.parent / 'opt.yaml') as f: - opt = yaml.load(f, Loader=yaml.SafeLoader) - - # Get device count - d = opt['device'].split(',') # devices - nd = len(d) # number of devices - ddp = nd > 1 or (nd == 0 and torch.cuda.device_count() > 1) # distributed data parallel - - if ddp: # multi-GPU - port += 1 - cmd = f'python -m torch.distributed.launch --nproc_per_node {nd} --master_port {port} train.py --resume {last}' - else: # single-GPU - cmd = f'python train.py --resume {last}' - - cmd += ' > /dev/null 2>&1 &' # redirect output to dev/null and run in daemon thread - print(cmd) - os.system(cmd) diff --git a/cv/detection/yolov7/pytorch/utils/aws/userdata.sh b/cv/detection/yolov7/pytorch/utils/aws/userdata.sh deleted file mode 100644 index 5a99d4bec..000000000 --- a/cv/detection/yolov7/pytorch/utils/aws/userdata.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -# AWS EC2 instance startup script https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html -# This script will run only once on first instance start (for a re-start script see mime.sh) -# /home/ubuntu (ubuntu) or /home/ec2-user (amazon-linux) is working dir -# Use >300 GB SSD - -cd home/ubuntu -if [ ! -d yolor ]; then - echo "Running first-time script." # install dependencies, download COCO, pull Docker - git clone -b main https://github.com/WongKinYiu/yolov7 && sudo chmod -R 777 yolov7 - cd yolov7 - bash data/scripts/get_coco.sh && echo "Data done." & - sudo docker pull nvcr.io/nvidia/pytorch:21.08-py3 && echo "Docker done." & - python -m pip install --upgrade pip && pip install -r requirements.txt && python detect.py && echo "Requirements done." & - wait && echo "All tasks done." # finish background tasks -else - echo "Running re-start script." # resume interrupted runs - i=0 - list=$(sudo docker ps -qa) # container list i.e. $'one\ntwo\nthree\nfour' - while IFS= read -r id; do - ((i++)) - echo "restarting container $i: $id" - sudo docker start $id - # sudo docker exec -it $id python train.py --resume # single-GPU - sudo docker exec -d $id python utils/aws/resume.py # multi-scenario - done <<<"$list" -fi diff --git a/cv/detection/yolov7/pytorch/utils/datasets.py b/cv/detection/yolov7/pytorch/utils/datasets.py deleted file mode 100644 index 5fe4f7bcc..000000000 --- a/cv/detection/yolov7/pytorch/utils/datasets.py +++ /dev/null @@ -1,1320 +0,0 @@ -# Dataset utils and dataloaders - -import glob -import logging -import math -import os -import random -import shutil -import time -from itertools import repeat -from multiprocessing.pool import ThreadPool -from pathlib import Path -from threading import Thread - -import cv2 -import numpy as np -import torch -import torch.nn.functional as F -from PIL import Image, ExifTags -from torch.utils.data import Dataset -from tqdm import tqdm - -import pickle -from copy import deepcopy -#from pycocotools import mask as maskUtils -from torchvision.utils import save_image -from torchvision.ops import roi_pool, roi_align, ps_roi_pool, ps_roi_align - -from utils.general import check_requirements, xyxy2xywh, xywh2xyxy, xywhn2xyxy, xyn2xy, segment2box, segments2boxes, \ - resample_segments, clean_str -from utils.torch_utils import torch_distributed_zero_first - -# Parameters -help_url = 'https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data' -img_formats = ['bmp', 'jpg', 'jpeg', 'png', 'tif', 'tiff', 'dng', 'webp', 'mpo'] # acceptable image suffixes -vid_formats = ['mov', 'avi', 'mp4', 'mpg', 'mpeg', 'm4v', 'wmv', 'mkv'] # acceptable video suffixes -logger = logging.getLogger(__name__) - -# Get orientation exif tag -for orientation in ExifTags.TAGS.keys(): - if ExifTags.TAGS[orientation] == 'Orientation': - break - - -def get_hash(files): - # Returns a single hash value of a list of files - return sum(os.path.getsize(f) for f in files if os.path.isfile(f)) - - -def exif_size(img): - # Returns exif-corrected PIL size - s = img.size # (width, height) - try: - rotation = dict(img._getexif().items())[orientation] - if rotation == 6: # rotation 270 - s = (s[1], s[0]) - elif rotation == 8: # rotation 90 - s = (s[1], s[0]) - except: - pass - - return s - - -def create_dataloader(path, imgsz, batch_size, stride, opt, hyp=None, augment=False, cache=False, pad=0.0, rect=False, - rank=-1, world_size=1, workers=8, image_weights=False, quad=False, prefix=''): - # Make sure only the first process in DDP process the dataset first, and the following others can use the cache - with torch_distributed_zero_first(rank): - dataset = LoadImagesAndLabels(path, imgsz, batch_size, - augment=augment, # augment images - hyp=hyp, # augmentation hyperparameters - rect=rect, # rectangular training - cache_images=cache, - single_cls=opt.single_cls, - stride=int(stride), - pad=pad, - image_weights=image_weights, - prefix=prefix) - - batch_size = min(batch_size, len(dataset)) - nw = min([os.cpu_count() // world_size, batch_size if batch_size > 1 else 0, workers]) # number of workers - sampler = torch.utils.data.distributed.DistributedSampler(dataset) if rank != -1 else None - loader = torch.utils.data.DataLoader if image_weights else InfiniteDataLoader - # Use torch.utils.data.DataLoader() if dataset.properties will update during training else InfiniteDataLoader() - dataloader = loader(dataset, - batch_size=batch_size, - num_workers=nw, - sampler=sampler, - pin_memory=True, - collate_fn=LoadImagesAndLabels.collate_fn4 if quad else LoadImagesAndLabels.collate_fn) - return dataloader, dataset - - -class InfiniteDataLoader(torch.utils.data.dataloader.DataLoader): - """ Dataloader that reuses workers - - Uses same syntax as vanilla DataLoader - """ - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - object.__setattr__(self, 'batch_sampler', _RepeatSampler(self.batch_sampler)) - self.iterator = super().__iter__() - - def __len__(self): - return len(self.batch_sampler.sampler) - - def __iter__(self): - for i in range(len(self)): - yield next(self.iterator) - - -class _RepeatSampler(object): - """ Sampler that repeats forever - - Args: - sampler (Sampler) - """ - - def __init__(self, sampler): - self.sampler = sampler - - def __iter__(self): - while True: - yield from iter(self.sampler) - - -class LoadImages: # for inference - def __init__(self, path, img_size=640, stride=32): - p = str(Path(path).absolute()) # os-agnostic absolute path - if '*' in p: - files = sorted(glob.glob(p, recursive=True)) # glob - elif os.path.isdir(p): - files = sorted(glob.glob(os.path.join(p, '*.*'))) # dir - elif os.path.isfile(p): - files = [p] # files - else: - raise Exception(f'ERROR: {p} does not exist') - - images = [x for x in files if x.split('.')[-1].lower() in img_formats] - videos = [x for x in files if x.split('.')[-1].lower() in vid_formats] - ni, nv = len(images), len(videos) - - self.img_size = img_size - self.stride = stride - self.files = images + videos - self.nf = ni + nv # number of files - self.video_flag = [False] * ni + [True] * nv - self.mode = 'image' - if any(videos): - self.new_video(videos[0]) # new video - else: - self.cap = None - assert self.nf > 0, f'No images or videos found in {p}. ' \ - f'Supported formats are:\nimages: {img_formats}\nvideos: {vid_formats}' - - def __iter__(self): - self.count = 0 - return self - - def __next__(self): - if self.count == self.nf: - raise StopIteration - path = self.files[self.count] - - if self.video_flag[self.count]: - # Read video - self.mode = 'video' - ret_val, img0 = self.cap.read() - if not ret_val: - self.count += 1 - self.cap.release() - if self.count == self.nf: # last video - raise StopIteration - else: - path = self.files[self.count] - self.new_video(path) - ret_val, img0 = self.cap.read() - - self.frame += 1 - print(f'video {self.count + 1}/{self.nf} ({self.frame}/{self.nframes}) {path}: ', end='') - - else: - # Read image - self.count += 1 - img0 = cv2.imread(path) # BGR - assert img0 is not None, 'Image Not Found ' + path - #print(f'image {self.count}/{self.nf} {path}: ', end='') - - # Padded resize - img = letterbox(img0, self.img_size, stride=self.stride)[0] - - # Convert - img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416 - img = np.ascontiguousarray(img) - - return path, img, img0, self.cap - - def new_video(self, path): - self.frame = 0 - self.cap = cv2.VideoCapture(path) - self.nframes = int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT)) - - def __len__(self): - return self.nf # number of files - - -class LoadWebcam: # for inference - def __init__(self, pipe='0', img_size=640, stride=32): - self.img_size = img_size - self.stride = stride - - if pipe.isnumeric(): - pipe = eval(pipe) # local camera - # pipe = 'rtsp://192.168.1.64/1' # IP camera - # pipe = 'rtsp://username:password@192.168.1.64/1' # IP camera with login - # pipe = 'http://wmccpinetop.axiscam.net/mjpg/video.mjpg' # IP golf camera - - self.pipe = pipe - self.cap = cv2.VideoCapture(pipe) # video capture object - self.cap.set(cv2.CAP_PROP_BUFFERSIZE, 3) # set buffer size - - def __iter__(self): - self.count = -1 - return self - - def __next__(self): - self.count += 1 - if cv2.waitKey(1) == ord('q'): # q to quit - self.cap.release() - cv2.destroyAllWindows() - raise StopIteration - - # Read frame - if self.pipe == 0: # local camera - ret_val, img0 = self.cap.read() - img0 = cv2.flip(img0, 1) # flip left-right - else: # IP camera - n = 0 - while True: - n += 1 - self.cap.grab() - if n % 30 == 0: # skip frames - ret_val, img0 = self.cap.retrieve() - if ret_val: - break - - # Print - assert ret_val, f'Camera Error {self.pipe}' - img_path = 'webcam.jpg' - print(f'webcam {self.count}: ', end='') - - # Padded resize - img = letterbox(img0, self.img_size, stride=self.stride)[0] - - # Convert - img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416 - img = np.ascontiguousarray(img) - - return img_path, img, img0, None - - def __len__(self): - return 0 - - -class LoadStreams: # multiple IP or RTSP cameras - def __init__(self, sources='streams.txt', img_size=640, stride=32): - self.mode = 'stream' - self.img_size = img_size - self.stride = stride - - if os.path.isfile(sources): - with open(sources, 'r') as f: - sources = [x.strip() for x in f.read().strip().splitlines() if len(x.strip())] - else: - sources = [sources] - - n = len(sources) - self.imgs = [None] * n - self.sources = [clean_str(x) for x in sources] # clean source names for later - for i, s in enumerate(sources): - # Start the thread to read frames from the video stream - print(f'{i + 1}/{n}: {s}... ', end='') - url = eval(s) if s.isnumeric() else s - if 'youtube.com/' in str(url) or 'youtu.be/' in str(url): # if source is YouTube video - check_requirements(('pafy', 'youtube_dl')) - import pafy - url = pafy.new(url).getbest(preftype="mp4").url - cap = cv2.VideoCapture(url) - assert cap.isOpened(), f'Failed to open {s}' - w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) - h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) - self.fps = cap.get(cv2.CAP_PROP_FPS) % 100 - - _, self.imgs[i] = cap.read() # guarantee first frame - thread = Thread(target=self.update, args=([i, cap]), daemon=True) - print(f' success ({w}x{h} at {self.fps:.2f} FPS).') - thread.start() - print('') # newline - - # check for common shapes - s = np.stack([letterbox(x, self.img_size, stride=self.stride)[0].shape for x in self.imgs], 0) # shapes - self.rect = np.unique(s, axis=0).shape[0] == 1 # rect inference if all shapes equal - if not self.rect: - print('WARNING: Different stream shapes detected. For optimal performance supply similarly-shaped streams.') - - def update(self, index, cap): - # Read next stream frame in a daemon thread - n = 0 - while cap.isOpened(): - n += 1 - # _, self.imgs[index] = cap.read() - cap.grab() - if n == 4: # read every 4th frame - success, im = cap.retrieve() - self.imgs[index] = im if success else self.imgs[index] * 0 - n = 0 - time.sleep(1 / self.fps) # wait time - - def __iter__(self): - self.count = -1 - return self - - def __next__(self): - self.count += 1 - img0 = self.imgs.copy() - if cv2.waitKey(1) == ord('q'): # q to quit - cv2.destroyAllWindows() - raise StopIteration - - # Letterbox - img = [letterbox(x, self.img_size, auto=self.rect, stride=self.stride)[0] for x in img0] - - # Stack - img = np.stack(img, 0) - - # Convert - img = img[:, :, :, ::-1].transpose(0, 3, 1, 2) # BGR to RGB, to bsx3x416x416 - img = np.ascontiguousarray(img) - - return self.sources, img, img0, None - - def __len__(self): - return 0 # 1E12 frames = 32 streams at 30 FPS for 30 years - - -def img2label_paths(img_paths): - # Define label paths as a function of image paths - sa, sb = os.sep + 'images' + os.sep, os.sep + 'labels' + os.sep # /images/, /labels/ substrings - return ['txt'.join(x.replace(sa, sb, 1).rsplit(x.split('.')[-1], 1)) for x in img_paths] - - -class LoadImagesAndLabels(Dataset): # for training/testing - def __init__(self, path, img_size=640, batch_size=16, augment=False, hyp=None, rect=False, image_weights=False, - cache_images=False, single_cls=False, stride=32, pad=0.0, prefix=''): - self.img_size = img_size - self.augment = augment - self.hyp = hyp - self.image_weights = image_weights - self.rect = False if image_weights else rect - self.mosaic = self.augment and not self.rect # load 4 images at a time into a mosaic (only during training) - self.mosaic_border = [-img_size // 2, -img_size // 2] - self.stride = stride - self.path = path - #self.albumentations = Albumentations() if augment else None - - try: - f = [] # image files - for p in path if isinstance(path, list) else [path]: - p = Path(p) # os-agnostic - if p.is_dir(): # dir - f += glob.glob(str(p / '**' / '*.*'), recursive=True) - # f = list(p.rglob('**/*.*')) # pathlib - elif p.is_file(): # file - with open(p, 'r') as t: - t = t.read().strip().splitlines() - parent = str(p.parent) + os.sep - f += [x.replace('./', parent) if x.startswith('./') else x for x in t] # local to global path - # f += [p.parent / x.lstrip(os.sep) for x in t] # local to global path (pathlib) - else: - raise Exception(f'{prefix}{p} does not exist') - self.img_files = sorted([x.replace('/', os.sep) for x in f if x.split('.')[-1].lower() in img_formats]) - # self.img_files = sorted([x for x in f if x.suffix[1:].lower() in img_formats]) # pathlib - assert self.img_files, f'{prefix}No images found' - except Exception as e: - raise Exception(f'{prefix}Error loading data from {path}: {e}\nSee {help_url}') - - # Check cache - self.label_files = img2label_paths(self.img_files) # labels - cache_path = (p if p.is_file() else Path(self.label_files[0]).parent).with_suffix('.cache') # cached labels - if cache_path.is_file(): - cache, exists = torch.load(cache_path), True # load - #if cache['hash'] != get_hash(self.label_files + self.img_files) or 'version' not in cache: # changed - # cache, exists = self.cache_labels(cache_path, prefix), False # re-cache - else: - cache, exists = self.cache_labels(cache_path, prefix), False # cache - - # Display cache - nf, nm, ne, nc, n = cache.pop('results') # found, missing, empty, corrupted, total - if exists: - d = f"Scanning '{cache_path}' images and labels... {nf} found, {nm} missing, {ne} empty, {nc} corrupted" - tqdm(None, desc=prefix + d, total=n, initial=n) # display cache results - assert nf > 0 or not augment, f'{prefix}No labels in {cache_path}. Can not train without labels. See {help_url}' - - # Read cache - cache.pop('hash') # remove hash - cache.pop('version') # remove version - labels, shapes, self.segments = zip(*cache.values()) - self.labels = list(labels) - self.shapes = np.array(shapes, dtype=np.float64) - self.img_files = list(cache.keys()) # update - self.label_files = img2label_paths(cache.keys()) # update - if single_cls: - for x in self.labels: - x[:, 0] = 0 - - n = len(shapes) # number of images - bi = np.floor(np.arange(n) / batch_size).astype(int) # batch index - nb = bi[-1] + 1 # number of batches - self.batch = bi # batch index of image - self.n = n - self.indices = range(n) - - # Rectangular Training - if self.rect: - # Sort by aspect ratio - s = self.shapes # wh - ar = s[:, 1] / s[:, 0] # aspect ratio - irect = ar.argsort() - self.img_files = [self.img_files[i] for i in irect] - self.label_files = [self.label_files[i] for i in irect] - self.labels = [self.labels[i] for i in irect] - self.shapes = s[irect] # wh - ar = ar[irect] - - # Set training image shapes - shapes = [[1, 1]] * nb - for i in range(nb): - ari = ar[bi == i] - mini, maxi = ari.min(), ari.max() - if maxi < 1: - shapes[i] = [maxi, 1] - elif mini > 1: - shapes[i] = [1, 1 / mini] - - self.batch_shapes = np.ceil(np.array(shapes) * img_size / stride + pad).astype(int) * stride - - # Cache images into memory for faster training (WARNING: large datasets may exceed system RAM) - self.imgs = [None] * n - if cache_images: - if cache_images == 'disk': - self.im_cache_dir = Path(Path(self.img_files[0]).parent.as_posix() + '_npy') - self.img_npy = [self.im_cache_dir / Path(f).with_suffix('.npy').name for f in self.img_files] - self.im_cache_dir.mkdir(parents=True, exist_ok=True) - gb = 0 # Gigabytes of cached images - self.img_hw0, self.img_hw = [None] * n, [None] * n - results = ThreadPool(8).imap(lambda x: load_image(*x), zip(repeat(self), range(n))) - pbar = tqdm(enumerate(results), total=n) - for i, x in pbar: - if cache_images == 'disk': - if not self.img_npy[i].exists(): - np.save(self.img_npy[i].as_posix(), x[0]) - gb += self.img_npy[i].stat().st_size - else: - self.imgs[i], self.img_hw0[i], self.img_hw[i] = x - gb += self.imgs[i].nbytes - pbar.desc = f'{prefix}Caching images ({gb / 1E9:.1f}GB)' - pbar.close() - - def cache_labels(self, path=Path('./labels.cache'), prefix=''): - # Cache dataset labels, check images and read shapes - x = {} # dict - nm, nf, ne, nc = 0, 0, 0, 0 # number missing, found, empty, duplicate - pbar = tqdm(zip(self.img_files, self.label_files), desc='Scanning images', total=len(self.img_files)) - for i, (im_file, lb_file) in enumerate(pbar): - try: - # verify images - im = Image.open(im_file) - im.verify() # PIL verify - shape = exif_size(im) # image size - segments = [] # instance segments - assert (shape[0] > 9) & (shape[1] > 9), f'image size {shape} <10 pixels' - assert im.format.lower() in img_formats, f'invalid image format {im.format}' - - # verify labels - if os.path.isfile(lb_file): - nf += 1 # label found - with open(lb_file, 'r') as f: - l = [x.split() for x in f.read().strip().splitlines()] - if any([len(x) > 8 for x in l]): # is segment - classes = np.array([x[0] for x in l], dtype=np.float32) - segments = [np.array(x[1:], dtype=np.float32).reshape(-1, 2) for x in l] # (cls, xy1...) - l = np.concatenate((classes.reshape(-1, 1), segments2boxes(segments)), 1) # (cls, xywh) - l = np.array(l, dtype=np.float32) - if len(l): - assert l.shape[1] == 5, 'labels require 5 columns each' - assert (l >= 0).all(), 'negative labels' - assert (l[:, 1:] <= 1).all(), 'non-normalized or out of bounds coordinate labels' - assert np.unique(l, axis=0).shape[0] == l.shape[0], 'duplicate labels' - else: - ne += 1 # label empty - l = np.zeros((0, 5), dtype=np.float32) - else: - nm += 1 # label missing - l = np.zeros((0, 5), dtype=np.float32) - x[im_file] = [l, shape, segments] - except Exception as e: - nc += 1 - print(f'{prefix}WARNING: Ignoring corrupted image and/or label {im_file}: {e}') - - pbar.desc = f"{prefix}Scanning '{path.parent / path.stem}' images and labels... " \ - f"{nf} found, {nm} missing, {ne} empty, {nc} corrupted" - pbar.close() - - if nf == 0: - print(f'{prefix}WARNING: No labels found in {path}. See {help_url}') - - x['hash'] = get_hash(self.label_files + self.img_files) - x['results'] = nf, nm, ne, nc, i + 1 - x['version'] = 0.1 # cache version - torch.save(x, path) # save for next time - logging.info(f'{prefix}New cache created: {path}') - return x - - def __len__(self): - return len(self.img_files) - - # def __iter__(self): - # self.count = -1 - # print('ran dataset iter') - # #self.shuffled_vector = np.random.permutation(self.nF) if self.augment else np.arange(self.nF) - # return self - - def __getitem__(self, index): - index = self.indices[index] # linear, shuffled, or image_weights - - hyp = self.hyp - mosaic = self.mosaic and random.random() < hyp['mosaic'] - if mosaic: - # Load mosaic - if random.random() < 0.8: - img, labels = load_mosaic(self, index) - else: - img, labels = load_mosaic9(self, index) - shapes = None - - # MixUp https://arxiv.org/pdf/1710.09412.pdf - if random.random() < hyp['mixup']: - if random.random() < 0.8: - img2, labels2 = load_mosaic(self, random.randint(0, len(self.labels) - 1)) - else: - img2, labels2 = load_mosaic9(self, random.randint(0, len(self.labels) - 1)) - r = np.random.beta(8.0, 8.0) # mixup ratio, alpha=beta=8.0 - img = (img * r + img2 * (1 - r)).astype(np.uint8) - labels = np.concatenate((labels, labels2), 0) - - else: - # Load image - img, (h0, w0), (h, w) = load_image(self, index) - - # Letterbox - shape = self.batch_shapes[self.batch[index]] if self.rect else self.img_size # final letterboxed shape - img, ratio, pad = letterbox(img, shape, auto=False, scaleup=self.augment) - shapes = (h0, w0), ((h / h0, w / w0), pad) # for COCO mAP rescaling - - labels = self.labels[index].copy() - if labels.size: # normalized xywh to pixel xyxy format - labels[:, 1:] = xywhn2xyxy(labels[:, 1:], ratio[0] * w, ratio[1] * h, padw=pad[0], padh=pad[1]) - - if self.augment: - # Augment imagespace - if not mosaic: - img, labels = random_perspective(img, labels, - degrees=hyp['degrees'], - translate=hyp['translate'], - scale=hyp['scale'], - shear=hyp['shear'], - perspective=hyp['perspective']) - - - #img, labels = self.albumentations(img, labels) - - # Augment colorspace - augment_hsv(img, hgain=hyp['hsv_h'], sgain=hyp['hsv_s'], vgain=hyp['hsv_v']) - - # Apply cutouts - # if random.random() < 0.9: - # labels = cutout(img, labels) - - if random.random() < hyp['paste_in']: - sample_labels, sample_images, sample_masks = [], [], [] - while len(sample_labels) < 30: - sample_labels_, sample_images_, sample_masks_ = load_samples(self, random.randint(0, len(self.labels) - 1)) - sample_labels += sample_labels_ - sample_images += sample_images_ - sample_masks += sample_masks_ - #print(len(sample_labels)) - if len(sample_labels) == 0: - break - labels = pastein(img, labels, sample_labels, sample_images, sample_masks) - - nL = len(labels) # number of labels - if nL: - labels[:, 1:5] = xyxy2xywh(labels[:, 1:5]) # convert xyxy to xywh - labels[:, [2, 4]] /= img.shape[0] # normalized height 0-1 - labels[:, [1, 3]] /= img.shape[1] # normalized width 0-1 - - if self.augment: - # flip up-down - if random.random() < hyp['flipud']: - img = np.flipud(img) - if nL: - labels[:, 2] = 1 - labels[:, 2] - - # flip left-right - if random.random() < hyp['fliplr']: - img = np.fliplr(img) - if nL: - labels[:, 1] = 1 - labels[:, 1] - - labels_out = torch.zeros((nL, 6)) - if nL: - labels_out[:, 1:] = torch.from_numpy(labels) - - # Convert - img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416 - img = np.ascontiguousarray(img) - - return torch.from_numpy(img), labels_out, self.img_files[index], shapes - - @staticmethod - def collate_fn(batch): - img, label, path, shapes = zip(*batch) # transposed - for i, l in enumerate(label): - l[:, 0] = i # add target image index for build_targets() - return torch.stack(img, 0), torch.cat(label, 0), path, shapes - - @staticmethod - def collate_fn4(batch): - img, label, path, shapes = zip(*batch) # transposed - n = len(shapes) // 4 - img4, label4, path4, shapes4 = [], [], path[:n], shapes[:n] - - ho = torch.tensor([[0., 0, 0, 1, 0, 0]]) - wo = torch.tensor([[0., 0, 1, 0, 0, 0]]) - s = torch.tensor([[1, 1, .5, .5, .5, .5]]) # scale - for i in range(n): # zidane torch.zeros(16,3,720,1280) # BCHW - i *= 4 - if random.random() < 0.5: - im = F.interpolate(img[i].unsqueeze(0).float(), scale_factor=2., mode='bilinear', align_corners=False)[ - 0].type(img[i].type()) - l = label[i] - else: - im = torch.cat((torch.cat((img[i], img[i + 1]), 1), torch.cat((img[i + 2], img[i + 3]), 1)), 2) - l = torch.cat((label[i], label[i + 1] + ho, label[i + 2] + wo, label[i + 3] + ho + wo), 0) * s - img4.append(im) - label4.append(l) - - for i, l in enumerate(label4): - l[:, 0] = i # add target image index for build_targets() - - return torch.stack(img4, 0), torch.cat(label4, 0), path4, shapes4 - - -# Ancillary functions -------------------------------------------------------------------------------------------------- -def load_image(self, index): - # loads 1 image from dataset, returns img, original hw, resized hw - img = self.imgs[index] - if img is None: # not cached - path = self.img_files[index] - img = cv2.imread(path) # BGR - assert img is not None, 'Image Not Found ' + path - h0, w0 = img.shape[:2] # orig hw - r = self.img_size / max(h0, w0) # resize image to img_size - if r != 1: # always resize down, only resize up if training with augmentation - interp = cv2.INTER_AREA if r < 1 and not self.augment else cv2.INTER_LINEAR - img = cv2.resize(img, (int(w0 * r), int(h0 * r)), interpolation=interp) - return img, (h0, w0), img.shape[:2] # img, hw_original, hw_resized - else: - return self.imgs[index], self.img_hw0[index], self.img_hw[index] # img, hw_original, hw_resized - - -def augment_hsv(img, hgain=0.5, sgain=0.5, vgain=0.5): - r = np.random.uniform(-1, 1, 3) * [hgain, sgain, vgain] + 1 # random gains - hue, sat, val = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV)) - dtype = img.dtype # uint8 - - x = np.arange(0, 256, dtype=np.int16) - lut_hue = ((x * r[0]) % 180).astype(dtype) - lut_sat = np.clip(x * r[1], 0, 255).astype(dtype) - lut_val = np.clip(x * r[2], 0, 255).astype(dtype) - - img_hsv = cv2.merge((cv2.LUT(hue, lut_hue), cv2.LUT(sat, lut_sat), cv2.LUT(val, lut_val))).astype(dtype) - cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR, dst=img) # no return needed - - -def hist_equalize(img, clahe=True, bgr=False): - # Equalize histogram on BGR image 'img' with img.shape(n,m,3) and range 0-255 - yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV if bgr else cv2.COLOR_RGB2YUV) - if clahe: - c = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8)) - yuv[:, :, 0] = c.apply(yuv[:, :, 0]) - else: - yuv[:, :, 0] = cv2.equalizeHist(yuv[:, :, 0]) # equalize Y channel histogram - return cv2.cvtColor(yuv, cv2.COLOR_YUV2BGR if bgr else cv2.COLOR_YUV2RGB) # convert YUV image to RGB - - -def load_mosaic(self, index): - # loads images in a 4-mosaic - - labels4, segments4 = [], [] - s = self.img_size - yc, xc = [int(random.uniform(-x, 2 * s + x)) for x in self.mosaic_border] # mosaic center x, y - indices = [index] + random.choices(self.indices, k=3) # 3 additional image indices - for i, index in enumerate(indices): - # Load image - img, _, (h, w) = load_image(self, index) - - # place img in img4 - if i == 0: # top left - img4 = np.full((s * 2, s * 2, img.shape[2]), 114, dtype=np.uint8) # base image with 4 tiles - x1a, y1a, x2a, y2a = max(xc - w, 0), max(yc - h, 0), xc, yc # xmin, ymin, xmax, ymax (large image) - x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h # xmin, ymin, xmax, ymax (small image) - elif i == 1: # top right - x1a, y1a, x2a, y2a = xc, max(yc - h, 0), min(xc + w, s * 2), yc - x1b, y1b, x2b, y2b = 0, h - (y2a - y1a), min(w, x2a - x1a), h - elif i == 2: # bottom left - x1a, y1a, x2a, y2a = max(xc - w, 0), yc, xc, min(s * 2, yc + h) - x1b, y1b, x2b, y2b = w - (x2a - x1a), 0, w, min(y2a - y1a, h) - elif i == 3: # bottom right - x1a, y1a, x2a, y2a = xc, yc, min(xc + w, s * 2), min(s * 2, yc + h) - x1b, y1b, x2b, y2b = 0, 0, min(w, x2a - x1a), min(y2a - y1a, h) - - img4[y1a:y2a, x1a:x2a] = img[y1b:y2b, x1b:x2b] # img4[ymin:ymax, xmin:xmax] - padw = x1a - x1b - padh = y1a - y1b - - # Labels - labels, segments = self.labels[index].copy(), self.segments[index].copy() - if labels.size: - labels[:, 1:] = xywhn2xyxy(labels[:, 1:], w, h, padw, padh) # normalized xywh to pixel xyxy format - segments = [xyn2xy(x, w, h, padw, padh) for x in segments] - labels4.append(labels) - segments4.extend(segments) - - # Concat/clip labels - labels4 = np.concatenate(labels4, 0) - for x in (labels4[:, 1:], *segments4): - np.clip(x, 0, 2 * s, out=x) # clip when using random_perspective() - # img4, labels4 = replicate(img4, labels4) # replicate - - # Augment - #img4, labels4, segments4 = remove_background(img4, labels4, segments4) - #sample_segments(img4, labels4, segments4, probability=self.hyp['copy_paste']) - img4, labels4, segments4 = copy_paste(img4, labels4, segments4, probability=self.hyp['copy_paste']) - img4, labels4 = random_perspective(img4, labels4, segments4, - degrees=self.hyp['degrees'], - translate=self.hyp['translate'], - scale=self.hyp['scale'], - shear=self.hyp['shear'], - perspective=self.hyp['perspective'], - border=self.mosaic_border) # border to remove - - return img4, labels4 - - -def load_mosaic9(self, index): - # loads images in a 9-mosaic - - labels9, segments9 = [], [] - s = self.img_size - indices = [index] + random.choices(self.indices, k=8) # 8 additional image indices - for i, index in enumerate(indices): - # Load image - img, _, (h, w) = load_image(self, index) - - # place img in img9 - if i == 0: # center - img9 = np.full((s * 3, s * 3, img.shape[2]), 114, dtype=np.uint8) # base image with 4 tiles - h0, w0 = h, w - c = s, s, s + w, s + h # xmin, ymin, xmax, ymax (base) coordinates - elif i == 1: # top - c = s, s - h, s + w, s - elif i == 2: # top right - c = s + wp, s - h, s + wp + w, s - elif i == 3: # right - c = s + w0, s, s + w0 + w, s + h - elif i == 4: # bottom right - c = s + w0, s + hp, s + w0 + w, s + hp + h - elif i == 5: # bottom - c = s + w0 - w, s + h0, s + w0, s + h0 + h - elif i == 6: # bottom left - c = s + w0 - wp - w, s + h0, s + w0 - wp, s + h0 + h - elif i == 7: # left - c = s - w, s + h0 - h, s, s + h0 - elif i == 8: # top left - c = s - w, s + h0 - hp - h, s, s + h0 - hp - - padx, pady = c[:2] - x1, y1, x2, y2 = [max(x, 0) for x in c] # allocate coords - - # Labels - labels, segments = self.labels[index].copy(), self.segments[index].copy() - if labels.size: - labels[:, 1:] = xywhn2xyxy(labels[:, 1:], w, h, padx, pady) # normalized xywh to pixel xyxy format - segments = [xyn2xy(x, w, h, padx, pady) for x in segments] - labels9.append(labels) - segments9.extend(segments) - - # Image - img9[y1:y2, x1:x2] = img[y1 - pady:, x1 - padx:] # img9[ymin:ymax, xmin:xmax] - hp, wp = h, w # height, width previous - - # Offset - yc, xc = [int(random.uniform(0, s)) for _ in self.mosaic_border] # mosaic center x, y - img9 = img9[yc:yc + 2 * s, xc:xc + 2 * s] - - # Concat/clip labels - labels9 = np.concatenate(labels9, 0) - labels9[:, [1, 3]] -= xc - labels9[:, [2, 4]] -= yc - c = np.array([xc, yc]) # centers - segments9 = [x - c for x in segments9] - - for x in (labels9[:, 1:], *segments9): - np.clip(x, 0, 2 * s, out=x) # clip when using random_perspective() - # img9, labels9 = replicate(img9, labels9) # replicate - - # Augment - #img9, labels9, segments9 = remove_background(img9, labels9, segments9) - img9, labels9, segments9 = copy_paste(img9, labels9, segments9, probability=self.hyp['copy_paste']) - img9, labels9 = random_perspective(img9, labels9, segments9, - degrees=self.hyp['degrees'], - translate=self.hyp['translate'], - scale=self.hyp['scale'], - shear=self.hyp['shear'], - perspective=self.hyp['perspective'], - border=self.mosaic_border) # border to remove - - return img9, labels9 - - -def load_samples(self, index): - # loads images in a 4-mosaic - - labels4, segments4 = [], [] - s = self.img_size - yc, xc = [int(random.uniform(-x, 2 * s + x)) for x in self.mosaic_border] # mosaic center x, y - indices = [index] + random.choices(self.indices, k=3) # 3 additional image indices - for i, index in enumerate(indices): - # Load image - img, _, (h, w) = load_image(self, index) - - # place img in img4 - if i == 0: # top left - img4 = np.full((s * 2, s * 2, img.shape[2]), 114, dtype=np.uint8) # base image with 4 tiles - x1a, y1a, x2a, y2a = max(xc - w, 0), max(yc - h, 0), xc, yc # xmin, ymin, xmax, ymax (large image) - x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h # xmin, ymin, xmax, ymax (small image) - elif i == 1: # top right - x1a, y1a, x2a, y2a = xc, max(yc - h, 0), min(xc + w, s * 2), yc - x1b, y1b, x2b, y2b = 0, h - (y2a - y1a), min(w, x2a - x1a), h - elif i == 2: # bottom left - x1a, y1a, x2a, y2a = max(xc - w, 0), yc, xc, min(s * 2, yc + h) - x1b, y1b, x2b, y2b = w - (x2a - x1a), 0, w, min(y2a - y1a, h) - elif i == 3: # bottom right - x1a, y1a, x2a, y2a = xc, yc, min(xc + w, s * 2), min(s * 2, yc + h) - x1b, y1b, x2b, y2b = 0, 0, min(w, x2a - x1a), min(y2a - y1a, h) - - img4[y1a:y2a, x1a:x2a] = img[y1b:y2b, x1b:x2b] # img4[ymin:ymax, xmin:xmax] - padw = x1a - x1b - padh = y1a - y1b - - # Labels - labels, segments = self.labels[index].copy(), self.segments[index].copy() - if labels.size: - labels[:, 1:] = xywhn2xyxy(labels[:, 1:], w, h, padw, padh) # normalized xywh to pixel xyxy format - segments = [xyn2xy(x, w, h, padw, padh) for x in segments] - labels4.append(labels) - segments4.extend(segments) - - # Concat/clip labels - labels4 = np.concatenate(labels4, 0) - for x in (labels4[:, 1:], *segments4): - np.clip(x, 0, 2 * s, out=x) # clip when using random_perspective() - # img4, labels4 = replicate(img4, labels4) # replicate - - # Augment - #img4, labels4, segments4 = remove_background(img4, labels4, segments4) - sample_labels, sample_images, sample_masks = sample_segments(img4, labels4, segments4, probability=0.5) - - return sample_labels, sample_images, sample_masks - - -def copy_paste(img, labels, segments, probability=0.5): - # Implement Copy-Paste augmentation https://arxiv.org/abs/2012.07177, labels as nx5 np.array(cls, xyxy) - n = len(segments) - if probability and n: - h, w, c = img.shape # height, width, channels - im_new = np.zeros(img.shape, np.uint8) - for j in random.sample(range(n), k=round(probability * n)): - l, s = labels[j], segments[j] - box = w - l[3], l[2], w - l[1], l[4] - ioa = bbox_ioa(box, labels[:, 1:5]) # intersection over area - if (ioa < 0.30).all(): # allow 30% obscuration of existing labels - labels = np.concatenate((labels, [[l[0], *box]]), 0) - segments.append(np.concatenate((w - s[:, 0:1], s[:, 1:2]), 1)) - cv2.drawContours(im_new, [segments[j].astype(np.int32)], -1, (255, 255, 255), cv2.FILLED) - - result = cv2.bitwise_and(src1=img, src2=im_new) - result = cv2.flip(result, 1) # augment segments (flip left-right) - i = result > 0 # pixels to replace - # i[:, :] = result.max(2).reshape(h, w, 1) # act over ch - img[i] = result[i] # cv2.imwrite('debug.jpg', img) # debug - - return img, labels, segments - - -def remove_background(img, labels, segments): - # Implement Copy-Paste augmentation https://arxiv.org/abs/2012.07177, labels as nx5 np.array(cls, xyxy) - n = len(segments) - h, w, c = img.shape # height, width, channels - im_new = np.zeros(img.shape, np.uint8) - img_new = np.ones(img.shape, np.uint8) * 114 - for j in range(n): - cv2.drawContours(im_new, [segments[j].astype(np.int32)], -1, (255, 255, 255), cv2.FILLED) - - result = cv2.bitwise_and(src1=img, src2=im_new) - - i = result > 0 # pixels to replace - img_new[i] = result[i] # cv2.imwrite('debug.jpg', img) # debug - - return img_new, labels, segments - - -def sample_segments(img, labels, segments, probability=0.5): - # Implement Copy-Paste augmentation https://arxiv.org/abs/2012.07177, labels as nx5 np.array(cls, xyxy) - n = len(segments) - sample_labels = [] - sample_images = [] - sample_masks = [] - if probability and n: - h, w, c = img.shape # height, width, channels - for j in random.sample(range(n), k=round(probability * n)): - l, s = labels[j], segments[j] - box = l[1].astype(int).clip(0,w-1), l[2].astype(int).clip(0,h-1), l[3].astype(int).clip(0,w-1), l[4].astype(int).clip(0,h-1) - - #print(box) - if (box[2] <= box[0]) or (box[3] <= box[1]): - continue - - sample_labels.append(l[0]) - - mask = np.zeros(img.shape, np.uint8) - - cv2.drawContours(mask, [segments[j].astype(np.int32)], -1, (255, 255, 255), cv2.FILLED) - sample_masks.append(mask[box[1]:box[3],box[0]:box[2],:]) - - result = cv2.bitwise_and(src1=img, src2=mask) - i = result > 0 # pixels to replace - mask[i] = result[i] # cv2.imwrite('debug.jpg', img) # debug - #print(box) - sample_images.append(mask[box[1]:box[3],box[0]:box[2],:]) - - return sample_labels, sample_images, sample_masks - - -def replicate(img, labels): - # Replicate labels - h, w = img.shape[:2] - boxes = labels[:, 1:].astype(int) - x1, y1, x2, y2 = boxes.T - s = ((x2 - x1) + (y2 - y1)) / 2 # side length (pixels) - for i in s.argsort()[:round(s.size * 0.5)]: # smallest indices - x1b, y1b, x2b, y2b = boxes[i] - bh, bw = y2b - y1b, x2b - x1b - yc, xc = int(random.uniform(0, h - bh)), int(random.uniform(0, w - bw)) # offset x, y - x1a, y1a, x2a, y2a = [xc, yc, xc + bw, yc + bh] - img[y1a:y2a, x1a:x2a] = img[y1b:y2b, x1b:x2b] # img4[ymin:ymax, xmin:xmax] - labels = np.append(labels, [[labels[i, 0], x1a, y1a, x2a, y2a]], axis=0) - - return img, labels - - -def letterbox(img, new_shape=(640, 640), color=(114, 114, 114), auto=True, scaleFill=False, scaleup=True, stride=32): - # Resize and pad image while meeting stride-multiple constraints - shape = img.shape[:2] # current shape [height, width] - if isinstance(new_shape, int): - new_shape = (new_shape, new_shape) - - # Scale ratio (new / old) - r = min(new_shape[0] / shape[0], new_shape[1] / shape[1]) - if not scaleup: # only scale down, do not scale up (for better test mAP) - r = min(r, 1.0) - - # Compute padding - ratio = r, r # width, height ratios - new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r)) - dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1] # wh padding - if auto: # minimum rectangle - dw, dh = np.mod(dw, stride), np.mod(dh, stride) # wh padding - elif scaleFill: # stretch - dw, dh = 0.0, 0.0 - new_unpad = (new_shape[1], new_shape[0]) - ratio = new_shape[1] / shape[1], new_shape[0] / shape[0] # width, height ratios - - dw /= 2 # divide padding into 2 sides - dh /= 2 - - if shape[::-1] != new_unpad: # resize - img = cv2.resize(img, new_unpad, interpolation=cv2.INTER_LINEAR) - top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1)) - left, right = int(round(dw - 0.1)), int(round(dw + 0.1)) - img = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color) # add border - return img, ratio, (dw, dh) - - -def random_perspective(img, targets=(), segments=(), degrees=10, translate=.1, scale=.1, shear=10, perspective=0.0, - border=(0, 0)): - # torchvision.transforms.RandomAffine(degrees=(-10, 10), translate=(.1, .1), scale=(.9, 1.1), shear=(-10, 10)) - # targets = [cls, xyxy] - - height = img.shape[0] + border[0] * 2 # shape(h,w,c) - width = img.shape[1] + border[1] * 2 - - # Center - C = np.eye(3) - C[0, 2] = -img.shape[1] / 2 # x translation (pixels) - C[1, 2] = -img.shape[0] / 2 # y translation (pixels) - - # Perspective - P = np.eye(3) - P[2, 0] = random.uniform(-perspective, perspective) # x perspective (about y) - P[2, 1] = random.uniform(-perspective, perspective) # y perspective (about x) - - # Rotation and Scale - R = np.eye(3) - a = random.uniform(-degrees, degrees) - # a += random.choice([-180, -90, 0, 90]) # add 90deg rotations to small rotations - s = random.uniform(1 - scale, 1.1 + scale) - # s = 2 ** random.uniform(-scale, scale) - R[:2] = cv2.getRotationMatrix2D(angle=a, center=(0, 0), scale=s) - - # Shear - S = np.eye(3) - S[0, 1] = math.tan(random.uniform(-shear, shear) * math.pi / 180) # x shear (deg) - S[1, 0] = math.tan(random.uniform(-shear, shear) * math.pi / 180) # y shear (deg) - - # Translation - T = np.eye(3) - T[0, 2] = random.uniform(0.5 - translate, 0.5 + translate) * width # x translation (pixels) - T[1, 2] = random.uniform(0.5 - translate, 0.5 + translate) * height # y translation (pixels) - - # Combined rotation matrix - M = T @ S @ R @ P @ C # order of operations (right to left) is IMPORTANT - if (border[0] != 0) or (border[1] != 0) or (M != np.eye(3)).any(): # image changed - if perspective: - img = cv2.warpPerspective(img, M, dsize=(width, height), borderValue=(114, 114, 114)) - else: # affine - img = cv2.warpAffine(img, M[:2], dsize=(width, height), borderValue=(114, 114, 114)) - - # Visualize - # import matplotlib.pyplot as plt - # ax = plt.subplots(1, 2, figsize=(12, 6))[1].ravel() - # ax[0].imshow(img[:, :, ::-1]) # base - # ax[1].imshow(img2[:, :, ::-1]) # warped - - # Transform label coordinates - n = len(targets) - if n: - use_segments = any(x.any() for x in segments) - new = np.zeros((n, 4)) - if use_segments: # warp segments - segments = resample_segments(segments) # upsample - for i, segment in enumerate(segments): - xy = np.ones((len(segment), 3)) - xy[:, :2] = segment - xy = xy @ M.T # transform - xy = xy[:, :2] / xy[:, 2:3] if perspective else xy[:, :2] # perspective rescale or affine - - # clip - new[i] = segment2box(xy, width, height) - - else: # warp boxes - xy = np.ones((n * 4, 3)) - xy[:, :2] = targets[:, [1, 2, 3, 4, 1, 4, 3, 2]].reshape(n * 4, 2) # x1y1, x2y2, x1y2, x2y1 - xy = xy @ M.T # transform - xy = (xy[:, :2] / xy[:, 2:3] if perspective else xy[:, :2]).reshape(n, 8) # perspective rescale or affine - - # create new boxes - x = xy[:, [0, 2, 4, 6]] - y = xy[:, [1, 3, 5, 7]] - new = np.concatenate((x.min(1), y.min(1), x.max(1), y.max(1))).reshape(4, n).T - - # clip - new[:, [0, 2]] = new[:, [0, 2]].clip(0, width) - new[:, [1, 3]] = new[:, [1, 3]].clip(0, height) - - # filter candidates - i = box_candidates(box1=targets[:, 1:5].T * s, box2=new.T, area_thr=0.01 if use_segments else 0.10) - targets = targets[i] - targets[:, 1:5] = new[i] - - return img, targets - - -def box_candidates(box1, box2, wh_thr=2, ar_thr=20, area_thr=0.1, eps=1e-16): # box1(4,n), box2(4,n) - # Compute candidate boxes: box1 before augment, box2 after augment, wh_thr (pixels), aspect_ratio_thr, area_ratio - w1, h1 = box1[2] - box1[0], box1[3] - box1[1] - w2, h2 = box2[2] - box2[0], box2[3] - box2[1] - ar = np.maximum(w2 / (h2 + eps), h2 / (w2 + eps)) # aspect ratio - return (w2 > wh_thr) & (h2 > wh_thr) & (w2 * h2 / (w1 * h1 + eps) > area_thr) & (ar < ar_thr) # candidates - - -def bbox_ioa(box1, box2): - # Returns the intersection over box2 area given box1, box2. box1 is 4, box2 is nx4. boxes are x1y1x2y2 - box2 = box2.transpose() - - # Get the coordinates of bounding boxes - b1_x1, b1_y1, b1_x2, b1_y2 = box1[0], box1[1], box1[2], box1[3] - b2_x1, b2_y1, b2_x2, b2_y2 = box2[0], box2[1], box2[2], box2[3] - - # Intersection area - inter_area = (np.minimum(b1_x2, b2_x2) - np.maximum(b1_x1, b2_x1)).clip(0) * \ - (np.minimum(b1_y2, b2_y2) - np.maximum(b1_y1, b2_y1)).clip(0) - - # box2 area - box2_area = (b2_x2 - b2_x1) * (b2_y2 - b2_y1) + 1e-16 - - # Intersection over box2 area - return inter_area / box2_area - - -def cutout(image, labels): - # Applies image cutout augmentation https://arxiv.org/abs/1708.04552 - h, w = image.shape[:2] - - # create random masks - scales = [0.5] * 1 + [0.25] * 2 + [0.125] * 4 + [0.0625] * 8 + [0.03125] * 16 # image size fraction - for s in scales: - mask_h = random.randint(1, int(h * s)) - mask_w = random.randint(1, int(w * s)) - - # box - xmin = max(0, random.randint(0, w) - mask_w // 2) - ymin = max(0, random.randint(0, h) - mask_h // 2) - xmax = min(w, xmin + mask_w) - ymax = min(h, ymin + mask_h) - - # apply random color mask - image[ymin:ymax, xmin:xmax] = [random.randint(64, 191) for _ in range(3)] - - # return unobscured labels - if len(labels) and s > 0.03: - box = np.array([xmin, ymin, xmax, ymax], dtype=np.float32) - ioa = bbox_ioa(box, labels[:, 1:5]) # intersection over area - labels = labels[ioa < 0.60] # remove >60% obscured labels - - return labels - - -def pastein(image, labels, sample_labels, sample_images, sample_masks): - # Applies image cutout augmentation https://arxiv.org/abs/1708.04552 - h, w = image.shape[:2] - - # create random masks - scales = [0.75] * 2 + [0.5] * 4 + [0.25] * 4 + [0.125] * 4 + [0.0625] * 6 # image size fraction - for s in scales: - if random.random() < 0.2: - continue - mask_h = random.randint(1, int(h * s)) - mask_w = random.randint(1, int(w * s)) - - # box - xmin = max(0, random.randint(0, w) - mask_w // 2) - ymin = max(0, random.randint(0, h) - mask_h // 2) - xmax = min(w, xmin + mask_w) - ymax = min(h, ymin + mask_h) - - box = np.array([xmin, ymin, xmax, ymax], dtype=np.float32) - if len(labels): - ioa = bbox_ioa(box, labels[:, 1:5]) # intersection over area - else: - ioa = np.zeros(1) - - if (ioa < 0.30).all() and len(sample_labels) and (xmax > xmin+20) and (ymax > ymin+20): # allow 30% obscuration of existing labels - sel_ind = random.randint(0, len(sample_labels)-1) - #print(len(sample_labels)) - #print(sel_ind) - #print((xmax-xmin, ymax-ymin)) - #print(image[ymin:ymax, xmin:xmax].shape) - #print([[sample_labels[sel_ind], *box]]) - #print(labels.shape) - hs, ws, cs = sample_images[sel_ind].shape - r_scale = min((ymax-ymin)/hs, (xmax-xmin)/ws) - r_w = int(ws*r_scale) - r_h = int(hs*r_scale) - - if (r_w > 10) and (r_h > 10): - r_mask = cv2.resize(sample_masks[sel_ind], (r_w, r_h)) - r_image = cv2.resize(sample_images[sel_ind], (r_w, r_h)) - temp_crop = image[ymin:ymin+r_h, xmin:xmin+r_w] - m_ind = r_mask > 0 - if m_ind.astype(np.int32).sum() > 60: - temp_crop[m_ind] = r_image[m_ind] - #print(sample_labels[sel_ind]) - #print(sample_images[sel_ind].shape) - #print(temp_crop.shape) - box = np.array([xmin, ymin, xmin+r_w, ymin+r_h], dtype=np.float32) - if len(labels): - labels = np.concatenate((labels, [[sample_labels[sel_ind], *box]]), 0) - else: - labels = np.array([[sample_labels[sel_ind], *box]]) - - image[ymin:ymin+r_h, xmin:xmin+r_w] = temp_crop - - return labels - -class Albumentations: - # YOLOv5 Albumentations class (optional, only used if package is installed) - def __init__(self): - self.transform = None - import albumentations as A - - self.transform = A.Compose([ - A.CLAHE(p=0.01), - A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.01), - A.RandomGamma(gamma_limit=[80, 120], p=0.01), - A.Blur(p=0.01), - A.MedianBlur(p=0.01), - A.ToGray(p=0.01), - A.ImageCompression(quality_lower=75, p=0.01),], - bbox_params=A.BboxParams(format='pascal_voc', label_fields=['class_labels'])) - - #logging.info(colorstr('albumentations: ') + ', '.join(f'{x}' for x in self.transform.transforms if x.p)) - - def __call__(self, im, labels, p=1.0): - if self.transform and random.random() < p: - new = self.transform(image=im, bboxes=labels[:, 1:], class_labels=labels[:, 0]) # transformed - im, labels = new['image'], np.array([[c, *b] for c, b in zip(new['class_labels'], new['bboxes'])]) - return im, labels - - -def create_folder(path='./new'): - # Create folder - if os.path.exists(path): - shutil.rmtree(path) # delete output folder - os.makedirs(path) # make new output folder - - -def flatten_recursive(path='../coco'): - # Flatten a recursive directory by bringing all files to top level - new_path = Path(path + '_flat') - create_folder(new_path) - for file in tqdm(glob.glob(str(Path(path)) + '/**/*.*', recursive=True)): - shutil.copyfile(file, new_path / Path(file).name) - - -def extract_boxes(path='../coco/'): # from utils.datasets import *; extract_boxes('../coco128') - # Convert detection dataset into classification dataset, with one directory per class - - path = Path(path) # images dir - shutil.rmtree(path / 'classifier') if (path / 'classifier').is_dir() else None # remove existing - files = list(path.rglob('*.*')) - n = len(files) # number of files - for im_file in tqdm(files, total=n): - if im_file.suffix[1:] in img_formats: - # image - im = cv2.imread(str(im_file))[..., ::-1] # BGR to RGB - h, w = im.shape[:2] - - # labels - lb_file = Path(img2label_paths([str(im_file)])[0]) - if Path(lb_file).exists(): - with open(lb_file, 'r') as f: - lb = np.array([x.split() for x in f.read().strip().splitlines()], dtype=np.float32) # labels - - for j, x in enumerate(lb): - c = int(x[0]) # class - f = (path / 'classifier') / f'{c}' / f'{path.stem}_{im_file.stem}_{j}.jpg' # new filename - if not f.parent.is_dir(): - f.parent.mkdir(parents=True) - - b = x[1:] * [w, h, w, h] # box - # b[2:] = b[2:].max() # rectangle to square - b[2:] = b[2:] * 1.2 + 3 # pad - b = xywh2xyxy(b.reshape(-1, 4)).ravel().astype(np.int) - - b[[0, 2]] = np.clip(b[[0, 2]], 0, w) # clip boxes outside of image - b[[1, 3]] = np.clip(b[[1, 3]], 0, h) - assert cv2.imwrite(str(f), im[b[1]:b[3], b[0]:b[2]]), f'box failure in {f}' - - -def autosplit(path='../coco', weights=(0.9, 0.1, 0.0), annotated_only=False): - """ Autosplit a dataset into train/val/test splits and save path/autosplit_*.txt files - Usage: from utils.datasets import *; autosplit('../coco') - Arguments - path: Path to images directory - weights: Train, val, test weights (list) - annotated_only: Only use images with an annotated txt file - """ - path = Path(path) # images dir - files = sum([list(path.rglob(f"*.{img_ext}")) for img_ext in img_formats], []) # image files only - n = len(files) # number of files - indices = random.choices([0, 1, 2], weights=weights, k=n) # assign each image to a split - - txt = ['autosplit_train.txt', 'autosplit_val.txt', 'autosplit_test.txt'] # 3 txt files - [(path / x).unlink() for x in txt if (path / x).exists()] # remove existing - - print(f'Autosplitting images from {path}' + ', using *.txt labeled images only' * annotated_only) - for i, img in tqdm(zip(indices, files), total=n): - if not annotated_only or Path(img2label_paths([str(img)])[0]).exists(): # check label - with open(path / txt[i], 'a') as f: - f.write(str(img) + '\n') # add image to txt file - - -def load_segmentations(self, index): - key = '/work/handsomejw66/coco17/' + self.img_files[index] - #print(key) - # /work/handsomejw66/coco17/ - return self.segs[key] diff --git a/cv/detection/yolov7/pytorch/utils/general.py b/cv/detection/yolov7/pytorch/utils/general.py deleted file mode 100644 index decdcc64e..000000000 --- a/cv/detection/yolov7/pytorch/utils/general.py +++ /dev/null @@ -1,892 +0,0 @@ -# YOLOR general utils - -import glob -import logging -import math -import os -import platform -import random -import re -import subprocess -import time -from pathlib import Path - -import cv2 -import numpy as np -import pandas as pd -import torch -import torchvision -import yaml - -from utils.google_utils import gsutil_getsize -from utils.metrics import fitness -from utils.torch_utils import init_torch_seeds - -# Settings -torch.set_printoptions(linewidth=320, precision=5, profile='long') -np.set_printoptions(linewidth=320, formatter={'float_kind': '{:11.5g}'.format}) # format short g, %precision=5 -pd.options.display.max_columns = 10 -cv2.setNumThreads(0) # prevent OpenCV from multithreading (incompatible with PyTorch DataLoader) -os.environ['NUMEXPR_MAX_THREADS'] = str(min(os.cpu_count(), 8)) # NumExpr max threads - - -def set_logging(rank=-1): - logging.basicConfig( - format="%(message)s", - level=logging.INFO if rank in [-1, 0] else logging.WARN) - - -def init_seeds(seed=0): - # Initialize random number generator (RNG) seeds - random.seed(seed) - np.random.seed(seed) - init_torch_seeds(seed) - - -def get_latest_run(search_dir='.'): - # Return path to most recent 'last.pt' in /runs (i.e. to --resume from) - last_list = glob.glob(f'{search_dir}/**/last*.pt', recursive=True) - return max(last_list, key=os.path.getctime) if last_list else '' - - -def isdocker(): - # Is environment a Docker container - return Path('/workspace').exists() # or Path('/.dockerenv').exists() - - -def emojis(str=''): - # Return platform-dependent emoji-safe version of string - return str.encode().decode('ascii', 'ignore') if platform.system() == 'Windows' else str - - -def check_online(): - # Check internet connectivity - import socket - try: - socket.create_connection(("1.1.1.1", 443), 5) # check host accesability - return True - except OSError: - return False - - -def check_git_status(): - # Recommend 'git pull' if code is out of date - print(colorstr('github: '), end='') - try: - assert Path('.git').exists(), 'skipping check (not a git repository)' - assert not isdocker(), 'skipping check (Docker image)' - assert check_online(), 'skipping check (offline)' - - cmd = 'git fetch && git config --get remote.origin.url' - url = subprocess.check_output(cmd, shell=True).decode().strip().rstrip('.git') # github repo url - branch = subprocess.check_output('git rev-parse --abbrev-ref HEAD', shell=True).decode().strip() # checked out - n = int(subprocess.check_output(f'git rev-list {branch}..origin/master --count', shell=True)) # commits behind - if n > 0: - s = f"⚠️ WARNING: code is out of date by {n} commit{'s' * (n > 1)}. " \ - f"Use 'git pull' to update or 'git clone {url}' to download latest." - else: - s = f'up to date with {url} ✅' - print(emojis(s)) # emoji-safe - except Exception as e: - print(e) - - -def check_requirements(requirements='requirements.txt', exclude=()): - # Check installed dependencies meet requirements (pass *.txt file or list of packages) - import pkg_resources as pkg - prefix = colorstr('red', 'bold', 'requirements:') - if isinstance(requirements, (str, Path)): # requirements.txt file - file = Path(requirements) - if not file.exists(): - print(f"{prefix} {file.resolve()} not found, check failed.") - return - requirements = [f'{x.name}{x.specifier}' for x in pkg.parse_requirements(file.open()) if x.name not in exclude] - else: # list or tuple of packages - requirements = [x for x in requirements if x not in exclude] - - n = 0 # number of packages updates - for r in requirements: - try: - pkg.require(r) - except Exception as e: # DistributionNotFound or VersionConflict if requirements not met - n += 1 - print(f"{prefix} {e.req} not found and is required by YOLOR, attempting auto-update...") - print(subprocess.check_output(f"pip install '{e.req}'", shell=True).decode()) - - if n: # if packages updated - source = file.resolve() if 'file' in locals() else requirements - s = f"{prefix} {n} package{'s' * (n > 1)} updated per {source}\n" \ - f"{prefix} ⚠️ {colorstr('bold', 'Restart runtime or rerun command for updates to take effect')}\n" - print(emojis(s)) # emoji-safe - - -def check_img_size(img_size, s=32): - # Verify img_size is a multiple of stride s - new_size = make_divisible(img_size, int(s)) # ceil gs-multiple - if new_size != img_size: - print('WARNING: --img-size %g must be multiple of max stride %g, updating to %g' % (img_size, s, new_size)) - return new_size - - -def check_imshow(): - # Check if environment supports image displays - try: - assert not isdocker(), 'cv2.imshow() is disabled in Docker environments' - cv2.imshow('test', np.zeros((1, 1, 3))) - cv2.waitKey(1) - cv2.destroyAllWindows() - cv2.waitKey(1) - return True - except Exception as e: - print(f'WARNING: Environment does not support cv2.imshow() or PIL Image.show() image displays\n{e}') - return False - - -def check_file(file): - # Search for file if not found - if Path(file).is_file() or file == '': - return file - else: - files = glob.glob('./**/' + file, recursive=True) # find file - assert len(files), f'File Not Found: {file}' # assert file was found - assert len(files) == 1, f"Multiple files match '{file}', specify exact path: {files}" # assert unique - return files[0] # return file - - -def check_dataset(dict): - # Download dataset if not found locally - val, s = dict.get('val'), dict.get('download') - if val and len(val): - val = [Path(x).resolve() for x in (val if isinstance(val, list) else [val])] # val path - if not all(x.exists() for x in val): - print('\nWARNING: Dataset not found, nonexistent paths: %s' % [str(x) for x in val if not x.exists()]) - if s and len(s): # download script - print('Downloading %s ...' % s) - if s.startswith('http') and s.endswith('.zip'): # URL - f = Path(s).name # filename - torch.hub.download_url_to_file(s, f) - r = os.system('unzip -q %s -d ../ && rm %s' % (f, f)) # unzip - else: # bash script - r = os.system(s) - print('Dataset autodownload %s\n' % ('success' if r == 0 else 'failure')) # analyze return value - else: - raise Exception('Dataset not found.') - - -def make_divisible(x, divisor): - # Returns x evenly divisible by divisor - return math.ceil(x / divisor) * divisor - - -def clean_str(s): - # Cleans a string by replacing special characters with underscore _ - return re.sub(pattern="[|@#!¡·$€%&()=?¿^*;:,¨´><+]", repl="_", string=s) - - -def one_cycle(y1=0.0, y2=1.0, steps=100): - # lambda function for sinusoidal ramp from y1 to y2 - return lambda x: ((1 - math.cos(x * math.pi / steps)) / 2) * (y2 - y1) + y1 - - -def colorstr(*input): - # Colors a string https://en.wikipedia.org/wiki/ANSI_escape_code, i.e. colorstr('blue', 'hello world') - *args, string = input if len(input) > 1 else ('blue', 'bold', input[0]) # color arguments, string - colors = {'black': '\033[30m', # basic colors - 'red': '\033[31m', - 'green': '\033[32m', - 'yellow': '\033[33m', - 'blue': '\033[34m', - 'magenta': '\033[35m', - 'cyan': '\033[36m', - 'white': '\033[37m', - 'bright_black': '\033[90m', # bright colors - 'bright_red': '\033[91m', - 'bright_green': '\033[92m', - 'bright_yellow': '\033[93m', - 'bright_blue': '\033[94m', - 'bright_magenta': '\033[95m', - 'bright_cyan': '\033[96m', - 'bright_white': '\033[97m', - 'end': '\033[0m', # misc - 'bold': '\033[1m', - 'underline': '\033[4m'} - return ''.join(colors[x] for x in args) + f'{string}' + colors['end'] - - -def labels_to_class_weights(labels, nc=80): - # Get class weights (inverse frequency) from training labels - if labels[0] is None: # no labels loaded - return torch.Tensor() - - labels = np.concatenate(labels, 0) # labels.shape = (866643, 5) for COCO - classes = labels[:, 0].astype(np.int32) # labels = [class xywh] - weights = np.bincount(classes, minlength=nc) # occurrences per class - - # Prepend gridpoint count (for uCE training) - # gpi = ((320 / 32 * np.array([1, 2, 4])) ** 2 * 3).sum() # gridpoints per image - # weights = np.hstack([gpi * len(labels) - weights.sum() * 9, weights * 9]) ** 0.5 # prepend gridpoints to start - - weights[weights == 0] = 1 # replace empty bins with 1 - weights = 1 / weights # number of targets per class - weights /= weights.sum() # normalize - return torch.from_numpy(weights) - - -def labels_to_image_weights(labels, nc=80, class_weights=np.ones(80)): - # Produces image weights based on class_weights and image contents - class_counts = np.array([np.bincount(x[:, 0].astype(np.int32), minlength=nc) for x in labels]) - image_weights = (class_weights.reshape(1, nc) * class_counts).sum(1) - # index = random.choices(range(n), weights=image_weights, k=1) # weight image sample - return image_weights - - -def coco80_to_coco91_class(): # converts 80-index (val2014) to 91-index (paper) - # https://tech.amikelive.com/node-718/what-object-categories-labels-are-in-coco-dataset/ - # a = np.loadtxt('data/coco.names', dtype='str', delimiter='\n') - # b = np.loadtxt('data/coco_paper.names', dtype='str', delimiter='\n') - # x1 = [list(a[i] == b).index(True) + 1 for i in range(80)] # darknet to coco - # x2 = [list(b[i] == a).index(True) if any(b[i] == a) else None for i in range(91)] # coco to darknet - x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 67, 70, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 90] - return x - - -def xyxy2xywh(x): - # Convert nx4 boxes from [x1, y1, x2, y2] to [x, y, w, h] where xy1=top-left, xy2=bottom-right - y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x) - y[:, 0] = (x[:, 0] + x[:, 2]) / 2 # x center - y[:, 1] = (x[:, 1] + x[:, 3]) / 2 # y center - y[:, 2] = x[:, 2] - x[:, 0] # width - y[:, 3] = x[:, 3] - x[:, 1] # height - return y - - -def xywh2xyxy(x): - # Convert nx4 boxes from [x, y, w, h] to [x1, y1, x2, y2] where xy1=top-left, xy2=bottom-right - y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x) - y[:, 0] = x[:, 0] - x[:, 2] / 2 # top left x - y[:, 1] = x[:, 1] - x[:, 3] / 2 # top left y - y[:, 2] = x[:, 0] + x[:, 2] / 2 # bottom right x - y[:, 3] = x[:, 1] + x[:, 3] / 2 # bottom right y - return y - - -def xywhn2xyxy(x, w=640, h=640, padw=0, padh=0): - # Convert nx4 boxes from [x, y, w, h] normalized to [x1, y1, x2, y2] where xy1=top-left, xy2=bottom-right - y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x) - y[:, 0] = w * (x[:, 0] - x[:, 2] / 2) + padw # top left x - y[:, 1] = h * (x[:, 1] - x[:, 3] / 2) + padh # top left y - y[:, 2] = w * (x[:, 0] + x[:, 2] / 2) + padw # bottom right x - y[:, 3] = h * (x[:, 1] + x[:, 3] / 2) + padh # bottom right y - return y - - -def xyn2xy(x, w=640, h=640, padw=0, padh=0): - # Convert normalized segments into pixel segments, shape (n,2) - y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x) - y[:, 0] = w * x[:, 0] + padw # top left x - y[:, 1] = h * x[:, 1] + padh # top left y - return y - - -def segment2box(segment, width=640, height=640): - # Convert 1 segment label to 1 box label, applying inside-image constraint, i.e. (xy1, xy2, ...) to (xyxy) - x, y = segment.T # segment xy - inside = (x >= 0) & (y >= 0) & (x <= width) & (y <= height) - x, y, = x[inside], y[inside] - return np.array([x.min(), y.min(), x.max(), y.max()]) if any(x) else np.zeros((1, 4)) # xyxy - - -def segments2boxes(segments): - # Convert segment labels to box labels, i.e. (cls, xy1, xy2, ...) to (cls, xywh) - boxes = [] - for s in segments: - x, y = s.T # segment xy - boxes.append([x.min(), y.min(), x.max(), y.max()]) # cls, xyxy - return xyxy2xywh(np.array(boxes)) # cls, xywh - - -def resample_segments(segments, n=1000): - # Up-sample an (n,2) segment - for i, s in enumerate(segments): - s = np.concatenate((s, s[0:1, :]), axis=0) - x = np.linspace(0, len(s) - 1, n) - xp = np.arange(len(s)) - segments[i] = np.concatenate([np.interp(x, xp, s[:, i]) for i in range(2)]).reshape(2, -1).T # segment xy - return segments - - -def scale_coords(img1_shape, coords, img0_shape, ratio_pad=None): - # Rescale coords (xyxy) from img1_shape to img0_shape - if ratio_pad is None: # calculate from img0_shape - gain = min(img1_shape[0] / img0_shape[0], img1_shape[1] / img0_shape[1]) # gain = old / new - pad = (img1_shape[1] - img0_shape[1] * gain) / 2, (img1_shape[0] - img0_shape[0] * gain) / 2 # wh padding - else: - gain = ratio_pad[0][0] - pad = ratio_pad[1] - - coords[:, [0, 2]] -= pad[0] # x padding - coords[:, [1, 3]] -= pad[1] # y padding - coords[:, :4] /= gain - clip_coords(coords, img0_shape) - return coords - - -def clip_coords(boxes, img_shape): - # Clip bounding xyxy bounding boxes to image shape (height, width) - boxes[:, 0].clamp_(0, img_shape[1]) # x1 - boxes[:, 1].clamp_(0, img_shape[0]) # y1 - boxes[:, 2].clamp_(0, img_shape[1]) # x2 - boxes[:, 3].clamp_(0, img_shape[0]) # y2 - - -def bbox_iou(box1, box2, x1y1x2y2=True, GIoU=False, DIoU=False, CIoU=False, eps=1e-7): - # Returns the IoU of box1 to box2. box1 is 4, box2 is nx4 - box2 = box2.T - - # Get the coordinates of bounding boxes - if x1y1x2y2: # x1, y1, x2, y2 = box1 - b1_x1, b1_y1, b1_x2, b1_y2 = box1[0], box1[1], box1[2], box1[3] - b2_x1, b2_y1, b2_x2, b2_y2 = box2[0], box2[1], box2[2], box2[3] - else: # transform from xywh to xyxy - b1_x1, b1_x2 = box1[0] - box1[2] / 2, box1[0] + box1[2] / 2 - b1_y1, b1_y2 = box1[1] - box1[3] / 2, box1[1] + box1[3] / 2 - b2_x1, b2_x2 = box2[0] - box2[2] / 2, box2[0] + box2[2] / 2 - b2_y1, b2_y2 = box2[1] - box2[3] / 2, box2[1] + box2[3] / 2 - - # Intersection area - inter = (torch.min(b1_x2, b2_x2) - torch.max(b1_x1, b2_x1)).clamp(0) * \ - (torch.min(b1_y2, b2_y2) - torch.max(b1_y1, b2_y1)).clamp(0) - - # Union Area - w1, h1 = b1_x2 - b1_x1, b1_y2 - b1_y1 + eps - w2, h2 = b2_x2 - b2_x1, b2_y2 - b2_y1 + eps - union = w1 * h1 + w2 * h2 - inter + eps - - iou = inter / union - - if GIoU or DIoU or CIoU: - cw = torch.max(b1_x2, b2_x2) - torch.min(b1_x1, b2_x1) # convex (smallest enclosing box) width - ch = torch.max(b1_y2, b2_y2) - torch.min(b1_y1, b2_y1) # convex height - if CIoU or DIoU: # Distance or Complete IoU https://arxiv.org/abs/1911.08287v1 - c2 = cw ** 2 + ch ** 2 + eps # convex diagonal squared - rho2 = ((b2_x1 + b2_x2 - b1_x1 - b1_x2) ** 2 + - (b2_y1 + b2_y2 - b1_y1 - b1_y2) ** 2) / 4 # center distance squared - if DIoU: - return iou - rho2 / c2 # DIoU - elif CIoU: # https://github.com/Zzh-tju/DIoU-SSD-pytorch/blob/master/utils/box/box_utils.py#L47 - v = (4 / math.pi ** 2) * torch.pow(torch.atan(w2 / (h2 + eps)) - torch.atan(w1 / (h1 + eps)), 2) - with torch.no_grad(): - alpha = v / (v - iou + (1 + eps)) - return iou - (rho2 / c2 + v * alpha) # CIoU - else: # GIoU https://arxiv.org/pdf/1902.09630.pdf - c_area = cw * ch + eps # convex area - return iou - (c_area - union) / c_area # GIoU - else: - return iou # IoU - - - - -def bbox_alpha_iou(box1, box2, x1y1x2y2=False, GIoU=False, DIoU=False, CIoU=False, alpha=2, eps=1e-9): - # Returns tsqrt_he IoU of box1 to box2. box1 is 4, box2 is nx4 - box2 = box2.T - - # Get the coordinates of bounding boxes - if x1y1x2y2: # x1, y1, x2, y2 = box1 - b1_x1, b1_y1, b1_x2, b1_y2 = box1[0], box1[1], box1[2], box1[3] - b2_x1, b2_y1, b2_x2, b2_y2 = box2[0], box2[1], box2[2], box2[3] - else: # transform from xywh to xyxy - b1_x1, b1_x2 = box1[0] - box1[2] / 2, box1[0] + box1[2] / 2 - b1_y1, b1_y2 = box1[1] - box1[3] / 2, box1[1] + box1[3] / 2 - b2_x1, b2_x2 = box2[0] - box2[2] / 2, box2[0] + box2[2] / 2 - b2_y1, b2_y2 = box2[1] - box2[3] / 2, box2[1] + box2[3] / 2 - - # Intersection area - inter = (torch.min(b1_x2, b2_x2) - torch.max(b1_x1, b2_x1)).clamp(0) * \ - (torch.min(b1_y2, b2_y2) - torch.max(b1_y1, b2_y1)).clamp(0) - - # Union Area - w1, h1 = b1_x2 - b1_x1, b1_y2 - b1_y1 + eps - w2, h2 = b2_x2 - b2_x1, b2_y2 - b2_y1 + eps - union = w1 * h1 + w2 * h2 - inter + eps - - # change iou into pow(iou+eps) - # iou = inter / union - iou = torch.pow(inter/union + eps, alpha) - # beta = 2 * alpha - if GIoU or DIoU or CIoU: - cw = torch.max(b1_x2, b2_x2) - torch.min(b1_x1, b2_x1) # convex (smallest enclosing box) width - ch = torch.max(b1_y2, b2_y2) - torch.min(b1_y1, b2_y1) # convex height - if CIoU or DIoU: # Distance or Complete IoU https://arxiv.org/abs/1911.08287v1 - c2 = (cw ** 2 + ch ** 2) ** alpha + eps # convex diagonal - rho_x = torch.abs(b2_x1 + b2_x2 - b1_x1 - b1_x2) - rho_y = torch.abs(b2_y1 + b2_y2 - b1_y1 - b1_y2) - rho2 = ((rho_x ** 2 + rho_y ** 2) / 4) ** alpha # center distance - if DIoU: - return iou - rho2 / c2 # DIoU - elif CIoU: # https://github.com/Zzh-tju/DIoU-SSD-pytorch/blob/master/utils/box/box_utils.py#L47 - v = (4 / math.pi ** 2) * torch.pow(torch.atan(w2 / h2) - torch.atan(w1 / h1), 2) - with torch.no_grad(): - alpha_ciou = v / ((1 + eps) - inter / union + v) - # return iou - (rho2 / c2 + v * alpha_ciou) # CIoU - return iou - (rho2 / c2 + torch.pow(v * alpha_ciou + eps, alpha)) # CIoU - else: # GIoU https://arxiv.org/pdf/1902.09630.pdf - # c_area = cw * ch + eps # convex area - # return iou - (c_area - union) / c_area # GIoU - c_area = torch.max(cw * ch + eps, union) # convex area - return iou - torch.pow((c_area - union) / c_area + eps, alpha) # GIoU - else: - return iou # torch.log(iou+eps) or iou - - -def box_iou(box1, box2): - # https://github.com/pytorch/vision/blob/master/torchvision/ops/boxes.py - """ - Return intersection-over-union (Jaccard index) of boxes. - Both sets of boxes are expected to be in (x1, y1, x2, y2) format. - Arguments: - box1 (Tensor[N, 4]) - box2 (Tensor[M, 4]) - Returns: - iou (Tensor[N, M]): the NxM matrix containing the pairwise - IoU values for every element in boxes1 and boxes2 - """ - - def box_area(box): - # box = 4xn - return (box[2] - box[0]) * (box[3] - box[1]) - - area1 = box_area(box1.T) - area2 = box_area(box2.T) - - # inter(N,M) = (rb(N,M,2) - lt(N,M,2)).clamp(0).prod(2) - inter = (torch.min(box1[:, None, 2:], box2[:, 2:]) - torch.max(box1[:, None, :2], box2[:, :2])).clamp(0).prod(2) - return inter / (area1[:, None] + area2 - inter) # iou = inter / (area1 + area2 - inter) - - -def wh_iou(wh1, wh2): - # Returns the nxm IoU matrix. wh1 is nx2, wh2 is mx2 - wh1 = wh1[:, None] # [N,1,2] - wh2 = wh2[None] # [1,M,2] - inter = torch.min(wh1, wh2).prod(2) # [N,M] - return inter / (wh1.prod(2) + wh2.prod(2) - inter) # iou = inter / (area1 + area2 - inter) - - -def box_giou(box1, box2): - """ - Return generalized intersection-over-union (Jaccard index) between two sets of boxes. - Both sets of boxes are expected to be in ``(x1, y1, x2, y2)`` format with - ``0 <= x1 < x2`` and ``0 <= y1 < y2``. - Args: - boxes1 (Tensor[N, 4]): first set of boxes - boxes2 (Tensor[M, 4]): second set of boxes - Returns: - Tensor[N, M]: the NxM matrix containing the pairwise generalized IoU values - for every element in boxes1 and boxes2 - """ - - def box_area(box): - # box = 4xn - return (box[2] - box[0]) * (box[3] - box[1]) - - area1 = box_area(box1.T) - area2 = box_area(box2.T) - - inter = (torch.min(box1[:, None, 2:], box2[:, 2:]) - torch.max(box1[:, None, :2], box2[:, :2])).clamp(0).prod(2) - union = (area1[:, None] + area2 - inter) - - iou = inter / union - - lti = torch.min(box1[:, None, :2], box2[:, :2]) - rbi = torch.max(box1[:, None, 2:], box2[:, 2:]) - - whi = (rbi - lti).clamp(min=0) # [N,M,2] - areai = whi[:, :, 0] * whi[:, :, 1] - - return iou - (areai - union) / areai - - -def box_ciou(box1, box2, eps: float = 1e-7): - """ - Return complete intersection-over-union (Jaccard index) between two sets of boxes. - Both sets of boxes are expected to be in ``(x1, y1, x2, y2)`` format with - ``0 <= x1 < x2`` and ``0 <= y1 < y2``. - Args: - boxes1 (Tensor[N, 4]): first set of boxes - boxes2 (Tensor[M, 4]): second set of boxes - eps (float, optional): small number to prevent division by zero. Default: 1e-7 - Returns: - Tensor[N, M]: the NxM matrix containing the pairwise complete IoU values - for every element in boxes1 and boxes2 - """ - - def box_area(box): - # box = 4xn - return (box[2] - box[0]) * (box[3] - box[1]) - - area1 = box_area(box1.T) - area2 = box_area(box2.T) - - inter = (torch.min(box1[:, None, 2:], box2[:, 2:]) - torch.max(box1[:, None, :2], box2[:, :2])).clamp(0).prod(2) - union = (area1[:, None] + area2 - inter) - - iou = inter / union - - lti = torch.min(box1[:, None, :2], box2[:, :2]) - rbi = torch.max(box1[:, None, 2:], box2[:, 2:]) - - whi = (rbi - lti).clamp(min=0) # [N,M,2] - diagonal_distance_squared = (whi[:, :, 0] ** 2) + (whi[:, :, 1] ** 2) + eps - - # centers of boxes - x_p = (box1[:, None, 0] + box1[:, None, 2]) / 2 - y_p = (box1[:, None, 1] + box1[:, None, 3]) / 2 - x_g = (box2[:, 0] + box2[:, 2]) / 2 - y_g = (box2[:, 1] + box2[:, 3]) / 2 - # The distance between boxes' centers squared. - centers_distance_squared = (x_p - x_g) ** 2 + (y_p - y_g) ** 2 - - w_pred = box1[:, None, 2] - box1[:, None, 0] - h_pred = box1[:, None, 3] - box1[:, None, 1] - - w_gt = box2[:, 2] - box2[:, 0] - h_gt = box2[:, 3] - box2[:, 1] - - v = (4 / (torch.pi ** 2)) * torch.pow((torch.atan(w_gt / h_gt) - torch.atan(w_pred / h_pred)), 2) - with torch.no_grad(): - alpha = v / (1 - iou + v + eps) - return iou - (centers_distance_squared / diagonal_distance_squared) - alpha * v - - -def box_diou(box1, box2, eps: float = 1e-7): - """ - Return distance intersection-over-union (Jaccard index) between two sets of boxes. - Both sets of boxes are expected to be in ``(x1, y1, x2, y2)`` format with - ``0 <= x1 < x2`` and ``0 <= y1 < y2``. - Args: - boxes1 (Tensor[N, 4]): first set of boxes - boxes2 (Tensor[M, 4]): second set of boxes - eps (float, optional): small number to prevent division by zero. Default: 1e-7 - Returns: - Tensor[N, M]: the NxM matrix containing the pairwise distance IoU values - for every element in boxes1 and boxes2 - """ - - def box_area(box): - # box = 4xn - return (box[2] - box[0]) * (box[3] - box[1]) - - area1 = box_area(box1.T) - area2 = box_area(box2.T) - - inter = (torch.min(box1[:, None, 2:], box2[:, 2:]) - torch.max(box1[:, None, :2], box2[:, :2])).clamp(0).prod(2) - union = (area1[:, None] + area2 - inter) - - iou = inter / union - - lti = torch.min(box1[:, None, :2], box2[:, :2]) - rbi = torch.max(box1[:, None, 2:], box2[:, 2:]) - - whi = (rbi - lti).clamp(min=0) # [N,M,2] - diagonal_distance_squared = (whi[:, :, 0] ** 2) + (whi[:, :, 1] ** 2) + eps - - # centers of boxes - x_p = (box1[:, None, 0] + box1[:, None, 2]) / 2 - y_p = (box1[:, None, 1] + box1[:, None, 3]) / 2 - x_g = (box2[:, 0] + box2[:, 2]) / 2 - y_g = (box2[:, 1] + box2[:, 3]) / 2 - # The distance between boxes' centers squared. - centers_distance_squared = (x_p - x_g) ** 2 + (y_p - y_g) ** 2 - - # The distance IoU is the IoU penalized by a normalized - # distance between boxes' centers squared. - return iou - (centers_distance_squared / diagonal_distance_squared) - - -def non_max_suppression(prediction, conf_thres=0.25, iou_thres=0.45, classes=None, agnostic=False, multi_label=False, - labels=()): - """Runs Non-Maximum Suppression (NMS) on inference results - - Returns: - list of detections, on (n,6) tensor per image [xyxy, conf, cls] - """ - - nc = prediction.shape[2] - 5 # number of classes - xc = prediction[..., 4] > conf_thres # candidates - - # Settings - min_wh, max_wh = 2, 4096 # (pixels) minimum and maximum box width and height - max_det = 300 # maximum number of detections per image - max_nms = 30000 # maximum number of boxes into torchvision.ops.nms() - time_limit = 10.0 # seconds to quit after - redundant = True # require redundant detections - multi_label &= nc > 1 # multiple labels per box (adds 0.5ms/img) - merge = False # use merge-NMS - - t = time.time() - output = [torch.zeros((0, 6), device=prediction.device)] * prediction.shape[0] - for xi, x in enumerate(prediction): # image index, image inference - # Apply constraints - # x[((x[..., 2:4] < min_wh) | (x[..., 2:4] > max_wh)).any(1), 4] = 0 # width-height - x = x[xc[xi]] # confidence - - # Cat apriori labels if autolabelling - if labels and len(labels[xi]): - l = labels[xi] - v = torch.zeros((len(l), nc + 5), device=x.device) - v[:, :4] = l[:, 1:5] # box - v[:, 4] = 1.0 # conf - v[range(len(l)), l[:, 0].long() + 5] = 1.0 # cls - x = torch.cat((x, v), 0) - - # If none remain process next image - if not x.shape[0]: - continue - - # Compute conf - if nc == 1: - x[:, 5:] = x[:, 4:5] # for models with one class, cls_loss is 0 and cls_conf is always 0.5, - # so there is no need to multiplicate. - else: - x[:, 5:] *= x[:, 4:5] # conf = obj_conf * cls_conf - - # Box (center x, center y, width, height) to (x1, y1, x2, y2) - box = xywh2xyxy(x[:, :4]) - - # Detections matrix nx6 (xyxy, conf, cls) - if multi_label: - i, j = (x[:, 5:] > conf_thres).nonzero(as_tuple=False).T - x = torch.cat((box[i], x[i, j + 5, None], j[:, None].float()), 1) - else: # best class only - conf, j = x[:, 5:].max(1, keepdim=True) - x = torch.cat((box, conf, j.float()), 1)[conf.view(-1) > conf_thres] - - # Filter by class - if classes is not None: - x = x[(x[:, 5:6] == torch.tensor(classes, device=x.device)).any(1)] - - # Apply finite constraint - # if not torch.isfinite(x).all(): - # x = x[torch.isfinite(x).all(1)] - - # Check shape - n = x.shape[0] # number of boxes - if not n: # no boxes - continue - elif n > max_nms: # excess boxes - x = x[x[:, 4].argsort(descending=True)[:max_nms]] # sort by confidence - - # Batched NMS - c = x[:, 5:6] * (0 if agnostic else max_wh) # classes - boxes, scores = x[:, :4] + c, x[:, 4] # boxes (offset by class), scores - i = torchvision.ops.nms(boxes, scores, iou_thres) # NMS - if i.shape[0] > max_det: # limit detections - i = i[:max_det] - if merge and (1 < n < 3E3): # Merge NMS (boxes merged using weighted mean) - # update boxes as boxes(i,4) = weights(i,n) * boxes(n,4) - iou = box_iou(boxes[i], boxes) > iou_thres # iou matrix - weights = iou * scores[None] # box weights - x[i, :4] = torch.mm(weights, x[:, :4]).float() / weights.sum(1, keepdim=True) # merged boxes - if redundant: - i = i[iou.sum(1) > 1] # require redundancy - - output[xi] = x[i] - if (time.time() - t) > time_limit: - print(f'WARNING: NMS time limit {time_limit}s exceeded') - break # time limit exceeded - - return output - - -def non_max_suppression_kpt(prediction, conf_thres=0.25, iou_thres=0.45, classes=None, agnostic=False, multi_label=False, - labels=(), kpt_label=False, nc=None, nkpt=None): - """Runs Non-Maximum Suppression (NMS) on inference results - - Returns: - list of detections, on (n,6) tensor per image [xyxy, conf, cls] - """ - if nc is None: - nc = prediction.shape[2] - 5 if not kpt_label else prediction.shape[2] - 56 # number of classes - xc = prediction[..., 4] > conf_thres # candidates - - # Settings - min_wh, max_wh = 2, 4096 # (pixels) minimum and maximum box width and height - max_det = 300 # maximum number of detections per image - max_nms = 30000 # maximum number of boxes into torchvision.ops.nms() - time_limit = 10.0 # seconds to quit after - redundant = True # require redundant detections - multi_label &= nc > 1 # multiple labels per box (adds 0.5ms/img) - merge = False # use merge-NMS - - t = time.time() - output = [torch.zeros((0,6), device=prediction.device)] * prediction.shape[0] - for xi, x in enumerate(prediction): # image index, image inference - # Apply constraints - # x[((x[..., 2:4] < min_wh) | (x[..., 2:4] > max_wh)).any(1), 4] = 0 # width-height - x = x[xc[xi]] # confidence - - # Cat apriori labels if autolabelling - if labels and len(labels[xi]): - l = labels[xi] - v = torch.zeros((len(l), nc + 5), device=x.device) - v[:, :4] = l[:, 1:5] # box - v[:, 4] = 1.0 # conf - v[range(len(l)), l[:, 0].long() + 5] = 1.0 # cls - x = torch.cat((x, v), 0) - - # If none remain process next image - if not x.shape[0]: - continue - - # Compute conf - x[:, 5:5+nc] *= x[:, 4:5] # conf = obj_conf * cls_conf - - # Box (center x, center y, width, height) to (x1, y1, x2, y2) - box = xywh2xyxy(x[:, :4]) - - # Detections matrix nx6 (xyxy, conf, cls) - if multi_label: - i, j = (x[:, 5:] > conf_thres).nonzero(as_tuple=False).T - x = torch.cat((box[i], x[i, j + 5, None], j[:, None].float()), 1) - else: # best class only - if not kpt_label: - conf, j = x[:, 5:].max(1, keepdim=True) - x = torch.cat((box, conf, j.float()), 1)[conf.view(-1) > conf_thres] - else: - kpts = x[:, 6:] - conf, j = x[:, 5:6].max(1, keepdim=True) - x = torch.cat((box, conf, j.float(), kpts), 1)[conf.view(-1) > conf_thres] - - - # Filter by class - if classes is not None: - x = x[(x[:, 5:6] == torch.tensor(classes, device=x.device)).any(1)] - - # Apply finite constraint - # if not torch.isfinite(x).all(): - # x = x[torch.isfinite(x).all(1)] - - # Check shape - n = x.shape[0] # number of boxes - if not n: # no boxes - continue - elif n > max_nms: # excess boxes - x = x[x[:, 4].argsort(descending=True)[:max_nms]] # sort by confidence - - # Batched NMS - c = x[:, 5:6] * (0 if agnostic else max_wh) # classes - boxes, scores = x[:, :4] + c, x[:, 4] # boxes (offset by class), scores - i = torchvision.ops.nms(boxes, scores, iou_thres) # NMS - if i.shape[0] > max_det: # limit detections - i = i[:max_det] - if merge and (1 < n < 3E3): # Merge NMS (boxes merged using weighted mean) - # update boxes as boxes(i,4) = weights(i,n) * boxes(n,4) - iou = box_iou(boxes[i], boxes) > iou_thres # iou matrix - weights = iou * scores[None] # box weights - x[i, :4] = torch.mm(weights, x[:, :4]).float() / weights.sum(1, keepdim=True) # merged boxes - if redundant: - i = i[iou.sum(1) > 1] # require redundancy - - output[xi] = x[i] - if (time.time() - t) > time_limit: - print(f'WARNING: NMS time limit {time_limit}s exceeded') - break # time limit exceeded - - return output - - -def strip_optimizer(f='best.pt', s=''): # from utils.general import *; strip_optimizer() - # Strip optimizer from 'f' to finalize training, optionally save as 's' - x = torch.load(f, map_location=torch.device('cpu')) - if x.get('ema'): - x['model'] = x['ema'] # replace model with ema - for k in 'optimizer', 'training_results', 'wandb_id', 'ema', 'updates': # keys - x[k] = None - x['epoch'] = -1 - x['model'].half() # to FP16 - for p in x['model'].parameters(): - p.requires_grad = False - torch.save(x, s or f) - mb = os.path.getsize(s or f) / 1E6 # filesize - print(f"Optimizer stripped from {f},{(' saved as %s,' % s) if s else ''} {mb:.1f}MB") - - -def print_mutation(hyp, results, yaml_file='hyp_evolved.yaml', bucket=''): - # Print mutation results to evolve.txt (for use with train.py --evolve) - a = '%10s' * len(hyp) % tuple(hyp.keys()) # hyperparam keys - b = '%10.3g' * len(hyp) % tuple(hyp.values()) # hyperparam values - c = '%10.4g' * len(results) % results # results (P, R, mAP@0.5, mAP@0.5:0.95, val_losses x 3) - print('\n%s\n%s\nEvolved fitness: %s\n' % (a, b, c)) - - if bucket: - url = 'gs://%s/evolve.txt' % bucket - if gsutil_getsize(url) > (os.path.getsize('evolve.txt') if os.path.exists('evolve.txt') else 0): - os.system('gsutil cp %s .' % url) # download evolve.txt if larger than local - - with open('evolve.txt', 'a') as f: # append result - f.write(c + b + '\n') - x = np.unique(np.loadtxt('evolve.txt', ndmin=2), axis=0) # load unique rows - x = x[np.argsort(-fitness(x))] # sort - np.savetxt('evolve.txt', x, '%10.3g') # save sort by fitness - - # Save yaml - for i, k in enumerate(hyp.keys()): - hyp[k] = float(x[0, i + 7]) - with open(yaml_file, 'w') as f: - results = tuple(x[0, :7]) - c = '%10.4g' * len(results) % results # results (P, R, mAP@0.5, mAP@0.5:0.95, val_losses x 3) - f.write('# Hyperparameter Evolution Results\n# Generations: %g\n# Metrics: ' % len(x) + c + '\n\n') - yaml.dump(hyp, f, sort_keys=False) - - if bucket: - os.system('gsutil cp evolve.txt %s gs://%s' % (yaml_file, bucket)) # upload - - -def apply_classifier(x, model, img, im0): - # applies a second stage classifier to yolo outputs - im0 = [im0] if isinstance(im0, np.ndarray) else im0 - for i, d in enumerate(x): # per image - if d is not None and len(d): - d = d.clone() - - # Reshape and pad cutouts - b = xyxy2xywh(d[:, :4]) # boxes - b[:, 2:] = b[:, 2:].max(1)[0].unsqueeze(1) # rectangle to square - b[:, 2:] = b[:, 2:] * 1.3 + 30 # pad - d[:, :4] = xywh2xyxy(b).long() - - # Rescale boxes from img_size to im0 size - scale_coords(img.shape[2:], d[:, :4], im0[i].shape) - - # Classes - pred_cls1 = d[:, 5].long() - ims = [] - for j, a in enumerate(d): # per item - cutout = im0[i][int(a[1]):int(a[3]), int(a[0]):int(a[2])] - im = cv2.resize(cutout, (224, 224)) # BGR - # cv2.imwrite('test%i.jpg' % j, cutout) - - im = im[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416 - im = np.ascontiguousarray(im, dtype=np.float32) # uint8 to float32 - im /= 255.0 # 0 - 255 to 0.0 - 1.0 - ims.append(im) - - pred_cls2 = model(torch.Tensor(ims).to(d.device)).argmax(1) # classifier prediction - x[i] = x[i][pred_cls1 == pred_cls2] # retain matching class detections - - return x - - -def increment_path(path, exist_ok=True, sep=''): - # Increment path, i.e. runs/exp --> runs/exp{sep}0, runs/exp{sep}1 etc. - path = Path(path) # os-agnostic - if (path.exists() and exist_ok) or (not path.exists()): - return str(path) - else: - dirs = glob.glob(f"{path}{sep}*") # similar paths - matches = [re.search(rf"%s{sep}(\d+)" % path.stem, d) for d in dirs] - i = [int(m.groups()[0]) for m in matches if m] # indices - n = max(i) + 1 if i else 2 # increment number - return f"{path}{sep}{n}" # update path diff --git a/cv/detection/yolov7/pytorch/utils/google_app_engine/Dockerfile b/cv/detection/yolov7/pytorch/utils/google_app_engine/Dockerfile deleted file mode 100644 index 0155618f4..000000000 --- a/cv/detection/yolov7/pytorch/utils/google_app_engine/Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -FROM gcr.io/google-appengine/python - -# Create a virtualenv for dependencies. This isolates these packages from -# system-level packages. -# Use -p python3 or -p python3.7 to select python version. Default is version 2. -RUN virtualenv /env -p python3 - -# Setting these environment variables are the same as running -# source /env/bin/activate. -ENV VIRTUAL_ENV /env -ENV PATH /env/bin:$PATH - -RUN apt-get update && apt-get install -y python-opencv - -# Copy the application's requirements.txt and run pip to install all -# dependencies into the virtualenv. -ADD requirements.txt /app/requirements.txt -RUN pip install -r /app/requirements.txt - -# Add the application source code. -ADD . /app - -# Run a WSGI server to serve the application. gunicorn must be declared as -# a dependency in requirements.txt. -CMD gunicorn -b :$PORT main:app diff --git a/cv/detection/yolov7/pytorch/utils/google_app_engine/additional_requirements.txt b/cv/detection/yolov7/pytorch/utils/google_app_engine/additional_requirements.txt deleted file mode 100644 index 5fcc30524..000000000 --- a/cv/detection/yolov7/pytorch/utils/google_app_engine/additional_requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -# add these requirements in your app on top of the existing ones -pip==18.1 -Flask==1.0.2 -gunicorn==19.9.0 diff --git a/cv/detection/yolov7/pytorch/utils/google_app_engine/app.yaml b/cv/detection/yolov7/pytorch/utils/google_app_engine/app.yaml deleted file mode 100644 index 69b8f68b3..000000000 --- a/cv/detection/yolov7/pytorch/utils/google_app_engine/app.yaml +++ /dev/null @@ -1,14 +0,0 @@ -runtime: custom -env: flex - -service: yolorapp - -liveness_check: - initial_delay_sec: 600 - -manual_scaling: - instances: 1 -resources: - cpu: 1 - memory_gb: 4 - disk_size_gb: 20 \ No newline at end of file diff --git a/cv/detection/yolov7/pytorch/utils/google_utils.py b/cv/detection/yolov7/pytorch/utils/google_utils.py deleted file mode 100644 index f363408e6..000000000 --- a/cv/detection/yolov7/pytorch/utils/google_utils.py +++ /dev/null @@ -1,123 +0,0 @@ -# Google utils: https://cloud.google.com/storage/docs/reference/libraries - -import os -import platform -import subprocess -import time -from pathlib import Path - -import requests -import torch - - -def gsutil_getsize(url=''): - # gs://bucket/file size https://cloud.google.com/storage/docs/gsutil/commands/du - s = subprocess.check_output(f'gsutil du {url}', shell=True).decode('utf-8') - return eval(s.split(' ')[0]) if len(s) else 0 # bytes - - -def attempt_download(file, repo='WongKinYiu/yolov7'): - # Attempt file download if does not exist - file = Path(str(file).strip().replace("'", '').lower()) - - if not file.exists(): - try: - response = requests.get(f'https://api.github.com/repos/{repo}/releases/latest').json() # github api - assets = [x['name'] for x in response['assets']] # release assets - tag = response['tag_name'] # i.e. 'v1.0' - except: # fallback plan - assets = ['yolov7.pt', 'yolov7-tiny.pt', 'yolov7x.pt', 'yolov7-d6.pt', 'yolov7-e6.pt', - 'yolov7-e6e.pt', 'yolov7-w6.pt'] - tag = subprocess.check_output('git tag', shell=True).decode().split()[-1] - - name = file.name - if name in assets: - msg = f'{file} missing, try downloading from https://github.com/{repo}/releases/' - redundant = False # second download option - try: # GitHub - url = f'https://github.com/{repo}/releases/download/{tag}/{name}' - print(f'Downloading {url} to {file}...') - torch.hub.download_url_to_file(url, file) - assert file.exists() and file.stat().st_size > 1E6 # check - except Exception as e: # GCP - print(f'Download error: {e}') - assert redundant, 'No secondary mirror' - url = f'https://storage.googleapis.com/{repo}/ckpt/{name}' - print(f'Downloading {url} to {file}...') - os.system(f'curl -L {url} -o {file}') # torch.hub.download_url_to_file(url, weights) - finally: - if not file.exists() or file.stat().st_size < 1E6: # check - file.unlink(missing_ok=True) # remove partial downloads - print(f'ERROR: Download failure: {msg}') - print('') - return - - -def gdrive_download(id='', file='tmp.zip'): - # Downloads a file from Google Drive. from yolov7.utils.google_utils import *; gdrive_download() - t = time.time() - file = Path(file) - cookie = Path('cookie') # gdrive cookie - print(f'Downloading https://drive.google.com/uc?export=download&id={id} as {file}... ', end='') - file.unlink(missing_ok=True) # remove existing file - cookie.unlink(missing_ok=True) # remove existing cookie - - # Attempt file download - out = "NUL" if platform.system() == "Windows" else "/dev/null" - os.system(f'curl -c ./cookie -s -L "drive.google.com/uc?export=download&id={id}" > {out}') - if os.path.exists('cookie'): # large file - s = f'curl -Lb ./cookie "drive.google.com/uc?export=download&confirm={get_token()}&id={id}" -o {file}' - else: # small file - s = f'curl -s -L -o {file} "drive.google.com/uc?export=download&id={id}"' - r = os.system(s) # execute, capture return - cookie.unlink(missing_ok=True) # remove existing cookie - - # Error check - if r != 0: - file.unlink(missing_ok=True) # remove partial - print('Download error ') # raise Exception('Download error') - return r - - # Unzip if archive - if file.suffix == '.zip': - print('unzipping... ', end='') - os.system(f'unzip -q {file}') # unzip - file.unlink() # remove zip to free space - - print(f'Done ({time.time() - t:.1f}s)') - return r - - -def get_token(cookie="./cookie"): - with open(cookie) as f: - for line in f: - if "download" in line: - return line.split()[-1] - return "" - -# def upload_blob(bucket_name, source_file_name, destination_blob_name): -# # Uploads a file to a bucket -# # https://cloud.google.com/storage/docs/uploading-objects#storage-upload-object-python -# -# storage_client = storage.Client() -# bucket = storage_client.get_bucket(bucket_name) -# blob = bucket.blob(destination_blob_name) -# -# blob.upload_from_filename(source_file_name) -# -# print('File {} uploaded to {}.'.format( -# source_file_name, -# destination_blob_name)) -# -# -# def download_blob(bucket_name, source_blob_name, destination_file_name): -# # Uploads a blob from a bucket -# storage_client = storage.Client() -# bucket = storage_client.get_bucket(bucket_name) -# blob = bucket.blob(source_blob_name) -# -# blob.download_to_filename(destination_file_name) -# -# print('Blob {} downloaded to {}.'.format( -# source_blob_name, -# destination_file_name)) diff --git a/cv/detection/yolov7/pytorch/utils/loss.py b/cv/detection/yolov7/pytorch/utils/loss.py deleted file mode 100644 index 2b1d968f8..000000000 --- a/cv/detection/yolov7/pytorch/utils/loss.py +++ /dev/null @@ -1,1697 +0,0 @@ -# Loss functions - -import torch -import torch.nn as nn -import torch.nn.functional as F - -from utils.general import bbox_iou, bbox_alpha_iou, box_iou, box_giou, box_diou, box_ciou, xywh2xyxy -from utils.torch_utils import is_parallel - - -def smooth_BCE(eps=0.1): # https://github.com/ultralytics/yolov3/issues/238#issuecomment-598028441 - # return positive, negative label smoothing BCE targets - return 1.0 - 0.5 * eps, 0.5 * eps - - -class BCEBlurWithLogitsLoss(nn.Module): - # BCEwithLogitLoss() with reduced missing label effects. - def __init__(self, alpha=0.05): - super(BCEBlurWithLogitsLoss, self).__init__() - self.loss_fcn = nn.BCEWithLogitsLoss(reduction='none') # must be nn.BCEWithLogitsLoss() - self.alpha = alpha - - def forward(self, pred, true): - loss = self.loss_fcn(pred, true) - pred = torch.sigmoid(pred) # prob from logits - dx = pred - true # reduce only missing label effects - # dx = (pred - true).abs() # reduce missing label and false label effects - alpha_factor = 1 - torch.exp((dx - 1) / (self.alpha + 1e-4)) - loss *= alpha_factor - return loss.mean() - - -class SigmoidBin(nn.Module): - stride = None # strides computed during build - export = False # onnx export - - def __init__(self, bin_count=10, min=0.0, max=1.0, reg_scale = 2.0, use_loss_regression=True, use_fw_regression=True, BCE_weight=1.0, smooth_eps=0.0): - super(SigmoidBin, self).__init__() - - self.bin_count = bin_count - self.length = bin_count + 1 - self.min = min - self.max = max - self.scale = float(max - min) - self.shift = self.scale / 2.0 - - self.use_loss_regression = use_loss_regression - self.use_fw_regression = use_fw_regression - self.reg_scale = reg_scale - self.BCE_weight = BCE_weight - - start = min + (self.scale/2.0) / self.bin_count - end = max - (self.scale/2.0) / self.bin_count - step = self.scale / self.bin_count - self.step = step - #print(f" start = {start}, end = {end}, step = {step} ") - - bins = torch.range(start, end + 0.0001, step).float() - self.register_buffer('bins', bins) - - - self.cp = 1.0 - 0.5 * smooth_eps - self.cn = 0.5 * smooth_eps - - self.BCEbins = nn.BCEWithLogitsLoss(pos_weight=torch.Tensor([BCE_weight])) - self.MSELoss = nn.MSELoss() - - def get_length(self): - return self.length - - def forward(self, pred): - assert pred.shape[-1] == self.length, 'pred.shape[-1]=%d is not equal to self.length=%d' % (pred.shape[-1], self.length) - - pred_reg = (pred[..., 0] * self.reg_scale - self.reg_scale/2.0) * self.step - pred_bin = pred[..., 1:(1+self.bin_count)] - - _, bin_idx = torch.max(pred_bin, dim=-1) - bin_bias = self.bins[bin_idx] - - if self.use_fw_regression: - result = pred_reg + bin_bias - else: - result = bin_bias - result = result.clamp(min=self.min, max=self.max) - - return result - - - def training_loss(self, pred, target): - assert pred.shape[-1] == self.length, 'pred.shape[-1]=%d is not equal to self.length=%d' % (pred.shape[-1], self.length) - assert pred.shape[0] == target.shape[0], 'pred.shape=%d is not equal to the target.shape=%d' % (pred.shape[0], target.shape[0]) - device = pred.device - - pred_reg = (pred[..., 0].sigmoid() * self.reg_scale - self.reg_scale/2.0) * self.step - pred_bin = pred[..., 1:(1+self.bin_count)] - - diff_bin_target = torch.abs(target[..., None] - self.bins) - _, bin_idx = torch.min(diff_bin_target, dim=-1) - - bin_bias = self.bins[bin_idx] - bin_bias.requires_grad = False - result = pred_reg + bin_bias - - target_bins = torch.full_like(pred_bin, self.cn, device=device) # targets - n = pred.shape[0] - target_bins[range(n), bin_idx] = self.cp - - loss_bin = self.BCEbins(pred_bin, target_bins) # BCE - - if self.use_loss_regression: - loss_regression = self.MSELoss(result, target) # MSE - loss = loss_bin + loss_regression - else: - loss = loss_bin - - out_result = result.clamp(min=self.min, max=self.max) - - return loss, out_result - - -class FocalLoss(nn.Module): - # Wraps focal loss around existing loss_fcn(), i.e. criteria = FocalLoss(nn.BCEWithLogitsLoss(), gamma=1.5) - def __init__(self, loss_fcn, gamma=1.5, alpha=0.25): - super(FocalLoss, self).__init__() - self.loss_fcn = loss_fcn # must be nn.BCEWithLogitsLoss() - self.gamma = gamma - self.alpha = alpha - self.reduction = loss_fcn.reduction - self.loss_fcn.reduction = 'none' # required to apply FL to each element - - def forward(self, pred, true): - loss = self.loss_fcn(pred, true) - # p_t = torch.exp(-loss) - # loss *= self.alpha * (1.000001 - p_t) ** self.gamma # non-zero power for gradient stability - - # TF implementation https://github.com/tensorflow/addons/blob/v0.7.1/tensorflow_addons/losses/focal_loss.py - pred_prob = torch.sigmoid(pred) # prob from logits - p_t = true * pred_prob + (1 - true) * (1 - pred_prob) - alpha_factor = true * self.alpha + (1 - true) * (1 - self.alpha) - modulating_factor = (1.0 - p_t) ** self.gamma - loss *= alpha_factor * modulating_factor - - if self.reduction == 'mean': - return loss.mean() - elif self.reduction == 'sum': - return loss.sum() - else: # 'none' - return loss - - -class QFocalLoss(nn.Module): - # Wraps Quality focal loss around existing loss_fcn(), i.e. criteria = FocalLoss(nn.BCEWithLogitsLoss(), gamma=1.5) - def __init__(self, loss_fcn, gamma=1.5, alpha=0.25): - super(QFocalLoss, self).__init__() - self.loss_fcn = loss_fcn # must be nn.BCEWithLogitsLoss() - self.gamma = gamma - self.alpha = alpha - self.reduction = loss_fcn.reduction - self.loss_fcn.reduction = 'none' # required to apply FL to each element - - def forward(self, pred, true): - loss = self.loss_fcn(pred, true) - - pred_prob = torch.sigmoid(pred) # prob from logits - alpha_factor = true * self.alpha + (1 - true) * (1 - self.alpha) - modulating_factor = torch.abs(true - pred_prob) ** self.gamma - loss *= alpha_factor * modulating_factor - - if self.reduction == 'mean': - return loss.mean() - elif self.reduction == 'sum': - return loss.sum() - else: # 'none' - return loss - -class RankSort(torch.autograd.Function): - @staticmethod - def forward(ctx, logits, targets, delta_RS=0.50, eps=1e-10): - - classification_grads=torch.zeros(logits.shape).cuda() - - #Filter fg logits - fg_labels = (targets > 0.) - fg_logits = logits[fg_labels] - fg_targets = targets[fg_labels] - fg_num = len(fg_logits) - - #Do not use bg with scores less than minimum fg logit - #since changing its score does not have an effect on precision - threshold_logit = torch.min(fg_logits)-delta_RS - relevant_bg_labels=((targets==0) & (logits>=threshold_logit)) - - relevant_bg_logits = logits[relevant_bg_labels] - relevant_bg_grad=torch.zeros(len(relevant_bg_logits)).cuda() - sorting_error=torch.zeros(fg_num).cuda() - ranking_error=torch.zeros(fg_num).cuda() - fg_grad=torch.zeros(fg_num).cuda() - - #sort the fg logits - order=torch.argsort(fg_logits) - #Loops over each positive following the order - for ii in order: - # Difference Transforms (x_ij) - fg_relations=fg_logits-fg_logits[ii] - bg_relations=relevant_bg_logits-fg_logits[ii] - - if delta_RS > 0: - fg_relations=torch.clamp(fg_relations/(2*delta_RS)+0.5,min=0,max=1) - bg_relations=torch.clamp(bg_relations/(2*delta_RS)+0.5,min=0,max=1) - else: - fg_relations = (fg_relations >= 0).float() - bg_relations = (bg_relations >= 0).float() - - # Rank of ii among pos and false positive number (bg with larger scores) - rank_pos=torch.sum(fg_relations) - FP_num=torch.sum(bg_relations) - - # Rank of ii among all examples - rank=rank_pos+FP_num - - # Ranking error of example ii. target_ranking_error is always 0. (Eq. 7) - ranking_error[ii]=FP_num/rank - - # Current sorting error of example ii. (Eq. 7) - current_sorting_error = torch.sum(fg_relations*(1-fg_targets))/rank_pos - - #Find examples in the target sorted order for example ii - iou_relations = (fg_targets >= fg_targets[ii]) - target_sorted_order = iou_relations * fg_relations - - #The rank of ii among positives in sorted order - rank_pos_target = torch.sum(target_sorted_order) - - #Compute target sorting error. (Eq. 8) - #Since target ranking error is 0, this is also total target error - target_sorting_error= torch.sum(target_sorted_order*(1-fg_targets))/rank_pos_target - - #Compute sorting error on example ii - sorting_error[ii] = current_sorting_error - target_sorting_error - - #Identity Update for Ranking Error - if FP_num > eps: - #For ii the update is the ranking error - fg_grad[ii] -= ranking_error[ii] - #For negatives, distribute error via ranking pmf (i.e. bg_relations/FP_num) - relevant_bg_grad += (bg_relations*(ranking_error[ii]/FP_num)) - - #Find the positives that are misranked (the cause of the error) - #These are the ones with smaller IoU but larger logits - missorted_examples = (~ iou_relations) * fg_relations - - #Denominotor of sorting pmf - sorting_pmf_denom = torch.sum(missorted_examples) - - #Identity Update for Sorting Error - if sorting_pmf_denom > eps: - #For ii the update is the sorting error - fg_grad[ii] -= sorting_error[ii] - #For positives, distribute error via sorting pmf (i.e. missorted_examples/sorting_pmf_denom) - fg_grad += (missorted_examples*(sorting_error[ii]/sorting_pmf_denom)) - - #Normalize gradients by number of positives - classification_grads[fg_labels]= (fg_grad/fg_num) - classification_grads[relevant_bg_labels]= (relevant_bg_grad/fg_num) - - ctx.save_for_backward(classification_grads) - - return ranking_error.mean(), sorting_error.mean() - - @staticmethod - def backward(ctx, out_grad1, out_grad2): - g1, =ctx.saved_tensors - return g1*out_grad1, None, None, None - -class aLRPLoss(torch.autograd.Function): - @staticmethod - def forward(ctx, logits, targets, regression_losses, delta=1., eps=1e-5): - classification_grads=torch.zeros(logits.shape).cuda() - - #Filter fg logits - fg_labels = (targets == 1) - fg_logits = logits[fg_labels] - fg_num = len(fg_logits) - - #Do not use bg with scores less than minimum fg logit - #since changing its score does not have an effect on precision - threshold_logit = torch.min(fg_logits)-delta - - #Get valid bg logits - relevant_bg_labels=((targets==0)&(logits>=threshold_logit)) - relevant_bg_logits=logits[relevant_bg_labels] - relevant_bg_grad=torch.zeros(len(relevant_bg_logits)).cuda() - rank=torch.zeros(fg_num).cuda() - prec=torch.zeros(fg_num).cuda() - fg_grad=torch.zeros(fg_num).cuda() - - max_prec=0 - #sort the fg logits - order=torch.argsort(fg_logits) - #Loops over each positive following the order - for ii in order: - #x_ij s as score differences with fgs - fg_relations=fg_logits-fg_logits[ii] - #Apply piecewise linear function and determine relations with fgs - fg_relations=torch.clamp(fg_relations/(2*delta)+0.5,min=0,max=1) - #Discard i=j in the summation in rank_pos - fg_relations[ii]=0 - - #x_ij s as score differences with bgs - bg_relations=relevant_bg_logits-fg_logits[ii] - #Apply piecewise linear function and determine relations with bgs - bg_relations=torch.clamp(bg_relations/(2*delta)+0.5,min=0,max=1) - - #Compute the rank of the example within fgs and number of bgs with larger scores - rank_pos=1+torch.sum(fg_relations) - FP_num=torch.sum(bg_relations) - #Store the total since it is normalizer also for aLRP Regression error - rank[ii]=rank_pos+FP_num - - #Compute precision for this example to compute classification loss - prec[ii]=rank_pos/rank[ii] - #For stability, set eps to a infinitesmall value (e.g. 1e-6), then compute grads - if FP_num > eps: - fg_grad[ii] = -(torch.sum(fg_relations*regression_losses)+FP_num)/rank[ii] - relevant_bg_grad += (bg_relations*(-fg_grad[ii]/FP_num)) - - #aLRP with grad formulation fg gradient - classification_grads[fg_labels]= fg_grad - #aLRP with grad formulation bg gradient - classification_grads[relevant_bg_labels]= relevant_bg_grad - - classification_grads /= (fg_num) - - cls_loss=1-prec.mean() - ctx.save_for_backward(classification_grads) - - return cls_loss, rank, order - - @staticmethod - def backward(ctx, out_grad1, out_grad2, out_grad3): - g1, =ctx.saved_tensors - return g1*out_grad1, None, None, None, None - - -class APLoss(torch.autograd.Function): - @staticmethod - def forward(ctx, logits, targets, delta=1.): - classification_grads=torch.zeros(logits.shape).cuda() - - #Filter fg logits - fg_labels = (targets == 1) - fg_logits = logits[fg_labels] - fg_num = len(fg_logits) - - #Do not use bg with scores less than minimum fg logit - #since changing its score does not have an effect on precision - threshold_logit = torch.min(fg_logits)-delta - - #Get valid bg logits - relevant_bg_labels=((targets==0)&(logits>=threshold_logit)) - relevant_bg_logits=logits[relevant_bg_labels] - relevant_bg_grad=torch.zeros(len(relevant_bg_logits)).cuda() - rank=torch.zeros(fg_num).cuda() - prec=torch.zeros(fg_num).cuda() - fg_grad=torch.zeros(fg_num).cuda() - - max_prec=0 - #sort the fg logits - order=torch.argsort(fg_logits) - #Loops over each positive following the order - for ii in order: - #x_ij s as score differences with fgs - fg_relations=fg_logits-fg_logits[ii] - #Apply piecewise linear function and determine relations with fgs - fg_relations=torch.clamp(fg_relations/(2*delta)+0.5,min=0,max=1) - #Discard i=j in the summation in rank_pos - fg_relations[ii]=0 - - #x_ij s as score differences with bgs - bg_relations=relevant_bg_logits-fg_logits[ii] - #Apply piecewise linear function and determine relations with bgs - bg_relations=torch.clamp(bg_relations/(2*delta)+0.5,min=0,max=1) - - #Compute the rank of the example within fgs and number of bgs with larger scores - rank_pos=1+torch.sum(fg_relations) - FP_num=torch.sum(bg_relations) - #Store the total since it is normalizer also for aLRP Regression error - rank[ii]=rank_pos+FP_num - - #Compute precision for this example - current_prec=rank_pos/rank[ii] - - #Compute interpolated AP and store gradients for relevant bg examples - if (max_prec<=current_prec): - max_prec=current_prec - relevant_bg_grad += (bg_relations/rank[ii]) - else: - relevant_bg_grad += (bg_relations/rank[ii])*(((1-max_prec)/(1-current_prec))) - - #Store fg gradients - fg_grad[ii]=-(1-max_prec) - prec[ii]=max_prec - - #aLRP with grad formulation fg gradient - classification_grads[fg_labels]= fg_grad - #aLRP with grad formulation bg gradient - classification_grads[relevant_bg_labels]= relevant_bg_grad - - classification_grads /= fg_num - - cls_loss=1-prec.mean() - ctx.save_for_backward(classification_grads) - - return cls_loss - - @staticmethod - def backward(ctx, out_grad1): - g1, =ctx.saved_tensors - return g1*out_grad1, None, None - - -class ComputeLoss: - # Compute losses - def __init__(self, model, autobalance=False): - super(ComputeLoss, self).__init__() - device = next(model.parameters()).device # get model device - h = model.hyp # hyperparameters - - # Define criteria - BCEcls = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([h['cls_pw']], device=device)) - BCEobj = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([h['obj_pw']], device=device)) - - # Class label smoothing https://arxiv.org/pdf/1902.04103.pdf eqn 3 - self.cp, self.cn = smooth_BCE(eps=h.get('label_smoothing', 0.0)) # positive, negative BCE targets - - # Focal loss - g = h['fl_gamma'] # focal loss gamma - if g > 0: - BCEcls, BCEobj = FocalLoss(BCEcls, g), FocalLoss(BCEobj, g) - - det = model.module.model[-1] if is_parallel(model) else model.model[-1] # Detect() module - self.balance = {3: [4.0, 1.0, 0.4]}.get(det.nl, [4.0, 1.0, 0.25, 0.06, .02]) # P3-P7 - #self.balance = {3: [4.0, 1.0, 0.4]}.get(det.nl, [4.0, 1.0, 0.25, 0.1, .05]) # P3-P7 - #self.balance = {3: [4.0, 1.0, 0.4]}.get(det.nl, [4.0, 1.0, 0.5, 0.4, .1]) # P3-P7 - self.ssi = list(det.stride).index(16) if autobalance else 0 # stride 16 index - self.BCEcls, self.BCEobj, self.gr, self.hyp, self.autobalance = BCEcls, BCEobj, model.gr, h, autobalance - for k in 'na', 'nc', 'nl', 'anchors': - setattr(self, k, getattr(det, k)) - - def __call__(self, p, targets): # predictions, targets, model - device = targets.device - lcls, lbox, lobj = torch.zeros(1, device=device), torch.zeros(1, device=device), torch.zeros(1, device=device) - tcls, tbox, indices, anchors = self.build_targets(p, targets) # targets - - # Losses - for i, pi in enumerate(p): # layer index, layer predictions - b, a, gj, gi = indices[i] # image, anchor, gridy, gridx - tobj = torch.zeros_like(pi[..., 0], device=device) # target obj - - n = b.shape[0] # number of targets - if n: - ps = pi[b, a, gj, gi] # prediction subset corresponding to targets - - # Regression - pxy = ps[:, :2].sigmoid() * 2. - 0.5 - pwh = (ps[:, 2:4].sigmoid() * 2) ** 2 * anchors[i] - pbox = torch.cat((pxy, pwh), 1) # predicted box - iou = bbox_iou(pbox.T, tbox[i], x1y1x2y2=False, CIoU=True) # iou(prediction, target) - lbox += (1.0 - iou).mean() # iou loss - - # Objectness - tobj[b, a, gj, gi] = (1.0 - self.gr) + self.gr * iou.detach().clamp(0).type(tobj.dtype) # iou ratio - - # Classification - if self.nc > 1: # cls loss (only if multiple classes) - t = torch.full_like(ps[:, 5:], self.cn, device=device) # targets - t[range(n), tcls[i]] = self.cp - #t[t==self.cp] = iou.detach().clamp(0).type(t.dtype) - lcls += self.BCEcls(ps[:, 5:], t) # BCE - - # Append targets to text file - # with open('targets.txt', 'a') as file: - # [file.write('%11.5g ' * 4 % tuple(x) + '\n') for x in torch.cat((txy[i], twh[i]), 1)] - - obji = self.BCEobj(pi[..., 4], tobj) - lobj += obji * self.balance[i] # obj loss - if self.autobalance: - self.balance[i] = self.balance[i] * 0.9999 + 0.0001 / obji.detach().item() - - if self.autobalance: - self.balance = [x / self.balance[self.ssi] for x in self.balance] - lbox *= self.hyp['box'] - lobj *= self.hyp['obj'] - lcls *= self.hyp['cls'] - bs = tobj.shape[0] # batch size - - loss = lbox + lobj + lcls - return loss * bs, torch.cat((lbox, lobj, lcls, loss)).detach() - - def build_targets(self, p, targets): - # Build targets for compute_loss(), input targets(image,class,x,y,w,h) - na, nt = self.na, targets.shape[0] # number of anchors, targets - tcls, tbox, indices, anch = [], [], [], [] - gain = torch.ones(7, device=targets.device).long() # normalized to gridspace gain - ai = torch.arange(na, device=targets.device).float().view(na, 1).repeat(1, nt) # same as .repeat_interleave(nt) - targets = torch.cat((targets.repeat(na, 1, 1), ai[:, :, None]), 2) # append anchor indices - - g = 0.5 # bias - off = torch.tensor([[0, 0], - [1, 0], [0, 1], [-1, 0], [0, -1], # j,k,l,m - # [1, 1], [1, -1], [-1, 1], [-1, -1], # jk,jm,lk,lm - ], device=targets.device).float() * g # offsets - - for i in range(self.nl): - anchors = self.anchors[i] - gain[2:6] = torch.tensor(p[i].shape)[[3, 2, 3, 2]] # xyxy gain - - # Match targets to anchors - t = targets * gain - if nt: - # Matches - r = t[:, :, 4:6] / anchors[:, None] # wh ratio - j = torch.max(r, 1. / r).max(2)[0] < self.hyp['anchor_t'] # compare - # j = wh_iou(anchors, t[:, 4:6]) > model.hyp['iou_t'] # iou(3,n)=wh_iou(anchors(3,2), gwh(n,2)) - t = t[j] # filter - - # Offsets - gxy = t[:, 2:4] # grid xy - gxi = gain[[2, 3]] - gxy # inverse - j, k = ((gxy % 1. < g) & (gxy > 1.)).T - l, m = ((gxi % 1. < g) & (gxi > 1.)).T - j = torch.stack((torch.ones_like(j), j, k, l, m)) - t = t.repeat((5, 1, 1))[j] - offsets = (torch.zeros_like(gxy)[None] + off[:, None])[j] - else: - t = targets[0] - offsets = 0 - - # Define - b, c = t[:, :2].long().T # image, class - gxy = t[:, 2:4] # grid xy - gwh = t[:, 4:6] # grid wh - gij = (gxy - offsets).long() - gi, gj = gij.T # grid xy indices - - # Append - a = t[:, 6].long() # anchor indices - indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1))) # image, anchor, grid indices - tbox.append(torch.cat((gxy - gij, gwh), 1)) # box - anch.append(anchors[a]) # anchors - tcls.append(c) # class - - return tcls, tbox, indices, anch - - -class ComputeLossOTA: - # Compute losses - def __init__(self, model, autobalance=False): - super(ComputeLossOTA, self).__init__() - device = next(model.parameters()).device # get model device - h = model.hyp # hyperparameters - - # Define criteria - BCEcls = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([h['cls_pw']], device=device)) - BCEobj = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([h['obj_pw']], device=device)) - - # Class label smoothing https://arxiv.org/pdf/1902.04103.pdf eqn 3 - self.cp, self.cn = smooth_BCE(eps=h.get('label_smoothing', 0.0)) # positive, negative BCE targets - - # Focal loss - g = h['fl_gamma'] # focal loss gamma - if g > 0: - BCEcls, BCEobj = FocalLoss(BCEcls, g), FocalLoss(BCEobj, g) - - det = model.module.model[-1] if is_parallel(model) else model.model[-1] # Detect() module - self.balance = {3: [4.0, 1.0, 0.4]}.get(det.nl, [4.0, 1.0, 0.25, 0.06, .02]) # P3-P7 - self.ssi = list(det.stride).index(16) if autobalance else 0 # stride 16 index - self.BCEcls, self.BCEobj, self.gr, self.hyp, self.autobalance = BCEcls, BCEobj, model.gr, h, autobalance - for k in 'na', 'nc', 'nl', 'anchors', 'stride': - setattr(self, k, getattr(det, k)) - - def __call__(self, p, targets, imgs): # predictions, targets, model - device = targets.device - lcls, lbox, lobj = torch.zeros(1, device=device), torch.zeros(1, device=device), torch.zeros(1, device=device) - bs, as_, gjs, gis, targets, anchors = self.build_targets(p, targets, imgs) - pre_gen_gains = [torch.tensor(pp.shape, device=device)[[3, 2, 3, 2]] for pp in p] - - - # Losses - for i, pi in enumerate(p): # layer index, layer predictions - b, a, gj, gi = bs[i], as_[i], gjs[i], gis[i] # image, anchor, gridy, gridx - tobj = torch.zeros_like(pi[..., 0], device=device) # target obj - - n = b.shape[0] # number of targets - if n: - ps = pi[b, a, gj, gi] # prediction subset corresponding to targets - - # Regression - grid = torch.stack([gi, gj], dim=1) - pxy = ps[:, :2].sigmoid() * 2. - 0.5 - #pxy = ps[:, :2].sigmoid() * 3. - 1. - pwh = (ps[:, 2:4].sigmoid() * 2) ** 2 * anchors[i] - pbox = torch.cat((pxy, pwh), 1) # predicted box - selected_tbox = targets[i][:, 2:6] * pre_gen_gains[i] - selected_tbox[:, :2] -= grid - iou = bbox_iou(pbox.T, selected_tbox, x1y1x2y2=False, CIoU=True) # iou(prediction, target) - lbox += (1.0 - iou).mean() # iou loss - - # Objectness - tobj[b, a, gj, gi] = (1.0 - self.gr) + self.gr * iou.detach().clamp(0).type(tobj.dtype) # iou ratio - - # Classification - selected_tcls = targets[i][:, 1].long() - if self.nc > 1: # cls loss (only if multiple classes) - t = torch.full_like(ps[:, 5:], self.cn, device=device) # targets - t[range(n), selected_tcls] = self.cp - lcls += self.BCEcls(ps[:, 5:], t) # BCE - - # Append targets to text file - # with open('targets.txt', 'a') as file: - # [file.write('%11.5g ' * 4 % tuple(x) + '\n') for x in torch.cat((txy[i], twh[i]), 1)] - - obji = self.BCEobj(pi[..., 4], tobj) - lobj += obji * self.balance[i] # obj loss - if self.autobalance: - self.balance[i] = self.balance[i] * 0.9999 + 0.0001 / obji.detach().item() - - if self.autobalance: - self.balance = [x / self.balance[self.ssi] for x in self.balance] - lbox *= self.hyp['box'] - lobj *= self.hyp['obj'] - lcls *= self.hyp['cls'] - bs = tobj.shape[0] # batch size - - loss = lbox + lobj + lcls - return loss * bs, torch.cat((lbox, lobj, lcls, loss)).detach() - - def build_targets(self, p, targets, imgs): - - #indices, anch = self.find_positive(p, targets) - indices, anch = self.find_3_positive(p, targets) - #indices, anch = self.find_4_positive(p, targets) - #indices, anch = self.find_5_positive(p, targets) - #indices, anch = self.find_9_positive(p, targets) - device = torch.device(targets.device) - matching_bs = [[] for pp in p] - matching_as = [[] for pp in p] - matching_gjs = [[] for pp in p] - matching_gis = [[] for pp in p] - matching_targets = [[] for pp in p] - matching_anchs = [[] for pp in p] - - nl = len(p) - - for batch_idx in range(p[0].shape[0]): - - b_idx = targets[:, 0]==batch_idx - this_target = targets[b_idx] - if this_target.shape[0] == 0: - continue - - txywh = this_target[:, 2:6] * imgs[batch_idx].shape[1] - txyxy = xywh2xyxy(txywh) - - pxyxys = [] - p_cls = [] - p_obj = [] - from_which_layer = [] - all_b = [] - all_a = [] - all_gj = [] - all_gi = [] - all_anch = [] - - for i, pi in enumerate(p): - - b, a, gj, gi = indices[i] - idx = (b == batch_idx) - b, a, gj, gi = b[idx], a[idx], gj[idx], gi[idx] - all_b.append(b) - all_a.append(a) - all_gj.append(gj) - all_gi.append(gi) - all_anch.append(anch[i][idx]) - from_which_layer.append((torch.ones(size=(len(b),)) * i).to(device)) - - fg_pred = pi[b, a, gj, gi] - p_obj.append(fg_pred[:, 4:5]) - p_cls.append(fg_pred[:, 5:]) - - grid = torch.stack([gi, gj], dim=1) - pxy = (fg_pred[:, :2].sigmoid() * 2. - 0.5 + grid) * self.stride[i] #/ 8. - #pxy = (fg_pred[:, :2].sigmoid() * 3. - 1. + grid) * self.stride[i] - pwh = (fg_pred[:, 2:4].sigmoid() * 2) ** 2 * anch[i][idx] * self.stride[i] #/ 8. - pxywh = torch.cat([pxy, pwh], dim=-1) - pxyxy = xywh2xyxy(pxywh) - pxyxys.append(pxyxy) - - pxyxys = torch.cat(pxyxys, dim=0) - if pxyxys.shape[0] == 0: - continue - p_obj = torch.cat(p_obj, dim=0) - p_cls = torch.cat(p_cls, dim=0) - from_which_layer = torch.cat(from_which_layer, dim=0) - all_b = torch.cat(all_b, dim=0) - all_a = torch.cat(all_a, dim=0) - all_gj = torch.cat(all_gj, dim=0) - all_gi = torch.cat(all_gi, dim=0) - all_anch = torch.cat(all_anch, dim=0) - - pair_wise_iou = box_iou(txyxy, pxyxys) - - pair_wise_iou_loss = -torch.log(pair_wise_iou + 1e-8) - - top_k, _ = torch.topk(pair_wise_iou, min(10, pair_wise_iou.shape[1]), dim=1) - dynamic_ks = torch.clamp(top_k.sum(1).int(), min=1) - - gt_cls_per_image = ( - F.one_hot(this_target[:, 1].to(torch.int64), self.nc) - .float() - .unsqueeze(1) - .repeat(1, pxyxys.shape[0], 1) - ) - - num_gt = this_target.shape[0] - cls_preds_ = ( - p_cls.float().unsqueeze(0).repeat(num_gt, 1, 1).sigmoid_() - * p_obj.unsqueeze(0).repeat(num_gt, 1, 1).sigmoid_() - ) - - y = cls_preds_.sqrt_() - pair_wise_cls_loss = F.binary_cross_entropy_with_logits( - torch.log(y/(1-y)) , gt_cls_per_image, reduction="none" - ).sum(-1) - del cls_preds_ - - cost = ( - pair_wise_cls_loss - + 3.0 * pair_wise_iou_loss - ) - - matching_matrix = torch.zeros_like(cost, device=device) - - for gt_idx in range(num_gt): - _, pos_idx = torch.topk( - cost[gt_idx], k=dynamic_ks[gt_idx].item(), largest=False - ) - matching_matrix[gt_idx][pos_idx] = 1.0 - - del top_k, dynamic_ks - anchor_matching_gt = matching_matrix.sum(0) - if (anchor_matching_gt > 1).sum() > 0: - _, cost_argmin = torch.min(cost[:, anchor_matching_gt > 1], dim=0) - matching_matrix[:, anchor_matching_gt > 1] *= 0.0 - matching_matrix[cost_argmin, anchor_matching_gt > 1] = 1.0 - fg_mask_inboxes = (matching_matrix.sum(0) > 0.0).to(device) - matched_gt_inds = matching_matrix[:, fg_mask_inboxes].argmax(0) - - from_which_layer = from_which_layer[fg_mask_inboxes] - all_b = all_b[fg_mask_inboxes] - all_a = all_a[fg_mask_inboxes] - all_gj = all_gj[fg_mask_inboxes] - all_gi = all_gi[fg_mask_inboxes] - all_anch = all_anch[fg_mask_inboxes] - - this_target = this_target[matched_gt_inds] - - for i in range(nl): - layer_idx = from_which_layer == i - matching_bs[i].append(all_b[layer_idx]) - matching_as[i].append(all_a[layer_idx]) - matching_gjs[i].append(all_gj[layer_idx]) - matching_gis[i].append(all_gi[layer_idx]) - matching_targets[i].append(this_target[layer_idx]) - matching_anchs[i].append(all_anch[layer_idx]) - - for i in range(nl): - if matching_targets[i] != []: - matching_bs[i] = torch.cat(matching_bs[i], dim=0) - matching_as[i] = torch.cat(matching_as[i], dim=0) - matching_gjs[i] = torch.cat(matching_gjs[i], dim=0) - matching_gis[i] = torch.cat(matching_gis[i], dim=0) - matching_targets[i] = torch.cat(matching_targets[i], dim=0) - matching_anchs[i] = torch.cat(matching_anchs[i], dim=0) - else: - matching_bs[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_as[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_gjs[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_gis[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_targets[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_anchs[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - - return matching_bs, matching_as, matching_gjs, matching_gis, matching_targets, matching_anchs - - def find_3_positive(self, p, targets): - # Build targets for compute_loss(), input targets(image,class,x,y,w,h) - na, nt = self.na, targets.shape[0] # number of anchors, targets - indices, anch = [], [] - gain = torch.ones(7, device=targets.device).long() # normalized to gridspace gain - ai = torch.arange(na, device=targets.device).float().view(na, 1).repeat(1, nt) # same as .repeat_interleave(nt) - targets = torch.cat((targets.repeat(na, 1, 1), ai[:, :, None]), 2) # append anchor indices - - g = 0.5 # bias - off = torch.tensor([[0, 0], - [1, 0], [0, 1], [-1, 0], [0, -1], # j,k,l,m - # [1, 1], [1, -1], [-1, 1], [-1, -1], # jk,jm,lk,lm - ], device=targets.device).float() * g # offsets - - for i in range(self.nl): - anchors = self.anchors[i] - gain[2:6] = torch.tensor(p[i].shape)[[3, 2, 3, 2]] # xyxy gain - - # Match targets to anchors - t = targets * gain - if nt: - # Matches - r = t[:, :, 4:6] / anchors[:, None] # wh ratio - j = torch.max(r, 1. / r).max(2)[0] < self.hyp['anchor_t'] # compare - # j = wh_iou(anchors, t[:, 4:6]) > model.hyp['iou_t'] # iou(3,n)=wh_iou(anchors(3,2), gwh(n,2)) - t = t[j] # filter - - # Offsets - gxy = t[:, 2:4] # grid xy - gxi = gain[[2, 3]] - gxy # inverse - j, k = ((gxy % 1. < g) & (gxy > 1.)).T - l, m = ((gxi % 1. < g) & (gxi > 1.)).T - j = torch.stack((torch.ones_like(j), j, k, l, m)) - t = t.repeat((5, 1, 1))[j] - offsets = (torch.zeros_like(gxy)[None] + off[:, None])[j] - else: - t = targets[0] - offsets = 0 - - # Define - b, c = t[:, :2].long().T # image, class - gxy = t[:, 2:4] # grid xy - gwh = t[:, 4:6] # grid wh - gij = (gxy - offsets).long() - gi, gj = gij.T # grid xy indices - - # Append - a = t[:, 6].long() # anchor indices - indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1))) # image, anchor, grid indices - anch.append(anchors[a]) # anchors - - return indices, anch - - -class ComputeLossBinOTA: - # Compute losses - def __init__(self, model, autobalance=False): - super(ComputeLossBinOTA, self).__init__() - device = next(model.parameters()).device # get model device - h = model.hyp # hyperparameters - - # Define criteria - BCEcls = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([h['cls_pw']], device=device)) - BCEobj = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([h['obj_pw']], device=device)) - #MSEangle = nn.MSELoss().to(device) - - # Class label smoothing https://arxiv.org/pdf/1902.04103.pdf eqn 3 - self.cp, self.cn = smooth_BCE(eps=h.get('label_smoothing', 0.0)) # positive, negative BCE targets - - # Focal loss - g = h['fl_gamma'] # focal loss gamma - if g > 0: - BCEcls, BCEobj = FocalLoss(BCEcls, g), FocalLoss(BCEobj, g) - - det = model.module.model[-1] if is_parallel(model) else model.model[-1] # Detect() module - self.balance = {3: [4.0, 1.0, 0.4]}.get(det.nl, [4.0, 1.0, 0.25, 0.06, .02]) # P3-P7 - self.ssi = list(det.stride).index(16) if autobalance else 0 # stride 16 index - self.BCEcls, self.BCEobj, self.gr, self.hyp, self.autobalance = BCEcls, BCEobj, model.gr, h, autobalance - for k in 'na', 'nc', 'nl', 'anchors', 'stride', 'bin_count': - setattr(self, k, getattr(det, k)) - - #xy_bin_sigmoid = SigmoidBin(bin_count=11, min=-0.5, max=1.5, use_loss_regression=False).to(device) - wh_bin_sigmoid = SigmoidBin(bin_count=self.bin_count, min=0.0, max=4.0, use_loss_regression=False).to(device) - #angle_bin_sigmoid = SigmoidBin(bin_count=31, min=-1.1, max=1.1, use_loss_regression=False).to(device) - self.wh_bin_sigmoid = wh_bin_sigmoid - - def __call__(self, p, targets, imgs): # predictions, targets, model - device = targets.device - lcls, lbox, lobj = torch.zeros(1, device=device), torch.zeros(1, device=device), torch.zeros(1, device=device) - bs, as_, gjs, gis, targets, anchors = self.build_targets(p, targets, imgs) - pre_gen_gains = [torch.tensor(pp.shape, device=device)[[3, 2, 3, 2]] for pp in p] - - - # Losses - for i, pi in enumerate(p): # layer index, layer predictions - b, a, gj, gi = bs[i], as_[i], gjs[i], gis[i] # image, anchor, gridy, gridx - tobj = torch.zeros_like(pi[..., 0], device=device) # target obj - - obj_idx = self.wh_bin_sigmoid.get_length()*2 + 2 # x,y, w-bce, h-bce # xy_bin_sigmoid.get_length()*2 - - n = b.shape[0] # number of targets - if n: - ps = pi[b, a, gj, gi] # prediction subset corresponding to targets - - # Regression - grid = torch.stack([gi, gj], dim=1) - selected_tbox = targets[i][:, 2:6] * pre_gen_gains[i] - selected_tbox[:, :2] -= grid - - #pxy = ps[:, :2].sigmoid() * 2. - 0.5 - ##pxy = ps[:, :2].sigmoid() * 3. - 1. - #pwh = (ps[:, 2:4].sigmoid() * 2) ** 2 * anchors[i] - #pbox = torch.cat((pxy, pwh), 1) # predicted box - - #x_loss, px = xy_bin_sigmoid.training_loss(ps[..., 0:12], tbox[i][..., 0]) - #y_loss, py = xy_bin_sigmoid.training_loss(ps[..., 12:24], tbox[i][..., 1]) - w_loss, pw = self.wh_bin_sigmoid.training_loss(ps[..., 2:(3+self.bin_count)], selected_tbox[..., 2] / anchors[i][..., 0]) - h_loss, ph = self.wh_bin_sigmoid.training_loss(ps[..., (3+self.bin_count):obj_idx], selected_tbox[..., 3] / anchors[i][..., 1]) - - pw *= anchors[i][..., 0] - ph *= anchors[i][..., 1] - - px = ps[:, 0].sigmoid() * 2. - 0.5 - py = ps[:, 1].sigmoid() * 2. - 0.5 - - lbox += w_loss + h_loss # + x_loss + y_loss - - #print(f"\n px = {px.shape}, py = {py.shape}, pw = {pw.shape}, ph = {ph.shape} \n") - - pbox = torch.cat((px.unsqueeze(1), py.unsqueeze(1), pw.unsqueeze(1), ph.unsqueeze(1)), 1).to(device) # predicted box - - - - - iou = bbox_iou(pbox.T, selected_tbox, x1y1x2y2=False, CIoU=True) # iou(prediction, target) - lbox += (1.0 - iou).mean() # iou loss - - # Objectness - tobj[b, a, gj, gi] = (1.0 - self.gr) + self.gr * iou.detach().clamp(0).type(tobj.dtype) # iou ratio - - # Classification - selected_tcls = targets[i][:, 1].long() - if self.nc > 1: # cls loss (only if multiple classes) - t = torch.full_like(ps[:, (1+obj_idx):], self.cn, device=device) # targets - t[range(n), selected_tcls] = self.cp - lcls += self.BCEcls(ps[:, (1+obj_idx):], t) # BCE - - # Append targets to text file - # with open('targets.txt', 'a') as file: - # [file.write('%11.5g ' * 4 % tuple(x) + '\n') for x in torch.cat((txy[i], twh[i]), 1)] - - obji = self.BCEobj(pi[..., obj_idx], tobj) - lobj += obji * self.balance[i] # obj loss - if self.autobalance: - self.balance[i] = self.balance[i] * 0.9999 + 0.0001 / obji.detach().item() - - if self.autobalance: - self.balance = [x / self.balance[self.ssi] for x in self.balance] - lbox *= self.hyp['box'] - lobj *= self.hyp['obj'] - lcls *= self.hyp['cls'] - bs = tobj.shape[0] # batch size - - loss = lbox + lobj + lcls - return loss * bs, torch.cat((lbox, lobj, lcls, loss)).detach() - - def build_targets(self, p, targets, imgs): - - #indices, anch = self.find_positive(p, targets) - indices, anch = self.find_3_positive(p, targets) - #indices, anch = self.find_4_positive(p, targets) - #indices, anch = self.find_5_positive(p, targets) - #indices, anch = self.find_9_positive(p, targets) - - matching_bs = [[] for pp in p] - matching_as = [[] for pp in p] - matching_gjs = [[] for pp in p] - matching_gis = [[] for pp in p] - matching_targets = [[] for pp in p] - matching_anchs = [[] for pp in p] - - nl = len(p) - - for batch_idx in range(p[0].shape[0]): - - b_idx = targets[:, 0]==batch_idx - this_target = targets[b_idx] - if this_target.shape[0] == 0: - continue - - txywh = this_target[:, 2:6] * imgs[batch_idx].shape[1] - txyxy = xywh2xyxy(txywh) - - pxyxys = [] - p_cls = [] - p_obj = [] - from_which_layer = [] - all_b = [] - all_a = [] - all_gj = [] - all_gi = [] - all_anch = [] - - for i, pi in enumerate(p): - - obj_idx = self.wh_bin_sigmoid.get_length()*2 + 2 - - b, a, gj, gi = indices[i] - idx = (b == batch_idx) - b, a, gj, gi = b[idx], a[idx], gj[idx], gi[idx] - all_b.append(b) - all_a.append(a) - all_gj.append(gj) - all_gi.append(gi) - all_anch.append(anch[i][idx]) - from_which_layer.append(torch.ones(size=(len(b),)) * i) - - fg_pred = pi[b, a, gj, gi] - p_obj.append(fg_pred[:, obj_idx:(obj_idx+1)]) - p_cls.append(fg_pred[:, (obj_idx+1):]) - - grid = torch.stack([gi, gj], dim=1) - pxy = (fg_pred[:, :2].sigmoid() * 2. - 0.5 + grid) * self.stride[i] #/ 8. - #pwh = (fg_pred[:, 2:4].sigmoid() * 2) ** 2 * anch[i][idx] * self.stride[i] #/ 8. - pw = self.wh_bin_sigmoid.forward(fg_pred[..., 2:(3+self.bin_count)].sigmoid()) * anch[i][idx][:, 0] * self.stride[i] - ph = self.wh_bin_sigmoid.forward(fg_pred[..., (3+self.bin_count):obj_idx].sigmoid()) * anch[i][idx][:, 1] * self.stride[i] - - pxywh = torch.cat([pxy, pw.unsqueeze(1), ph.unsqueeze(1)], dim=-1) - pxyxy = xywh2xyxy(pxywh) - pxyxys.append(pxyxy) - - pxyxys = torch.cat(pxyxys, dim=0) - if pxyxys.shape[0] == 0: - continue - p_obj = torch.cat(p_obj, dim=0) - p_cls = torch.cat(p_cls, dim=0) - from_which_layer = torch.cat(from_which_layer, dim=0) - all_b = torch.cat(all_b, dim=0) - all_a = torch.cat(all_a, dim=0) - all_gj = torch.cat(all_gj, dim=0) - all_gi = torch.cat(all_gi, dim=0) - all_anch = torch.cat(all_anch, dim=0) - - pair_wise_iou = box_iou(txyxy, pxyxys) - - pair_wise_iou_loss = -torch.log(pair_wise_iou + 1e-8) - - top_k, _ = torch.topk(pair_wise_iou, min(10, pair_wise_iou.shape[1]), dim=1) - dynamic_ks = torch.clamp(top_k.sum(1).int(), min=1) - - gt_cls_per_image = ( - F.one_hot(this_target[:, 1].to(torch.int64), self.nc) - .float() - .unsqueeze(1) - .repeat(1, pxyxys.shape[0], 1) - ) - - num_gt = this_target.shape[0] - cls_preds_ = ( - p_cls.float().unsqueeze(0).repeat(num_gt, 1, 1).sigmoid_() - * p_obj.unsqueeze(0).repeat(num_gt, 1, 1).sigmoid_() - ) - - y = cls_preds_.sqrt_() - pair_wise_cls_loss = F.binary_cross_entropy_with_logits( - torch.log(y/(1-y)) , gt_cls_per_image, reduction="none" - ).sum(-1) - del cls_preds_ - - cost = ( - pair_wise_cls_loss - + 3.0 * pair_wise_iou_loss - ) - - matching_matrix = torch.zeros_like(cost) - - for gt_idx in range(num_gt): - _, pos_idx = torch.topk( - cost[gt_idx], k=dynamic_ks[gt_idx].item(), largest=False - ) - matching_matrix[gt_idx][pos_idx] = 1.0 - - del top_k, dynamic_ks - anchor_matching_gt = matching_matrix.sum(0) - if (anchor_matching_gt > 1).sum() > 0: - _, cost_argmin = torch.min(cost[:, anchor_matching_gt > 1], dim=0) - matching_matrix[:, anchor_matching_gt > 1] *= 0.0 - matching_matrix[cost_argmin, anchor_matching_gt > 1] = 1.0 - fg_mask_inboxes = matching_matrix.sum(0) > 0.0 - matched_gt_inds = matching_matrix[:, fg_mask_inboxes].argmax(0) - - from_which_layer = from_which_layer[fg_mask_inboxes] - all_b = all_b[fg_mask_inboxes] - all_a = all_a[fg_mask_inboxes] - all_gj = all_gj[fg_mask_inboxes] - all_gi = all_gi[fg_mask_inboxes] - all_anch = all_anch[fg_mask_inboxes] - - this_target = this_target[matched_gt_inds] - - for i in range(nl): - layer_idx = from_which_layer == i - matching_bs[i].append(all_b[layer_idx]) - matching_as[i].append(all_a[layer_idx]) - matching_gjs[i].append(all_gj[layer_idx]) - matching_gis[i].append(all_gi[layer_idx]) - matching_targets[i].append(this_target[layer_idx]) - matching_anchs[i].append(all_anch[layer_idx]) - - for i in range(nl): - if matching_targets[i] != []: - matching_bs[i] = torch.cat(matching_bs[i], dim=0) - matching_as[i] = torch.cat(matching_as[i], dim=0) - matching_gjs[i] = torch.cat(matching_gjs[i], dim=0) - matching_gis[i] = torch.cat(matching_gis[i], dim=0) - matching_targets[i] = torch.cat(matching_targets[i], dim=0) - matching_anchs[i] = torch.cat(matching_anchs[i], dim=0) - else: - matching_bs[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_as[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_gjs[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_gis[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_targets[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_anchs[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - - return matching_bs, matching_as, matching_gjs, matching_gis, matching_targets, matching_anchs - - def find_3_positive(self, p, targets): - # Build targets for compute_loss(), input targets(image,class,x,y,w,h) - na, nt = self.na, targets.shape[0] # number of anchors, targets - indices, anch = [], [] - gain = torch.ones(7, device=targets.device).long() # normalized to gridspace gain - ai = torch.arange(na, device=targets.device).float().view(na, 1).repeat(1, nt) # same as .repeat_interleave(nt) - targets = torch.cat((targets.repeat(na, 1, 1), ai[:, :, None]), 2) # append anchor indices - - g = 0.5 # bias - off = torch.tensor([[0, 0], - [1, 0], [0, 1], [-1, 0], [0, -1], # j,k,l,m - # [1, 1], [1, -1], [-1, 1], [-1, -1], # jk,jm,lk,lm - ], device=targets.device).float() * g # offsets - - for i in range(self.nl): - anchors = self.anchors[i] - gain[2:6] = torch.tensor(p[i].shape)[[3, 2, 3, 2]] # xyxy gain - - # Match targets to anchors - t = targets * gain - if nt: - # Matches - r = t[:, :, 4:6] / anchors[:, None] # wh ratio - j = torch.max(r, 1. / r).max(2)[0] < self.hyp['anchor_t'] # compare - # j = wh_iou(anchors, t[:, 4:6]) > model.hyp['iou_t'] # iou(3,n)=wh_iou(anchors(3,2), gwh(n,2)) - t = t[j] # filter - - # Offsets - gxy = t[:, 2:4] # grid xy - gxi = gain[[2, 3]] - gxy # inverse - j, k = ((gxy % 1. < g) & (gxy > 1.)).T - l, m = ((gxi % 1. < g) & (gxi > 1.)).T - j = torch.stack((torch.ones_like(j), j, k, l, m)) - t = t.repeat((5, 1, 1))[j] - offsets = (torch.zeros_like(gxy)[None] + off[:, None])[j] - else: - t = targets[0] - offsets = 0 - - # Define - b, c = t[:, :2].long().T # image, class - gxy = t[:, 2:4] # grid xy - gwh = t[:, 4:6] # grid wh - gij = (gxy - offsets).long() - gi, gj = gij.T # grid xy indices - - # Append - a = t[:, 6].long() # anchor indices - indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1))) # image, anchor, grid indices - anch.append(anchors[a]) # anchors - - return indices, anch - - -class ComputeLossAuxOTA: - # Compute losses - def __init__(self, model, autobalance=False): - super(ComputeLossAuxOTA, self).__init__() - device = next(model.parameters()).device # get model device - h = model.hyp # hyperparameters - - # Define criteria - BCEcls = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([h['cls_pw']], device=device)) - BCEobj = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([h['obj_pw']], device=device)) - - # Class label smoothing https://arxiv.org/pdf/1902.04103.pdf eqn 3 - self.cp, self.cn = smooth_BCE(eps=h.get('label_smoothing', 0.0)) # positive, negative BCE targets - - # Focal loss - g = h['fl_gamma'] # focal loss gamma - if g > 0: - BCEcls, BCEobj = FocalLoss(BCEcls, g), FocalLoss(BCEobj, g) - - det = model.module.model[-1] if is_parallel(model) else model.model[-1] # Detect() module - self.balance = {3: [4.0, 1.0, 0.4]}.get(det.nl, [4.0, 1.0, 0.25, 0.06, .02]) # P3-P7 - self.ssi = list(det.stride).index(16) if autobalance else 0 # stride 16 index - self.BCEcls, self.BCEobj, self.gr, self.hyp, self.autobalance = BCEcls, BCEobj, model.gr, h, autobalance - for k in 'na', 'nc', 'nl', 'anchors', 'stride': - setattr(self, k, getattr(det, k)) - - def __call__(self, p, targets, imgs): # predictions, targets, model - device = targets.device - lcls, lbox, lobj = torch.zeros(1, device=device), torch.zeros(1, device=device), torch.zeros(1, device=device) - bs_aux, as_aux_, gjs_aux, gis_aux, targets_aux, anchors_aux = self.build_targets2(p[:self.nl], targets, imgs) - bs, as_, gjs, gis, targets, anchors = self.build_targets(p[:self.nl], targets, imgs) - pre_gen_gains_aux = [torch.tensor(pp.shape, device=device)[[3, 2, 3, 2]] for pp in p[:self.nl]] - pre_gen_gains = [torch.tensor(pp.shape, device=device)[[3, 2, 3, 2]] for pp in p[:self.nl]] - - - # Losses - for i in range(self.nl): # layer index, layer predictions - pi = p[i] - pi_aux = p[i+self.nl] - b, a, gj, gi = bs[i], as_[i], gjs[i], gis[i] # image, anchor, gridy, gridx - b_aux, a_aux, gj_aux, gi_aux = bs_aux[i], as_aux_[i], gjs_aux[i], gis_aux[i] # image, anchor, gridy, gridx - tobj = torch.zeros_like(pi[..., 0], device=device) # target obj - tobj_aux = torch.zeros_like(pi_aux[..., 0], device=device) # target obj - - n = b.shape[0] # number of targets - if n: - ps = pi[b, a, gj, gi] # prediction subset corresponding to targets - - # Regression - grid = torch.stack([gi, gj], dim=1) - pxy = ps[:, :2].sigmoid() * 2. - 0.5 - pwh = (ps[:, 2:4].sigmoid() * 2) ** 2 * anchors[i] - pbox = torch.cat((pxy, pwh), 1) # predicted box - selected_tbox = targets[i][:, 2:6] * pre_gen_gains[i] - selected_tbox[:, :2] -= grid - iou = bbox_iou(pbox.T, selected_tbox, x1y1x2y2=False, CIoU=True) # iou(prediction, target) - lbox += (1.0 - iou).mean() # iou loss - - # Objectness - tobj[b, a, gj, gi] = (1.0 - self.gr) + self.gr * iou.detach().clamp(0).type(tobj.dtype) # iou ratio - - # Classification - selected_tcls = targets[i][:, 1].long() - if self.nc > 1: # cls loss (only if multiple classes) - t = torch.full_like(ps[:, 5:], self.cn, device=device) # targets - t[range(n), selected_tcls] = self.cp - lcls += self.BCEcls(ps[:, 5:], t) # BCE - - # Append targets to text file - # with open('targets.txt', 'a') as file: - # [file.write('%11.5g ' * 4 % tuple(x) + '\n') for x in torch.cat((txy[i], twh[i]), 1)] - - n_aux = b_aux.shape[0] # number of targets - if n_aux: - ps_aux = pi_aux[b_aux, a_aux, gj_aux, gi_aux] # prediction subset corresponding to targets - grid_aux = torch.stack([gi_aux, gj_aux], dim=1) - pxy_aux = ps_aux[:, :2].sigmoid() * 2. - 0.5 - #pxy_aux = ps_aux[:, :2].sigmoid() * 3. - 1. - pwh_aux = (ps_aux[:, 2:4].sigmoid() * 2) ** 2 * anchors_aux[i] - pbox_aux = torch.cat((pxy_aux, pwh_aux), 1) # predicted box - selected_tbox_aux = targets_aux[i][:, 2:6] * pre_gen_gains_aux[i] - selected_tbox_aux[:, :2] -= grid_aux - iou_aux = bbox_iou(pbox_aux.T, selected_tbox_aux, x1y1x2y2=False, CIoU=True) # iou(prediction, target) - lbox += 0.25 * (1.0 - iou_aux).mean() # iou loss - - # Objectness - tobj_aux[b_aux, a_aux, gj_aux, gi_aux] = (1.0 - self.gr) + self.gr * iou_aux.detach().clamp(0).type(tobj_aux.dtype) # iou ratio - - # Classification - selected_tcls_aux = targets_aux[i][:, 1].long() - if self.nc > 1: # cls loss (only if multiple classes) - t_aux = torch.full_like(ps_aux[:, 5:], self.cn, device=device) # targets - t_aux[range(n_aux), selected_tcls_aux] = self.cp - lcls += 0.25 * self.BCEcls(ps_aux[:, 5:], t_aux) # BCE - - obji = self.BCEobj(pi[..., 4], tobj) - obji_aux = self.BCEobj(pi_aux[..., 4], tobj_aux) - lobj += obji * self.balance[i] + 0.25 * obji_aux * self.balance[i] # obj loss - if self.autobalance: - self.balance[i] = self.balance[i] * 0.9999 + 0.0001 / obji.detach().item() - - if self.autobalance: - self.balance = [x / self.balance[self.ssi] for x in self.balance] - lbox *= self.hyp['box'] - lobj *= self.hyp['obj'] - lcls *= self.hyp['cls'] - bs = tobj.shape[0] # batch size - - loss = lbox + lobj + lcls - return loss * bs, torch.cat((lbox, lobj, lcls, loss)).detach() - - def build_targets(self, p, targets, imgs): - - indices, anch = self.find_3_positive(p, targets) - - matching_bs = [[] for pp in p] - matching_as = [[] for pp in p] - matching_gjs = [[] for pp in p] - matching_gis = [[] for pp in p] - matching_targets = [[] for pp in p] - matching_anchs = [[] for pp in p] - - nl = len(p) - - for batch_idx in range(p[0].shape[0]): - - b_idx = targets[:, 0]==batch_idx - this_target = targets[b_idx] - if this_target.shape[0] == 0: - continue - - txywh = this_target[:, 2:6] * imgs[batch_idx].shape[1] - txyxy = xywh2xyxy(txywh) - - pxyxys = [] - p_cls = [] - p_obj = [] - from_which_layer = [] - all_b = [] - all_a = [] - all_gj = [] - all_gi = [] - all_anch = [] - - for i, pi in enumerate(p): - - b, a, gj, gi = indices[i] - idx = (b == batch_idx) - b, a, gj, gi = b[idx], a[idx], gj[idx], gi[idx] - all_b.append(b) - all_a.append(a) - all_gj.append(gj) - all_gi.append(gi) - all_anch.append(anch[i][idx]) - from_which_layer.append(torch.ones(size=(len(b),)) * i) - - fg_pred = pi[b, a, gj, gi] - p_obj.append(fg_pred[:, 4:5]) - p_cls.append(fg_pred[:, 5:]) - - grid = torch.stack([gi, gj], dim=1) - pxy = (fg_pred[:, :2].sigmoid() * 2. - 0.5 + grid) * self.stride[i] #/ 8. - #pxy = (fg_pred[:, :2].sigmoid() * 3. - 1. + grid) * self.stride[i] - pwh = (fg_pred[:, 2:4].sigmoid() * 2) ** 2 * anch[i][idx] * self.stride[i] #/ 8. - pxywh = torch.cat([pxy, pwh], dim=-1) - pxyxy = xywh2xyxy(pxywh) - pxyxys.append(pxyxy) - - pxyxys = torch.cat(pxyxys, dim=0) - if pxyxys.shape[0] == 0: - continue - p_obj = torch.cat(p_obj, dim=0) - p_cls = torch.cat(p_cls, dim=0) - from_which_layer = torch.cat(from_which_layer, dim=0) - all_b = torch.cat(all_b, dim=0) - all_a = torch.cat(all_a, dim=0) - all_gj = torch.cat(all_gj, dim=0) - all_gi = torch.cat(all_gi, dim=0) - all_anch = torch.cat(all_anch, dim=0) - - pair_wise_iou = box_iou(txyxy, pxyxys) - - pair_wise_iou_loss = -torch.log(pair_wise_iou + 1e-8) - - top_k, _ = torch.topk(pair_wise_iou, min(20, pair_wise_iou.shape[1]), dim=1) - dynamic_ks = torch.clamp(top_k.sum(1).int(), min=1) - - gt_cls_per_image = ( - F.one_hot(this_target[:, 1].to(torch.int64), self.nc) - .float() - .unsqueeze(1) - .repeat(1, pxyxys.shape[0], 1) - ) - - num_gt = this_target.shape[0] - cls_preds_ = ( - p_cls.float().unsqueeze(0).repeat(num_gt, 1, 1).sigmoid_() - * p_obj.unsqueeze(0).repeat(num_gt, 1, 1).sigmoid_() - ) - - y = cls_preds_.sqrt_() - pair_wise_cls_loss = F.binary_cross_entropy_with_logits( - torch.log(y/(1-y)) , gt_cls_per_image, reduction="none" - ).sum(-1) - del cls_preds_ - - cost = ( - pair_wise_cls_loss - + 3.0 * pair_wise_iou_loss - ) - - matching_matrix = torch.zeros_like(cost) - - for gt_idx in range(num_gt): - _, pos_idx = torch.topk( - cost[gt_idx], k=dynamic_ks[gt_idx].item(), largest=False - ) - matching_matrix[gt_idx][pos_idx] = 1.0 - - del top_k, dynamic_ks - anchor_matching_gt = matching_matrix.sum(0) - if (anchor_matching_gt > 1).sum() > 0: - _, cost_argmin = torch.min(cost[:, anchor_matching_gt > 1], dim=0) - matching_matrix[:, anchor_matching_gt > 1] *= 0.0 - matching_matrix[cost_argmin, anchor_matching_gt > 1] = 1.0 - fg_mask_inboxes = matching_matrix.sum(0) > 0.0 - matched_gt_inds = matching_matrix[:, fg_mask_inboxes].argmax(0) - - from_which_layer = from_which_layer[fg_mask_inboxes] - all_b = all_b[fg_mask_inboxes] - all_a = all_a[fg_mask_inboxes] - all_gj = all_gj[fg_mask_inboxes] - all_gi = all_gi[fg_mask_inboxes] - all_anch = all_anch[fg_mask_inboxes] - - this_target = this_target[matched_gt_inds] - - for i in range(nl): - layer_idx = from_which_layer == i - matching_bs[i].append(all_b[layer_idx]) - matching_as[i].append(all_a[layer_idx]) - matching_gjs[i].append(all_gj[layer_idx]) - matching_gis[i].append(all_gi[layer_idx]) - matching_targets[i].append(this_target[layer_idx]) - matching_anchs[i].append(all_anch[layer_idx]) - - for i in range(nl): - if matching_targets[i] != []: - matching_bs[i] = torch.cat(matching_bs[i], dim=0) - matching_as[i] = torch.cat(matching_as[i], dim=0) - matching_gjs[i] = torch.cat(matching_gjs[i], dim=0) - matching_gis[i] = torch.cat(matching_gis[i], dim=0) - matching_targets[i] = torch.cat(matching_targets[i], dim=0) - matching_anchs[i] = torch.cat(matching_anchs[i], dim=0) - else: - matching_bs[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_as[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_gjs[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_gis[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_targets[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_anchs[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - - return matching_bs, matching_as, matching_gjs, matching_gis, matching_targets, matching_anchs - - def build_targets2(self, p, targets, imgs): - - indices, anch = self.find_5_positive(p, targets) - - matching_bs = [[] for pp in p] - matching_as = [[] for pp in p] - matching_gjs = [[] for pp in p] - matching_gis = [[] for pp in p] - matching_targets = [[] for pp in p] - matching_anchs = [[] for pp in p] - - nl = len(p) - - for batch_idx in range(p[0].shape[0]): - - b_idx = targets[:, 0]==batch_idx - this_target = targets[b_idx] - if this_target.shape[0] == 0: - continue - - txywh = this_target[:, 2:6] * imgs[batch_idx].shape[1] - txyxy = xywh2xyxy(txywh) - - pxyxys = [] - p_cls = [] - p_obj = [] - from_which_layer = [] - all_b = [] - all_a = [] - all_gj = [] - all_gi = [] - all_anch = [] - - for i, pi in enumerate(p): - - b, a, gj, gi = indices[i] - idx = (b == batch_idx) - b, a, gj, gi = b[idx], a[idx], gj[idx], gi[idx] - all_b.append(b) - all_a.append(a) - all_gj.append(gj) - all_gi.append(gi) - all_anch.append(anch[i][idx]) - from_which_layer.append(torch.ones(size=(len(b),)) * i) - - fg_pred = pi[b, a, gj, gi] - p_obj.append(fg_pred[:, 4:5]) - p_cls.append(fg_pred[:, 5:]) - - grid = torch.stack([gi, gj], dim=1) - pxy = (fg_pred[:, :2].sigmoid() * 2. - 0.5 + grid) * self.stride[i] #/ 8. - #pxy = (fg_pred[:, :2].sigmoid() * 3. - 1. + grid) * self.stride[i] - pwh = (fg_pred[:, 2:4].sigmoid() * 2) ** 2 * anch[i][idx] * self.stride[i] #/ 8. - pxywh = torch.cat([pxy, pwh], dim=-1) - pxyxy = xywh2xyxy(pxywh) - pxyxys.append(pxyxy) - - pxyxys = torch.cat(pxyxys, dim=0) - if pxyxys.shape[0] == 0: - continue - p_obj = torch.cat(p_obj, dim=0) - p_cls = torch.cat(p_cls, dim=0) - from_which_layer = torch.cat(from_which_layer, dim=0) - all_b = torch.cat(all_b, dim=0) - all_a = torch.cat(all_a, dim=0) - all_gj = torch.cat(all_gj, dim=0) - all_gi = torch.cat(all_gi, dim=0) - all_anch = torch.cat(all_anch, dim=0) - - pair_wise_iou = box_iou(txyxy, pxyxys) - - pair_wise_iou_loss = -torch.log(pair_wise_iou + 1e-8) - - top_k, _ = torch.topk(pair_wise_iou, min(20, pair_wise_iou.shape[1]), dim=1) - dynamic_ks = torch.clamp(top_k.sum(1).int(), min=1) - - gt_cls_per_image = ( - F.one_hot(this_target[:, 1].to(torch.int64), self.nc) - .float() - .unsqueeze(1) - .repeat(1, pxyxys.shape[0], 1) - ) - - num_gt = this_target.shape[0] - cls_preds_ = ( - p_cls.float().unsqueeze(0).repeat(num_gt, 1, 1).sigmoid_() - * p_obj.unsqueeze(0).repeat(num_gt, 1, 1).sigmoid_() - ) - - y = cls_preds_.sqrt_() - pair_wise_cls_loss = F.binary_cross_entropy_with_logits( - torch.log(y/(1-y)) , gt_cls_per_image, reduction="none" - ).sum(-1) - del cls_preds_ - - cost = ( - pair_wise_cls_loss - + 3.0 * pair_wise_iou_loss - ) - - matching_matrix = torch.zeros_like(cost) - - for gt_idx in range(num_gt): - _, pos_idx = torch.topk( - cost[gt_idx], k=dynamic_ks[gt_idx].item(), largest=False - ) - matching_matrix[gt_idx][pos_idx] = 1.0 - - del top_k, dynamic_ks - anchor_matching_gt = matching_matrix.sum(0) - if (anchor_matching_gt > 1).sum() > 0: - _, cost_argmin = torch.min(cost[:, anchor_matching_gt > 1], dim=0) - matching_matrix[:, anchor_matching_gt > 1] *= 0.0 - matching_matrix[cost_argmin, anchor_matching_gt > 1] = 1.0 - fg_mask_inboxes = matching_matrix.sum(0) > 0.0 - matched_gt_inds = matching_matrix[:, fg_mask_inboxes].argmax(0) - - from_which_layer = from_which_layer[fg_mask_inboxes] - all_b = all_b[fg_mask_inboxes] - all_a = all_a[fg_mask_inboxes] - all_gj = all_gj[fg_mask_inboxes] - all_gi = all_gi[fg_mask_inboxes] - all_anch = all_anch[fg_mask_inboxes] - - this_target = this_target[matched_gt_inds] - - for i in range(nl): - layer_idx = from_which_layer == i - matching_bs[i].append(all_b[layer_idx]) - matching_as[i].append(all_a[layer_idx]) - matching_gjs[i].append(all_gj[layer_idx]) - matching_gis[i].append(all_gi[layer_idx]) - matching_targets[i].append(this_target[layer_idx]) - matching_anchs[i].append(all_anch[layer_idx]) - - for i in range(nl): - if matching_targets[i] != []: - matching_bs[i] = torch.cat(matching_bs[i], dim=0) - matching_as[i] = torch.cat(matching_as[i], dim=0) - matching_gjs[i] = torch.cat(matching_gjs[i], dim=0) - matching_gis[i] = torch.cat(matching_gis[i], dim=0) - matching_targets[i] = torch.cat(matching_targets[i], dim=0) - matching_anchs[i] = torch.cat(matching_anchs[i], dim=0) - else: - matching_bs[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_as[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_gjs[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_gis[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_targets[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - matching_anchs[i] = torch.tensor([], device='cuda:0', dtype=torch.int64) - - return matching_bs, matching_as, matching_gjs, matching_gis, matching_targets, matching_anchs - - def find_5_positive(self, p, targets): - # Build targets for compute_loss(), input targets(image,class,x,y,w,h) - na, nt = self.na, targets.shape[0] # number of anchors, targets - indices, anch = [], [] - gain = torch.ones(7, device=targets.device).long() # normalized to gridspace gain - ai = torch.arange(na, device=targets.device).float().view(na, 1).repeat(1, nt) # same as .repeat_interleave(nt) - targets = torch.cat((targets.repeat(na, 1, 1), ai[:, :, None]), 2) # append anchor indices - - g = 1.0 # bias - off = torch.tensor([[0, 0], - [1, 0], [0, 1], [-1, 0], [0, -1], # j,k,l,m - # [1, 1], [1, -1], [-1, 1], [-1, -1], # jk,jm,lk,lm - ], device=targets.device).float() * g # offsets - - for i in range(self.nl): - anchors = self.anchors[i] - gain[2:6] = torch.tensor(p[i].shape)[[3, 2, 3, 2]] # xyxy gain - - # Match targets to anchors - t = targets * gain - if nt: - # Matches - r = t[:, :, 4:6] / anchors[:, None] # wh ratio - j = torch.max(r, 1. / r).max(2)[0] < self.hyp['anchor_t'] # compare - # j = wh_iou(anchors, t[:, 4:6]) > model.hyp['iou_t'] # iou(3,n)=wh_iou(anchors(3,2), gwh(n,2)) - t = t[j] # filter - - # Offsets - gxy = t[:, 2:4] # grid xy - gxi = gain[[2, 3]] - gxy # inverse - j, k = ((gxy % 1. < g) & (gxy > 1.)).T - l, m = ((gxi % 1. < g) & (gxi > 1.)).T - j = torch.stack((torch.ones_like(j), j, k, l, m)) - t = t.repeat((5, 1, 1))[j] - offsets = (torch.zeros_like(gxy)[None] + off[:, None])[j] - else: - t = targets[0] - offsets = 0 - - # Define - b, c = t[:, :2].long().T # image, class - gxy = t[:, 2:4] # grid xy - gwh = t[:, 4:6] # grid wh - gij = (gxy - offsets).long() - gi, gj = gij.T # grid xy indices - - # Append - a = t[:, 6].long() # anchor indices - indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1))) # image, anchor, grid indices - anch.append(anchors[a]) # anchors - - return indices, anch - - def find_3_positive(self, p, targets): - # Build targets for compute_loss(), input targets(image,class,x,y,w,h) - na, nt = self.na, targets.shape[0] # number of anchors, targets - indices, anch = [], [] - gain = torch.ones(7, device=targets.device).long() # normalized to gridspace gain - ai = torch.arange(na, device=targets.device).float().view(na, 1).repeat(1, nt) # same as .repeat_interleave(nt) - targets = torch.cat((targets.repeat(na, 1, 1), ai[:, :, None]), 2) # append anchor indices - - g = 0.5 # bias - off = torch.tensor([[0, 0], - [1, 0], [0, 1], [-1, 0], [0, -1], # j,k,l,m - # [1, 1], [1, -1], [-1, 1], [-1, -1], # jk,jm,lk,lm - ], device=targets.device).float() * g # offsets - - for i in range(self.nl): - anchors = self.anchors[i] - gain[2:6] = torch.tensor(p[i].shape)[[3, 2, 3, 2]] # xyxy gain - - # Match targets to anchors - t = targets * gain - if nt: - # Matches - r = t[:, :, 4:6] / anchors[:, None] # wh ratio - j = torch.max(r, 1. / r).max(2)[0] < self.hyp['anchor_t'] # compare - # j = wh_iou(anchors, t[:, 4:6]) > model.hyp['iou_t'] # iou(3,n)=wh_iou(anchors(3,2), gwh(n,2)) - t = t[j] # filter - - # Offsets - gxy = t[:, 2:4] # grid xy - gxi = gain[[2, 3]] - gxy # inverse - j, k = ((gxy % 1. < g) & (gxy > 1.)).T - l, m = ((gxi % 1. < g) & (gxi > 1.)).T - j = torch.stack((torch.ones_like(j), j, k, l, m)) - t = t.repeat((5, 1, 1))[j] - offsets = (torch.zeros_like(gxy)[None] + off[:, None])[j] - else: - t = targets[0] - offsets = 0 - - # Define - b, c = t[:, :2].long().T # image, class - gxy = t[:, 2:4] # grid xy - gwh = t[:, 4:6] # grid wh - gij = (gxy - offsets).long() - gi, gj = gij.T # grid xy indices - - # Append - a = t[:, 6].long() # anchor indices - indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1))) # image, anchor, grid indices - anch.append(anchors[a]) # anchors - - return indices, anch diff --git a/cv/detection/yolov7/pytorch/utils/metrics.py b/cv/detection/yolov7/pytorch/utils/metrics.py deleted file mode 100644 index 6d2f53647..000000000 --- a/cv/detection/yolov7/pytorch/utils/metrics.py +++ /dev/null @@ -1,227 +0,0 @@ -# Model validation metrics - -from pathlib import Path - -import matplotlib.pyplot as plt -import numpy as np -import torch - -from . import general - - -def fitness(x): - # Model fitness as a weighted combination of metrics - w = [0.0, 0.0, 0.1, 0.9] # weights for [P, R, mAP@0.5, mAP@0.5:0.95] - return (x[:, :4] * w).sum(1) - - -def ap_per_class(tp, conf, pred_cls, target_cls, v5_metric=False, plot=False, save_dir='.', names=()): - """ Compute the average precision, given the recall and precision curves. - Source: https://github.com/rafaelpadilla/Object-Detection-Metrics. - # Arguments - tp: True positives (nparray, nx1 or nx10). - conf: Objectness value from 0-1 (nparray). - pred_cls: Predicted object classes (nparray). - target_cls: True object classes (nparray). - plot: Plot precision-recall curve at mAP@0.5 - save_dir: Plot save directory - # Returns - The average precision as computed in py-faster-rcnn. - """ - - # Sort by objectness - i = np.argsort(-conf) - tp, conf, pred_cls = tp[i], conf[i], pred_cls[i] - - # Find unique classes - unique_classes = np.unique(target_cls) - nc = unique_classes.shape[0] # number of classes, number of detections - - # Create Precision-Recall curve and compute AP for each class - px, py = np.linspace(0, 1, 1000), [] # for plotting - ap, p, r = np.zeros((nc, tp.shape[1])), np.zeros((nc, 1000)), np.zeros((nc, 1000)) - for ci, c in enumerate(unique_classes): - i = pred_cls == c - n_l = (target_cls == c).sum() # number of labels - n_p = i.sum() # number of predictions - - if n_p == 0 or n_l == 0: - continue - else: - # Accumulate FPs and TPs - fpc = (1 - tp[i]).cumsum(0) - tpc = tp[i].cumsum(0) - - # Recall - recall = tpc / (n_l + 1e-16) # recall curve - r[ci] = np.interp(-px, -conf[i], recall[:, 0], left=0) # negative x, xp because xp decreases - - # Precision - precision = tpc / (tpc + fpc) # precision curve - p[ci] = np.interp(-px, -conf[i], precision[:, 0], left=1) # p at pr_score - - # AP from recall-precision curve - for j in range(tp.shape[1]): - ap[ci, j], mpre, mrec = compute_ap(recall[:, j], precision[:, j], v5_metric=v5_metric) - if plot and j == 0: - py.append(np.interp(px, mrec, mpre)) # precision at mAP@0.5 - - # Compute F1 (harmonic mean of precision and recall) - f1 = 2 * p * r / (p + r + 1e-16) - if plot: - plot_pr_curve(px, py, ap, Path(save_dir) / 'PR_curve.png', names) - plot_mc_curve(px, f1, Path(save_dir) / 'F1_curve.png', names, ylabel='F1') - plot_mc_curve(px, p, Path(save_dir) / 'P_curve.png', names, ylabel='Precision') - plot_mc_curve(px, r, Path(save_dir) / 'R_curve.png', names, ylabel='Recall') - - i = f1.mean(0).argmax() # max F1 index - return p[:, i], r[:, i], ap, f1[:, i], unique_classes.astype('int32') - - -def compute_ap(recall, precision, v5_metric=False): - """ Compute the average precision, given the recall and precision curves - # Arguments - recall: The recall curve (list) - precision: The precision curve (list) - v5_metric: Assume maximum recall to be 1.0, as in YOLOv5, MMDetetion etc. - # Returns - Average precision, precision curve, recall curve - """ - - # Append sentinel values to beginning and end - if v5_metric: # New YOLOv5 metric, same as MMDetection and Detectron2 repositories - mrec = np.concatenate(([0.], recall, [1.0])) - else: # Old YOLOv5 metric, i.e. default YOLOv7 metric - mrec = np.concatenate(([0.], recall, [recall[-1] + 0.01])) - mpre = np.concatenate(([1.], precision, [0.])) - - # Compute the precision envelope - mpre = np.flip(np.maximum.accumulate(np.flip(mpre))) - - # Integrate area under curve - method = 'interp' # methods: 'continuous', 'interp' - if method == 'interp': - x = np.linspace(0, 1, 101) # 101-point interp (COCO) - ap = np.trapz(np.interp(x, mrec, mpre), x) # integrate - else: # 'continuous' - i = np.where(mrec[1:] != mrec[:-1])[0] # points where x axis (recall) changes - ap = np.sum((mrec[i + 1] - mrec[i]) * mpre[i + 1]) # area under curve - - return ap, mpre, mrec - - -class ConfusionMatrix: - # Updated version of https://github.com/kaanakan/object_detection_confusion_matrix - def __init__(self, nc, conf=0.25, iou_thres=0.45): - self.matrix = np.zeros((nc + 1, nc + 1)) - self.nc = nc # number of classes - self.conf = conf - self.iou_thres = iou_thres - - def process_batch(self, detections, labels): - """ - Return intersection-over-union (Jaccard index) of boxes. - Both sets of boxes are expected to be in (x1, y1, x2, y2) format. - Arguments: - detections (Array[N, 6]), x1, y1, x2, y2, conf, class - labels (Array[M, 5]), class, x1, y1, x2, y2 - Returns: - None, updates confusion matrix accordingly - """ - detections = detections[detections[:, 4] > self.conf] - gt_classes = labels[:, 0].int() - detection_classes = detections[:, 5].int() - iou = general.box_iou(labels[:, 1:], detections[:, :4]) - - x = torch.where(iou > self.iou_thres) - if x[0].shape[0]: - matches = torch.cat((torch.stack(x, 1), iou[x[0], x[1]][:, None]), 1).cpu().numpy() - if x[0].shape[0] > 1: - matches = matches[matches[:, 2].argsort()[::-1]] - matches = matches[np.unique(matches[:, 1], return_index=True)[1]] - matches = matches[matches[:, 2].argsort()[::-1]] - matches = matches[np.unique(matches[:, 0], return_index=True)[1]] - else: - matches = np.zeros((0, 3)) - - n = matches.shape[0] > 0 - m0, m1, _ = matches.transpose().astype(np.int16) - for i, gc in enumerate(gt_classes): - j = m0 == i - if n and sum(j) == 1: - self.matrix[gc, detection_classes[m1[j]]] += 1 # correct - else: - self.matrix[self.nc, gc] += 1 # background FP - - if n: - for i, dc in enumerate(detection_classes): - if not any(m1 == i): - self.matrix[dc, self.nc] += 1 # background FN - - def matrix(self): - return self.matrix - - def plot(self, save_dir='', names=()): - try: - import seaborn as sn - - array = self.matrix / (self.matrix.sum(0).reshape(1, self.nc + 1) + 1E-6) # normalize - array[array < 0.005] = np.nan # don't annotate (would appear as 0.00) - - fig = plt.figure(figsize=(12, 9), tight_layout=True) - sn.set(font_scale=1.0 if self.nc < 50 else 0.8) # for label size - labels = (0 < len(names) < 99) and len(names) == self.nc # apply names to ticklabels - sn.heatmap(array, annot=self.nc < 30, annot_kws={"size": 8}, cmap='Blues', fmt='.2f', square=True, - xticklabels=names + ['background FP'] if labels else "auto", - yticklabels=names + ['background FN'] if labels else "auto").set_facecolor((1, 1, 1)) - fig.axes[0].set_xlabel('True') - fig.axes[0].set_ylabel('Predicted') - fig.savefig(Path(save_dir) / 'confusion_matrix.png', dpi=250) - except Exception as e: - pass - - def print(self): - for i in range(self.nc + 1): - print(' '.join(map(str, self.matrix[i]))) - - -# Plots ---------------------------------------------------------------------------------------------------------------- - -def plot_pr_curve(px, py, ap, save_dir='pr_curve.png', names=()): - # Precision-recall curve - fig, ax = plt.subplots(1, 1, figsize=(9, 6), tight_layout=True) - py = np.stack(py, axis=1) - - if 0 < len(names) < 21: # display per-class legend if < 21 classes - for i, y in enumerate(py.T): - ax.plot(px, y, linewidth=1, label=f'{names[i]} {ap[i, 0]:.3f}') # plot(recall, precision) - else: - ax.plot(px, py, linewidth=1, color='grey') # plot(recall, precision) - - ax.plot(px, py.mean(1), linewidth=3, color='blue', label='all classes %.3f mAP@0.5' % ap[:, 0].mean()) - ax.set_xlabel('Recall') - ax.set_ylabel('Precision') - ax.set_xlim(0, 1) - ax.set_ylim(0, 1) - plt.legend(bbox_to_anchor=(1.04, 1), loc="upper left") - fig.savefig(Path(save_dir), dpi=250) - - -def plot_mc_curve(px, py, save_dir='mc_curve.png', names=(), xlabel='Confidence', ylabel='Metric'): - # Metric-confidence curve - fig, ax = plt.subplots(1, 1, figsize=(9, 6), tight_layout=True) - - if 0 < len(names) < 21: # display per-class legend if < 21 classes - for i, y in enumerate(py): - ax.plot(px, y, linewidth=1, label=f'{names[i]}') # plot(confidence, metric) - else: - ax.plot(px, py.T, linewidth=1, color='grey') # plot(confidence, metric) - - y = py.mean(0) - ax.plot(px, y, linewidth=3, color='blue', label=f'all classes {y.max():.2f} at {px[y.argmax()]:.3f}') - ax.set_xlabel(xlabel) - ax.set_ylabel(ylabel) - ax.set_xlim(0, 1) - ax.set_ylim(0, 1) - plt.legend(bbox_to_anchor=(1.04, 1), loc="upper left") - fig.savefig(Path(save_dir), dpi=250) diff --git a/cv/detection/yolov7/pytorch/utils/plots.py b/cv/detection/yolov7/pytorch/utils/plots.py deleted file mode 100644 index fdd8d0e85..000000000 --- a/cv/detection/yolov7/pytorch/utils/plots.py +++ /dev/null @@ -1,489 +0,0 @@ -# Plotting utils - -import glob -import math -import os -import random -from copy import copy -from pathlib import Path - -import cv2 -import matplotlib -import matplotlib.pyplot as plt -import numpy as np -import pandas as pd -import seaborn as sns -import torch -import yaml -from PIL import Image, ImageDraw, ImageFont -from scipy.signal import butter, filtfilt - -from utils.general import xywh2xyxy, xyxy2xywh -from utils.metrics import fitness - -# Settings -matplotlib.rc('font', **{'size': 11}) -matplotlib.use('Agg') # for writing to files only - - -def color_list(): - # Return first 10 plt colors as (r,g,b) https://stackoverflow.com/questions/51350872/python-from-color-name-to-rgb - def hex2rgb(h): - return tuple(int(h[1 + i:1 + i + 2], 16) for i in (0, 2, 4)) - - return [hex2rgb(h) for h in matplotlib.colors.TABLEAU_COLORS.values()] # or BASE_ (8), CSS4_ (148), XKCD_ (949) - - -def hist2d(x, y, n=100): - # 2d histogram used in labels.png and evolve.png - xedges, yedges = np.linspace(x.min(), x.max(), n), np.linspace(y.min(), y.max(), n) - hist, xedges, yedges = np.histogram2d(x, y, (xedges, yedges)) - xidx = np.clip(np.digitize(x, xedges) - 1, 0, hist.shape[0] - 1) - yidx = np.clip(np.digitize(y, yedges) - 1, 0, hist.shape[1] - 1) - return np.log(hist[xidx, yidx]) - - -def butter_lowpass_filtfilt(data, cutoff=1500, fs=50000, order=5): - # https://stackoverflow.com/questions/28536191/how-to-filter-smooth-with-scipy-numpy - def butter_lowpass(cutoff, fs, order): - nyq = 0.5 * fs - normal_cutoff = cutoff / nyq - return butter(order, normal_cutoff, btype='low', analog=False) - - b, a = butter_lowpass(cutoff, fs, order=order) - return filtfilt(b, a, data) # forward-backward filter - - -def plot_one_box(x, img, color=None, label=None, line_thickness=3): - # Plots one bounding box on image img - tl = line_thickness or round(0.002 * (img.shape[0] + img.shape[1]) / 2) + 1 # line/font thickness - color = color or [random.randint(0, 255) for _ in range(3)] - c1, c2 = (int(x[0]), int(x[1])), (int(x[2]), int(x[3])) - cv2.rectangle(img, c1, c2, color, thickness=tl, lineType=cv2.LINE_AA) - if label: - tf = max(tl - 1, 1) # font thickness - t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thickness=tf)[0] - c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3 - cv2.rectangle(img, c1, c2, color, -1, cv2.LINE_AA) # filled - cv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255, 255], thickness=tf, lineType=cv2.LINE_AA) - - -def plot_one_box_PIL(box, img, color=None, label=None, line_thickness=None): - img = Image.fromarray(img) - draw = ImageDraw.Draw(img) - line_thickness = line_thickness or max(int(min(img.size) / 200), 2) - draw.rectangle(box, width=line_thickness, outline=tuple(color)) # plot - if label: - fontsize = max(round(max(img.size) / 40), 12) - font = ImageFont.truetype("Arial.ttf", fontsize) - txt_width, txt_height = font.getsize(label) - draw.rectangle([box[0], box[1] - txt_height + 4, box[0] + txt_width, box[1]], fill=tuple(color)) - draw.text((box[0], box[1] - txt_height + 1), label, fill=(255, 255, 255), font=font) - return np.asarray(img) - - -def plot_wh_methods(): # from utils.plots import *; plot_wh_methods() - # Compares the two methods for width-height anchor multiplication - # https://github.com/ultralytics/yolov3/issues/168 - x = np.arange(-4.0, 4.0, .1) - ya = np.exp(x) - yb = torch.sigmoid(torch.from_numpy(x)).numpy() * 2 - - fig = plt.figure(figsize=(6, 3), tight_layout=True) - plt.plot(x, ya, '.-', label='YOLOv3') - plt.plot(x, yb ** 2, '.-', label='YOLOR ^2') - plt.plot(x, yb ** 1.6, '.-', label='YOLOR ^1.6') - plt.xlim(left=-4, right=4) - plt.ylim(bottom=0, top=6) - plt.xlabel('input') - plt.ylabel('output') - plt.grid() - plt.legend() - fig.savefig('comparison.png', dpi=200) - - -def output_to_target(output): - # Convert model output to target format [batch_id, class_id, x, y, w, h, conf] - targets = [] - for i, o in enumerate(output): - for *box, conf, cls in o.cpu().numpy(): - targets.append([i, cls, *list(*xyxy2xywh(np.array(box)[None])), conf]) - return np.array(targets) - - -def plot_images(images, targets, paths=None, fname='images.jpg', names=None, max_size=640, max_subplots=16): - # Plot image grid with labels - - if isinstance(images, torch.Tensor): - images = images.cpu().float().numpy() - if isinstance(targets, torch.Tensor): - targets = targets.cpu().numpy() - - # un-normalise - if np.max(images[0]) <= 1: - images *= 255 - - tl = 3 # line thickness - tf = max(tl - 1, 1) # font thickness - bs, _, h, w = images.shape # batch size, _, height, width - bs = min(bs, max_subplots) # limit plot images - ns = np.ceil(bs ** 0.5) # number of subplots (square) - - # Check if we should resize - scale_factor = max_size / max(h, w) - if scale_factor < 1: - h = math.ceil(scale_factor * h) - w = math.ceil(scale_factor * w) - - colors = color_list() # list of colors - mosaic = np.full((int(ns * h), int(ns * w), 3), 255, dtype=np.uint8) # init - for i, img in enumerate(images): - if i == max_subplots: # if last batch has fewer images than we expect - break - - block_x = int(w * (i // ns)) - block_y = int(h * (i % ns)) - - img = img.transpose(1, 2, 0) - if scale_factor < 1: - img = cv2.resize(img, (w, h)) - - mosaic[block_y:block_y + h, block_x:block_x + w, :] = img - if len(targets) > 0: - image_targets = targets[targets[:, 0] == i] - boxes = xywh2xyxy(image_targets[:, 2:6]).T - classes = image_targets[:, 1].astype('int') - labels = image_targets.shape[1] == 6 # labels if no conf column - conf = None if labels else image_targets[:, 6] # check for confidence presence (label vs pred) - - if boxes.shape[1]: - if boxes.max() <= 1.01: # if normalized with tolerance 0.01 - boxes[[0, 2]] *= w # scale to pixels - boxes[[1, 3]] *= h - elif scale_factor < 1: # absolute coords need scale if image scales - boxes *= scale_factor - boxes[[0, 2]] += block_x - boxes[[1, 3]] += block_y - for j, box in enumerate(boxes.T): - cls = int(classes[j]) - color = colors[cls % len(colors)] - cls = names[cls] if names else cls - if labels or conf[j] > 0.25: # 0.25 conf thresh - label = '%s' % cls if labels else '%s %.1f' % (cls, conf[j]) - plot_one_box(box, mosaic, label=label, color=color, line_thickness=tl) - - # Draw image filename labels - if paths: - label = Path(paths[i]).name[:40] # trim to 40 char - t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thickness=tf)[0] - cv2.putText(mosaic, label, (block_x + 5, block_y + t_size[1] + 5), 0, tl / 3, [220, 220, 220], thickness=tf, - lineType=cv2.LINE_AA) - - # Image border - cv2.rectangle(mosaic, (block_x, block_y), (block_x + w, block_y + h), (255, 255, 255), thickness=3) - - if fname: - r = min(1280. / max(h, w) / ns, 1.0) # ratio to limit image size - mosaic = cv2.resize(mosaic, (int(ns * w * r), int(ns * h * r)), interpolation=cv2.INTER_AREA) - # cv2.imwrite(fname, cv2.cvtColor(mosaic, cv2.COLOR_BGR2RGB)) # cv2 save - Image.fromarray(mosaic).save(fname) # PIL save - return mosaic - - -def plot_lr_scheduler(optimizer, scheduler, epochs=300, save_dir=''): - # Plot LR simulating training for full epochs - optimizer, scheduler = copy(optimizer), copy(scheduler) # do not modify originals - y = [] - for _ in range(epochs): - scheduler.step() - y.append(optimizer.param_groups[0]['lr']) - plt.plot(y, '.-', label='LR') - plt.xlabel('epoch') - plt.ylabel('LR') - plt.grid() - plt.xlim(0, epochs) - plt.ylim(0) - plt.savefig(Path(save_dir) / 'LR.png', dpi=200) - plt.close() - - -def plot_test_txt(): # from utils.plots import *; plot_test() - # Plot test.txt histograms - x = np.loadtxt('test.txt', dtype=np.float32) - box = xyxy2xywh(x[:, :4]) - cx, cy = box[:, 0], box[:, 1] - - fig, ax = plt.subplots(1, 1, figsize=(6, 6), tight_layout=True) - ax.hist2d(cx, cy, bins=600, cmax=10, cmin=0) - ax.set_aspect('equal') - plt.savefig('hist2d.png', dpi=300) - - fig, ax = plt.subplots(1, 2, figsize=(12, 6), tight_layout=True) - ax[0].hist(cx, bins=600) - ax[1].hist(cy, bins=600) - plt.savefig('hist1d.png', dpi=200) - - -def plot_targets_txt(): # from utils.plots import *; plot_targets_txt() - # Plot targets.txt histograms - x = np.loadtxt('targets.txt', dtype=np.float32).T - s = ['x targets', 'y targets', 'width targets', 'height targets'] - fig, ax = plt.subplots(2, 2, figsize=(8, 8), tight_layout=True) - ax = ax.ravel() - for i in range(4): - ax[i].hist(x[i], bins=100, label='%.3g +/- %.3g' % (x[i].mean(), x[i].std())) - ax[i].legend() - ax[i].set_title(s[i]) - plt.savefig('targets.jpg', dpi=200) - - -def plot_study_txt(path='', x=None): # from utils.plots import *; plot_study_txt() - # Plot study.txt generated by test.py - fig, ax = plt.subplots(2, 4, figsize=(10, 6), tight_layout=True) - # ax = ax.ravel() - - fig2, ax2 = plt.subplots(1, 1, figsize=(8, 4), tight_layout=True) - # for f in [Path(path) / f'study_coco_{x}.txt' for x in ['yolor-p6', 'yolor-w6', 'yolor-e6', 'yolor-d6']]: - for f in sorted(Path(path).glob('study*.txt')): - y = np.loadtxt(f, dtype=np.float32, usecols=[0, 1, 2, 3, 7, 8, 9], ndmin=2).T - x = np.arange(y.shape[1]) if x is None else np.array(x) - s = ['P', 'R', 'mAP@.5', 'mAP@.5:.95', 't_inference (ms/img)', 't_NMS (ms/img)', 't_total (ms/img)'] - # for i in range(7): - # ax[i].plot(x, y[i], '.-', linewidth=2, markersize=8) - # ax[i].set_title(s[i]) - - j = y[3].argmax() + 1 - ax2.plot(y[6, 1:j], y[3, 1:j] * 1E2, '.-', linewidth=2, markersize=8, - label=f.stem.replace('study_coco_', '').replace('yolo', 'YOLO')) - - ax2.plot(1E3 / np.array([209, 140, 97, 58, 35, 18]), [34.6, 40.5, 43.0, 47.5, 49.7, 51.5], - 'k.-', linewidth=2, markersize=8, alpha=.25, label='EfficientDet') - - ax2.grid(alpha=0.2) - ax2.set_yticks(np.arange(20, 60, 5)) - ax2.set_xlim(0, 57) - ax2.set_ylim(30, 55) - ax2.set_xlabel('GPU Speed (ms/img)') - ax2.set_ylabel('COCO AP val') - ax2.legend(loc='lower right') - plt.savefig(str(Path(path).name) + '.png', dpi=300) - - -def plot_labels(labels, names=(), save_dir=Path(''), loggers=None): - # plot dataset labels - print('Plotting labels... ') - c, b = labels[:, 0], labels[:, 1:].transpose() # classes, boxes - nc = int(c.max() + 1) # number of classes - colors = color_list() - x = pd.DataFrame(b.transpose(), columns=['x', 'y', 'width', 'height']) - - # seaborn correlogram - sns.pairplot(x, corner=True, diag_kind='auto', kind='hist', diag_kws=dict(bins=50), plot_kws=dict(pmax=0.9)) - plt.savefig(save_dir / 'labels_correlogram.jpg', dpi=200) - plt.close() - - # matplotlib labels - matplotlib.use('svg') # faster - ax = plt.subplots(2, 2, figsize=(8, 8), tight_layout=True)[1].ravel() - ax[0].hist(c, bins=np.linspace(0, nc, nc + 1) - 0.5, rwidth=0.8) - ax[0].set_ylabel('instances') - if 0 < len(names) < 30: - ax[0].set_xticks(range(len(names))) - ax[0].set_xticklabels(names, rotation=90, fontsize=10) - else: - ax[0].set_xlabel('classes') - sns.histplot(x, x='x', y='y', ax=ax[2], bins=50, pmax=0.9) - sns.histplot(x, x='width', y='height', ax=ax[3], bins=50, pmax=0.9) - - # rectangles - labels[:, 1:3] = 0.5 # center - labels[:, 1:] = xywh2xyxy(labels[:, 1:]) * 2000 - img = Image.fromarray(np.ones((2000, 2000, 3), dtype=np.uint8) * 255) - for cls, *box in labels[:1000]: - ImageDraw.Draw(img).rectangle(box, width=1, outline=colors[int(cls) % 10]) # plot - ax[1].imshow(img) - ax[1].axis('off') - - for a in [0, 1, 2, 3]: - for s in ['top', 'right', 'left', 'bottom']: - ax[a].spines[s].set_visible(False) - - plt.savefig(save_dir / 'labels.jpg', dpi=200) - matplotlib.use('Agg') - plt.close() - - # loggers - for k, v in loggers.items() or {}: - if k == 'wandb' and v: - v.log({"Labels": [v.Image(str(x), caption=x.name) for x in save_dir.glob('*labels*.jpg')]}, commit=False) - - -def plot_evolution(yaml_file='data/hyp.finetune.yaml'): # from utils.plots import *; plot_evolution() - # Plot hyperparameter evolution results in evolve.txt - with open(yaml_file) as f: - hyp = yaml.load(f, Loader=yaml.SafeLoader) - x = np.loadtxt('evolve.txt', ndmin=2) - f = fitness(x) - # weights = (f - f.min()) ** 2 # for weighted results - plt.figure(figsize=(10, 12), tight_layout=True) - matplotlib.rc('font', **{'size': 8}) - for i, (k, v) in enumerate(hyp.items()): - y = x[:, i + 7] - # mu = (y * weights).sum() / weights.sum() # best weighted result - mu = y[f.argmax()] # best single result - plt.subplot(6, 5, i + 1) - plt.scatter(y, f, c=hist2d(y, f, 20), cmap='viridis', alpha=.8, edgecolors='none') - plt.plot(mu, f.max(), 'k+', markersize=15) - plt.title('%s = %.3g' % (k, mu), fontdict={'size': 9}) # limit to 40 characters - if i % 5 != 0: - plt.yticks([]) - print('%15s: %.3g' % (k, mu)) - plt.savefig('evolve.png', dpi=200) - print('\nPlot saved as evolve.png') - - -def profile_idetection(start=0, stop=0, labels=(), save_dir=''): - # Plot iDetection '*.txt' per-image logs. from utils.plots import *; profile_idetection() - ax = plt.subplots(2, 4, figsize=(12, 6), tight_layout=True)[1].ravel() - s = ['Images', 'Free Storage (GB)', 'RAM Usage (GB)', 'Battery', 'dt_raw (ms)', 'dt_smooth (ms)', 'real-world FPS'] - files = list(Path(save_dir).glob('frames*.txt')) - for fi, f in enumerate(files): - try: - results = np.loadtxt(f, ndmin=2).T[:, 90:-30] # clip first and last rows - n = results.shape[1] # number of rows - x = np.arange(start, min(stop, n) if stop else n) - results = results[:, x] - t = (results[0] - results[0].min()) # set t0=0s - results[0] = x - for i, a in enumerate(ax): - if i < len(results): - label = labels[fi] if len(labels) else f.stem.replace('frames_', '') - a.plot(t, results[i], marker='.', label=label, linewidth=1, markersize=5) - a.set_title(s[i]) - a.set_xlabel('time (s)') - # if fi == len(files) - 1: - # a.set_ylim(bottom=0) - for side in ['top', 'right']: - a.spines[side].set_visible(False) - else: - a.remove() - except Exception as e: - print('Warning: Plotting error for %s; %s' % (f, e)) - - ax[1].legend() - plt.savefig(Path(save_dir) / 'idetection_profile.png', dpi=200) - - -def plot_results_overlay(start=0, stop=0): # from utils.plots import *; plot_results_overlay() - # Plot training 'results*.txt', overlaying train and val losses - s = ['train', 'train', 'train', 'Precision', 'mAP@0.5', 'val', 'val', 'val', 'Recall', 'mAP@0.5:0.95'] # legends - t = ['Box', 'Objectness', 'Classification', 'P-R', 'mAP-F1'] # titles - for f in sorted(glob.glob('results*.txt') + glob.glob('../../Downloads/results*.txt')): - results = np.loadtxt(f, usecols=[2, 3, 4, 8, 9, 12, 13, 14, 10, 11], ndmin=2).T - n = results.shape[1] # number of rows - x = range(start, min(stop, n) if stop else n) - fig, ax = plt.subplots(1, 5, figsize=(14, 3.5), tight_layout=True) - ax = ax.ravel() - for i in range(5): - for j in [i, i + 5]: - y = results[j, x] - ax[i].plot(x, y, marker='.', label=s[j]) - # y_smooth = butter_lowpass_filtfilt(y) - # ax[i].plot(x, np.gradient(y_smooth), marker='.', label=s[j]) - - ax[i].set_title(t[i]) - ax[i].legend() - ax[i].set_ylabel(f) if i == 0 else None # add filename - fig.savefig(f.replace('.txt', '.png'), dpi=200) - - -def plot_results(start=0, stop=0, bucket='', id=(), labels=(), save_dir=''): - # Plot training 'results*.txt'. from utils.plots import *; plot_results(save_dir='runs/train/exp') - fig, ax = plt.subplots(2, 5, figsize=(12, 6), tight_layout=True) - ax = ax.ravel() - s = ['Box', 'Objectness', 'Classification', 'Precision', 'Recall', - 'val Box', 'val Objectness', 'val Classification', 'mAP@0.5', 'mAP@0.5:0.95'] - if bucket: - # files = ['https://storage.googleapis.com/%s/results%g.txt' % (bucket, x) for x in id] - files = ['results%g.txt' % x for x in id] - c = ('gsutil cp ' + '%s ' * len(files) + '.') % tuple('gs://%s/results%g.txt' % (bucket, x) for x in id) - os.system(c) - else: - files = list(Path(save_dir).glob('results*.txt')) - assert len(files), 'No results.txt files found in %s, nothing to plot.' % os.path.abspath(save_dir) - for fi, f in enumerate(files): - try: - results = np.loadtxt(f, usecols=[2, 3, 4, 8, 9, 12, 13, 14, 10, 11], ndmin=2).T - n = results.shape[1] # number of rows - x = range(start, min(stop, n) if stop else n) - for i in range(10): - y = results[i, x] - if i in [0, 1, 2, 5, 6, 7]: - y[y == 0] = np.nan # don't show zero loss values - # y /= y[0] # normalize - label = labels[fi] if len(labels) else f.stem - ax[i].plot(x, y, marker='.', label=label, linewidth=2, markersize=8) - ax[i].set_title(s[i]) - # if i in [5, 6, 7]: # share train and val loss y axes - # ax[i].get_shared_y_axes().join(ax[i], ax[i - 5]) - except Exception as e: - print('Warning: Plotting error for %s; %s' % (f, e)) - - ax[1].legend() - fig.savefig(Path(save_dir) / 'results.png', dpi=200) - - -def output_to_keypoint(output): - # Convert model output to target format [batch_id, class_id, x, y, w, h, conf] - targets = [] - for i, o in enumerate(output): - kpts = o[:,6:] - o = o[:,:6] - for index, (*box, conf, cls) in enumerate(o.detach().cpu().numpy()): - targets.append([i, cls, *list(*xyxy2xywh(np.array(box)[None])), conf, *list(kpts.detach().cpu().numpy()[index])]) - return np.array(targets) - - -def plot_skeleton_kpts(im, kpts, steps, orig_shape=None): - #Plot the skeleton and keypointsfor coco datatset - palette = np.array([[255, 128, 0], [255, 153, 51], [255, 178, 102], - [230, 230, 0], [255, 153, 255], [153, 204, 255], - [255, 102, 255], [255, 51, 255], [102, 178, 255], - [51, 153, 255], [255, 153, 153], [255, 102, 102], - [255, 51, 51], [153, 255, 153], [102, 255, 102], - [51, 255, 51], [0, 255, 0], [0, 0, 255], [255, 0, 0], - [255, 255, 255]]) - - skeleton = [[16, 14], [14, 12], [17, 15], [15, 13], [12, 13], [6, 12], - [7, 13], [6, 7], [6, 8], [7, 9], [8, 10], [9, 11], [2, 3], - [1, 2], [1, 3], [2, 4], [3, 5], [4, 6], [5, 7]] - - pose_limb_color = palette[[9, 9, 9, 9, 7, 7, 7, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16]] - pose_kpt_color = palette[[16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9]] - radius = 5 - num_kpts = len(kpts) // steps - - for kid in range(num_kpts): - r, g, b = pose_kpt_color[kid] - x_coord, y_coord = kpts[steps * kid], kpts[steps * kid + 1] - if not (x_coord % 640 == 0 or y_coord % 640 == 0): - if steps == 3: - conf = kpts[steps * kid + 2] - if conf < 0.5: - continue - cv2.circle(im, (int(x_coord), int(y_coord)), radius, (int(r), int(g), int(b)), -1) - - for sk_id, sk in enumerate(skeleton): - r, g, b = pose_limb_color[sk_id] - pos1 = (int(kpts[(sk[0]-1)*steps]), int(kpts[(sk[0]-1)*steps+1])) - pos2 = (int(kpts[(sk[1]-1)*steps]), int(kpts[(sk[1]-1)*steps+1])) - if steps == 3: - conf1 = kpts[(sk[0]-1)*steps+2] - conf2 = kpts[(sk[1]-1)*steps+2] - if conf1<0.5 or conf2<0.5: - continue - if pos1[0]%640 == 0 or pos1[1]%640==0 or pos1[0]<0 or pos1[1]<0: - continue - if pos2[0] % 640 == 0 or pos2[1] % 640 == 0 or pos2[0]<0 or pos2[1]<0: - continue - cv2.line(im, pos1, pos2, (int(r), int(g), int(b)), thickness=2) diff --git a/cv/detection/yolov7/pytorch/utils/torch_utils.py b/cv/detection/yolov7/pytorch/utils/torch_utils.py deleted file mode 100644 index 1e631b555..000000000 --- a/cv/detection/yolov7/pytorch/utils/torch_utils.py +++ /dev/null @@ -1,374 +0,0 @@ -# YOLOR PyTorch utils - -import datetime -import logging -import math -import os -import platform -import subprocess -import time -from contextlib import contextmanager -from copy import deepcopy -from pathlib import Path - -import torch -import torch.backends.cudnn as cudnn -import torch.nn as nn -import torch.nn.functional as F -import torchvision - -try: - import thop # for FLOPS computation -except ImportError: - thop = None -logger = logging.getLogger(__name__) - - -@contextmanager -def torch_distributed_zero_first(local_rank: int): - """ - Decorator to make all processes in distributed training wait for each local_master to do something. - """ - if local_rank not in [-1, 0]: - torch.distributed.barrier() - yield - if local_rank == 0: - torch.distributed.barrier() - - -def init_torch_seeds(seed=0): - # Speed-reproducibility tradeoff https://pytorch.org/docs/stable/notes/randomness.html - torch.manual_seed(seed) - if seed == 0: # slower, more reproducible - cudnn.benchmark, cudnn.deterministic = False, True - else: # faster, less reproducible - cudnn.benchmark, cudnn.deterministic = True, False - - -def date_modified(path=__file__): - # return human-readable file modification date, i.e. '2021-3-26' - t = datetime.datetime.fromtimestamp(Path(path).stat().st_mtime) - return f'{t.year}-{t.month}-{t.day}' - - -def git_describe(path=Path(__file__).parent): # path must be a directory - # return human-readable git description, i.e. v5.0-5-g3e25f1e https://git-scm.com/docs/git-describe - s = f'git -C {path} describe --tags --long --always' - try: - return subprocess.check_output(s, shell=True, stderr=subprocess.STDOUT).decode()[:-1] - except subprocess.CalledProcessError as e: - return '' # not a git repository - - -def select_device(device='', batch_size=None): - # device = 'cpu' or '0' or '0,1,2,3' - s = f'YOLOR 🚀 {git_describe() or date_modified()} torch {torch.__version__} ' # string - cpu = device.lower() == 'cpu' - if cpu: - os.environ['CUDA_VISIBLE_DEVICES'] = '-1' # force torch.cuda.is_available() = False - elif device: # non-cpu device requested - os.environ['CUDA_VISIBLE_DEVICES'] = device # set environment variable - assert torch.cuda.is_available(), f'CUDA unavailable, invalid device {device} requested' # check availability - - cuda = not cpu and torch.cuda.is_available() - if cuda: - n = torch.cuda.device_count() - if n > 1 and batch_size: # check that batch_size is compatible with device_count - assert batch_size % n == 0, f'batch-size {batch_size} not multiple of GPU count {n}' - space = ' ' * len(s) - for i, d in enumerate(device.split(',') if device else range(n)): - p = torch.cuda.get_device_properties(i) - s += f"{'' if i == 0 else space}CUDA:{d} ({p.name}, {p.total_memory / 1024 ** 2}MB)\n" # bytes to MB - else: - s += 'CPU\n' - - logger.info(s.encode().decode('ascii', 'ignore') if platform.system() == 'Windows' else s) # emoji-safe - return torch.device('cuda:0' if cuda else 'cpu') - - -def time_synchronized(): - # pytorch-accurate time - if torch.cuda.is_available(): - torch.cuda.synchronize() - return time.time() - - -def profile(x, ops, n=100, device=None): - # profile a pytorch module or list of modules. Example usage: - # x = torch.randn(16, 3, 640, 640) # input - # m1 = lambda x: x * torch.sigmoid(x) - # m2 = nn.SiLU() - # profile(x, [m1, m2], n=100) # profile speed over 100 iterations - - device = device or torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') - x = x.to(device) - x.requires_grad = True - print(torch.__version__, device.type, torch.cuda.get_device_properties(0) if device.type == 'cuda' else '') - print(f"\n{'Params':>12s}{'GFLOPS':>12s}{'forward (ms)':>16s}{'backward (ms)':>16s}{'input':>24s}{'output':>24s}") - for m in ops if isinstance(ops, list) else [ops]: - m = m.to(device) if hasattr(m, 'to') else m # device - m = m.half() if hasattr(m, 'half') and isinstance(x, torch.Tensor) and x.dtype is torch.float16 else m # type - dtf, dtb, t = 0., 0., [0., 0., 0.] # dt forward, backward - try: - flops = thop.profile(m, inputs=(x,), verbose=False)[0] / 1E9 * 2 # GFLOPS - except: - flops = 0 - - for _ in range(n): - t[0] = time_synchronized() - y = m(x) - t[1] = time_synchronized() - try: - _ = y.sum().backward() - t[2] = time_synchronized() - except: # no backward method - t[2] = float('nan') - dtf += (t[1] - t[0]) * 1000 / n # ms per op forward - dtb += (t[2] - t[1]) * 1000 / n # ms per op backward - - s_in = tuple(x.shape) if isinstance(x, torch.Tensor) else 'list' - s_out = tuple(y.shape) if isinstance(y, torch.Tensor) else 'list' - p = sum(list(x.numel() for x in m.parameters())) if isinstance(m, nn.Module) else 0 # parameters - print(f'{p:12}{flops:12.4g}{dtf:16.4g}{dtb:16.4g}{str(s_in):>24s}{str(s_out):>24s}') - - -def is_parallel(model): - return type(model) in (nn.parallel.DataParallel, nn.parallel.DistributedDataParallel) - - -def intersect_dicts(da, db, exclude=()): - # Dictionary intersection of matching keys and shapes, omitting 'exclude' keys, using da values - return {k: v for k, v in da.items() if k in db and not any(x in k for x in exclude) and v.shape == db[k].shape} - - -def initialize_weights(model): - for m in model.modules(): - t = type(m) - if t is nn.Conv2d: - pass # nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') - elif t is nn.BatchNorm2d: - m.eps = 1e-3 - m.momentum = 0.03 - elif t in [nn.Hardswish, nn.LeakyReLU, nn.ReLU, nn.ReLU6]: - m.inplace = True - - -def find_modules(model, mclass=nn.Conv2d): - # Finds layer indices matching module class 'mclass' - return [i for i, m in enumerate(model.module_list) if isinstance(m, mclass)] - - -def sparsity(model): - # Return global model sparsity - a, b = 0., 0. - for p in model.parameters(): - a += p.numel() - b += (p == 0).sum() - return b / a - - -def prune(model, amount=0.3): - # Prune model to requested global sparsity - import torch.nn.utils.prune as prune - print('Pruning model... ', end='') - for name, m in model.named_modules(): - if isinstance(m, nn.Conv2d): - prune.l1_unstructured(m, name='weight', amount=amount) # prune - prune.remove(m, 'weight') # make permanent - print(' %.3g global sparsity' % sparsity(model)) - - -def fuse_conv_and_bn(conv, bn): - # Fuse convolution and batchnorm layers https://tehnokv.com/posts/fusing-batchnorm-and-conv/ - fusedconv = nn.Conv2d(conv.in_channels, - conv.out_channels, - kernel_size=conv.kernel_size, - stride=conv.stride, - padding=conv.padding, - groups=conv.groups, - bias=True).requires_grad_(False).to(conv.weight.device) - - # prepare filters - w_conv = conv.weight.clone().view(conv.out_channels, -1) - w_bn = torch.diag(bn.weight.div(torch.sqrt(bn.eps + bn.running_var))) - fusedconv.weight.copy_(torch.mm(w_bn, w_conv).view(fusedconv.weight.shape)) - - # prepare spatial bias - b_conv = torch.zeros(conv.weight.size(0), device=conv.weight.device) if conv.bias is None else conv.bias - b_bn = bn.bias - bn.weight.mul(bn.running_mean).div(torch.sqrt(bn.running_var + bn.eps)) - fusedconv.bias.copy_(torch.mm(w_bn, b_conv.reshape(-1, 1)).reshape(-1) + b_bn) - - return fusedconv - - -def model_info(model, verbose=False, img_size=640): - # Model information. img_size may be int or list, i.e. img_size=640 or img_size=[640, 320] - n_p = sum(x.numel() for x in model.parameters()) # number parameters - n_g = sum(x.numel() for x in model.parameters() if x.requires_grad) # number gradients - if verbose: - print('%5s %40s %9s %12s %20s %10s %10s' % ('layer', 'name', 'gradient', 'parameters', 'shape', 'mu', 'sigma')) - for i, (name, p) in enumerate(model.named_parameters()): - name = name.replace('module_list.', '') - print('%5g %40s %9s %12g %20s %10.3g %10.3g' % - (i, name, p.requires_grad, p.numel(), list(p.shape), p.mean(), p.std())) - - try: # FLOPS - from thop import profile - stride = max(int(model.stride.max()), 32) if hasattr(model, 'stride') else 32 - img = torch.zeros((1, model.yaml.get('ch', 3), stride, stride), device=next(model.parameters()).device) # input - flops = profile(deepcopy(model), inputs=(img,), verbose=False)[0] / 1E9 * 2 # stride GFLOPS - img_size = img_size if isinstance(img_size, list) else [img_size, img_size] # expand if int/float - fs = ', %.1f GFLOPS' % (flops * img_size[0] / stride * img_size[1] / stride) # 640x640 GFLOPS - except (ImportError, Exception): - fs = '' - - logger.info(f"Model Summary: {len(list(model.modules()))} layers, {n_p} parameters, {n_g} gradients{fs}") - - -def load_classifier(name='resnet101', n=2): - # Loads a pretrained model reshaped to n-class output - model = torchvision.models.__dict__[name](pretrained=True) - - # ResNet model properties - # input_size = [3, 224, 224] - # input_space = 'RGB' - # input_range = [0, 1] - # mean = [0.485, 0.456, 0.406] - # std = [0.229, 0.224, 0.225] - - # Reshape output to n classes - filters = model.fc.weight.shape[1] - model.fc.bias = nn.Parameter(torch.zeros(n), requires_grad=True) - model.fc.weight = nn.Parameter(torch.zeros(n, filters), requires_grad=True) - model.fc.out_features = n - return model - - -def scale_img(img, ratio=1.0, same_shape=False, gs=32): # img(16,3,256,416) - # scales img(bs,3,y,x) by ratio constrained to gs-multiple - if ratio == 1.0: - return img - else: - h, w = img.shape[2:] - s = (int(h * ratio), int(w * ratio)) # new size - img = F.interpolate(img, size=s, mode='bilinear', align_corners=False) # resize - if not same_shape: # pad/crop img - h, w = [math.ceil(x * ratio / gs) * gs for x in (h, w)] - return F.pad(img, [0, w - s[1], 0, h - s[0]], value=0.447) # value = imagenet mean - - -def copy_attr(a, b, include=(), exclude=()): - # Copy attributes from b to a, options to only include [...] and to exclude [...] - for k, v in b.__dict__.items(): - if (len(include) and k not in include) or k.startswith('_') or k in exclude: - continue - else: - setattr(a, k, v) - - -class ModelEMA: - """ Model Exponential Moving Average from https://github.com/rwightman/pytorch-image-models - Keep a moving average of everything in the model state_dict (parameters and buffers). - This is intended to allow functionality like - https://www.tensorflow.org/api_docs/python/tf/train/ExponentialMovingAverage - A smoothed version of the weights is necessary for some training schemes to perform well. - This class is sensitive where it is initialized in the sequence of model init, - GPU assignment and distributed training wrappers. - """ - - def __init__(self, model, decay=0.9999, updates=0): - # Create EMA - self.ema = deepcopy(model.module if is_parallel(model) else model).eval() # FP32 EMA - # if next(model.parameters()).device.type != 'cpu': - # self.ema.half() # FP16 EMA - self.updates = updates # number of EMA updates - self.decay = lambda x: decay * (1 - math.exp(-x / 2000)) # decay exponential ramp (to help early epochs) - for p in self.ema.parameters(): - p.requires_grad_(False) - - def update(self, model): - # Update EMA parameters - with torch.no_grad(): - self.updates += 1 - d = self.decay(self.updates) - - msd = model.module.state_dict() if is_parallel(model) else model.state_dict() # model state_dict - for k, v in self.ema.state_dict().items(): - if v.dtype.is_floating_point: - v *= d - v += (1. - d) * msd[k].detach() - - def update_attr(self, model, include=(), exclude=('process_group', 'reducer')): - # Update EMA attributes - copy_attr(self.ema, model, include, exclude) - - -class BatchNormXd(torch.nn.modules.batchnorm._BatchNorm): - def _check_input_dim(self, input): - # The only difference between BatchNorm1d, BatchNorm2d, BatchNorm3d, etc - # is this method that is overwritten by the sub-class - # This original goal of this method was for tensor sanity checks - # If you're ok bypassing those sanity checks (eg. if you trust your inference - # to provide the right dimensional inputs), then you can just use this method - # for easy conversion from SyncBatchNorm - # (unfortunately, SyncBatchNorm does not store the original class - if it did - # we could return the one that was originally created) - return - -def revert_sync_batchnorm(module): - # this is very similar to the function that it is trying to revert: - # https://github.com/pytorch/pytorch/blob/c8b3686a3e4ba63dc59e5dcfe5db3430df256833/torch/nn/modules/batchnorm.py#L679 - module_output = module - if isinstance(module, torch.nn.modules.batchnorm.SyncBatchNorm): - new_cls = BatchNormXd - module_output = BatchNormXd(module.num_features, - module.eps, module.momentum, - module.affine, - module.track_running_stats) - if module.affine: - with torch.no_grad(): - module_output.weight = module.weight - module_output.bias = module.bias - module_output.running_mean = module.running_mean - module_output.running_var = module.running_var - module_output.num_batches_tracked = module.num_batches_tracked - if hasattr(module, "qconfig"): - module_output.qconfig = module.qconfig - for name, child in module.named_children(): - module_output.add_module(name, revert_sync_batchnorm(child)) - del module - return module_output - - -class TracedModel(nn.Module): - - def __init__(self, model=None, device=None, img_size=(640,640)): - super(TracedModel, self).__init__() - - print(" Convert model to Traced-model... ") - self.stride = model.stride - self.names = model.names - self.model = model - - self.model = revert_sync_batchnorm(self.model) - self.model.to('cpu') - self.model.eval() - - self.detect_layer = self.model.model[-1] - self.model.traced = True - - rand_example = torch.rand(1, 3, img_size, img_size) - - traced_script_module = torch.jit.trace(self.model, rand_example, strict=False) - #traced_script_module = torch.jit.script(self.model) - traced_script_module.save("traced_model.pt") - print(" traced_script_module saved! ") - self.model = traced_script_module - self.model.to(device) - self.detect_layer.to(device) - print(" model is traced! \n") - - def forward(self, x, augment=False, profile=False): - out = self.model(x) - out = self.detect_layer(out) - return out \ No newline at end of file diff --git a/cv/detection/yolov7/pytorch/utils/wandb_logging/__init__.py b/cv/detection/yolov7/pytorch/utils/wandb_logging/__init__.py deleted file mode 100644 index 84952a816..000000000 --- a/cv/detection/yolov7/pytorch/utils/wandb_logging/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# init \ No newline at end of file diff --git a/cv/detection/yolov7/pytorch/utils/wandb_logging/log_dataset.py b/cv/detection/yolov7/pytorch/utils/wandb_logging/log_dataset.py deleted file mode 100644 index 74cd6c6cd..000000000 --- a/cv/detection/yolov7/pytorch/utils/wandb_logging/log_dataset.py +++ /dev/null @@ -1,24 +0,0 @@ -import argparse - -import yaml - -from wandb_utils import WandbLogger - -WANDB_ARTIFACT_PREFIX = 'wandb-artifact://' - - -def create_dataset_artifact(opt): - with open(opt.data) as f: - data = yaml.load(f, Loader=yaml.SafeLoader) # data dict - logger = WandbLogger(opt, '', None, data, job_type='Dataset Creation') - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--data', type=str, default='data/coco.yaml', help='data.yaml path') - parser.add_argument('--single-cls', action='store_true', help='train as single-class dataset') - parser.add_argument('--project', type=str, default='YOLOR', help='name of W&B Project') - opt = parser.parse_args() - opt.resume = False # Explicitly disallow resume check for dataset upload job - - create_dataset_artifact(opt) diff --git a/cv/detection/yolov7/pytorch/utils/wandb_logging/wandb_utils.py b/cv/detection/yolov7/pytorch/utils/wandb_logging/wandb_utils.py deleted file mode 100644 index aec7c5f48..000000000 --- a/cv/detection/yolov7/pytorch/utils/wandb_logging/wandb_utils.py +++ /dev/null @@ -1,306 +0,0 @@ -import json -import sys -from pathlib import Path - -import torch -import yaml -from tqdm import tqdm - -sys.path.append(str(Path(__file__).parent.parent.parent)) # add utils/ to path -from utils.datasets import LoadImagesAndLabels -from utils.datasets import img2label_paths -from utils.general import colorstr, xywh2xyxy, check_dataset - -try: - import wandb - from wandb import init, finish -except ImportError: - wandb = None - -WANDB_ARTIFACT_PREFIX = 'wandb-artifact://' - - -def remove_prefix(from_string, prefix=WANDB_ARTIFACT_PREFIX): - return from_string[len(prefix):] - - -def check_wandb_config_file(data_config_file): - wandb_config = '_wandb.'.join(data_config_file.rsplit('.', 1)) # updated data.yaml path - if Path(wandb_config).is_file(): - return wandb_config - return data_config_file - - -def get_run_info(run_path): - run_path = Path(remove_prefix(run_path, WANDB_ARTIFACT_PREFIX)) - run_id = run_path.stem - project = run_path.parent.stem - model_artifact_name = 'run_' + run_id + '_model' - return run_id, project, model_artifact_name - - -def check_wandb_resume(opt): - process_wandb_config_ddp_mode(opt) if opt.global_rank not in [-1, 0] else None - if isinstance(opt.resume, str): - if opt.resume.startswith(WANDB_ARTIFACT_PREFIX): - if opt.global_rank not in [-1, 0]: # For resuming DDP runs - run_id, project, model_artifact_name = get_run_info(opt.resume) - api = wandb.Api() - artifact = api.artifact(project + '/' + model_artifact_name + ':latest') - modeldir = artifact.download() - opt.weights = str(Path(modeldir) / "last.pt") - return True - return None - - -def process_wandb_config_ddp_mode(opt): - with open(opt.data) as f: - data_dict = yaml.load(f, Loader=yaml.SafeLoader) # data dict - train_dir, val_dir = None, None - if isinstance(data_dict['train'], str) and data_dict['train'].startswith(WANDB_ARTIFACT_PREFIX): - api = wandb.Api() - train_artifact = api.artifact(remove_prefix(data_dict['train']) + ':' + opt.artifact_alias) - train_dir = train_artifact.download() - train_path = Path(train_dir) / 'data/images/' - data_dict['train'] = str(train_path) - - if isinstance(data_dict['val'], str) and data_dict['val'].startswith(WANDB_ARTIFACT_PREFIX): - api = wandb.Api() - val_artifact = api.artifact(remove_prefix(data_dict['val']) + ':' + opt.artifact_alias) - val_dir = val_artifact.download() - val_path = Path(val_dir) / 'data/images/' - data_dict['val'] = str(val_path) - if train_dir or val_dir: - ddp_data_path = str(Path(val_dir) / 'wandb_local_data.yaml') - with open(ddp_data_path, 'w') as f: - yaml.dump(data_dict, f) - opt.data = ddp_data_path - - -class WandbLogger(): - def __init__(self, opt, name, run_id, data_dict, job_type='Training'): - # Pre-training routine -- - self.job_type = job_type - self.wandb, self.wandb_run, self.data_dict = wandb, None if not wandb else wandb.run, data_dict - # It's more elegant to stick to 1 wandb.init call, but useful config data is overwritten in the WandbLogger's wandb.init call - if isinstance(opt.resume, str): # checks resume from artifact - if opt.resume.startswith(WANDB_ARTIFACT_PREFIX): - run_id, project, model_artifact_name = get_run_info(opt.resume) - model_artifact_name = WANDB_ARTIFACT_PREFIX + model_artifact_name - assert wandb, 'install wandb to resume wandb runs' - # Resume wandb-artifact:// runs here| workaround for not overwriting wandb.config - self.wandb_run = wandb.init(id=run_id, project=project, resume='allow') - opt.resume = model_artifact_name - elif self.wandb: - self.wandb_run = wandb.init(config=opt, - resume="allow", - project='YOLOR' if opt.project == 'runs/train' else Path(opt.project).stem, - name=name, - job_type=job_type, - id=run_id) if not wandb.run else wandb.run - if self.wandb_run: - if self.job_type == 'Training': - if not opt.resume: - wandb_data_dict = self.check_and_upload_dataset(opt) if opt.upload_dataset else data_dict - # Info useful for resuming from artifacts - self.wandb_run.config.opt = vars(opt) - self.wandb_run.config.data_dict = wandb_data_dict - self.data_dict = self.setup_training(opt, data_dict) - if self.job_type == 'Dataset Creation': - self.data_dict = self.check_and_upload_dataset(opt) - else: - prefix = colorstr('wandb: ') - print(f"{prefix}Install Weights & Biases for YOLOR logging with 'pip install wandb' (recommended)") - - def check_and_upload_dataset(self, opt): - assert wandb, 'Install wandb to upload dataset' - check_dataset(self.data_dict) - config_path = self.log_dataset_artifact(opt.data, - opt.single_cls, - 'YOLOR' if opt.project == 'runs/train' else Path(opt.project).stem) - print("Created dataset config file ", config_path) - with open(config_path) as f: - wandb_data_dict = yaml.load(f, Loader=yaml.SafeLoader) - return wandb_data_dict - - def setup_training(self, opt, data_dict): - self.log_dict, self.current_epoch, self.log_imgs = {}, 0, 16 # Logging Constants - self.bbox_interval = opt.bbox_interval - if isinstance(opt.resume, str): - modeldir, _ = self.download_model_artifact(opt) - if modeldir: - self.weights = Path(modeldir) / "last.pt" - config = self.wandb_run.config - opt.weights, opt.save_period, opt.batch_size, opt.bbox_interval, opt.epochs, opt.hyp = str( - self.weights), config.save_period, config.total_batch_size, config.bbox_interval, config.epochs, \ - config.opt['hyp'] - data_dict = dict(self.wandb_run.config.data_dict) # eliminates the need for config file to resume - if 'val_artifact' not in self.__dict__: # If --upload_dataset is set, use the existing artifact, don't download - self.train_artifact_path, self.train_artifact = self.download_dataset_artifact(data_dict.get('train'), - opt.artifact_alias) - self.val_artifact_path, self.val_artifact = self.download_dataset_artifact(data_dict.get('val'), - opt.artifact_alias) - self.result_artifact, self.result_table, self.val_table, self.weights = None, None, None, None - if self.train_artifact_path is not None: - train_path = Path(self.train_artifact_path) / 'data/images/' - data_dict['train'] = str(train_path) - if self.val_artifact_path is not None: - val_path = Path(self.val_artifact_path) / 'data/images/' - data_dict['val'] = str(val_path) - self.val_table = self.val_artifact.get("val") - self.map_val_table_path() - if self.val_artifact is not None: - self.result_artifact = wandb.Artifact("run_" + wandb.run.id + "_progress", "evaluation") - self.result_table = wandb.Table(["epoch", "id", "prediction", "avg_confidence"]) - if opt.bbox_interval == -1: - self.bbox_interval = opt.bbox_interval = (opt.epochs // 10) if opt.epochs > 10 else 1 - return data_dict - - def download_dataset_artifact(self, path, alias): - if isinstance(path, str) and path.startswith(WANDB_ARTIFACT_PREFIX): - dataset_artifact = wandb.use_artifact(remove_prefix(path, WANDB_ARTIFACT_PREFIX) + ":" + alias) - assert dataset_artifact is not None, "'Error: W&B dataset artifact doesn\'t exist'" - datadir = dataset_artifact.download() - return datadir, dataset_artifact - return None, None - - def download_model_artifact(self, opt): - if opt.resume.startswith(WANDB_ARTIFACT_PREFIX): - model_artifact = wandb.use_artifact(remove_prefix(opt.resume, WANDB_ARTIFACT_PREFIX) + ":latest") - assert model_artifact is not None, 'Error: W&B model artifact doesn\'t exist' - modeldir = model_artifact.download() - epochs_trained = model_artifact.metadata.get('epochs_trained') - total_epochs = model_artifact.metadata.get('total_epochs') - assert epochs_trained < total_epochs, 'training to %g epochs is finished, nothing to resume.' % ( - total_epochs) - return modeldir, model_artifact - return None, None - - def log_model(self, path, opt, epoch, fitness_score, best_model=False): - model_artifact = wandb.Artifact('run_' + wandb.run.id + '_model', type='model', metadata={ - 'original_url': str(path), - 'epochs_trained': epoch + 1, - 'save period': opt.save_period, - 'project': opt.project, - 'total_epochs': opt.epochs, - 'fitness_score': fitness_score - }) - model_artifact.add_file(str(path / 'last.pt'), name='last.pt') - wandb.log_artifact(model_artifact, - aliases=['latest', 'epoch ' + str(self.current_epoch), 'best' if best_model else '']) - print("Saving model artifact on epoch ", epoch + 1) - - def log_dataset_artifact(self, data_file, single_cls, project, overwrite_config=False): - with open(data_file) as f: - data = yaml.load(f, Loader=yaml.SafeLoader) # data dict - nc, names = (1, ['item']) if single_cls else (int(data['nc']), data['names']) - names = {k: v for k, v in enumerate(names)} # to index dictionary - self.train_artifact = self.create_dataset_table(LoadImagesAndLabels( - data['train']), names, name='train') if data.get('train') else None - self.val_artifact = self.create_dataset_table(LoadImagesAndLabels( - data['val']), names, name='val') if data.get('val') else None - if data.get('train'): - data['train'] = WANDB_ARTIFACT_PREFIX + str(Path(project) / 'train') - if data.get('val'): - data['val'] = WANDB_ARTIFACT_PREFIX + str(Path(project) / 'val') - path = data_file if overwrite_config else '_wandb.'.join(data_file.rsplit('.', 1)) # updated data.yaml path - data.pop('download', None) - with open(path, 'w') as f: - yaml.dump(data, f) - - if self.job_type == 'Training': # builds correct artifact pipeline graph - self.wandb_run.use_artifact(self.val_artifact) - self.wandb_run.use_artifact(self.train_artifact) - self.val_artifact.wait() - self.val_table = self.val_artifact.get('val') - self.map_val_table_path() - else: - self.wandb_run.log_artifact(self.train_artifact) - self.wandb_run.log_artifact(self.val_artifact) - return path - - def map_val_table_path(self): - self.val_table_map = {} - print("Mapping dataset") - for i, data in enumerate(tqdm(self.val_table.data)): - self.val_table_map[data[3]] = data[0] - - def create_dataset_table(self, dataset, class_to_id, name='dataset'): - # TODO: Explore multiprocessing to slpit this loop parallely| This is essential for speeding up the the logging - artifact = wandb.Artifact(name=name, type="dataset") - img_files = tqdm([dataset.path]) if isinstance(dataset.path, str) and Path(dataset.path).is_dir() else None - img_files = tqdm(dataset.img_files) if not img_files else img_files - for img_file in img_files: - if Path(img_file).is_dir(): - artifact.add_dir(img_file, name='data/images') - labels_path = 'labels'.join(dataset.path.rsplit('images', 1)) - artifact.add_dir(labels_path, name='data/labels') - else: - artifact.add_file(img_file, name='data/images/' + Path(img_file).name) - label_file = Path(img2label_paths([img_file])[0]) - artifact.add_file(str(label_file), - name='data/labels/' + label_file.name) if label_file.exists() else None - table = wandb.Table(columns=["id", "train_image", "Classes", "name"]) - class_set = wandb.Classes([{'id': id, 'name': name} for id, name in class_to_id.items()]) - for si, (img, labels, paths, shapes) in enumerate(tqdm(dataset)): - height, width = shapes[0] - labels[:, 2:] = (xywh2xyxy(labels[:, 2:].view(-1, 4))) * torch.Tensor([width, height, width, height]) - box_data, img_classes = [], {} - for cls, *xyxy in labels[:, 1:].tolist(): - cls = int(cls) - box_data.append({"position": {"minX": xyxy[0], "minY": xyxy[1], "maxX": xyxy[2], "maxY": xyxy[3]}, - "class_id": cls, - "box_caption": "%s" % (class_to_id[cls]), - "scores": {"acc": 1}, - "domain": "pixel"}) - img_classes[cls] = class_to_id[cls] - boxes = {"ground_truth": {"box_data": box_data, "class_labels": class_to_id}} # inference-space - table.add_data(si, wandb.Image(paths, classes=class_set, boxes=boxes), json.dumps(img_classes), - Path(paths).name) - artifact.add(table, name) - return artifact - - def log_training_progress(self, predn, path, names): - if self.val_table and self.result_table: - class_set = wandb.Classes([{'id': id, 'name': name} for id, name in names.items()]) - box_data = [] - total_conf = 0 - for *xyxy, conf, cls in predn.tolist(): - if conf >= 0.25: - box_data.append( - {"position": {"minX": xyxy[0], "minY": xyxy[1], "maxX": xyxy[2], "maxY": xyxy[3]}, - "class_id": int(cls), - "box_caption": "%s %.3f" % (names[cls], conf), - "scores": {"class_score": conf}, - "domain": "pixel"}) - total_conf = total_conf + conf - boxes = {"predictions": {"box_data": box_data, "class_labels": names}} # inference-space - id = self.val_table_map[Path(path).name] - self.result_table.add_data(self.current_epoch, - id, - wandb.Image(self.val_table.data[id][1], boxes=boxes, classes=class_set), - total_conf / max(1, len(box_data)) - ) - - def log(self, log_dict): - if self.wandb_run: - for key, value in log_dict.items(): - self.log_dict[key] = value - - def end_epoch(self, best_result=False): - if self.wandb_run: - wandb.log(self.log_dict) - self.log_dict = {} - if self.result_artifact: - train_results = wandb.JoinedTable(self.val_table, self.result_table, "id") - self.result_artifact.add(train_results, 'result') - wandb.log_artifact(self.result_artifact, aliases=['latest', 'epoch ' + str(self.current_epoch), - ('best' if best_result else '')]) - self.result_table = wandb.Table(["epoch", "id", "prediction", "avg_confidence"]) - self.result_artifact = wandb.Artifact("run_" + wandb.run.id + "_progress", "evaluation") - - def finish_run(self): - if self.wandb_run: - if self.log_dict: - wandb.log(self.log_dict) - wandb.run.finish() -- Gitee From cfc414dfa57a95a25923ee4cb817f8ab070a9df5 Mon Sep 17 00:00:00 2001 From: "mingjiang.li" Date: Fri, 13 Sep 2024 16:03:54 +0800 Subject: [PATCH 3/5] move yolov3 Signed-off-by: mingjiang.li --- cv/detection/yolov3/pytorch/.gitignore | 6 - cv/detection/yolov3/pytorch/LICENSE | 674 - cv/detection/yolov3/pytorch/README.md | 11 +- .../yolov3/pytorch/common_utils/__init__.py | 23 - .../yolov3/pytorch/common_utils/dist.py | 144 - .../pytorch/common_utils/metric_logger.py | 94 - .../yolov3/pytorch/common_utils/misc.py | 11 - .../pytorch/common_utils/smooth_value.py | 75 - cv/detection/yolov3/pytorch/config/coco.data | 6 - .../pytorch/config/create_custom_model.sh | 794 - .../yolov3/pytorch/config/custom.data | 4 - cv/detection/yolov3/pytorch/config/voc.data | 4 - .../yolov3/pytorch/config/yolov3-tiny.cfg | 206 - .../yolov3/pytorch/config/yolov3-voc.cfg | 790 - cv/detection/yolov3/pytorch/config/yolov3.cfg | 788 - cv/detection/yolov3/pytorch/data/coco.names | 80 - .../yolov3/pytorch/data/custom/classes.names | 1 - .../pytorch/data/custom/images/train.jpg | Bin 113300 -> 0 bytes .../pytorch/data/custom/labels/train.txt | 1 - .../yolov3/pytorch/data/custom/train.txt | 1 - .../yolov3/pytorch/data/custom/valid.txt | 1 - .../yolov3/pytorch/data/get_coco_dataset.sh | 24 - cv/detection/yolov3/pytorch/data/voc.names | 20 - .../yolov3/pytorch/data/voc/train.txt | 16551 ---------------- .../yolov3/pytorch/data/voc/valid.txt | 4952 ----- .../yolov3/pytorch/get_num_devices.sh | 12 - cv/detection/yolov3/pytorch/poetry.lock | 1137 -- cv/detection/yolov3/pytorch/pyproject.toml | 34 - .../yolov3/pytorch/pytorchyolo/__init__.py | 0 .../yolov3/pytorch/pytorchyolo/detect.py | 285 - .../yolov3/pytorch/pytorchyolo/finetune.py | 602 - .../yolov3/pytorch/pytorchyolo/models.py | 311 - .../yolov3/pytorch/pytorchyolo/test.py | 297 - .../yolov3/pytorch/pytorchyolo/train.py | 422 - .../pytorch/pytorchyolo/utils/__init__.py | 0 .../pytorchyolo/utils/augmentations.py | 35 - .../pytorch/pytorchyolo/utils/datasets.py | 142 - .../pytorch/pytorchyolo/utils/logger.py | 119 - .../yolov3/pytorch/pytorchyolo/utils/loss.py | 251 - .../pytorch/pytorchyolo/utils/parse_config.py | 37 - .../pytorch/pytorchyolo/utils/transforms.py | 119 - .../yolov3/pytorch/pytorchyolo/utils/utils.py | 387 - cv/detection/yolov3/pytorch/requirements.txt | 3 - .../yolov3/pytorch/run_dist_training.sh | 22 - cv/detection/yolov3/pytorch/run_training.sh | 18 - cv/detection/yolov3/pytorch/setup.sh | 31 - cv/detection/yolov3/pytorch/voc_annotation.py | 82 - .../pytorch/weights/download_weights.sh | 7 - 48 files changed, 6 insertions(+), 29608 deletions(-) delete mode 100644 cv/detection/yolov3/pytorch/.gitignore delete mode 100644 cv/detection/yolov3/pytorch/LICENSE delete mode 100644 cv/detection/yolov3/pytorch/common_utils/__init__.py delete mode 100644 cv/detection/yolov3/pytorch/common_utils/dist.py delete mode 100644 cv/detection/yolov3/pytorch/common_utils/metric_logger.py delete mode 100644 cv/detection/yolov3/pytorch/common_utils/misc.py delete mode 100644 cv/detection/yolov3/pytorch/common_utils/smooth_value.py delete mode 100644 cv/detection/yolov3/pytorch/config/coco.data delete mode 100644 cv/detection/yolov3/pytorch/config/create_custom_model.sh delete mode 100644 cv/detection/yolov3/pytorch/config/custom.data delete mode 100644 cv/detection/yolov3/pytorch/config/voc.data delete mode 100644 cv/detection/yolov3/pytorch/config/yolov3-tiny.cfg delete mode 100644 cv/detection/yolov3/pytorch/config/yolov3-voc.cfg delete mode 100644 cv/detection/yolov3/pytorch/config/yolov3.cfg delete mode 100755 cv/detection/yolov3/pytorch/data/coco.names delete mode 100755 cv/detection/yolov3/pytorch/data/custom/classes.names delete mode 100755 cv/detection/yolov3/pytorch/data/custom/images/train.jpg delete mode 100755 cv/detection/yolov3/pytorch/data/custom/labels/train.txt delete mode 100755 cv/detection/yolov3/pytorch/data/custom/train.txt delete mode 100755 cv/detection/yolov3/pytorch/data/custom/valid.txt delete mode 100755 cv/detection/yolov3/pytorch/data/get_coco_dataset.sh delete mode 100755 cv/detection/yolov3/pytorch/data/voc.names delete mode 100755 cv/detection/yolov3/pytorch/data/voc/train.txt delete mode 100755 cv/detection/yolov3/pytorch/data/voc/valid.txt delete mode 100644 cv/detection/yolov3/pytorch/get_num_devices.sh delete mode 100644 cv/detection/yolov3/pytorch/poetry.lock delete mode 100644 cv/detection/yolov3/pytorch/pyproject.toml delete mode 100644 cv/detection/yolov3/pytorch/pytorchyolo/__init__.py delete mode 100644 cv/detection/yolov3/pytorch/pytorchyolo/detect.py delete mode 100644 cv/detection/yolov3/pytorch/pytorchyolo/finetune.py delete mode 100644 cv/detection/yolov3/pytorch/pytorchyolo/models.py delete mode 100644 cv/detection/yolov3/pytorch/pytorchyolo/test.py delete mode 100644 cv/detection/yolov3/pytorch/pytorchyolo/train.py delete mode 100644 cv/detection/yolov3/pytorch/pytorchyolo/utils/__init__.py delete mode 100644 cv/detection/yolov3/pytorch/pytorchyolo/utils/augmentations.py delete mode 100644 cv/detection/yolov3/pytorch/pytorchyolo/utils/datasets.py delete mode 100644 cv/detection/yolov3/pytorch/pytorchyolo/utils/logger.py delete mode 100644 cv/detection/yolov3/pytorch/pytorchyolo/utils/loss.py delete mode 100644 cv/detection/yolov3/pytorch/pytorchyolo/utils/parse_config.py delete mode 100644 cv/detection/yolov3/pytorch/pytorchyolo/utils/transforms.py delete mode 100644 cv/detection/yolov3/pytorch/pytorchyolo/utils/utils.py delete mode 100644 cv/detection/yolov3/pytorch/requirements.txt delete mode 100644 cv/detection/yolov3/pytorch/run_dist_training.sh delete mode 100644 cv/detection/yolov3/pytorch/run_training.sh delete mode 100644 cv/detection/yolov3/pytorch/setup.sh delete mode 100644 cv/detection/yolov3/pytorch/voc_annotation.py delete mode 100644 cv/detection/yolov3/pytorch/weights/download_weights.sh diff --git a/cv/detection/yolov3/pytorch/.gitignore b/cv/detection/yolov3/pytorch/.gitignore deleted file mode 100644 index 9e17c964a..000000000 --- a/cv/detection/yolov3/pytorch/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -**/__pycache__/ -VOC -logs -output -checkpoints -data/coco diff --git a/cv/detection/yolov3/pytorch/LICENSE b/cv/detection/yolov3/pytorch/LICENSE deleted file mode 100644 index 92b370f0e..000000000 --- a/cv/detection/yolov3/pytorch/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/cv/detection/yolov3/pytorch/README.md b/cv/detection/yolov3/pytorch/README.md index 2a081e9af..9a7cf4e18 100755 --- a/cv/detection/yolov3/pytorch/README.md +++ b/cv/detection/yolov3/pytorch/README.md @@ -2,11 +2,14 @@ ## Model description -We present some updates to YOLO! We made a bunch of little design changes to make it better. We also trained this new network that’s pretty swell. It’s a little bigger than last time but more accurate. It’s still fast though, don’t worry. At 320 × 320 YOLOv3 runs in 22 ms at 28.2 mAP, as accurate as SSD but three times faster. When we look at the old .5 IOU mAP detection metric YOLOv3 is quite good. It achieves 57.9 AP50 in 51 ms on a Titan X, compared to 57.5 AP50 in 198 ms by RetinaNet, similar performance but 3.8× faster. As always, all the code is online at https://pjreddie.com/yolo/. +We present some updates to YOLO! We made a bunch of little design changes to make it better. We also trained this new network that’s pretty swell. It’s a little bigger than last time but more accurate. It’s still fast though, don’t worry. At 320 × 320 YOLOv3 runs in 22 ms at 28.2 mAP, as accurate as SSD but three times faster. When we look at the old .5 IOU mAP detection metric YOLOv3 is quite good. It achieves 57.9 AP50 in 51 ms on a Titan X, compared to 57.5 AP50 in 198 ms by RetinaNet, similar performance but 3.8× faster. As always, all the code is online at . ## Step 1: Installing packages -```shell +```bash +## clone yolov3 and install +git clone https://gitee.com/deep-spark/deepsparkhub-GPL.git +cd deepsparkhub-GPL/cv/detection/yolov3/pytorch/ bash setup.sh ``` @@ -35,7 +38,5 @@ bash run_dist_training.sh ``` ## Reference -https://github.com/eriklindernoren/PyTorch-YOLOv3 - - +- [YOLOv3](https://github.com/eriklindernoren/PyTorch-YOLOv3) diff --git a/cv/detection/yolov3/pytorch/common_utils/__init__.py b/cv/detection/yolov3/pytorch/common_utils/__init__.py deleted file mode 100644 index 32e8c4f57..000000000 --- a/cv/detection/yolov3/pytorch/common_utils/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -import random - -import numpy as np - -from .dist import * -from .metric_logger import * -from .misc import * -from .smooth_value import * - -def manual_seed(seed, deterministic=False): - random.seed(seed) - np.random.seed(seed) - os.environ['PYTHONHASHSEED'] = str(seed) - torch.manual_seed(seed) - torch.cuda.manual_seed(seed) - torch.cuda.manual_seed_all(seed) - - if deterministic: - torch.backends.cudnn.deterministic = True - torch.backends.cudnn.benchmark = False - else: - torch.backends.cudnn.deterministic = False - torch.backends.cudnn.benchmark = True \ No newline at end of file diff --git a/cv/detection/yolov3/pytorch/common_utils/dist.py b/cv/detection/yolov3/pytorch/common_utils/dist.py deleted file mode 100644 index ea56ca267..000000000 --- a/cv/detection/yolov3/pytorch/common_utils/dist.py +++ /dev/null @@ -1,144 +0,0 @@ -# Copyright (c) 2022 Iluvatar CoreX. All rights reserved. -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - - -from collections import defaultdict, deque -import datetime -import errno -import os -import time - -import torch -import torch.distributed as dist - - - -def setup_for_distributed(is_master): - """ - This function disables printing when not in master process - """ - import builtins as __builtin__ - builtin_print = __builtin__.print - - def print(*args, **kwargs): - force = kwargs.pop('force', False) - if is_master or force: - builtin_print(*args, **kwargs) - - __builtin__.print = print - - -def is_dist_avail_and_initialized(): - if not dist.is_available(): - return False - if not dist.is_initialized(): - return False - return True - - -def get_world_size(): - if not is_dist_avail_and_initialized(): - return 1 - return dist.get_world_size() - - -def get_rank(): - if not is_dist_avail_and_initialized(): - return 0 - return dist.get_rank() - - -def is_main_process(): - return get_rank() == 0 - - -def save_on_master(*args, **kwargs): - if is_main_process(): - torch.save(*args, **kwargs) - - -def get_dist_backend(args=None): - DIST_BACKEND_ENV = "PT_DIST_BACKEND" - if DIST_BACKEND_ENV in os.environ: - return os.environ[DIST_BACKEND_ENV] - - if args is None: - args = dict() - - backend_attr_name = "dist_backend" - - if hasattr(args, backend_attr_name): - return getattr(args, backend_attr_name) - - if backend_attr_name in args: - return args[backend_attr_name] - - return "nccl" - - -def init_distributed_mode(args): - if 'RANK' in os.environ and 'WORLD_SIZE' in os.environ: - args.rank = int(os.environ["RANK"]) - args.world_size = int(os.environ['WORLD_SIZE']) - args.gpu = int(os.environ['LOCAL_RANK']) - elif 'SLURM_PROCID' in os.environ: - args.rank = int(os.environ['SLURM_PROCID']) - args.gpu = args.rank % torch.cuda.device_count() - else: - print('Not using distributed mode') - args.distributed = False - return - - args.distributed = True - - torch.cuda.set_device(args.gpu) - dist_backend = get_dist_backend(args) - print('| distributed init (rank {}): {}'.format( - args.rank, args.dist_url), flush=True) - torch.distributed.init_process_group(backend=dist_backend, init_method=args.dist_url, - world_size=args.world_size, rank=args.rank) - torch.distributed.barrier() - setup_for_distributed(args.rank == 0) - - -def all_gather(data): - """ - Run all_gather on arbitrary picklable data (not necessarily tensors) - Args: - data: any picklable object - Returns: - list[data]: list of data gathered from each rank - """ - world_size = get_world_size() - if world_size == 1: - return [data] - data_list = [None] * world_size - dist.all_gather_object(data_list, data) - return data_list - - -def reduce_dict(input_dict, average=True): - """ - Args: - input_dict (dict): all the values will be reduced - average (bool): whether to do average or sum - Reduce the values in the dictionary from all processes so that all processes - have the averaged results. Returns a dict with the same fields as - input_dict, after reduction. - """ - world_size = get_world_size() - if world_size < 2: - return input_dict - with torch.no_grad(): - names = [] - values = [] - # sort the keys so that they are consistent across processes - for k in sorted(input_dict.keys()): - names.append(k) - values.append(input_dict[k]) - values = torch.stack(values, dim=0) - dist.all_reduce(values) - if average: - values /= world_size - reduced_dict = {k: v for k, v in zip(names, values)} - return reduced_dict diff --git a/cv/detection/yolov3/pytorch/common_utils/metric_logger.py b/cv/detection/yolov3/pytorch/common_utils/metric_logger.py deleted file mode 100644 index 960641c4d..000000000 --- a/cv/detection/yolov3/pytorch/common_utils/metric_logger.py +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright (c) 2022 Iluvatar CoreX. All rights reserved. -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - - -from collections import defaultdict -import datetime -import time - -import torch -from .smooth_value import SmoothedValue - -""" -Examples: - -logger = MetricLogger(" ") - ->>> # For iter dataloader ->>> metric_logger.add_meter('img/s', utils.SmoothedValue(window_size=10, fmt='{value}')) ->>> header = 'Epoch: [{}]'.format(epoch) ->>> for image, target in metric_logger.log_every(data_loader, print_freq, header): ->>> ... ->>> logger.metric_logger.meters['img/s'].update(fps) - -""" - -class MetricLogger(object): - - def __init__(self, delimiter="\t"): - self.meters = defaultdict(SmoothedValue) - self.delimiter = delimiter - - def update(self, **kwargs): - for k, v in kwargs.items(): - if isinstance(v, torch.Tensor): - v = v.item() - assert isinstance(v, (float, int)) - self.meters[k].update(v) - - def __getattr__(self, attr): - if attr in self.meters: - return self.meters[attr] - if attr in self.__dict__: - return self.__dict__[attr] - raise AttributeError("'{}' object has no attribute '{}'".format( - type(self).__name__, attr)) - - def __str__(self): - loss_str = [] - for name, meter in self.meters.items(): - loss_str.append( - "{}: {}".format(name, str(meter)) - ) - return self.delimiter.join(loss_str) - - def synchronize_between_processes(self): - for meter in self.meters.values(): - meter.synchronize_between_processes() - - def add_meter(self, name, meter): - self.meters[name] = meter - - def log_every(self, iterable, print_freq, header=None): - i = 0 - if not header: - header = '' - start_time = time.time() - end = time.time() - iter_time = SmoothedValue(fmt='{avg:.4f}') - data_time = SmoothedValue(fmt='{avg:.4f}') - space_fmt = ':' + str(len(str(len(iterable)))) + 'd' - log_msg = self.delimiter.join([ - header, - '[{0' + space_fmt + '}/{1}]', - 'eta: {eta}', - '{meters}', - 'time: {time}', - 'data: {data}' - ]) - for obj in iterable: - data_time.update(time.time() - end) - yield obj - iter_time.update(time.time() - end) - if i % print_freq == 0: - eta_seconds = iter_time.global_avg * (len(iterable) - i) - eta_string = str(datetime.timedelta(seconds=int(eta_seconds))) - print(log_msg.format( - i, len(iterable), eta=eta_string, - meters=str(self), - time=str(iter_time), data=str(data_time))) - i += 1 - end = time.time() - total_time = time.time() - start_time - total_time_str = str(datetime.timedelta(seconds=int(total_time))) - print('{} Total time: {}'.format(header, total_time_str)) diff --git a/cv/detection/yolov3/pytorch/common_utils/misc.py b/cv/detection/yolov3/pytorch/common_utils/misc.py deleted file mode 100644 index c9b501cf8..000000000 --- a/cv/detection/yolov3/pytorch/common_utils/misc.py +++ /dev/null @@ -1,11 +0,0 @@ -import os -import sys -import errno - - -def mkdir(path): - try: - os.makedirs(path) - except OSError as e: - if e.errno != errno.EEXIST: - raise \ No newline at end of file diff --git a/cv/detection/yolov3/pytorch/common_utils/smooth_value.py b/cv/detection/yolov3/pytorch/common_utils/smooth_value.py deleted file mode 100644 index 7c5fa1179..000000000 --- a/cv/detection/yolov3/pytorch/common_utils/smooth_value.py +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright (c) 2022 Iluvatar CoreX. All rights reserved. -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - - -from collections import defaultdict, deque -import datetime -import errno -import os -import time - -import torch -import torch.distributed as dist -from .dist import is_dist_avail_and_initialized - - -class SmoothedValue(object): - """Track a series of values and provide access to smoothed values over a - window or the global series average. - """ - - def __init__(self, window_size=20, fmt=None): - if fmt is None: - fmt = "{median:.4f} ({global_avg:.4f})" - self.deque = deque(maxlen=window_size) - self.total = 0.0 - self.count = 0 - self.fmt = fmt - - def update(self, value, n=1): - self.deque.append(value) - self.count += n - self.total += value * n - - def synchronize_between_processes(self): - """ - Warning: does not synchronize the deque! - """ - if not is_dist_avail_and_initialized(): - return - t = torch.tensor([self.count, self.total], dtype=torch.float64, device='cuda') - dist.barrier() - dist.all_reduce(t) - t = t.tolist() - self.count = int(t[0]) - self.total = t[1] - - @property - def median(self): - d = torch.tensor(list(self.deque)) - return d.median().item() - - @property - def avg(self): - d = torch.tensor(list(self.deque), dtype=torch.float32) - return d.mean().item() - - @property - def global_avg(self): - return self.total / self.count - - @property - def max(self): - return max(self.deque) - - @property - def value(self): - return self.deque[-1] - - def __str__(self): - return self.fmt.format( - median=self.median, - avg=self.avg, - global_avg=self.global_avg, - max=self.max, - value=self.value) \ No newline at end of file diff --git a/cv/detection/yolov3/pytorch/config/coco.data b/cv/detection/yolov3/pytorch/config/coco.data deleted file mode 100644 index 18beac135..000000000 --- a/cv/detection/yolov3/pytorch/config/coco.data +++ /dev/null @@ -1,6 +0,0 @@ -classes= 80 -train=data/coco/trainvalno5k.txt -valid=data/coco/5k.txt -names=data/coco.names -backup=backup/ -eval=coco diff --git a/cv/detection/yolov3/pytorch/config/create_custom_model.sh b/cv/detection/yolov3/pytorch/config/create_custom_model.sh deleted file mode 100644 index b28ec9776..000000000 --- a/cv/detection/yolov3/pytorch/config/create_custom_model.sh +++ /dev/null @@ -1,794 +0,0 @@ -#!/bin/bash - -NUM_CLASSES=$1 - -echo " -[net] -# Testing -#batch=1 -#subdivisions=1 -# Training -batch=64 -subdivisions=1 -width=416 -height=416 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=1000 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=$(expr 3 \* $(expr $NUM_CLASSES \+ 5)) -activation=linear - - -[yolo] -mask = 6,7,8 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=$NUM_CLASSES -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=$(expr 3 \* $(expr $NUM_CLASSES \+ 5)) -activation=linear - - -[yolo] -mask = 3,4,5 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=$NUM_CLASSES -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=$(expr 3 \* $(expr $NUM_CLASSES \+ 5)) -activation=linear - - -[yolo] -mask = 0,1,2 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=$NUM_CLASSES -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 -" >> yolov3-custom.cfg diff --git a/cv/detection/yolov3/pytorch/config/custom.data b/cv/detection/yolov3/pytorch/config/custom.data deleted file mode 100644 index 846fad741..000000000 --- a/cv/detection/yolov3/pytorch/config/custom.data +++ /dev/null @@ -1,4 +0,0 @@ -classes= 1 -train=data/custom/train.txt -valid=data/custom/valid.txt -names=data/custom/classes.names diff --git a/cv/detection/yolov3/pytorch/config/voc.data b/cv/detection/yolov3/pytorch/config/voc.data deleted file mode 100644 index 7e26da982..000000000 --- a/cv/detection/yolov3/pytorch/config/voc.data +++ /dev/null @@ -1,4 +0,0 @@ -classes= 20 -train=data/voc/train.txt -valid=data/voc/valid.txt -names=data/voc.names diff --git a/cv/detection/yolov3/pytorch/config/yolov3-tiny.cfg b/cv/detection/yolov3/pytorch/config/yolov3-tiny.cfg deleted file mode 100644 index 23e0bf273..000000000 --- a/cv/detection/yolov3/pytorch/config/yolov3-tiny.cfg +++ /dev/null @@ -1,206 +0,0 @@ -[net] -# Testing -#batch=1 -#subdivisions=1 -# Training -batch=32 -subdivisions=2 -width=416 -height=416 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=0 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -# 0 -[convolutional] -batch_normalize=1 -filters=16 -size=3 -stride=1 -pad=1 -activation=leaky - -# 1 -[maxpool] -size=2 -stride=2 - -# 2 -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# 3 -[maxpool] -size=2 -stride=2 - -# 4 -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -# 5 -[maxpool] -size=2 -stride=2 - -# 6 -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -# 7 -[maxpool] -size=2 -stride=2 - -# 8 -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -# 9 -[maxpool] -size=2 -stride=2 - -# 10 -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -# 11 -[maxpool] -size=2 -stride=1 - -# 12 -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -########### - -# 13 -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -# 14 -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -# 15 -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - - -# 16 -[yolo] -mask = 3,4,5 -anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319 -classes=80 -num=6 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - -# 17 -[route] -layers = -4 - -# 18 -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -# 19 -[upsample] -stride=2 - -# 20 -[route] -layers = -1, 8 - -# 21 -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -# 22 -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - -# 23 -[yolo] -mask = 1,2,3 -anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319 -classes=80 -num=6 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/cv/detection/yolov3/pytorch/config/yolov3-voc.cfg b/cv/detection/yolov3/pytorch/config/yolov3-voc.cfg deleted file mode 100644 index f026506cb..000000000 --- a/cv/detection/yolov3/pytorch/config/yolov3-voc.cfg +++ /dev/null @@ -1,790 +0,0 @@ - -[net] -# Testing -#batch=1 -#subdivisions=1 -# Training -batch=32 -subdivisions=1 -width=416 -height=416 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=1000 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=75 -activation=linear - - -[yolo] -mask = 6,7,8 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=20 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=75 -activation=linear - - -[yolo] -mask = 3,4,5 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=20 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=75 -activation=linear - - -[yolo] -mask = 0,1,2 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=20 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - diff --git a/cv/detection/yolov3/pytorch/config/yolov3.cfg b/cv/detection/yolov3/pytorch/config/yolov3.cfg deleted file mode 100644 index 799a05f91..000000000 --- a/cv/detection/yolov3/pytorch/config/yolov3.cfg +++ /dev/null @@ -1,788 +0,0 @@ -[net] -# Testing -#batch=1 -#subdivisions=1 -# Training -batch=32 -subdivisions=1 -width=416 -height=416 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=0 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 6,7,8 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 3,4,5 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 0,1,2 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/cv/detection/yolov3/pytorch/data/coco.names b/cv/detection/yolov3/pytorch/data/coco.names deleted file mode 100755 index ca76c80b5..000000000 --- a/cv/detection/yolov3/pytorch/data/coco.names +++ /dev/null @@ -1,80 +0,0 @@ -person -bicycle -car -motorbike -aeroplane -bus -train -truck -boat -traffic light -fire hydrant -stop sign -parking meter -bench -bird -cat -dog -horse -sheep -cow -elephant -bear -zebra -giraffe -backpack -umbrella -handbag -tie -suitcase -frisbee -skis -snowboard -sports ball -kite -baseball bat -baseball glove -skateboard -surfboard -tennis racket -bottle -wine glass -cup -fork -knife -spoon -bowl -banana -apple -sandwich -orange -broccoli -carrot -hot dog -pizza -donut -cake -chair -sofa -pottedplant -bed -diningtable -toilet -tvmonitor -laptop -mouse -remote -keyboard -cell phone -microwave -oven -toaster -sink -refrigerator -book -clock -vase -scissors -teddy bear -hair drier -toothbrush diff --git a/cv/detection/yolov3/pytorch/data/custom/classes.names b/cv/detection/yolov3/pytorch/data/custom/classes.names deleted file mode 100755 index 08afa186c..000000000 --- a/cv/detection/yolov3/pytorch/data/custom/classes.names +++ /dev/null @@ -1 +0,0 @@ -train diff --git a/cv/detection/yolov3/pytorch/data/custom/images/train.jpg b/cv/detection/yolov3/pytorch/data/custom/images/train.jpg deleted file mode 100755 index d8329671d085536572c6afdab8087fa9bb5473e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113300 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%0AeqMQb#*l%@kh{Ke3`LE^m>y$D|FU?vCFZ<^YoO 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 diff --git a/cv/detection/yolov3/pytorch/data/custom/labels/train.txt b/cv/detection/yolov3/pytorch/data/custom/labels/train.txt deleted file mode 100755 index 3bf4be494..000000000 --- a/cv/detection/yolov3/pytorch/data/custom/labels/train.txt +++ /dev/null @@ -1 +0,0 @@ -0 0.515 0.5 0.21694873 0.18286777 diff --git a/cv/detection/yolov3/pytorch/data/custom/train.txt b/cv/detection/yolov3/pytorch/data/custom/train.txt deleted file mode 100755 index 7fa5443e6..000000000 --- a/cv/detection/yolov3/pytorch/data/custom/train.txt +++ /dev/null @@ -1 +0,0 @@ -data/custom/images/train.jpg diff --git a/cv/detection/yolov3/pytorch/data/custom/valid.txt b/cv/detection/yolov3/pytorch/data/custom/valid.txt deleted file mode 100755 index 7fa5443e6..000000000 --- a/cv/detection/yolov3/pytorch/data/custom/valid.txt +++ /dev/null @@ -1 +0,0 @@ -data/custom/images/train.jpg diff --git a/cv/detection/yolov3/pytorch/data/get_coco_dataset.sh b/cv/detection/yolov3/pytorch/data/get_coco_dataset.sh deleted file mode 100755 index 5d1c040f6..000000000 --- a/cv/detection/yolov3/pytorch/data/get_coco_dataset.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - - -mkdir -p coco/images -cd coco/images - -# Download Images -wget -c http://10.150.9.95/swapp/datasets/cv/detection/coco2014/train2014.zip -wget -c http://10.150.9.95/swapp/datasets/cv/detection/coco2014/val2014.zip -wget -c http://10.150.9.95/swapp/datasets/cv/detection/coco2014/labels.tgz - -# Unzip -unzip -q train2014.zip -unzip -q val2014.zip -tar xzf labels.tgz - -cd .. -wget -c "https://pjreddie.com/media/files/coco/5k.part" -wget -c "https://pjreddie.com/media/files/coco/trainvalno5k.part" - - -# Set Up Image Lists -paste <(awk "{print \"$PWD\"}" <5k.part) 5k.part | tr -d '\t' > 5k.txt -paste <(awk "{print \"$PWD\"}" trainvalno5k.txt diff --git a/cv/detection/yolov3/pytorch/data/voc.names b/cv/detection/yolov3/pytorch/data/voc.names deleted file mode 100755 index 1168c3999..000000000 --- a/cv/detection/yolov3/pytorch/data/voc.names +++ /dev/null @@ -1,20 +0,0 @@ -aeroplane -bicycle -bird -boat -bottle -bus -car -cat -chair -cow -diningtable -dog -horse -motorbike -person -pottedplant -sheep -sofa -train -tvmonitor \ No newline at end of file diff --git a/cv/detection/yolov3/pytorch/data/voc/train.txt b/cv/detection/yolov3/pytorch/data/voc/train.txt deleted file mode 100755 index 89d49e3dd..000000000 --- a/cv/detection/yolov3/pytorch/data/voc/train.txt +++ /dev/null @@ -1,16551 +0,0 @@ -./VOC/train/VOCdevkit/VOC2007/images/000005.jpg -./VOC/train/VOCdevkit/VOC2007/images/000007.jpg -./VOC/train/VOCdevkit/VOC2007/images/000009.jpg -./VOC/train/VOCdevkit/VOC2007/images/000012.jpg -./VOC/train/VOCdevkit/VOC2007/images/000016.jpg -./VOC/train/VOCdevkit/VOC2007/images/000017.jpg -./VOC/train/VOCdevkit/VOC2007/images/000019.jpg -./VOC/train/VOCdevkit/VOC2007/images/000020.jpg -./VOC/train/VOCdevkit/VOC2007/images/000021.jpg -./VOC/train/VOCdevkit/VOC2007/images/000023.jpg -./VOC/train/VOCdevkit/VOC2007/images/000024.jpg -./VOC/train/VOCdevkit/VOC2007/images/000026.jpg -./VOC/train/VOCdevkit/VOC2007/images/000030.jpg -./VOC/train/VOCdevkit/VOC2007/images/000032.jpg -./VOC/train/VOCdevkit/VOC2007/images/000033.jpg -./VOC/train/VOCdevkit/VOC2007/images/000034.jpg -./VOC/train/VOCdevkit/VOC2007/images/000035.jpg -./VOC/train/VOCdevkit/VOC2007/images/000036.jpg -./VOC/train/VOCdevkit/VOC2007/images/000039.jpg -./VOC/train/VOCdevkit/VOC2007/images/000041.jpg -./VOC/train/VOCdevkit/VOC2007/images/000042.jpg -./VOC/train/VOCdevkit/VOC2007/images/000044.jpg -./VOC/train/VOCdevkit/VOC2007/images/000046.jpg -./VOC/train/VOCdevkit/VOC2007/images/000047.jpg -./VOC/train/VOCdevkit/VOC2007/images/000048.jpg -./VOC/train/VOCdevkit/VOC2007/images/000050.jpg -./VOC/train/VOCdevkit/VOC2007/images/000051.jpg -./VOC/train/VOCdevkit/VOC2007/images/000052.jpg -./VOC/train/VOCdevkit/VOC2007/images/000060.jpg -./VOC/train/VOCdevkit/VOC2007/images/000061.jpg -./VOC/train/VOCdevkit/VOC2007/images/000063.jpg -./VOC/train/VOCdevkit/VOC2007/images/000064.jpg -./VOC/train/VOCdevkit/VOC2007/images/000065.jpg -./VOC/train/VOCdevkit/VOC2007/images/000066.jpg -./VOC/train/VOCdevkit/VOC2007/images/000072.jpg -./VOC/train/VOCdevkit/VOC2007/images/000073.jpg -./VOC/train/VOCdevkit/VOC2007/images/000077.jpg -./VOC/train/VOCdevkit/VOC2007/images/000078.jpg -./VOC/train/VOCdevkit/VOC2007/images/000081.jpg -./VOC/train/VOCdevkit/VOC2007/images/000083.jpg -./VOC/train/VOCdevkit/VOC2007/images/000089.jpg -./VOC/train/VOCdevkit/VOC2007/images/000091.jpg -./VOC/train/VOCdevkit/VOC2007/images/000093.jpg -./VOC/train/VOCdevkit/VOC2007/images/000095.jpg -./VOC/train/VOCdevkit/VOC2007/images/000099.jpg -./VOC/train/VOCdevkit/VOC2007/images/000101.jpg -./VOC/train/VOCdevkit/VOC2007/images/000102.jpg -./VOC/train/VOCdevkit/VOC2007/images/000104.jpg -./VOC/train/VOCdevkit/VOC2007/images/000107.jpg -./VOC/train/VOCdevkit/VOC2007/images/000109.jpg -./VOC/train/VOCdevkit/VOC2007/images/000110.jpg -./VOC/train/VOCdevkit/VOC2007/images/000112.jpg -./VOC/train/VOCdevkit/VOC2007/images/000113.jpg -./VOC/train/VOCdevkit/VOC2007/images/000117.jpg -./VOC/train/VOCdevkit/VOC2007/images/000118.jpg -./VOC/train/VOCdevkit/VOC2007/images/000120.jpg -./VOC/train/VOCdevkit/VOC2007/images/000121.jpg -./VOC/train/VOCdevkit/VOC2007/images/000122.jpg -./VOC/train/VOCdevkit/VOC2007/images/000123.jpg -./VOC/train/VOCdevkit/VOC2007/images/000125.jpg -./VOC/train/VOCdevkit/VOC2007/images/000129.jpg -./VOC/train/VOCdevkit/VOC2007/images/000130.jpg -./VOC/train/VOCdevkit/VOC2007/images/000131.jpg -./VOC/train/VOCdevkit/VOC2007/images/000132.jpg -./VOC/train/VOCdevkit/VOC2007/images/000133.jpg -./VOC/train/VOCdevkit/VOC2007/images/000134.jpg -./VOC/train/VOCdevkit/VOC2007/images/000138.jpg -./VOC/train/VOCdevkit/VOC2007/images/000140.jpg -./VOC/train/VOCdevkit/VOC2007/images/000141.jpg -./VOC/train/VOCdevkit/VOC2007/images/000142.jpg -./VOC/train/VOCdevkit/VOC2007/images/000143.jpg -./VOC/train/VOCdevkit/VOC2007/images/000146.jpg -./VOC/train/VOCdevkit/VOC2007/images/000147.jpg -./VOC/train/VOCdevkit/VOC2007/images/000150.jpg -./VOC/train/VOCdevkit/VOC2007/images/000153.jpg -./VOC/train/VOCdevkit/VOC2007/images/000154.jpg -./VOC/train/VOCdevkit/VOC2007/images/000156.jpg -./VOC/train/VOCdevkit/VOC2007/images/000158.jpg -./VOC/train/VOCdevkit/VOC2007/images/000159.jpg -./VOC/train/VOCdevkit/VOC2007/images/000161.jpg -./VOC/train/VOCdevkit/VOC2007/images/000162.jpg -./VOC/train/VOCdevkit/VOC2007/images/000163.jpg -./VOC/train/VOCdevkit/VOC2007/images/000164.jpg -./VOC/train/VOCdevkit/VOC2007/images/000165.jpg -./VOC/train/VOCdevkit/VOC2007/images/000169.jpg -./VOC/train/VOCdevkit/VOC2007/images/000170.jpg -./VOC/train/VOCdevkit/VOC2007/images/000171.jpg -./VOC/train/VOCdevkit/VOC2007/images/000173.jpg -./VOC/train/VOCdevkit/VOC2007/images/000174.jpg -./VOC/train/VOCdevkit/VOC2007/images/000177.jpg -./VOC/train/VOCdevkit/VOC2007/images/000180.jpg -./VOC/train/VOCdevkit/VOC2007/images/000184.jpg -./VOC/train/VOCdevkit/VOC2007/images/000187.jpg -./VOC/train/VOCdevkit/VOC2007/images/000189.jpg -./VOC/train/VOCdevkit/VOC2007/images/000190.jpg -./VOC/train/VOCdevkit/VOC2007/images/000192.jpg -./VOC/train/VOCdevkit/VOC2007/images/000193.jpg -./VOC/train/VOCdevkit/VOC2007/images/000194.jpg -./VOC/train/VOCdevkit/VOC2007/images/000198.jpg -./VOC/train/VOCdevkit/VOC2007/images/000200.jpg -./VOC/train/VOCdevkit/VOC2007/images/000203.jpg -./VOC/train/VOCdevkit/VOC2007/images/000207.jpg -./VOC/train/VOCdevkit/VOC2007/images/000208.jpg -./VOC/train/VOCdevkit/VOC2007/images/000209.jpg -./VOC/train/VOCdevkit/VOC2007/images/000210.jpg -./VOC/train/VOCdevkit/VOC2007/images/000211.jpg -./VOC/train/VOCdevkit/VOC2007/images/000214.jpg -./VOC/train/VOCdevkit/VOC2007/images/000215.jpg -./VOC/train/VOCdevkit/VOC2007/images/000218.jpg -./VOC/train/VOCdevkit/VOC2007/images/000219.jpg -./VOC/train/VOCdevkit/VOC2007/images/000220.jpg -./VOC/train/VOCdevkit/VOC2007/images/000221.jpg -./VOC/train/VOCdevkit/VOC2007/images/000222.jpg -./VOC/train/VOCdevkit/VOC2007/images/000224.jpg -./VOC/train/VOCdevkit/VOC2007/images/000225.jpg -./VOC/train/VOCdevkit/VOC2007/images/000228.jpg -./VOC/train/VOCdevkit/VOC2007/images/000229.jpg -./VOC/train/VOCdevkit/VOC2007/images/000232.jpg -./VOC/train/VOCdevkit/VOC2007/images/000233.jpg -./VOC/train/VOCdevkit/VOC2007/images/000235.jpg -./VOC/train/VOCdevkit/VOC2007/images/000236.jpg -./VOC/train/VOCdevkit/VOC2007/images/000241.jpg -./VOC/train/VOCdevkit/VOC2007/images/000242.jpg -./VOC/train/VOCdevkit/VOC2007/images/000244.jpg -./VOC/train/VOCdevkit/VOC2007/images/000245.jpg -./VOC/train/VOCdevkit/VOC2007/images/000246.jpg -./VOC/train/VOCdevkit/VOC2007/images/000249.jpg -./VOC/train/VOCdevkit/VOC2007/images/000250.jpg -./VOC/train/VOCdevkit/VOC2007/images/000251.jpg -./VOC/train/VOCdevkit/VOC2007/images/000256.jpg -./VOC/train/VOCdevkit/VOC2007/images/000257.jpg -./VOC/train/VOCdevkit/VOC2007/images/000259.jpg -./VOC/train/VOCdevkit/VOC2007/images/000262.jpg -./VOC/train/VOCdevkit/VOC2007/images/000263.jpg -./VOC/train/VOCdevkit/VOC2007/images/000266.jpg -./VOC/train/VOCdevkit/VOC2007/images/000268.jpg -./VOC/train/VOCdevkit/VOC2007/images/000269.jpg -./VOC/train/VOCdevkit/VOC2007/images/000270.jpg -./VOC/train/VOCdevkit/VOC2007/images/000275.jpg -./VOC/train/VOCdevkit/VOC2007/images/000276.jpg -./VOC/train/VOCdevkit/VOC2007/images/000278.jpg -./VOC/train/VOCdevkit/VOC2007/images/000282.jpg -./VOC/train/VOCdevkit/VOC2007/images/000285.jpg -./VOC/train/VOCdevkit/VOC2007/images/000288.jpg -./VOC/train/VOCdevkit/VOC2007/images/000289.jpg -./VOC/train/VOCdevkit/VOC2007/images/000294.jpg -./VOC/train/VOCdevkit/VOC2007/images/000296.jpg -./VOC/train/VOCdevkit/VOC2007/images/000298.jpg -./VOC/train/VOCdevkit/VOC2007/images/000302.jpg -./VOC/train/VOCdevkit/VOC2007/images/000303.jpg -./VOC/train/VOCdevkit/VOC2007/images/000304.jpg -./VOC/train/VOCdevkit/VOC2007/images/000305.jpg -./VOC/train/VOCdevkit/VOC2007/images/000306.jpg -./VOC/train/VOCdevkit/VOC2007/images/000307.jpg -./VOC/train/VOCdevkit/VOC2007/images/000308.jpg -./VOC/train/VOCdevkit/VOC2007/images/000311.jpg -./VOC/train/VOCdevkit/VOC2007/images/000312.jpg -./VOC/train/VOCdevkit/VOC2007/images/000317.jpg -./VOC/train/VOCdevkit/VOC2007/images/000318.jpg -./VOC/train/VOCdevkit/VOC2007/images/000320.jpg -./VOC/train/VOCdevkit/VOC2007/images/000321.jpg -./VOC/train/VOCdevkit/VOC2007/images/000322.jpg -./VOC/train/VOCdevkit/VOC2007/images/000323.jpg -./VOC/train/VOCdevkit/VOC2007/images/000325.jpg -./VOC/train/VOCdevkit/VOC2007/images/000328.jpg -./VOC/train/VOCdevkit/VOC2007/images/000329.jpg -./VOC/train/VOCdevkit/VOC2007/images/000331.jpg -./VOC/train/VOCdevkit/VOC2007/images/000332.jpg -./VOC/train/VOCdevkit/VOC2007/images/000334.jpg -./VOC/train/VOCdevkit/VOC2007/images/000336.jpg -./VOC/train/VOCdevkit/VOC2007/images/000337.jpg -./VOC/train/VOCdevkit/VOC2007/images/000338.jpg -./VOC/train/VOCdevkit/VOC2007/images/000340.jpg -./VOC/train/VOCdevkit/VOC2007/images/000343.jpg -./VOC/train/VOCdevkit/VOC2007/images/000344.jpg -./VOC/train/VOCdevkit/VOC2007/images/000347.jpg -./VOC/train/VOCdevkit/VOC2007/images/000349.jpg -./VOC/train/VOCdevkit/VOC2007/images/000352.jpg -./VOC/train/VOCdevkit/VOC2007/images/000354.jpg -./VOC/train/VOCdevkit/VOC2007/images/000355.jpg -./VOC/train/VOCdevkit/VOC2007/images/000359.jpg -./VOC/train/VOCdevkit/VOC2007/images/000363.jpg -./VOC/train/VOCdevkit/VOC2007/images/000367.jpg -./VOC/train/VOCdevkit/VOC2007/images/000370.jpg -./VOC/train/VOCdevkit/VOC2007/images/000372.jpg -./VOC/train/VOCdevkit/VOC2007/images/000373.jpg -./VOC/train/VOCdevkit/VOC2007/images/000374.jpg -./VOC/train/VOCdevkit/VOC2007/images/000379.jpg -./VOC/train/VOCdevkit/VOC2007/images/000380.jpg -./VOC/train/VOCdevkit/VOC2007/images/000381.jpg -./VOC/train/VOCdevkit/VOC2007/images/000382.jpg -./VOC/train/VOCdevkit/VOC2007/images/000387.jpg -./VOC/train/VOCdevkit/VOC2007/images/000391.jpg -./VOC/train/VOCdevkit/VOC2007/images/000394.jpg -./VOC/train/VOCdevkit/VOC2007/images/000395.jpg -./VOC/train/VOCdevkit/VOC2007/images/000396.jpg -./VOC/train/VOCdevkit/VOC2007/images/000400.jpg -./VOC/train/VOCdevkit/VOC2007/images/000403.jpg -./VOC/train/VOCdevkit/VOC2007/images/000404.jpg -./VOC/train/VOCdevkit/VOC2007/images/000406.jpg -./VOC/train/VOCdevkit/VOC2007/images/000407.jpg -./VOC/train/VOCdevkit/VOC2007/images/000408.jpg -./VOC/train/VOCdevkit/VOC2007/images/000411.jpg -./VOC/train/VOCdevkit/VOC2007/images/000416.jpg -./VOC/train/VOCdevkit/VOC2007/images/000417.jpg -./VOC/train/VOCdevkit/VOC2007/images/000419.jpg -./VOC/train/VOCdevkit/VOC2007/images/000420.jpg -./VOC/train/VOCdevkit/VOC2007/images/000424.jpg -./VOC/train/VOCdevkit/VOC2007/images/000427.jpg -./VOC/train/VOCdevkit/VOC2007/images/000428.jpg -./VOC/train/VOCdevkit/VOC2007/images/000430.jpg -./VOC/train/VOCdevkit/VOC2007/images/000431.jpg -./VOC/train/VOCdevkit/VOC2007/images/000433.jpg -./VOC/train/VOCdevkit/VOC2007/images/000435.jpg -./VOC/train/VOCdevkit/VOC2007/images/000438.jpg -./VOC/train/VOCdevkit/VOC2007/images/000439.jpg -./VOC/train/VOCdevkit/VOC2007/images/000443.jpg -./VOC/train/VOCdevkit/VOC2007/images/000446.jpg -./VOC/train/VOCdevkit/VOC2007/images/000448.jpg -./VOC/train/VOCdevkit/VOC2007/images/000450.jpg -./VOC/train/VOCdevkit/VOC2007/images/000454.jpg -./VOC/train/VOCdevkit/VOC2007/images/000459.jpg -./VOC/train/VOCdevkit/VOC2007/images/000460.jpg -./VOC/train/VOCdevkit/VOC2007/images/000461.jpg -./VOC/train/VOCdevkit/VOC2007/images/000462.jpg -./VOC/train/VOCdevkit/VOC2007/images/000463.jpg -./VOC/train/VOCdevkit/VOC2007/images/000464.jpg -./VOC/train/VOCdevkit/VOC2007/images/000468.jpg -./VOC/train/VOCdevkit/VOC2007/images/000469.jpg -./VOC/train/VOCdevkit/VOC2007/images/000470.jpg -./VOC/train/VOCdevkit/VOC2007/images/000474.jpg -./VOC/train/VOCdevkit/VOC2007/images/000476.jpg -./VOC/train/VOCdevkit/VOC2007/images/000477.jpg -./VOC/train/VOCdevkit/VOC2007/images/000480.jpg -./VOC/train/VOCdevkit/VOC2007/images/000482.jpg -./VOC/train/VOCdevkit/VOC2007/images/000483.jpg -./VOC/train/VOCdevkit/VOC2007/images/000484.jpg -./VOC/train/VOCdevkit/VOC2007/images/000486.jpg -./VOC/train/VOCdevkit/VOC2007/images/000489.jpg -./VOC/train/VOCdevkit/VOC2007/images/000491.jpg -./VOC/train/VOCdevkit/VOC2007/images/000492.jpg -./VOC/train/VOCdevkit/VOC2007/images/000494.jpg -./VOC/train/VOCdevkit/VOC2007/images/000496.jpg -./VOC/train/VOCdevkit/VOC2007/images/000498.jpg -./VOC/train/VOCdevkit/VOC2007/images/000499.jpg -./VOC/train/VOCdevkit/VOC2007/images/000500.jpg -./VOC/train/VOCdevkit/VOC2007/images/000501.jpg -./VOC/train/VOCdevkit/VOC2007/images/000503.jpg -./VOC/train/VOCdevkit/VOC2007/images/000508.jpg -./VOC/train/VOCdevkit/VOC2007/images/000509.jpg -./VOC/train/VOCdevkit/VOC2007/images/000513.jpg -./VOC/train/VOCdevkit/VOC2007/images/000514.jpg -./VOC/train/VOCdevkit/VOC2007/images/000515.jpg -./VOC/train/VOCdevkit/VOC2007/images/000516.jpg -./VOC/train/VOCdevkit/VOC2007/images/000518.jpg -./VOC/train/VOCdevkit/VOC2007/images/000519.jpg -./VOC/train/VOCdevkit/VOC2007/images/000520.jpg -./VOC/train/VOCdevkit/VOC2007/images/000522.jpg -./VOC/train/VOCdevkit/VOC2007/images/000523.jpg -./VOC/train/VOCdevkit/VOC2007/images/000524.jpg -./VOC/train/VOCdevkit/VOC2007/images/000525.jpg -./VOC/train/VOCdevkit/VOC2007/images/000526.jpg -./VOC/train/VOCdevkit/VOC2007/images/000528.jpg -./VOC/train/VOCdevkit/VOC2007/images/000530.jpg -./VOC/train/VOCdevkit/VOC2007/images/000531.jpg -./VOC/train/VOCdevkit/VOC2007/images/000535.jpg -./VOC/train/VOCdevkit/VOC2007/images/000537.jpg -./VOC/train/VOCdevkit/VOC2007/images/000540.jpg -./VOC/train/VOCdevkit/VOC2007/images/000541.jpg -./VOC/train/VOCdevkit/VOC2007/images/000543.jpg -./VOC/train/VOCdevkit/VOC2007/images/000544.jpg -./VOC/train/VOCdevkit/VOC2007/images/000545.jpg -./VOC/train/VOCdevkit/VOC2007/images/000549.jpg -./VOC/train/VOCdevkit/VOC2007/images/000550.jpg -./VOC/train/VOCdevkit/VOC2007/images/000552.jpg -./VOC/train/VOCdevkit/VOC2007/images/000554.jpg -./VOC/train/VOCdevkit/VOC2007/images/000555.jpg -./VOC/train/VOCdevkit/VOC2007/images/000559.jpg -./VOC/train/VOCdevkit/VOC2007/images/000563.jpg -./VOC/train/VOCdevkit/VOC2007/images/000564.jpg -./VOC/train/VOCdevkit/VOC2007/images/000565.jpg -./VOC/train/VOCdevkit/VOC2007/images/000577.jpg -./VOC/train/VOCdevkit/VOC2007/images/000579.jpg -./VOC/train/VOCdevkit/VOC2007/images/000581.jpg -./VOC/train/VOCdevkit/VOC2007/images/000582.jpg -./VOC/train/VOCdevkit/VOC2007/images/000583.jpg -./VOC/train/VOCdevkit/VOC2007/images/000588.jpg -./VOC/train/VOCdevkit/VOC2007/images/000589.jpg -./VOC/train/VOCdevkit/VOC2007/images/000590.jpg -./VOC/train/VOCdevkit/VOC2007/images/000591.jpg -./VOC/train/VOCdevkit/VOC2007/images/000592.jpg -./VOC/train/VOCdevkit/VOC2007/images/000597.jpg -./VOC/train/VOCdevkit/VOC2007/images/000598.jpg -./VOC/train/VOCdevkit/VOC2007/images/000599.jpg -./VOC/train/VOCdevkit/VOC2007/images/000601.jpg -./VOC/train/VOCdevkit/VOC2007/images/000605.jpg -./VOC/train/VOCdevkit/VOC2007/images/000608.jpg -./VOC/train/VOCdevkit/VOC2007/images/000609.jpg -./VOC/train/VOCdevkit/VOC2007/images/000610.jpg -./VOC/train/VOCdevkit/VOC2007/images/000612.jpg -./VOC/train/VOCdevkit/VOC2007/images/000613.jpg -./VOC/train/VOCdevkit/VOC2007/images/000619.jpg -./VOC/train/VOCdevkit/VOC2007/images/000620.jpg -./VOC/train/VOCdevkit/VOC2007/images/000622.jpg -./VOC/train/VOCdevkit/VOC2007/images/000625.jpg -./VOC/train/VOCdevkit/VOC2007/images/000626.jpg -./VOC/train/VOCdevkit/VOC2007/images/000628.jpg -./VOC/train/VOCdevkit/VOC2007/images/000632.jpg -./VOC/train/VOCdevkit/VOC2007/images/000633.jpg -./VOC/train/VOCdevkit/VOC2007/images/000635.jpg -./VOC/train/VOCdevkit/VOC2007/images/000637.jpg -./VOC/train/VOCdevkit/VOC2007/images/000645.jpg -./VOC/train/VOCdevkit/VOC2007/images/000647.jpg -./VOC/train/VOCdevkit/VOC2007/images/000648.jpg -./VOC/train/VOCdevkit/VOC2007/images/000653.jpg -./VOC/train/VOCdevkit/VOC2007/images/000654.jpg -./VOC/train/VOCdevkit/VOC2007/images/000656.jpg -./VOC/train/VOCdevkit/VOC2007/images/000657.jpg -./VOC/train/VOCdevkit/VOC2007/images/000660.jpg -./VOC/train/VOCdevkit/VOC2007/images/000661.jpg -./VOC/train/VOCdevkit/VOC2007/images/000663.jpg -./VOC/train/VOCdevkit/VOC2007/images/000667.jpg -./VOC/train/VOCdevkit/VOC2007/images/000671.jpg -./VOC/train/VOCdevkit/VOC2007/images/000672.jpg -./VOC/train/VOCdevkit/VOC2007/images/000675.jpg -./VOC/train/VOCdevkit/VOC2007/images/000676.jpg -./VOC/train/VOCdevkit/VOC2007/images/000677.jpg -./VOC/train/VOCdevkit/VOC2007/images/000680.jpg -./VOC/train/VOCdevkit/VOC2007/images/000682.jpg -./VOC/train/VOCdevkit/VOC2007/images/000684.jpg -./VOC/train/VOCdevkit/VOC2007/images/000685.jpg -./VOC/train/VOCdevkit/VOC2007/images/000686.jpg -./VOC/train/VOCdevkit/VOC2007/images/000688.jpg -./VOC/train/VOCdevkit/VOC2007/images/000689.jpg -./VOC/train/VOCdevkit/VOC2007/images/000690.jpg -./VOC/train/VOCdevkit/VOC2007/images/000694.jpg -./VOC/train/VOCdevkit/VOC2007/images/000695.jpg -./VOC/train/VOCdevkit/VOC2007/images/000699.jpg -./VOC/train/VOCdevkit/VOC2007/images/000700.jpg -./VOC/train/VOCdevkit/VOC2007/images/000702.jpg -./VOC/train/VOCdevkit/VOC2007/images/000705.jpg -./VOC/train/VOCdevkit/VOC2007/images/000707.jpg -./VOC/train/VOCdevkit/VOC2007/images/000709.jpg -./VOC/train/VOCdevkit/VOC2007/images/000710.jpg -./VOC/train/VOCdevkit/VOC2007/images/000711.jpg -./VOC/train/VOCdevkit/VOC2007/images/000712.jpg -./VOC/train/VOCdevkit/VOC2007/images/000713.jpg -./VOC/train/VOCdevkit/VOC2007/images/000714.jpg -./VOC/train/VOCdevkit/VOC2007/images/000717.jpg -./VOC/train/VOCdevkit/VOC2007/images/000720.jpg -./VOC/train/VOCdevkit/VOC2007/images/000726.jpg -./VOC/train/VOCdevkit/VOC2007/images/000728.jpg -./VOC/train/VOCdevkit/VOC2007/images/000729.jpg -./VOC/train/VOCdevkit/VOC2007/images/000730.jpg -./VOC/train/VOCdevkit/VOC2007/images/000731.jpg -./VOC/train/VOCdevkit/VOC2007/images/000733.jpg -./VOC/train/VOCdevkit/VOC2007/images/000738.jpg -./VOC/train/VOCdevkit/VOC2007/images/000739.jpg -./VOC/train/VOCdevkit/VOC2007/images/000740.jpg -./VOC/train/VOCdevkit/VOC2007/images/000742.jpg -./VOC/train/VOCdevkit/VOC2007/images/000746.jpg -./VOC/train/VOCdevkit/VOC2007/images/000748.jpg -./VOC/train/VOCdevkit/VOC2007/images/000750.jpg -./VOC/train/VOCdevkit/VOC2007/images/000752.jpg -./VOC/train/VOCdevkit/VOC2007/images/000753.jpg -./VOC/train/VOCdevkit/VOC2007/images/000754.jpg -./VOC/train/VOCdevkit/VOC2007/images/000755.jpg -./VOC/train/VOCdevkit/VOC2007/images/000756.jpg -./VOC/train/VOCdevkit/VOC2007/images/000760.jpg -./VOC/train/VOCdevkit/VOC2007/images/000761.jpg -./VOC/train/VOCdevkit/VOC2007/images/000763.jpg -./VOC/train/VOCdevkit/VOC2007/images/000764.jpg -./VOC/train/VOCdevkit/VOC2007/images/000767.jpg -./VOC/train/VOCdevkit/VOC2007/images/000768.jpg -./VOC/train/VOCdevkit/VOC2007/images/000770.jpg -./VOC/train/VOCdevkit/VOC2007/images/000771.jpg -./VOC/train/VOCdevkit/VOC2007/images/000772.jpg -./VOC/train/VOCdevkit/VOC2007/images/000774.jpg -./VOC/train/VOCdevkit/VOC2007/images/000776.jpg -./VOC/train/VOCdevkit/VOC2007/images/000777.jpg -./VOC/train/VOCdevkit/VOC2007/images/000780.jpg -./VOC/train/VOCdevkit/VOC2007/images/000782.jpg -./VOC/train/VOCdevkit/VOC2007/images/000786.jpg -./VOC/train/VOCdevkit/VOC2007/images/000787.jpg -./VOC/train/VOCdevkit/VOC2007/images/000791.jpg -./VOC/train/VOCdevkit/VOC2007/images/000793.jpg -./VOC/train/VOCdevkit/VOC2007/images/000794.jpg -./VOC/train/VOCdevkit/VOC2007/images/000796.jpg -./VOC/train/VOCdevkit/VOC2007/images/000797.jpg -./VOC/train/VOCdevkit/VOC2007/images/000799.jpg -./VOC/train/VOCdevkit/VOC2007/images/000800.jpg -./VOC/train/VOCdevkit/VOC2007/images/000802.jpg -./VOC/train/VOCdevkit/VOC2007/images/000804.jpg -./VOC/train/VOCdevkit/VOC2007/images/000805.jpg -./VOC/train/VOCdevkit/VOC2007/images/000806.jpg -./VOC/train/VOCdevkit/VOC2007/images/000808.jpg -./VOC/train/VOCdevkit/VOC2007/images/000810.jpg -./VOC/train/VOCdevkit/VOC2007/images/000812.jpg -./VOC/train/VOCdevkit/VOC2007/images/000814.jpg -./VOC/train/VOCdevkit/VOC2007/images/000815.jpg -./VOC/train/VOCdevkit/VOC2007/images/000816.jpg -./VOC/train/VOCdevkit/VOC2007/images/000818.jpg -./VOC/train/VOCdevkit/VOC2007/images/000820.jpg -./VOC/train/VOCdevkit/VOC2007/images/000822.jpg -./VOC/train/VOCdevkit/VOC2007/images/000823.jpg -./VOC/train/VOCdevkit/VOC2007/images/000826.jpg -./VOC/train/VOCdevkit/VOC2007/images/000827.jpg -./VOC/train/VOCdevkit/VOC2007/images/000828.jpg -./VOC/train/VOCdevkit/VOC2007/images/000829.jpg -./VOC/train/VOCdevkit/VOC2007/images/000830.jpg -./VOC/train/VOCdevkit/VOC2007/images/000831.jpg -./VOC/train/VOCdevkit/VOC2007/images/000832.jpg -./VOC/train/VOCdevkit/VOC2007/images/000834.jpg -./VOC/train/VOCdevkit/VOC2007/images/000842.jpg -./VOC/train/VOCdevkit/VOC2007/images/000843.jpg -./VOC/train/VOCdevkit/VOC2007/images/000845.jpg -./VOC/train/VOCdevkit/VOC2007/images/000847.jpg -./VOC/train/VOCdevkit/VOC2007/images/000848.jpg -./VOC/train/VOCdevkit/VOC2007/images/000849.jpg -./VOC/train/VOCdevkit/VOC2007/images/000850.jpg -./VOC/train/VOCdevkit/VOC2007/images/000851.jpg -./VOC/train/VOCdevkit/VOC2007/images/000854.jpg -./VOC/train/VOCdevkit/VOC2007/images/000855.jpg -./VOC/train/VOCdevkit/VOC2007/images/000857.jpg -./VOC/train/VOCdevkit/VOC2007/images/000859.jpg -./VOC/train/VOCdevkit/VOC2007/images/000860.jpg -./VOC/train/VOCdevkit/VOC2007/images/000862.jpg -./VOC/train/VOCdevkit/VOC2007/images/000863.jpg -./VOC/train/VOCdevkit/VOC2007/images/000865.jpg -./VOC/train/VOCdevkit/VOC2007/images/000867.jpg -./VOC/train/VOCdevkit/VOC2007/images/000868.jpg -./VOC/train/VOCdevkit/VOC2007/images/000871.jpg -./VOC/train/VOCdevkit/VOC2007/images/000872.jpg -./VOC/train/VOCdevkit/VOC2007/images/000874.jpg -./VOC/train/VOCdevkit/VOC2007/images/000876.jpg -./VOC/train/VOCdevkit/VOC2007/images/000878.jpg -./VOC/train/VOCdevkit/VOC2007/images/000879.jpg -./VOC/train/VOCdevkit/VOC2007/images/000880.jpg -./VOC/train/VOCdevkit/VOC2007/images/000882.jpg -./VOC/train/VOCdevkit/VOC2007/images/000885.jpg -./VOC/train/VOCdevkit/VOC2007/images/000887.jpg -./VOC/train/VOCdevkit/VOC2007/images/000888.jpg -./VOC/train/VOCdevkit/VOC2007/images/000889.jpg -./VOC/train/VOCdevkit/VOC2007/images/000892.jpg -./VOC/train/VOCdevkit/VOC2007/images/000895.jpg -./VOC/train/VOCdevkit/VOC2007/images/000896.jpg -./VOC/train/VOCdevkit/VOC2007/images/000898.jpg -./VOC/train/VOCdevkit/VOC2007/images/000899.jpg -./VOC/train/VOCdevkit/VOC2007/images/000900.jpg -./VOC/train/VOCdevkit/VOC2007/images/000902.jpg -./VOC/train/VOCdevkit/VOC2007/images/000903.jpg -./VOC/train/VOCdevkit/VOC2007/images/000904.jpg -./VOC/train/VOCdevkit/VOC2007/images/000906.jpg -./VOC/train/VOCdevkit/VOC2007/images/000908.jpg -./VOC/train/VOCdevkit/VOC2007/images/000911.jpg -./VOC/train/VOCdevkit/VOC2007/images/000912.jpg -./VOC/train/VOCdevkit/VOC2007/images/000915.jpg -./VOC/train/VOCdevkit/VOC2007/images/000917.jpg -./VOC/train/VOCdevkit/VOC2007/images/000918.jpg -./VOC/train/VOCdevkit/VOC2007/images/000919.jpg -./VOC/train/VOCdevkit/VOC2007/images/000920.jpg -./VOC/train/VOCdevkit/VOC2007/images/000921.jpg -./VOC/train/VOCdevkit/VOC2007/images/000923.jpg -./VOC/train/VOCdevkit/VOC2007/images/000926.jpg -./VOC/train/VOCdevkit/VOC2007/images/000929.jpg -./VOC/train/VOCdevkit/VOC2007/images/000931.jpg -./VOC/train/VOCdevkit/VOC2007/images/000934.jpg -./VOC/train/VOCdevkit/VOC2007/images/000935.jpg -./VOC/train/VOCdevkit/VOC2007/images/000936.jpg -./VOC/train/VOCdevkit/VOC2007/images/000937.jpg -./VOC/train/VOCdevkit/VOC2007/images/000943.jpg -./VOC/train/VOCdevkit/VOC2007/images/000946.jpg -./VOC/train/VOCdevkit/VOC2007/images/000947.jpg -./VOC/train/VOCdevkit/VOC2007/images/000948.jpg -./VOC/train/VOCdevkit/VOC2007/images/000949.jpg -./VOC/train/VOCdevkit/VOC2007/images/000950.jpg -./VOC/train/VOCdevkit/VOC2007/images/000951.jpg -./VOC/train/VOCdevkit/VOC2007/images/000954.jpg -./VOC/train/VOCdevkit/VOC2007/images/000958.jpg -./VOC/train/VOCdevkit/VOC2007/images/000962.jpg -./VOC/train/VOCdevkit/VOC2007/images/000964.jpg -./VOC/train/VOCdevkit/VOC2007/images/000965.jpg -./VOC/train/VOCdevkit/VOC2007/images/000966.jpg -./VOC/train/VOCdevkit/VOC2007/images/000967.jpg -./VOC/train/VOCdevkit/VOC2007/images/000971.jpg -./VOC/train/VOCdevkit/VOC2007/images/000972.jpg -./VOC/train/VOCdevkit/VOC2007/images/000973.jpg -./VOC/train/VOCdevkit/VOC2007/images/000977.jpg -./VOC/train/VOCdevkit/VOC2007/images/000980.jpg -./VOC/train/VOCdevkit/VOC2007/images/000982.jpg -./VOC/train/VOCdevkit/VOC2007/images/000987.jpg -./VOC/train/VOCdevkit/VOC2007/images/000989.jpg -./VOC/train/VOCdevkit/VOC2007/images/000991.jpg -./VOC/train/VOCdevkit/VOC2007/images/000993.jpg -./VOC/train/VOCdevkit/VOC2007/images/000996.jpg -./VOC/train/VOCdevkit/VOC2007/images/000997.jpg -./VOC/train/VOCdevkit/VOC2007/images/000999.jpg -./VOC/train/VOCdevkit/VOC2007/images/001001.jpg -./VOC/train/VOCdevkit/VOC2007/images/001002.jpg -./VOC/train/VOCdevkit/VOC2007/images/001004.jpg -./VOC/train/VOCdevkit/VOC2007/images/001008.jpg -./VOC/train/VOCdevkit/VOC2007/images/001009.jpg -./VOC/train/VOCdevkit/VOC2007/images/001010.jpg -./VOC/train/VOCdevkit/VOC2007/images/001011.jpg -./VOC/train/VOCdevkit/VOC2007/images/001012.jpg -./VOC/train/VOCdevkit/VOC2007/images/001014.jpg -./VOC/train/VOCdevkit/VOC2007/images/001015.jpg -./VOC/train/VOCdevkit/VOC2007/images/001017.jpg -./VOC/train/VOCdevkit/VOC2007/images/001018.jpg -./VOC/train/VOCdevkit/VOC2007/images/001024.jpg -./VOC/train/VOCdevkit/VOC2007/images/001027.jpg -./VOC/train/VOCdevkit/VOC2007/images/001028.jpg -./VOC/train/VOCdevkit/VOC2007/images/001036.jpg -./VOC/train/VOCdevkit/VOC2007/images/001041.jpg -./VOC/train/VOCdevkit/VOC2007/images/001042.jpg -./VOC/train/VOCdevkit/VOC2007/images/001043.jpg -./VOC/train/VOCdevkit/VOC2007/images/001045.jpg -./VOC/train/VOCdevkit/VOC2007/images/001050.jpg -./VOC/train/VOCdevkit/VOC2007/images/001052.jpg -./VOC/train/VOCdevkit/VOC2007/images/001053.jpg -./VOC/train/VOCdevkit/VOC2007/images/001056.jpg -./VOC/train/VOCdevkit/VOC2007/images/001057.jpg -./VOC/train/VOCdevkit/VOC2007/images/001060.jpg -./VOC/train/VOCdevkit/VOC2007/images/001061.jpg -./VOC/train/VOCdevkit/VOC2007/images/001062.jpg -./VOC/train/VOCdevkit/VOC2007/images/001064.jpg -./VOC/train/VOCdevkit/VOC2007/images/001066.jpg -./VOC/train/VOCdevkit/VOC2007/images/001068.jpg -./VOC/train/VOCdevkit/VOC2007/images/001069.jpg -./VOC/train/VOCdevkit/VOC2007/images/001071.jpg -./VOC/train/VOCdevkit/VOC2007/images/001072.jpg -./VOC/train/VOCdevkit/VOC2007/images/001073.jpg -./VOC/train/VOCdevkit/VOC2007/images/001074.jpg -./VOC/train/VOCdevkit/VOC2007/images/001077.jpg -./VOC/train/VOCdevkit/VOC2007/images/001078.jpg -./VOC/train/VOCdevkit/VOC2007/images/001079.jpg -./VOC/train/VOCdevkit/VOC2007/images/001082.jpg -./VOC/train/VOCdevkit/VOC2007/images/001083.jpg -./VOC/train/VOCdevkit/VOC2007/images/001084.jpg -./VOC/train/VOCdevkit/VOC2007/images/001091.jpg -./VOC/train/VOCdevkit/VOC2007/images/001092.jpg -./VOC/train/VOCdevkit/VOC2007/images/001093.jpg -./VOC/train/VOCdevkit/VOC2007/images/001097.jpg -./VOC/train/VOCdevkit/VOC2007/images/001101.jpg -./VOC/train/VOCdevkit/VOC2007/images/001102.jpg -./VOC/train/VOCdevkit/VOC2007/images/001104.jpg -./VOC/train/VOCdevkit/VOC2007/images/001106.jpg -./VOC/train/VOCdevkit/VOC2007/images/001107.jpg -./VOC/train/VOCdevkit/VOC2007/images/001109.jpg -./VOC/train/VOCdevkit/VOC2007/images/001110.jpg -./VOC/train/VOCdevkit/VOC2007/images/001112.jpg -./VOC/train/VOCdevkit/VOC2007/images/001113.jpg -./VOC/train/VOCdevkit/VOC2007/images/001119.jpg -./VOC/train/VOCdevkit/VOC2007/images/001121.jpg -./VOC/train/VOCdevkit/VOC2007/images/001124.jpg -./VOC/train/VOCdevkit/VOC2007/images/001125.jpg -./VOC/train/VOCdevkit/VOC2007/images/001127.jpg -./VOC/train/VOCdevkit/VOC2007/images/001129.jpg -./VOC/train/VOCdevkit/VOC2007/images/001130.jpg -./VOC/train/VOCdevkit/VOC2007/images/001136.jpg -./VOC/train/VOCdevkit/VOC2007/images/001137.jpg -./VOC/train/VOCdevkit/VOC2007/images/001140.jpg -./VOC/train/VOCdevkit/VOC2007/images/001142.jpg -./VOC/train/VOCdevkit/VOC2007/images/001143.jpg -./VOC/train/VOCdevkit/VOC2007/images/001144.jpg -./VOC/train/VOCdevkit/VOC2007/images/001145.jpg -./VOC/train/VOCdevkit/VOC2007/images/001147.jpg -./VOC/train/VOCdevkit/VOC2007/images/001148.jpg -./VOC/train/VOCdevkit/VOC2007/images/001149.jpg -./VOC/train/VOCdevkit/VOC2007/images/001151.jpg -./VOC/train/VOCdevkit/VOC2007/images/001152.jpg -./VOC/train/VOCdevkit/VOC2007/images/001154.jpg -./VOC/train/VOCdevkit/VOC2007/images/001156.jpg -./VOC/train/VOCdevkit/VOC2007/images/001158.jpg -./VOC/train/VOCdevkit/VOC2007/images/001160.jpg -./VOC/train/VOCdevkit/VOC2007/images/001161.jpg -./VOC/train/VOCdevkit/VOC2007/images/001164.jpg -./VOC/train/VOCdevkit/VOC2007/images/001166.jpg -./VOC/train/VOCdevkit/VOC2007/images/001168.jpg -./VOC/train/VOCdevkit/VOC2007/images/001170.jpg -./VOC/train/VOCdevkit/VOC2007/images/001171.jpg -./VOC/train/VOCdevkit/VOC2007/images/001172.jpg -./VOC/train/VOCdevkit/VOC2007/images/001174.jpg -./VOC/train/VOCdevkit/VOC2007/images/001175.jpg -./VOC/train/VOCdevkit/VOC2007/images/001176.jpg -./VOC/train/VOCdevkit/VOC2007/images/001182.jpg -./VOC/train/VOCdevkit/VOC2007/images/001184.jpg -./VOC/train/VOCdevkit/VOC2007/images/001185.jpg -./VOC/train/VOCdevkit/VOC2007/images/001186.jpg -./VOC/train/VOCdevkit/VOC2007/images/001187.jpg -./VOC/train/VOCdevkit/VOC2007/images/001191.jpg -./VOC/train/VOCdevkit/VOC2007/images/001192.jpg -./VOC/train/VOCdevkit/VOC2007/images/001194.jpg -./VOC/train/VOCdevkit/VOC2007/images/001199.jpg -./VOC/train/VOCdevkit/VOC2007/images/001200.jpg -./VOC/train/VOCdevkit/VOC2007/images/001201.jpg -./VOC/train/VOCdevkit/VOC2007/images/001203.jpg -./VOC/train/VOCdevkit/VOC2007/images/001204.jpg -./VOC/train/VOCdevkit/VOC2007/images/001205.jpg -./VOC/train/VOCdevkit/VOC2007/images/001206.jpg -./VOC/train/VOCdevkit/VOC2007/images/001207.jpg -./VOC/train/VOCdevkit/VOC2007/images/001209.jpg -./VOC/train/VOCdevkit/VOC2007/images/001211.jpg -./VOC/train/VOCdevkit/VOC2007/images/001212.jpg -./VOC/train/VOCdevkit/VOC2007/images/001214.jpg -./VOC/train/VOCdevkit/VOC2007/images/001215.jpg -./VOC/train/VOCdevkit/VOC2007/images/001221.jpg -./VOC/train/VOCdevkit/VOC2007/images/001224.jpg -./VOC/train/VOCdevkit/VOC2007/images/001225.jpg -./VOC/train/VOCdevkit/VOC2007/images/001226.jpg -./VOC/train/VOCdevkit/VOC2007/images/001229.jpg -./VOC/train/VOCdevkit/VOC2007/images/001230.jpg -./VOC/train/VOCdevkit/VOC2007/images/001231.jpg -./VOC/train/VOCdevkit/VOC2007/images/001233.jpg -./VOC/train/VOCdevkit/VOC2007/images/001234.jpg -./VOC/train/VOCdevkit/VOC2007/images/001236.jpg -./VOC/train/VOCdevkit/VOC2007/images/001237.jpg -./VOC/train/VOCdevkit/VOC2007/images/001239.jpg -./VOC/train/VOCdevkit/VOC2007/images/001240.jpg -./VOC/train/VOCdevkit/VOC2007/images/001241.jpg -./VOC/train/VOCdevkit/VOC2007/images/001247.jpg -./VOC/train/VOCdevkit/VOC2007/images/001248.jpg -./VOC/train/VOCdevkit/VOC2007/images/001250.jpg -./VOC/train/VOCdevkit/VOC2007/images/001254.jpg -./VOC/train/VOCdevkit/VOC2007/images/001258.jpg -./VOC/train/VOCdevkit/VOC2007/images/001259.jpg -./VOC/train/VOCdevkit/VOC2007/images/001260.jpg -./VOC/train/VOCdevkit/VOC2007/images/001263.jpg -./VOC/train/VOCdevkit/VOC2007/images/001265.jpg -./VOC/train/VOCdevkit/VOC2007/images/001266.jpg -./VOC/train/VOCdevkit/VOC2007/images/001268.jpg -./VOC/train/VOCdevkit/VOC2007/images/001269.jpg -./VOC/train/VOCdevkit/VOC2007/images/001270.jpg -./VOC/train/VOCdevkit/VOC2007/images/001272.jpg -./VOC/train/VOCdevkit/VOC2007/images/001273.jpg -./VOC/train/VOCdevkit/VOC2007/images/001274.jpg -./VOC/train/VOCdevkit/VOC2007/images/001277.jpg -./VOC/train/VOCdevkit/VOC2007/images/001279.jpg -./VOC/train/VOCdevkit/VOC2007/images/001281.jpg -./VOC/train/VOCdevkit/VOC2007/images/001284.jpg -./VOC/train/VOCdevkit/VOC2007/images/001286.jpg -./VOC/train/VOCdevkit/VOC2007/images/001287.jpg -./VOC/train/VOCdevkit/VOC2007/images/001288.jpg -./VOC/train/VOCdevkit/VOC2007/images/001289.jpg -./VOC/train/VOCdevkit/VOC2007/images/001290.jpg -./VOC/train/VOCdevkit/VOC2007/images/001292.jpg -./VOC/train/VOCdevkit/VOC2007/images/001293.jpg -./VOC/train/VOCdevkit/VOC2007/images/001294.jpg -./VOC/train/VOCdevkit/VOC2007/images/001298.jpg -./VOC/train/VOCdevkit/VOC2007/images/001299.jpg -./VOC/train/VOCdevkit/VOC2007/images/001304.jpg -./VOC/train/VOCdevkit/VOC2007/images/001309.jpg -./VOC/train/VOCdevkit/VOC2007/images/001310.jpg -./VOC/train/VOCdevkit/VOC2007/images/001311.jpg -./VOC/train/VOCdevkit/VOC2007/images/001312.jpg -./VOC/train/VOCdevkit/VOC2007/images/001314.jpg -./VOC/train/VOCdevkit/VOC2007/images/001315.jpg -./VOC/train/VOCdevkit/VOC2007/images/001316.jpg -./VOC/train/VOCdevkit/VOC2007/images/001323.jpg -./VOC/train/VOCdevkit/VOC2007/images/001324.jpg -./VOC/train/VOCdevkit/VOC2007/images/001325.jpg -./VOC/train/VOCdevkit/VOC2007/images/001326.jpg -./VOC/train/VOCdevkit/VOC2007/images/001327.jpg -./VOC/train/VOCdevkit/VOC2007/images/001330.jpg -./VOC/train/VOCdevkit/VOC2007/images/001332.jpg -./VOC/train/VOCdevkit/VOC2007/images/001333.jpg -./VOC/train/VOCdevkit/VOC2007/images/001334.jpg -./VOC/train/VOCdevkit/VOC2007/images/001337.jpg -./VOC/train/VOCdevkit/VOC2007/images/001341.jpg -./VOC/train/VOCdevkit/VOC2007/images/001343.jpg -./VOC/train/VOCdevkit/VOC2007/images/001345.jpg -./VOC/train/VOCdevkit/VOC2007/images/001346.jpg -./VOC/train/VOCdevkit/VOC2007/images/001348.jpg -./VOC/train/VOCdevkit/VOC2007/images/001350.jpg -./VOC/train/VOCdevkit/VOC2007/images/001352.jpg -./VOC/train/VOCdevkit/VOC2007/images/001360.jpg -./VOC/train/VOCdevkit/VOC2007/images/001361.jpg -./VOC/train/VOCdevkit/VOC2007/images/001362.jpg -./VOC/train/VOCdevkit/VOC2007/images/001364.jpg -./VOC/train/VOCdevkit/VOC2007/images/001365.jpg -./VOC/train/VOCdevkit/VOC2007/images/001371.jpg -./VOC/train/VOCdevkit/VOC2007/images/001375.jpg -./VOC/train/VOCdevkit/VOC2007/images/001378.jpg -./VOC/train/VOCdevkit/VOC2007/images/001383.jpg -./VOC/train/VOCdevkit/VOC2007/images/001384.jpg -./VOC/train/VOCdevkit/VOC2007/images/001385.jpg -./VOC/train/VOCdevkit/VOC2007/images/001386.jpg -./VOC/train/VOCdevkit/VOC2007/images/001387.jpg -./VOC/train/VOCdevkit/VOC2007/images/001388.jpg -./VOC/train/VOCdevkit/VOC2007/images/001390.jpg -./VOC/train/VOCdevkit/VOC2007/images/001393.jpg -./VOC/train/VOCdevkit/VOC2007/images/001395.jpg -./VOC/train/VOCdevkit/VOC2007/images/001397.jpg -./VOC/train/VOCdevkit/VOC2007/images/001400.jpg -./VOC/train/VOCdevkit/VOC2007/images/001402.jpg -./VOC/train/VOCdevkit/VOC2007/images/001404.jpg -./VOC/train/VOCdevkit/VOC2007/images/001405.jpg -./VOC/train/VOCdevkit/VOC2007/images/001406.jpg -./VOC/train/VOCdevkit/VOC2007/images/001408.jpg -./VOC/train/VOCdevkit/VOC2007/images/001409.jpg -./VOC/train/VOCdevkit/VOC2007/images/001413.jpg -./VOC/train/VOCdevkit/VOC2007/images/001414.jpg -./VOC/train/VOCdevkit/VOC2007/images/001418.jpg -./VOC/train/VOCdevkit/VOC2007/images/001420.jpg -./VOC/train/VOCdevkit/VOC2007/images/001421.jpg -./VOC/train/VOCdevkit/VOC2007/images/001426.jpg -./VOC/train/VOCdevkit/VOC2007/images/001427.jpg -./VOC/train/VOCdevkit/VOC2007/images/001430.jpg -./VOC/train/VOCdevkit/VOC2007/images/001432.jpg -./VOC/train/VOCdevkit/VOC2007/images/001434.jpg -./VOC/train/VOCdevkit/VOC2007/images/001436.jpg -./VOC/train/VOCdevkit/VOC2007/images/001439.jpg -./VOC/train/VOCdevkit/VOC2007/images/001441.jpg -./VOC/train/VOCdevkit/VOC2007/images/001442.jpg -./VOC/train/VOCdevkit/VOC2007/images/001443.jpg -./VOC/train/VOCdevkit/VOC2007/images/001444.jpg -./VOC/train/VOCdevkit/VOC2007/images/001445.jpg -./VOC/train/VOCdevkit/VOC2007/images/001450.jpg -./VOC/train/VOCdevkit/VOC2007/images/001451.jpg -./VOC/train/VOCdevkit/VOC2007/images/001453.jpg -./VOC/train/VOCdevkit/VOC2007/images/001455.jpg -./VOC/train/VOCdevkit/VOC2007/images/001457.jpg -./VOC/train/VOCdevkit/VOC2007/images/001460.jpg -./VOC/train/VOCdevkit/VOC2007/images/001463.jpg -./VOC/train/VOCdevkit/VOC2007/images/001464.jpg -./VOC/train/VOCdevkit/VOC2007/images/001465.jpg -./VOC/train/VOCdevkit/VOC2007/images/001466.jpg -./VOC/train/VOCdevkit/VOC2007/images/001467.jpg -./VOC/train/VOCdevkit/VOC2007/images/001468.jpg -./VOC/train/VOCdevkit/VOC2007/images/001470.jpg -./VOC/train/VOCdevkit/VOC2007/images/001472.jpg -./VOC/train/VOCdevkit/VOC2007/images/001475.jpg -./VOC/train/VOCdevkit/VOC2007/images/001479.jpg -./VOC/train/VOCdevkit/VOC2007/images/001480.jpg -./VOC/train/VOCdevkit/VOC2007/images/001481.jpg -./VOC/train/VOCdevkit/VOC2007/images/001483.jpg -./VOC/train/VOCdevkit/VOC2007/images/001484.jpg -./VOC/train/VOCdevkit/VOC2007/images/001485.jpg -./VOC/train/VOCdevkit/VOC2007/images/001486.jpg -./VOC/train/VOCdevkit/VOC2007/images/001488.jpg -./VOC/train/VOCdevkit/VOC2007/images/001490.jpg -./VOC/train/VOCdevkit/VOC2007/images/001492.jpg -./VOC/train/VOCdevkit/VOC2007/images/001493.jpg -./VOC/train/VOCdevkit/VOC2007/images/001494.jpg -./VOC/train/VOCdevkit/VOC2007/images/001497.jpg -./VOC/train/VOCdevkit/VOC2007/images/001498.jpg -./VOC/train/VOCdevkit/VOC2007/images/001499.jpg -./VOC/train/VOCdevkit/VOC2007/images/001501.jpg -./VOC/train/VOCdevkit/VOC2007/images/001504.jpg -./VOC/train/VOCdevkit/VOC2007/images/001509.jpg -./VOC/train/VOCdevkit/VOC2007/images/001510.jpg -./VOC/train/VOCdevkit/VOC2007/images/001512.jpg -./VOC/train/VOCdevkit/VOC2007/images/001514.jpg -./VOC/train/VOCdevkit/VOC2007/images/001515.jpg -./VOC/train/VOCdevkit/VOC2007/images/001517.jpg -./VOC/train/VOCdevkit/VOC2007/images/001521.jpg -./VOC/train/VOCdevkit/VOC2007/images/001522.jpg -./VOC/train/VOCdevkit/VOC2007/images/001523.jpg -./VOC/train/VOCdevkit/VOC2007/images/001524.jpg -./VOC/train/VOCdevkit/VOC2007/images/001526.jpg -./VOC/train/VOCdevkit/VOC2007/images/001528.jpg -./VOC/train/VOCdevkit/VOC2007/images/001529.jpg -./VOC/train/VOCdevkit/VOC2007/images/001531.jpg -./VOC/train/VOCdevkit/VOC2007/images/001532.jpg -./VOC/train/VOCdevkit/VOC2007/images/001536.jpg -./VOC/train/VOCdevkit/VOC2007/images/001537.jpg -./VOC/train/VOCdevkit/VOC2007/images/001539.jpg -./VOC/train/VOCdevkit/VOC2007/images/001541.jpg -./VOC/train/VOCdevkit/VOC2007/images/001543.jpg -./VOC/train/VOCdevkit/VOC2007/images/001544.jpg -./VOC/train/VOCdevkit/VOC2007/images/001545.jpg -./VOC/train/VOCdevkit/VOC2007/images/001548.jpg -./VOC/train/VOCdevkit/VOC2007/images/001553.jpg -./VOC/train/VOCdevkit/VOC2007/images/001554.jpg -./VOC/train/VOCdevkit/VOC2007/images/001555.jpg -./VOC/train/VOCdevkit/VOC2007/images/001556.jpg -./VOC/train/VOCdevkit/VOC2007/images/001557.jpg -./VOC/train/VOCdevkit/VOC2007/images/001559.jpg -./VOC/train/VOCdevkit/VOC2007/images/001561.jpg -./VOC/train/VOCdevkit/VOC2007/images/001563.jpg -./VOC/train/VOCdevkit/VOC2007/images/001565.jpg -./VOC/train/VOCdevkit/VOC2007/images/001571.jpg -./VOC/train/VOCdevkit/VOC2007/images/001576.jpg -./VOC/train/VOCdevkit/VOC2007/images/001577.jpg -./VOC/train/VOCdevkit/VOC2007/images/001579.jpg -./VOC/train/VOCdevkit/VOC2007/images/001580.jpg -./VOC/train/VOCdevkit/VOC2007/images/001582.jpg -./VOC/train/VOCdevkit/VOC2007/images/001586.jpg -./VOC/train/VOCdevkit/VOC2007/images/001588.jpg -./VOC/train/VOCdevkit/VOC2007/images/001590.jpg -./VOC/train/VOCdevkit/VOC2007/images/001593.jpg -./VOC/train/VOCdevkit/VOC2007/images/001594.jpg -./VOC/train/VOCdevkit/VOC2007/images/001595.jpg -./VOC/train/VOCdevkit/VOC2007/images/001597.jpg -./VOC/train/VOCdevkit/VOC2007/images/001598.jpg -./VOC/train/VOCdevkit/VOC2007/images/001603.jpg -./VOC/train/VOCdevkit/VOC2007/images/001604.jpg -./VOC/train/VOCdevkit/VOC2007/images/001607.jpg -./VOC/train/VOCdevkit/VOC2007/images/001608.jpg -./VOC/train/VOCdevkit/VOC2007/images/001610.jpg -./VOC/train/VOCdevkit/VOC2007/images/001611.jpg -./VOC/train/VOCdevkit/VOC2007/images/001612.jpg -./VOC/train/VOCdevkit/VOC2007/images/001614.jpg -./VOC/train/VOCdevkit/VOC2007/images/001617.jpg -./VOC/train/VOCdevkit/VOC2007/images/001618.jpg -./VOC/train/VOCdevkit/VOC2007/images/001622.jpg -./VOC/train/VOCdevkit/VOC2007/images/001627.jpg -./VOC/train/VOCdevkit/VOC2007/images/001628.jpg -./VOC/train/VOCdevkit/VOC2007/images/001630.jpg -./VOC/train/VOCdevkit/VOC2007/images/001632.jpg -./VOC/train/VOCdevkit/VOC2007/images/001633.jpg -./VOC/train/VOCdevkit/VOC2007/images/001636.jpg -./VOC/train/VOCdevkit/VOC2007/images/001638.jpg -./VOC/train/VOCdevkit/VOC2007/images/001640.jpg -./VOC/train/VOCdevkit/VOC2007/images/001642.jpg -./VOC/train/VOCdevkit/VOC2007/images/001643.jpg -./VOC/train/VOCdevkit/VOC2007/images/001647.jpg -./VOC/train/VOCdevkit/VOC2007/images/001649.jpg -./VOC/train/VOCdevkit/VOC2007/images/001650.jpg -./VOC/train/VOCdevkit/VOC2007/images/001651.jpg -./VOC/train/VOCdevkit/VOC2007/images/001653.jpg -./VOC/train/VOCdevkit/VOC2007/images/001654.jpg -./VOC/train/VOCdevkit/VOC2007/images/001661.jpg -./VOC/train/VOCdevkit/VOC2007/images/001662.jpg -./VOC/train/VOCdevkit/VOC2007/images/001669.jpg -./VOC/train/VOCdevkit/VOC2007/images/001673.jpg -./VOC/train/VOCdevkit/VOC2007/images/001675.jpg -./VOC/train/VOCdevkit/VOC2007/images/001676.jpg -./VOC/train/VOCdevkit/VOC2007/images/001677.jpg -./VOC/train/VOCdevkit/VOC2007/images/001678.jpg -./VOC/train/VOCdevkit/VOC2007/images/001680.jpg -./VOC/train/VOCdevkit/VOC2007/images/001682.jpg -./VOC/train/VOCdevkit/VOC2007/images/001683.jpg -./VOC/train/VOCdevkit/VOC2007/images/001684.jpg -./VOC/train/VOCdevkit/VOC2007/images/001685.jpg -./VOC/train/VOCdevkit/VOC2007/images/001686.jpg -./VOC/train/VOCdevkit/VOC2007/images/001688.jpg -./VOC/train/VOCdevkit/VOC2007/images/001689.jpg -./VOC/train/VOCdevkit/VOC2007/images/001690.jpg -./VOC/train/VOCdevkit/VOC2007/images/001691.jpg -./VOC/train/VOCdevkit/VOC2007/images/001693.jpg -./VOC/train/VOCdevkit/VOC2007/images/001699.jpg -./VOC/train/VOCdevkit/VOC2007/images/001707.jpg -./VOC/train/VOCdevkit/VOC2007/images/001708.jpg -./VOC/train/VOCdevkit/VOC2007/images/001711.jpg -./VOC/train/VOCdevkit/VOC2007/images/001713.jpg -./VOC/train/VOCdevkit/VOC2007/images/001714.jpg -./VOC/train/VOCdevkit/VOC2007/images/001717.jpg -./VOC/train/VOCdevkit/VOC2007/images/001718.jpg -./VOC/train/VOCdevkit/VOC2007/images/001721.jpg -./VOC/train/VOCdevkit/VOC2007/images/001723.jpg -./VOC/train/VOCdevkit/VOC2007/images/001724.jpg -./VOC/train/VOCdevkit/VOC2007/images/001725.jpg -./VOC/train/VOCdevkit/VOC2007/images/001726.jpg -./VOC/train/VOCdevkit/VOC2007/images/001727.jpg -./VOC/train/VOCdevkit/VOC2007/images/001729.jpg -./VOC/train/VOCdevkit/VOC2007/images/001730.jpg -./VOC/train/VOCdevkit/VOC2007/images/001732.jpg -./VOC/train/VOCdevkit/VOC2007/images/001733.jpg -./VOC/train/VOCdevkit/VOC2007/images/001734.jpg -./VOC/train/VOCdevkit/VOC2007/images/001738.jpg -./VOC/train/VOCdevkit/VOC2007/images/001739.jpg -./VOC/train/VOCdevkit/VOC2007/images/001741.jpg -./VOC/train/VOCdevkit/VOC2007/images/001746.jpg -./VOC/train/VOCdevkit/VOC2007/images/001747.jpg -./VOC/train/VOCdevkit/VOC2007/images/001749.jpg -./VOC/train/VOCdevkit/VOC2007/images/001750.jpg -./VOC/train/VOCdevkit/VOC2007/images/001752.jpg -./VOC/train/VOCdevkit/VOC2007/images/001754.jpg -./VOC/train/VOCdevkit/VOC2007/images/001755.jpg -./VOC/train/VOCdevkit/VOC2007/images/001756.jpg -./VOC/train/VOCdevkit/VOC2007/images/001758.jpg -./VOC/train/VOCdevkit/VOC2007/images/001759.jpg -./VOC/train/VOCdevkit/VOC2007/images/001761.jpg -./VOC/train/VOCdevkit/VOC2007/images/001765.jpg -./VOC/train/VOCdevkit/VOC2007/images/001766.jpg -./VOC/train/VOCdevkit/VOC2007/images/001768.jpg -./VOC/train/VOCdevkit/VOC2007/images/001771.jpg -./VOC/train/VOCdevkit/VOC2007/images/001772.jpg -./VOC/train/VOCdevkit/VOC2007/images/001775.jpg -./VOC/train/VOCdevkit/VOC2007/images/001777.jpg -./VOC/train/VOCdevkit/VOC2007/images/001778.jpg -./VOC/train/VOCdevkit/VOC2007/images/001780.jpg -./VOC/train/VOCdevkit/VOC2007/images/001782.jpg -./VOC/train/VOCdevkit/VOC2007/images/001784.jpg -./VOC/train/VOCdevkit/VOC2007/images/001785.jpg -./VOC/train/VOCdevkit/VOC2007/images/001787.jpg -./VOC/train/VOCdevkit/VOC2007/images/001789.jpg -./VOC/train/VOCdevkit/VOC2007/images/001793.jpg -./VOC/train/VOCdevkit/VOC2007/images/001795.jpg -./VOC/train/VOCdevkit/VOC2007/images/001797.jpg -./VOC/train/VOCdevkit/VOC2007/images/001799.jpg -./VOC/train/VOCdevkit/VOC2007/images/001800.jpg -./VOC/train/VOCdevkit/VOC2007/images/001801.jpg -./VOC/train/VOCdevkit/VOC2007/images/001806.jpg -./VOC/train/VOCdevkit/VOC2007/images/001807.jpg -./VOC/train/VOCdevkit/VOC2007/images/001809.jpg -./VOC/train/VOCdevkit/VOC2007/images/001810.jpg -./VOC/train/VOCdevkit/VOC2007/images/001816.jpg -./VOC/train/VOCdevkit/VOC2007/images/001818.jpg -./VOC/train/VOCdevkit/VOC2007/images/001821.jpg -./VOC/train/VOCdevkit/VOC2007/images/001825.jpg -./VOC/train/VOCdevkit/VOC2007/images/001827.jpg -./VOC/train/VOCdevkit/VOC2007/images/001828.jpg -./VOC/train/VOCdevkit/VOC2007/images/001830.jpg -./VOC/train/VOCdevkit/VOC2007/images/001832.jpg -./VOC/train/VOCdevkit/VOC2007/images/001833.jpg -./VOC/train/VOCdevkit/VOC2007/images/001834.jpg -./VOC/train/VOCdevkit/VOC2007/images/001836.jpg -./VOC/train/VOCdevkit/VOC2007/images/001837.jpg -./VOC/train/VOCdevkit/VOC2007/images/001840.jpg -./VOC/train/VOCdevkit/VOC2007/images/001841.jpg -./VOC/train/VOCdevkit/VOC2007/images/001842.jpg -./VOC/train/VOCdevkit/VOC2007/images/001843.jpg -./VOC/train/VOCdevkit/VOC2007/images/001845.jpg -./VOC/train/VOCdevkit/VOC2007/images/001847.jpg -./VOC/train/VOCdevkit/VOC2007/images/001849.jpg -./VOC/train/VOCdevkit/VOC2007/images/001853.jpg -./VOC/train/VOCdevkit/VOC2007/images/001854.jpg -./VOC/train/VOCdevkit/VOC2007/images/001855.jpg -./VOC/train/VOCdevkit/VOC2007/images/001858.jpg -./VOC/train/VOCdevkit/VOC2007/images/001860.jpg -./VOC/train/VOCdevkit/VOC2007/images/001861.jpg -./VOC/train/VOCdevkit/VOC2007/images/001862.jpg -./VOC/train/VOCdevkit/VOC2007/images/001864.jpg -./VOC/train/VOCdevkit/VOC2007/images/001870.jpg -./VOC/train/VOCdevkit/VOC2007/images/001872.jpg -./VOC/train/VOCdevkit/VOC2007/images/001875.jpg -./VOC/train/VOCdevkit/VOC2007/images/001877.jpg -./VOC/train/VOCdevkit/VOC2007/images/001878.jpg -./VOC/train/VOCdevkit/VOC2007/images/001881.jpg -./VOC/train/VOCdevkit/VOC2007/images/001882.jpg -./VOC/train/VOCdevkit/VOC2007/images/001887.jpg -./VOC/train/VOCdevkit/VOC2007/images/001888.jpg -./VOC/train/VOCdevkit/VOC2007/images/001892.jpg -./VOC/train/VOCdevkit/VOC2007/images/001894.jpg -./VOC/train/VOCdevkit/VOC2007/images/001896.jpg -./VOC/train/VOCdevkit/VOC2007/images/001898.jpg -./VOC/train/VOCdevkit/VOC2007/images/001899.jpg -./VOC/train/VOCdevkit/VOC2007/images/001901.jpg -./VOC/train/VOCdevkit/VOC2007/images/001902.jpg -./VOC/train/VOCdevkit/VOC2007/images/001903.jpg -./VOC/train/VOCdevkit/VOC2007/images/001904.jpg -./VOC/train/VOCdevkit/VOC2007/images/001906.jpg -./VOC/train/VOCdevkit/VOC2007/images/001907.jpg -./VOC/train/VOCdevkit/VOC2007/images/001911.jpg -./VOC/train/VOCdevkit/VOC2007/images/001915.jpg -./VOC/train/VOCdevkit/VOC2007/images/001918.jpg -./VOC/train/VOCdevkit/VOC2007/images/001920.jpg -./VOC/train/VOCdevkit/VOC2007/images/001922.jpg -./VOC/train/VOCdevkit/VOC2007/images/001927.jpg -./VOC/train/VOCdevkit/VOC2007/images/001928.jpg -./VOC/train/VOCdevkit/VOC2007/images/001930.jpg -./VOC/train/VOCdevkit/VOC2007/images/001931.jpg -./VOC/train/VOCdevkit/VOC2007/images/001932.jpg -./VOC/train/VOCdevkit/VOC2007/images/001933.jpg -./VOC/train/VOCdevkit/VOC2007/images/001934.jpg -./VOC/train/VOCdevkit/VOC2007/images/001936.jpg -./VOC/train/VOCdevkit/VOC2007/images/001937.jpg -./VOC/train/VOCdevkit/VOC2007/images/001938.jpg -./VOC/train/VOCdevkit/VOC2007/images/001940.jpg -./VOC/train/VOCdevkit/VOC2007/images/001941.jpg -./VOC/train/VOCdevkit/VOC2007/images/001944.jpg -./VOC/train/VOCdevkit/VOC2007/images/001945.jpg -./VOC/train/VOCdevkit/VOC2007/images/001948.jpg -./VOC/train/VOCdevkit/VOC2007/images/001950.jpg -./VOC/train/VOCdevkit/VOC2007/images/001952.jpg -./VOC/train/VOCdevkit/VOC2007/images/001954.jpg -./VOC/train/VOCdevkit/VOC2007/images/001958.jpg -./VOC/train/VOCdevkit/VOC2007/images/001960.jpg -./VOC/train/VOCdevkit/VOC2007/images/001962.jpg -./VOC/train/VOCdevkit/VOC2007/images/001963.jpg -./VOC/train/VOCdevkit/VOC2007/images/001964.jpg -./VOC/train/VOCdevkit/VOC2007/images/001970.jpg -./VOC/train/VOCdevkit/VOC2007/images/001971.jpg -./VOC/train/VOCdevkit/VOC2007/images/001972.jpg -./VOC/train/VOCdevkit/VOC2007/images/001976.jpg -./VOC/train/VOCdevkit/VOC2007/images/001977.jpg -./VOC/train/VOCdevkit/VOC2007/images/001978.jpg -./VOC/train/VOCdevkit/VOC2007/images/001980.jpg -./VOC/train/VOCdevkit/VOC2007/images/001981.jpg -./VOC/train/VOCdevkit/VOC2007/images/001982.jpg -./VOC/train/VOCdevkit/VOC2007/images/001985.jpg -./VOC/train/VOCdevkit/VOC2007/images/001989.jpg -./VOC/train/VOCdevkit/VOC2007/images/001995.jpg -./VOC/train/VOCdevkit/VOC2007/images/001999.jpg -./VOC/train/VOCdevkit/VOC2007/images/002000.jpg -./VOC/train/VOCdevkit/VOC2007/images/002001.jpg -./VOC/train/VOCdevkit/VOC2007/images/002002.jpg -./VOC/train/VOCdevkit/VOC2007/images/002004.jpg -./VOC/train/VOCdevkit/VOC2007/images/002006.jpg -./VOC/train/VOCdevkit/VOC2007/images/002011.jpg -./VOC/train/VOCdevkit/VOC2007/images/002012.jpg -./VOC/train/VOCdevkit/VOC2007/images/002015.jpg -./VOC/train/VOCdevkit/VOC2007/images/002019.jpg -./VOC/train/VOCdevkit/VOC2007/images/002020.jpg -./VOC/train/VOCdevkit/VOC2007/images/002021.jpg -./VOC/train/VOCdevkit/VOC2007/images/002022.jpg -./VOC/train/VOCdevkit/VOC2007/images/002023.jpg -./VOC/train/VOCdevkit/VOC2007/images/002024.jpg -./VOC/train/VOCdevkit/VOC2007/images/002025.jpg -./VOC/train/VOCdevkit/VOC2007/images/002027.jpg -./VOC/train/VOCdevkit/VOC2007/images/002030.jpg -./VOC/train/VOCdevkit/VOC2007/images/002034.jpg -./VOC/train/VOCdevkit/VOC2007/images/002036.jpg -./VOC/train/VOCdevkit/VOC2007/images/002037.jpg -./VOC/train/VOCdevkit/VOC2007/images/002039.jpg -./VOC/train/VOCdevkit/VOC2007/images/002042.jpg -./VOC/train/VOCdevkit/VOC2007/images/002043.jpg -./VOC/train/VOCdevkit/VOC2007/images/002045.jpg -./VOC/train/VOCdevkit/VOC2007/images/002047.jpg -./VOC/train/VOCdevkit/VOC2007/images/002049.jpg -./VOC/train/VOCdevkit/VOC2007/images/002051.jpg -./VOC/train/VOCdevkit/VOC2007/images/002054.jpg -./VOC/train/VOCdevkit/VOC2007/images/002055.jpg -./VOC/train/VOCdevkit/VOC2007/images/002056.jpg -./VOC/train/VOCdevkit/VOC2007/images/002058.jpg -./VOC/train/VOCdevkit/VOC2007/images/002061.jpg -./VOC/train/VOCdevkit/VOC2007/images/002063.jpg -./VOC/train/VOCdevkit/VOC2007/images/002064.jpg -./VOC/train/VOCdevkit/VOC2007/images/002067.jpg -./VOC/train/VOCdevkit/VOC2007/images/002068.jpg -./VOC/train/VOCdevkit/VOC2007/images/002069.jpg -./VOC/train/VOCdevkit/VOC2007/images/002070.jpg -./VOC/train/VOCdevkit/VOC2007/images/002082.jpg -./VOC/train/VOCdevkit/VOC2007/images/002083.jpg -./VOC/train/VOCdevkit/VOC2007/images/002086.jpg -./VOC/train/VOCdevkit/VOC2007/images/002088.jpg -./VOC/train/VOCdevkit/VOC2007/images/002090.jpg -./VOC/train/VOCdevkit/VOC2007/images/002091.jpg -./VOC/train/VOCdevkit/VOC2007/images/002094.jpg -./VOC/train/VOCdevkit/VOC2007/images/002095.jpg -./VOC/train/VOCdevkit/VOC2007/images/002096.jpg -./VOC/train/VOCdevkit/VOC2007/images/002098.jpg -./VOC/train/VOCdevkit/VOC2007/images/002099.jpg -./VOC/train/VOCdevkit/VOC2007/images/002101.jpg -./VOC/train/VOCdevkit/VOC2007/images/002102.jpg -./VOC/train/VOCdevkit/VOC2007/images/002104.jpg -./VOC/train/VOCdevkit/VOC2007/images/002108.jpg -./VOC/train/VOCdevkit/VOC2007/images/002109.jpg -./VOC/train/VOCdevkit/VOC2007/images/002112.jpg -./VOC/train/VOCdevkit/VOC2007/images/002114.jpg -./VOC/train/VOCdevkit/VOC2007/images/002116.jpg -./VOC/train/VOCdevkit/VOC2007/images/002117.jpg -./VOC/train/VOCdevkit/VOC2007/images/002120.jpg -./VOC/train/VOCdevkit/VOC2007/images/002124.jpg -./VOC/train/VOCdevkit/VOC2007/images/002125.jpg -./VOC/train/VOCdevkit/VOC2007/images/002126.jpg -./VOC/train/VOCdevkit/VOC2007/images/002129.jpg -./VOC/train/VOCdevkit/VOC2007/images/002132.jpg -./VOC/train/VOCdevkit/VOC2007/images/002134.jpg -./VOC/train/VOCdevkit/VOC2007/images/002135.jpg -./VOC/train/VOCdevkit/VOC2007/images/002136.jpg -./VOC/train/VOCdevkit/VOC2007/images/002139.jpg -./VOC/train/VOCdevkit/VOC2007/images/002140.jpg -./VOC/train/VOCdevkit/VOC2007/images/002142.jpg -./VOC/train/VOCdevkit/VOC2007/images/002145.jpg -./VOC/train/VOCdevkit/VOC2007/images/002146.jpg -./VOC/train/VOCdevkit/VOC2007/images/002151.jpg -./VOC/train/VOCdevkit/VOC2007/images/002152.jpg -./VOC/train/VOCdevkit/VOC2007/images/002153.jpg -./VOC/train/VOCdevkit/VOC2007/images/002155.jpg -./VOC/train/VOCdevkit/VOC2007/images/002156.jpg -./VOC/train/VOCdevkit/VOC2007/images/002158.jpg -./VOC/train/VOCdevkit/VOC2007/images/002163.jpg -./VOC/train/VOCdevkit/VOC2007/images/002165.jpg -./VOC/train/VOCdevkit/VOC2007/images/002166.jpg -./VOC/train/VOCdevkit/VOC2007/images/002169.jpg -./VOC/train/VOCdevkit/VOC2007/images/002170.jpg -./VOC/train/VOCdevkit/VOC2007/images/002171.jpg -./VOC/train/VOCdevkit/VOC2007/images/002172.jpg -./VOC/train/VOCdevkit/VOC2007/images/002174.jpg -./VOC/train/VOCdevkit/VOC2007/images/002176.jpg -./VOC/train/VOCdevkit/VOC2007/images/002178.jpg -./VOC/train/VOCdevkit/VOC2007/images/002179.jpg -./VOC/train/VOCdevkit/VOC2007/images/002180.jpg -./VOC/train/VOCdevkit/VOC2007/images/002181.jpg -./VOC/train/VOCdevkit/VOC2007/images/002182.jpg -./VOC/train/VOCdevkit/VOC2007/images/002183.jpg -./VOC/train/VOCdevkit/VOC2007/images/002184.jpg -./VOC/train/VOCdevkit/VOC2007/images/002186.jpg -./VOC/train/VOCdevkit/VOC2007/images/002187.jpg -./VOC/train/VOCdevkit/VOC2007/images/002190.jpg -./VOC/train/VOCdevkit/VOC2007/images/002191.jpg -./VOC/train/VOCdevkit/VOC2007/images/002192.jpg -./VOC/train/VOCdevkit/VOC2007/images/002193.jpg -./VOC/train/VOCdevkit/VOC2007/images/002194.jpg -./VOC/train/VOCdevkit/VOC2007/images/002196.jpg -./VOC/train/VOCdevkit/VOC2007/images/002197.jpg -./VOC/train/VOCdevkit/VOC2007/images/002199.jpg -./VOC/train/VOCdevkit/VOC2007/images/002201.jpg -./VOC/train/VOCdevkit/VOC2007/images/002202.jpg -./VOC/train/VOCdevkit/VOC2007/images/002208.jpg -./VOC/train/VOCdevkit/VOC2007/images/002209.jpg -./VOC/train/VOCdevkit/VOC2007/images/002212.jpg -./VOC/train/VOCdevkit/VOC2007/images/002213.jpg -./VOC/train/VOCdevkit/VOC2007/images/002214.jpg -./VOC/train/VOCdevkit/VOC2007/images/002215.jpg -./VOC/train/VOCdevkit/VOC2007/images/002218.jpg -./VOC/train/VOCdevkit/VOC2007/images/002219.jpg -./VOC/train/VOCdevkit/VOC2007/images/002220.jpg -./VOC/train/VOCdevkit/VOC2007/images/002221.jpg -./VOC/train/VOCdevkit/VOC2007/images/002224.jpg -./VOC/train/VOCdevkit/VOC2007/images/002226.jpg -./VOC/train/VOCdevkit/VOC2007/images/002228.jpg -./VOC/train/VOCdevkit/VOC2007/images/002233.jpg -./VOC/train/VOCdevkit/VOC2007/images/002234.jpg -./VOC/train/VOCdevkit/VOC2007/images/002237.jpg -./VOC/train/VOCdevkit/VOC2007/images/002238.jpg -./VOC/train/VOCdevkit/VOC2007/images/002241.jpg -./VOC/train/VOCdevkit/VOC2007/images/002244.jpg -./VOC/train/VOCdevkit/VOC2007/images/002247.jpg -./VOC/train/VOCdevkit/VOC2007/images/002248.jpg -./VOC/train/VOCdevkit/VOC2007/images/002249.jpg -./VOC/train/VOCdevkit/VOC2007/images/002251.jpg -./VOC/train/VOCdevkit/VOC2007/images/002253.jpg -./VOC/train/VOCdevkit/VOC2007/images/002255.jpg -./VOC/train/VOCdevkit/VOC2007/images/002256.jpg -./VOC/train/VOCdevkit/VOC2007/images/002257.jpg -./VOC/train/VOCdevkit/VOC2007/images/002259.jpg -./VOC/train/VOCdevkit/VOC2007/images/002260.jpg -./VOC/train/VOCdevkit/VOC2007/images/002261.jpg -./VOC/train/VOCdevkit/VOC2007/images/002263.jpg -./VOC/train/VOCdevkit/VOC2007/images/002265.jpg -./VOC/train/VOCdevkit/VOC2007/images/002266.jpg -./VOC/train/VOCdevkit/VOC2007/images/002267.jpg -./VOC/train/VOCdevkit/VOC2007/images/002268.jpg -./VOC/train/VOCdevkit/VOC2007/images/002270.jpg -./VOC/train/VOCdevkit/VOC2007/images/002272.jpg -./VOC/train/VOCdevkit/VOC2007/images/002273.jpg -./VOC/train/VOCdevkit/VOC2007/images/002276.jpg -./VOC/train/VOCdevkit/VOC2007/images/002277.jpg -./VOC/train/VOCdevkit/VOC2007/images/002278.jpg -./VOC/train/VOCdevkit/VOC2007/images/002279.jpg -./VOC/train/VOCdevkit/VOC2007/images/002280.jpg -./VOC/train/VOCdevkit/VOC2007/images/002281.jpg -./VOC/train/VOCdevkit/VOC2007/images/002284.jpg -./VOC/train/VOCdevkit/VOC2007/images/002285.jpg -./VOC/train/VOCdevkit/VOC2007/images/002287.jpg -./VOC/train/VOCdevkit/VOC2007/images/002288.jpg -./VOC/train/VOCdevkit/VOC2007/images/002290.jpg -./VOC/train/VOCdevkit/VOC2007/images/002291.jpg -./VOC/train/VOCdevkit/VOC2007/images/002293.jpg -./VOC/train/VOCdevkit/VOC2007/images/002300.jpg -./VOC/train/VOCdevkit/VOC2007/images/002302.jpg -./VOC/train/VOCdevkit/VOC2007/images/002305.jpg -./VOC/train/VOCdevkit/VOC2007/images/002306.jpg -./VOC/train/VOCdevkit/VOC2007/images/002307.jpg -./VOC/train/VOCdevkit/VOC2007/images/002308.jpg -./VOC/train/VOCdevkit/VOC2007/images/002310.jpg -./VOC/train/VOCdevkit/VOC2007/images/002311.jpg -./VOC/train/VOCdevkit/VOC2007/images/002315.jpg -./VOC/train/VOCdevkit/VOC2007/images/002318.jpg -./VOC/train/VOCdevkit/VOC2007/images/002320.jpg -./VOC/train/VOCdevkit/VOC2007/images/002321.jpg -./VOC/train/VOCdevkit/VOC2007/images/002323.jpg -./VOC/train/VOCdevkit/VOC2007/images/002324.jpg -./VOC/train/VOCdevkit/VOC2007/images/002328.jpg -./VOC/train/VOCdevkit/VOC2007/images/002329.jpg -./VOC/train/VOCdevkit/VOC2007/images/002330.jpg -./VOC/train/VOCdevkit/VOC2007/images/002332.jpg -./VOC/train/VOCdevkit/VOC2007/images/002333.jpg -./VOC/train/VOCdevkit/VOC2007/images/002334.jpg -./VOC/train/VOCdevkit/VOC2007/images/002335.jpg -./VOC/train/VOCdevkit/VOC2007/images/002337.jpg -./VOC/train/VOCdevkit/VOC2007/images/002340.jpg -./VOC/train/VOCdevkit/VOC2007/images/002342.jpg -./VOC/train/VOCdevkit/VOC2007/images/002343.jpg -./VOC/train/VOCdevkit/VOC2007/images/002345.jpg -./VOC/train/VOCdevkit/VOC2007/images/002347.jpg -./VOC/train/VOCdevkit/VOC2007/images/002348.jpg -./VOC/train/VOCdevkit/VOC2007/images/002350.jpg -./VOC/train/VOCdevkit/VOC2007/images/002352.jpg -./VOC/train/VOCdevkit/VOC2007/images/002354.jpg -./VOC/train/VOCdevkit/VOC2007/images/002355.jpg -./VOC/train/VOCdevkit/VOC2007/images/002359.jpg -./VOC/train/VOCdevkit/VOC2007/images/002361.jpg -./VOC/train/VOCdevkit/VOC2007/images/002362.jpg -./VOC/train/VOCdevkit/VOC2007/images/002364.jpg -./VOC/train/VOCdevkit/VOC2007/images/002366.jpg -./VOC/train/VOCdevkit/VOC2007/images/002367.jpg -./VOC/train/VOCdevkit/VOC2007/images/002368.jpg -./VOC/train/VOCdevkit/VOC2007/images/002369.jpg -./VOC/train/VOCdevkit/VOC2007/images/002371.jpg -./VOC/train/VOCdevkit/VOC2007/images/002372.jpg -./VOC/train/VOCdevkit/VOC2007/images/002373.jpg -./VOC/train/VOCdevkit/VOC2007/images/002374.jpg -./VOC/train/VOCdevkit/VOC2007/images/002375.jpg -./VOC/train/VOCdevkit/VOC2007/images/002376.jpg -./VOC/train/VOCdevkit/VOC2007/images/002377.jpg -./VOC/train/VOCdevkit/VOC2007/images/002378.jpg -./VOC/train/VOCdevkit/VOC2007/images/002382.jpg -./VOC/train/VOCdevkit/VOC2007/images/002384.jpg -./VOC/train/VOCdevkit/VOC2007/images/002385.jpg -./VOC/train/VOCdevkit/VOC2007/images/002387.jpg -./VOC/train/VOCdevkit/VOC2007/images/002391.jpg -./VOC/train/VOCdevkit/VOC2007/images/002392.jpg -./VOC/train/VOCdevkit/VOC2007/images/002393.jpg -./VOC/train/VOCdevkit/VOC2007/images/002401.jpg -./VOC/train/VOCdevkit/VOC2007/images/002403.jpg -./VOC/train/VOCdevkit/VOC2007/images/002404.jpg -./VOC/train/VOCdevkit/VOC2007/images/002405.jpg -./VOC/train/VOCdevkit/VOC2007/images/002407.jpg -./VOC/train/VOCdevkit/VOC2007/images/002410.jpg -./VOC/train/VOCdevkit/VOC2007/images/002411.jpg -./VOC/train/VOCdevkit/VOC2007/images/002413.jpg -./VOC/train/VOCdevkit/VOC2007/images/002415.jpg -./VOC/train/VOCdevkit/VOC2007/images/002417.jpg -./VOC/train/VOCdevkit/VOC2007/images/002419.jpg -./VOC/train/VOCdevkit/VOC2007/images/002420.jpg -./VOC/train/VOCdevkit/VOC2007/images/002423.jpg -./VOC/train/VOCdevkit/VOC2007/images/002425.jpg -./VOC/train/VOCdevkit/VOC2007/images/002427.jpg -./VOC/train/VOCdevkit/VOC2007/images/002433.jpg -./VOC/train/VOCdevkit/VOC2007/images/002435.jpg -./VOC/train/VOCdevkit/VOC2007/images/002436.jpg -./VOC/train/VOCdevkit/VOC2007/images/002437.jpg -./VOC/train/VOCdevkit/VOC2007/images/002439.jpg -./VOC/train/VOCdevkit/VOC2007/images/002441.jpg -./VOC/train/VOCdevkit/VOC2007/images/002442.jpg -./VOC/train/VOCdevkit/VOC2007/images/002443.jpg -./VOC/train/VOCdevkit/VOC2007/images/002444.jpg -./VOC/train/VOCdevkit/VOC2007/images/002445.jpg -./VOC/train/VOCdevkit/VOC2007/images/002448.jpg -./VOC/train/VOCdevkit/VOC2007/images/002450.jpg -./VOC/train/VOCdevkit/VOC2007/images/002452.jpg -./VOC/train/VOCdevkit/VOC2007/images/002454.jpg -./VOC/train/VOCdevkit/VOC2007/images/002456.jpg -./VOC/train/VOCdevkit/VOC2007/images/002458.jpg -./VOC/train/VOCdevkit/VOC2007/images/002459.jpg -./VOC/train/VOCdevkit/VOC2007/images/002460.jpg -./VOC/train/VOCdevkit/VOC2007/images/002461.jpg -./VOC/train/VOCdevkit/VOC2007/images/002462.jpg -./VOC/train/VOCdevkit/VOC2007/images/002465.jpg -./VOC/train/VOCdevkit/VOC2007/images/002466.jpg -./VOC/train/VOCdevkit/VOC2007/images/002468.jpg -./VOC/train/VOCdevkit/VOC2007/images/002470.jpg -./VOC/train/VOCdevkit/VOC2007/images/002471.jpg -./VOC/train/VOCdevkit/VOC2007/images/002472.jpg -./VOC/train/VOCdevkit/VOC2007/images/002476.jpg -./VOC/train/VOCdevkit/VOC2007/images/002477.jpg -./VOC/train/VOCdevkit/VOC2007/images/002478.jpg -./VOC/train/VOCdevkit/VOC2007/images/002479.jpg -./VOC/train/VOCdevkit/VOC2007/images/002480.jpg -./VOC/train/VOCdevkit/VOC2007/images/002481.jpg -./VOC/train/VOCdevkit/VOC2007/images/002483.jpg -./VOC/train/VOCdevkit/VOC2007/images/002490.jpg -./VOC/train/VOCdevkit/VOC2007/images/002491.jpg -./VOC/train/VOCdevkit/VOC2007/images/002492.jpg -./VOC/train/VOCdevkit/VOC2007/images/002493.jpg -./VOC/train/VOCdevkit/VOC2007/images/002494.jpg -./VOC/train/VOCdevkit/VOC2007/images/002496.jpg -./VOC/train/VOCdevkit/VOC2007/images/002497.jpg -./VOC/train/VOCdevkit/VOC2007/images/002500.jpg -./VOC/train/VOCdevkit/VOC2007/images/002501.jpg -./VOC/train/VOCdevkit/VOC2007/images/002502.jpg -./VOC/train/VOCdevkit/VOC2007/images/002504.jpg -./VOC/train/VOCdevkit/VOC2007/images/002505.jpg -./VOC/train/VOCdevkit/VOC2007/images/002508.jpg -./VOC/train/VOCdevkit/VOC2007/images/002512.jpg -./VOC/train/VOCdevkit/VOC2007/images/002513.jpg -./VOC/train/VOCdevkit/VOC2007/images/002514.jpg -./VOC/train/VOCdevkit/VOC2007/images/002518.jpg -./VOC/train/VOCdevkit/VOC2007/images/002519.jpg -./VOC/train/VOCdevkit/VOC2007/images/002520.jpg -./VOC/train/VOCdevkit/VOC2007/images/002523.jpg -./VOC/train/VOCdevkit/VOC2007/images/002524.jpg -./VOC/train/VOCdevkit/VOC2007/images/002525.jpg -./VOC/train/VOCdevkit/VOC2007/images/002529.jpg -./VOC/train/VOCdevkit/VOC2007/images/002533.jpg -./VOC/train/VOCdevkit/VOC2007/images/002534.jpg -./VOC/train/VOCdevkit/VOC2007/images/002537.jpg -./VOC/train/VOCdevkit/VOC2007/images/002539.jpg -./VOC/train/VOCdevkit/VOC2007/images/002540.jpg -./VOC/train/VOCdevkit/VOC2007/images/002542.jpg -./VOC/train/VOCdevkit/VOC2007/images/002544.jpg -./VOC/train/VOCdevkit/VOC2007/images/002545.jpg -./VOC/train/VOCdevkit/VOC2007/images/002546.jpg -./VOC/train/VOCdevkit/VOC2007/images/002547.jpg -./VOC/train/VOCdevkit/VOC2007/images/002549.jpg -./VOC/train/VOCdevkit/VOC2007/images/002554.jpg -./VOC/train/VOCdevkit/VOC2007/images/002555.jpg -./VOC/train/VOCdevkit/VOC2007/images/002558.jpg -./VOC/train/VOCdevkit/VOC2007/images/002559.jpg -./VOC/train/VOCdevkit/VOC2007/images/002561.jpg -./VOC/train/VOCdevkit/VOC2007/images/002563.jpg -./VOC/train/VOCdevkit/VOC2007/images/002564.jpg -./VOC/train/VOCdevkit/VOC2007/images/002565.jpg -./VOC/train/VOCdevkit/VOC2007/images/002566.jpg -./VOC/train/VOCdevkit/VOC2007/images/002567.jpg -./VOC/train/VOCdevkit/VOC2007/images/002569.jpg -./VOC/train/VOCdevkit/VOC2007/images/002571.jpg -./VOC/train/VOCdevkit/VOC2007/images/002572.jpg -./VOC/train/VOCdevkit/VOC2007/images/002578.jpg -./VOC/train/VOCdevkit/VOC2007/images/002579.jpg -./VOC/train/VOCdevkit/VOC2007/images/002584.jpg -./VOC/train/VOCdevkit/VOC2007/images/002585.jpg -./VOC/train/VOCdevkit/VOC2007/images/002586.jpg -./VOC/train/VOCdevkit/VOC2007/images/002589.jpg -./VOC/train/VOCdevkit/VOC2007/images/002590.jpg -./VOC/train/VOCdevkit/VOC2007/images/002593.jpg -./VOC/train/VOCdevkit/VOC2007/images/002594.jpg -./VOC/train/VOCdevkit/VOC2007/images/002595.jpg -./VOC/train/VOCdevkit/VOC2007/images/002598.jpg -./VOC/train/VOCdevkit/VOC2007/images/002599.jpg -./VOC/train/VOCdevkit/VOC2007/images/002600.jpg -./VOC/train/VOCdevkit/VOC2007/images/002603.jpg -./VOC/train/VOCdevkit/VOC2007/images/002605.jpg -./VOC/train/VOCdevkit/VOC2007/images/002606.jpg -./VOC/train/VOCdevkit/VOC2007/images/002609.jpg -./VOC/train/VOCdevkit/VOC2007/images/002611.jpg -./VOC/train/VOCdevkit/VOC2007/images/002613.jpg -./VOC/train/VOCdevkit/VOC2007/images/002615.jpg -./VOC/train/VOCdevkit/VOC2007/images/002618.jpg -./VOC/train/VOCdevkit/VOC2007/images/002621.jpg -./VOC/train/VOCdevkit/VOC2007/images/002625.jpg -./VOC/train/VOCdevkit/VOC2007/images/002627.jpg -./VOC/train/VOCdevkit/VOC2007/images/002632.jpg -./VOC/train/VOCdevkit/VOC2007/images/002633.jpg -./VOC/train/VOCdevkit/VOC2007/images/002634.jpg -./VOC/train/VOCdevkit/VOC2007/images/002635.jpg -./VOC/train/VOCdevkit/VOC2007/images/002636.jpg -./VOC/train/VOCdevkit/VOC2007/images/002637.jpg -./VOC/train/VOCdevkit/VOC2007/images/002641.jpg -./VOC/train/VOCdevkit/VOC2007/images/002643.jpg -./VOC/train/VOCdevkit/VOC2007/images/002645.jpg -./VOC/train/VOCdevkit/VOC2007/images/002646.jpg -./VOC/train/VOCdevkit/VOC2007/images/002647.jpg -./VOC/train/VOCdevkit/VOC2007/images/002648.jpg -./VOC/train/VOCdevkit/VOC2007/images/002649.jpg -./VOC/train/VOCdevkit/VOC2007/images/002653.jpg -./VOC/train/VOCdevkit/VOC2007/images/002657.jpg -./VOC/train/VOCdevkit/VOC2007/images/002658.jpg -./VOC/train/VOCdevkit/VOC2007/images/002659.jpg -./VOC/train/VOCdevkit/VOC2007/images/002662.jpg -./VOC/train/VOCdevkit/VOC2007/images/002664.jpg -./VOC/train/VOCdevkit/VOC2007/images/002666.jpg -./VOC/train/VOCdevkit/VOC2007/images/002667.jpg -./VOC/train/VOCdevkit/VOC2007/images/002668.jpg -./VOC/train/VOCdevkit/VOC2007/images/002669.jpg -./VOC/train/VOCdevkit/VOC2007/images/002670.jpg -./VOC/train/VOCdevkit/VOC2007/images/002675.jpg -./VOC/train/VOCdevkit/VOC2007/images/002677.jpg -./VOC/train/VOCdevkit/VOC2007/images/002678.jpg -./VOC/train/VOCdevkit/VOC2007/images/002680.jpg -./VOC/train/VOCdevkit/VOC2007/images/002682.jpg -./VOC/train/VOCdevkit/VOC2007/images/002683.jpg -./VOC/train/VOCdevkit/VOC2007/images/002684.jpg -./VOC/train/VOCdevkit/VOC2007/images/002689.jpg -./VOC/train/VOCdevkit/VOC2007/images/002690.jpg -./VOC/train/VOCdevkit/VOC2007/images/002691.jpg -./VOC/train/VOCdevkit/VOC2007/images/002693.jpg -./VOC/train/VOCdevkit/VOC2007/images/002695.jpg -./VOC/train/VOCdevkit/VOC2007/images/002696.jpg -./VOC/train/VOCdevkit/VOC2007/images/002697.jpg -./VOC/train/VOCdevkit/VOC2007/images/002699.jpg -./VOC/train/VOCdevkit/VOC2007/images/002702.jpg -./VOC/train/VOCdevkit/VOC2007/images/002704.jpg -./VOC/train/VOCdevkit/VOC2007/images/002706.jpg -./VOC/train/VOCdevkit/VOC2007/images/002709.jpg -./VOC/train/VOCdevkit/VOC2007/images/002710.jpg -./VOC/train/VOCdevkit/VOC2007/images/002713.jpg -./VOC/train/VOCdevkit/VOC2007/images/002714.jpg -./VOC/train/VOCdevkit/VOC2007/images/002715.jpg -./VOC/train/VOCdevkit/VOC2007/images/002717.jpg -./VOC/train/VOCdevkit/VOC2007/images/002718.jpg -./VOC/train/VOCdevkit/VOC2007/images/002721.jpg -./VOC/train/VOCdevkit/VOC2007/images/002722.jpg -./VOC/train/VOCdevkit/VOC2007/images/002723.jpg -./VOC/train/VOCdevkit/VOC2007/images/002727.jpg -./VOC/train/VOCdevkit/VOC2007/images/002730.jpg -./VOC/train/VOCdevkit/VOC2007/images/002732.jpg -./VOC/train/VOCdevkit/VOC2007/images/002734.jpg -./VOC/train/VOCdevkit/VOC2007/images/002735.jpg -./VOC/train/VOCdevkit/VOC2007/images/002737.jpg -./VOC/train/VOCdevkit/VOC2007/images/002738.jpg -./VOC/train/VOCdevkit/VOC2007/images/002741.jpg -./VOC/train/VOCdevkit/VOC2007/images/002744.jpg -./VOC/train/VOCdevkit/VOC2007/images/002745.jpg -./VOC/train/VOCdevkit/VOC2007/images/002747.jpg -./VOC/train/VOCdevkit/VOC2007/images/002749.jpg -./VOC/train/VOCdevkit/VOC2007/images/002751.jpg -./VOC/train/VOCdevkit/VOC2007/images/002755.jpg -./VOC/train/VOCdevkit/VOC2007/images/002757.jpg -./VOC/train/VOCdevkit/VOC2007/images/002759.jpg -./VOC/train/VOCdevkit/VOC2007/images/002760.jpg -./VOC/train/VOCdevkit/VOC2007/images/002762.jpg -./VOC/train/VOCdevkit/VOC2007/images/002763.jpg -./VOC/train/VOCdevkit/VOC2007/images/002765.jpg -./VOC/train/VOCdevkit/VOC2007/images/002766.jpg -./VOC/train/VOCdevkit/VOC2007/images/002767.jpg -./VOC/train/VOCdevkit/VOC2007/images/002772.jpg -./VOC/train/VOCdevkit/VOC2007/images/002774.jpg -./VOC/train/VOCdevkit/VOC2007/images/002775.jpg -./VOC/train/VOCdevkit/VOC2007/images/002776.jpg -./VOC/train/VOCdevkit/VOC2007/images/002778.jpg -./VOC/train/VOCdevkit/VOC2007/images/002779.jpg -./VOC/train/VOCdevkit/VOC2007/images/002782.jpg -./VOC/train/VOCdevkit/VOC2007/images/002783.jpg -./VOC/train/VOCdevkit/VOC2007/images/002784.jpg -./VOC/train/VOCdevkit/VOC2007/images/002785.jpg -./VOC/train/VOCdevkit/VOC2007/images/002786.jpg -./VOC/train/VOCdevkit/VOC2007/images/002791.jpg -./VOC/train/VOCdevkit/VOC2007/images/002794.jpg -./VOC/train/VOCdevkit/VOC2007/images/002795.jpg -./VOC/train/VOCdevkit/VOC2007/images/002796.jpg -./VOC/train/VOCdevkit/VOC2007/images/002798.jpg -./VOC/train/VOCdevkit/VOC2007/images/002800.jpg -./VOC/train/VOCdevkit/VOC2007/images/002801.jpg -./VOC/train/VOCdevkit/VOC2007/images/002803.jpg -./VOC/train/VOCdevkit/VOC2007/images/002804.jpg -./VOC/train/VOCdevkit/VOC2007/images/002807.jpg -./VOC/train/VOCdevkit/VOC2007/images/002810.jpg -./VOC/train/VOCdevkit/VOC2007/images/002812.jpg -./VOC/train/VOCdevkit/VOC2007/images/002815.jpg -./VOC/train/VOCdevkit/VOC2007/images/002816.jpg -./VOC/train/VOCdevkit/VOC2007/images/002817.jpg -./VOC/train/VOCdevkit/VOC2007/images/002820.jpg -./VOC/train/VOCdevkit/VOC2007/images/002826.jpg -./VOC/train/VOCdevkit/VOC2007/images/002827.jpg -./VOC/train/VOCdevkit/VOC2007/images/002833.jpg -./VOC/train/VOCdevkit/VOC2007/images/002834.jpg -./VOC/train/VOCdevkit/VOC2007/images/002835.jpg -./VOC/train/VOCdevkit/VOC2007/images/002836.jpg -./VOC/train/VOCdevkit/VOC2007/images/002838.jpg -./VOC/train/VOCdevkit/VOC2007/images/002841.jpg -./VOC/train/VOCdevkit/VOC2007/images/002842.jpg -./VOC/train/VOCdevkit/VOC2007/images/002844.jpg -./VOC/train/VOCdevkit/VOC2007/images/002845.jpg -./VOC/train/VOCdevkit/VOC2007/images/002847.jpg -./VOC/train/VOCdevkit/VOC2007/images/002848.jpg -./VOC/train/VOCdevkit/VOC2007/images/002854.jpg -./VOC/train/VOCdevkit/VOC2007/images/002855.jpg -./VOC/train/VOCdevkit/VOC2007/images/002858.jpg -./VOC/train/VOCdevkit/VOC2007/images/002859.jpg -./VOC/train/VOCdevkit/VOC2007/images/002864.jpg -./VOC/train/VOCdevkit/VOC2007/images/002866.jpg -./VOC/train/VOCdevkit/VOC2007/images/002867.jpg -./VOC/train/VOCdevkit/VOC2007/images/002868.jpg -./VOC/train/VOCdevkit/VOC2007/images/002869.jpg -./VOC/train/VOCdevkit/VOC2007/images/002870.jpg -./VOC/train/VOCdevkit/VOC2007/images/002873.jpg -./VOC/train/VOCdevkit/VOC2007/images/002875.jpg -./VOC/train/VOCdevkit/VOC2007/images/002879.jpg -./VOC/train/VOCdevkit/VOC2007/images/002880.jpg -./VOC/train/VOCdevkit/VOC2007/images/002881.jpg -./VOC/train/VOCdevkit/VOC2007/images/002884.jpg -./VOC/train/VOCdevkit/VOC2007/images/002886.jpg -./VOC/train/VOCdevkit/VOC2007/images/002889.jpg -./VOC/train/VOCdevkit/VOC2007/images/002891.jpg -./VOC/train/VOCdevkit/VOC2007/images/002893.jpg -./VOC/train/VOCdevkit/VOC2007/images/002896.jpg -./VOC/train/VOCdevkit/VOC2007/images/002899.jpg -./VOC/train/VOCdevkit/VOC2007/images/002901.jpg -./VOC/train/VOCdevkit/VOC2007/images/002906.jpg -./VOC/train/VOCdevkit/VOC2007/images/002910.jpg -./VOC/train/VOCdevkit/VOC2007/images/002912.jpg -./VOC/train/VOCdevkit/VOC2007/images/002913.jpg -./VOC/train/VOCdevkit/VOC2007/images/002914.jpg -./VOC/train/VOCdevkit/VOC2007/images/002915.jpg -./VOC/train/VOCdevkit/VOC2007/images/002916.jpg -./VOC/train/VOCdevkit/VOC2007/images/002917.jpg -./VOC/train/VOCdevkit/VOC2007/images/002919.jpg -./VOC/train/VOCdevkit/VOC2007/images/002924.jpg -./VOC/train/VOCdevkit/VOC2007/images/002931.jpg -./VOC/train/VOCdevkit/VOC2007/images/002932.jpg -./VOC/train/VOCdevkit/VOC2007/images/002933.jpg -./VOC/train/VOCdevkit/VOC2007/images/002934.jpg -./VOC/train/VOCdevkit/VOC2007/images/002935.jpg -./VOC/train/VOCdevkit/VOC2007/images/002937.jpg -./VOC/train/VOCdevkit/VOC2007/images/002938.jpg -./VOC/train/VOCdevkit/VOC2007/images/002939.jpg -./VOC/train/VOCdevkit/VOC2007/images/002940.jpg -./VOC/train/VOCdevkit/VOC2007/images/002941.jpg -./VOC/train/VOCdevkit/VOC2007/images/002942.jpg -./VOC/train/VOCdevkit/VOC2007/images/002943.jpg -./VOC/train/VOCdevkit/VOC2007/images/002944.jpg -./VOC/train/VOCdevkit/VOC2007/images/002946.jpg -./VOC/train/VOCdevkit/VOC2007/images/002947.jpg -./VOC/train/VOCdevkit/VOC2007/images/002952.jpg -./VOC/train/VOCdevkit/VOC2007/images/002953.jpg -./VOC/train/VOCdevkit/VOC2007/images/002954.jpg -./VOC/train/VOCdevkit/VOC2007/images/002956.jpg -./VOC/train/VOCdevkit/VOC2007/images/002957.jpg -./VOC/train/VOCdevkit/VOC2007/images/002958.jpg -./VOC/train/VOCdevkit/VOC2007/images/002960.jpg -./VOC/train/VOCdevkit/VOC2007/images/002962.jpg -./VOC/train/VOCdevkit/VOC2007/images/002963.jpg -./VOC/train/VOCdevkit/VOC2007/images/002965.jpg -./VOC/train/VOCdevkit/VOC2007/images/002966.jpg -./VOC/train/VOCdevkit/VOC2007/images/002967.jpg -./VOC/train/VOCdevkit/VOC2007/images/002969.jpg -./VOC/train/VOCdevkit/VOC2007/images/002975.jpg -./VOC/train/VOCdevkit/VOC2007/images/002976.jpg -./VOC/train/VOCdevkit/VOC2007/images/002977.jpg -./VOC/train/VOCdevkit/VOC2007/images/002978.jpg -./VOC/train/VOCdevkit/VOC2007/images/002984.jpg -./VOC/train/VOCdevkit/VOC2007/images/002986.jpg -./VOC/train/VOCdevkit/VOC2007/images/002987.jpg -./VOC/train/VOCdevkit/VOC2007/images/002988.jpg -./VOC/train/VOCdevkit/VOC2007/images/002989.jpg -./VOC/train/VOCdevkit/VOC2007/images/002990.jpg -./VOC/train/VOCdevkit/VOC2007/images/002992.jpg -./VOC/train/VOCdevkit/VOC2007/images/002994.jpg -./VOC/train/VOCdevkit/VOC2007/images/002995.jpg -./VOC/train/VOCdevkit/VOC2007/images/003000.jpg -./VOC/train/VOCdevkit/VOC2007/images/003002.jpg -./VOC/train/VOCdevkit/VOC2007/images/003003.jpg -./VOC/train/VOCdevkit/VOC2007/images/003004.jpg -./VOC/train/VOCdevkit/VOC2007/images/003005.jpg -./VOC/train/VOCdevkit/VOC2007/images/003007.jpg -./VOC/train/VOCdevkit/VOC2007/images/003008.jpg -./VOC/train/VOCdevkit/VOC2007/images/003009.jpg -./VOC/train/VOCdevkit/VOC2007/images/003011.jpg -./VOC/train/VOCdevkit/VOC2007/images/003013.jpg -./VOC/train/VOCdevkit/VOC2007/images/003015.jpg -./VOC/train/VOCdevkit/VOC2007/images/003017.jpg -./VOC/train/VOCdevkit/VOC2007/images/003021.jpg -./VOC/train/VOCdevkit/VOC2007/images/003023.jpg -./VOC/train/VOCdevkit/VOC2007/images/003024.jpg -./VOC/train/VOCdevkit/VOC2007/images/003027.jpg -./VOC/train/VOCdevkit/VOC2007/images/003028.jpg -./VOC/train/VOCdevkit/VOC2007/images/003031.jpg -./VOC/train/VOCdevkit/VOC2007/images/003032.jpg -./VOC/train/VOCdevkit/VOC2007/images/003034.jpg -./VOC/train/VOCdevkit/VOC2007/images/003038.jpg -./VOC/train/VOCdevkit/VOC2007/images/003039.jpg -./VOC/train/VOCdevkit/VOC2007/images/003042.jpg -./VOC/train/VOCdevkit/VOC2007/images/003044.jpg -./VOC/train/VOCdevkit/VOC2007/images/003045.jpg -./VOC/train/VOCdevkit/VOC2007/images/003047.jpg -./VOC/train/VOCdevkit/VOC2007/images/003051.jpg -./VOC/train/VOCdevkit/VOC2007/images/003053.jpg -./VOC/train/VOCdevkit/VOC2007/images/003054.jpg -./VOC/train/VOCdevkit/VOC2007/images/003056.jpg -./VOC/train/VOCdevkit/VOC2007/images/003057.jpg -./VOC/train/VOCdevkit/VOC2007/images/003058.jpg -./VOC/train/VOCdevkit/VOC2007/images/003061.jpg -./VOC/train/VOCdevkit/VOC2007/images/003063.jpg -./VOC/train/VOCdevkit/VOC2007/images/003064.jpg -./VOC/train/VOCdevkit/VOC2007/images/003065.jpg -./VOC/train/VOCdevkit/VOC2007/images/003066.jpg -./VOC/train/VOCdevkit/VOC2007/images/003072.jpg -./VOC/train/VOCdevkit/VOC2007/images/003074.jpg -./VOC/train/VOCdevkit/VOC2007/images/003077.jpg -./VOC/train/VOCdevkit/VOC2007/images/003078.jpg -./VOC/train/VOCdevkit/VOC2007/images/003082.jpg -./VOC/train/VOCdevkit/VOC2007/images/003083.jpg -./VOC/train/VOCdevkit/VOC2007/images/003085.jpg -./VOC/train/VOCdevkit/VOC2007/images/003086.jpg -./VOC/train/VOCdevkit/VOC2007/images/003088.jpg -./VOC/train/VOCdevkit/VOC2007/images/003089.jpg -./VOC/train/VOCdevkit/VOC2007/images/003090.jpg -./VOC/train/VOCdevkit/VOC2007/images/003092.jpg -./VOC/train/VOCdevkit/VOC2007/images/003093.jpg -./VOC/train/VOCdevkit/VOC2007/images/003094.jpg -./VOC/train/VOCdevkit/VOC2007/images/003098.jpg -./VOC/train/VOCdevkit/VOC2007/images/003100.jpg -./VOC/train/VOCdevkit/VOC2007/images/003102.jpg -./VOC/train/VOCdevkit/VOC2007/images/003103.jpg -./VOC/train/VOCdevkit/VOC2007/images/003105.jpg -./VOC/train/VOCdevkit/VOC2007/images/003106.jpg -./VOC/train/VOCdevkit/VOC2007/images/003107.jpg -./VOC/train/VOCdevkit/VOC2007/images/003108.jpg -./VOC/train/VOCdevkit/VOC2007/images/003110.jpg -./VOC/train/VOCdevkit/VOC2007/images/003112.jpg -./VOC/train/VOCdevkit/VOC2007/images/003116.jpg -./VOC/train/VOCdevkit/VOC2007/images/003117.jpg -./VOC/train/VOCdevkit/VOC2007/images/003118.jpg -./VOC/train/VOCdevkit/VOC2007/images/003120.jpg -./VOC/train/VOCdevkit/VOC2007/images/003121.jpg -./VOC/train/VOCdevkit/VOC2007/images/003122.jpg -./VOC/train/VOCdevkit/VOC2007/images/003124.jpg -./VOC/train/VOCdevkit/VOC2007/images/003126.jpg -./VOC/train/VOCdevkit/VOC2007/images/003127.jpg -./VOC/train/VOCdevkit/VOC2007/images/003129.jpg -./VOC/train/VOCdevkit/VOC2007/images/003133.jpg -./VOC/train/VOCdevkit/VOC2007/images/003134.jpg -./VOC/train/VOCdevkit/VOC2007/images/003135.jpg -./VOC/train/VOCdevkit/VOC2007/images/003137.jpg -./VOC/train/VOCdevkit/VOC2007/images/003138.jpg -./VOC/train/VOCdevkit/VOC2007/images/003140.jpg -./VOC/train/VOCdevkit/VOC2007/images/003142.jpg -./VOC/train/VOCdevkit/VOC2007/images/003145.jpg -./VOC/train/VOCdevkit/VOC2007/images/003146.jpg -./VOC/train/VOCdevkit/VOC2007/images/003147.jpg -./VOC/train/VOCdevkit/VOC2007/images/003149.jpg -./VOC/train/VOCdevkit/VOC2007/images/003150.jpg -./VOC/train/VOCdevkit/VOC2007/images/003154.jpg -./VOC/train/VOCdevkit/VOC2007/images/003155.jpg -./VOC/train/VOCdevkit/VOC2007/images/003157.jpg -./VOC/train/VOCdevkit/VOC2007/images/003159.jpg -./VOC/train/VOCdevkit/VOC2007/images/003161.jpg -./VOC/train/VOCdevkit/VOC2007/images/003162.jpg -./VOC/train/VOCdevkit/VOC2007/images/003163.jpg -./VOC/train/VOCdevkit/VOC2007/images/003164.jpg -./VOC/train/VOCdevkit/VOC2007/images/003165.jpg -./VOC/train/VOCdevkit/VOC2007/images/003169.jpg -./VOC/train/VOCdevkit/VOC2007/images/003170.jpg -./VOC/train/VOCdevkit/VOC2007/images/003175.jpg -./VOC/train/VOCdevkit/VOC2007/images/003176.jpg -./VOC/train/VOCdevkit/VOC2007/images/003177.jpg -./VOC/train/VOCdevkit/VOC2007/images/003178.jpg -./VOC/train/VOCdevkit/VOC2007/images/003181.jpg -./VOC/train/VOCdevkit/VOC2007/images/003183.jpg -./VOC/train/VOCdevkit/VOC2007/images/003184.jpg -./VOC/train/VOCdevkit/VOC2007/images/003185.jpg -./VOC/train/VOCdevkit/VOC2007/images/003186.jpg -./VOC/train/VOCdevkit/VOC2007/images/003188.jpg -./VOC/train/VOCdevkit/VOC2007/images/003189.jpg -./VOC/train/VOCdevkit/VOC2007/images/003194.jpg -./VOC/train/VOCdevkit/VOC2007/images/003195.jpg -./VOC/train/VOCdevkit/VOC2007/images/003199.jpg -./VOC/train/VOCdevkit/VOC2007/images/003200.jpg -./VOC/train/VOCdevkit/VOC2007/images/003202.jpg -./VOC/train/VOCdevkit/VOC2007/images/003204.jpg -./VOC/train/VOCdevkit/VOC2007/images/003205.jpg -./VOC/train/VOCdevkit/VOC2007/images/003207.jpg -./VOC/train/VOCdevkit/VOC2007/images/003210.jpg -./VOC/train/VOCdevkit/VOC2007/images/003211.jpg -./VOC/train/VOCdevkit/VOC2007/images/003213.jpg -./VOC/train/VOCdevkit/VOC2007/images/003214.jpg -./VOC/train/VOCdevkit/VOC2007/images/003216.jpg -./VOC/train/VOCdevkit/VOC2007/images/003218.jpg -./VOC/train/VOCdevkit/VOC2007/images/003219.jpg -./VOC/train/VOCdevkit/VOC2007/images/003223.jpg -./VOC/train/VOCdevkit/VOC2007/images/003228.jpg -./VOC/train/VOCdevkit/VOC2007/images/003229.jpg -./VOC/train/VOCdevkit/VOC2007/images/003231.jpg -./VOC/train/VOCdevkit/VOC2007/images/003233.jpg -./VOC/train/VOCdevkit/VOC2007/images/003236.jpg -./VOC/train/VOCdevkit/VOC2007/images/003239.jpg -./VOC/train/VOCdevkit/VOC2007/images/003240.jpg -./VOC/train/VOCdevkit/VOC2007/images/003242.jpg -./VOC/train/VOCdevkit/VOC2007/images/003243.jpg -./VOC/train/VOCdevkit/VOC2007/images/003244.jpg -./VOC/train/VOCdevkit/VOC2007/images/003247.jpg -./VOC/train/VOCdevkit/VOC2007/images/003250.jpg -./VOC/train/VOCdevkit/VOC2007/images/003253.jpg -./VOC/train/VOCdevkit/VOC2007/images/003254.jpg -./VOC/train/VOCdevkit/VOC2007/images/003255.jpg -./VOC/train/VOCdevkit/VOC2007/images/003256.jpg -./VOC/train/VOCdevkit/VOC2007/images/003258.jpg -./VOC/train/VOCdevkit/VOC2007/images/003259.jpg -./VOC/train/VOCdevkit/VOC2007/images/003260.jpg -./VOC/train/VOCdevkit/VOC2007/images/003261.jpg -./VOC/train/VOCdevkit/VOC2007/images/003262.jpg -./VOC/train/VOCdevkit/VOC2007/images/003269.jpg -./VOC/train/VOCdevkit/VOC2007/images/003270.jpg -./VOC/train/VOCdevkit/VOC2007/images/003271.jpg -./VOC/train/VOCdevkit/VOC2007/images/003272.jpg -./VOC/train/VOCdevkit/VOC2007/images/003273.jpg -./VOC/train/VOCdevkit/VOC2007/images/003274.jpg -./VOC/train/VOCdevkit/VOC2007/images/003279.jpg -./VOC/train/VOCdevkit/VOC2007/images/003280.jpg -./VOC/train/VOCdevkit/VOC2007/images/003282.jpg -./VOC/train/VOCdevkit/VOC2007/images/003284.jpg -./VOC/train/VOCdevkit/VOC2007/images/003285.jpg -./VOC/train/VOCdevkit/VOC2007/images/003290.jpg -./VOC/train/VOCdevkit/VOC2007/images/003292.jpg -./VOC/train/VOCdevkit/VOC2007/images/003293.jpg -./VOC/train/VOCdevkit/VOC2007/images/003294.jpg -./VOC/train/VOCdevkit/VOC2007/images/003296.jpg -./VOC/train/VOCdevkit/VOC2007/images/003299.jpg -./VOC/train/VOCdevkit/VOC2007/images/003300.jpg -./VOC/train/VOCdevkit/VOC2007/images/003301.jpg -./VOC/train/VOCdevkit/VOC2007/images/003303.jpg -./VOC/train/VOCdevkit/VOC2007/images/003307.jpg -./VOC/train/VOCdevkit/VOC2007/images/003308.jpg -./VOC/train/VOCdevkit/VOC2007/images/003311.jpg -./VOC/train/VOCdevkit/VOC2007/images/003313.jpg -./VOC/train/VOCdevkit/VOC2007/images/003316.jpg -./VOC/train/VOCdevkit/VOC2007/images/003320.jpg -./VOC/train/VOCdevkit/VOC2007/images/003325.jpg -./VOC/train/VOCdevkit/VOC2007/images/003327.jpg -./VOC/train/VOCdevkit/VOC2007/images/003330.jpg -./VOC/train/VOCdevkit/VOC2007/images/003331.jpg -./VOC/train/VOCdevkit/VOC2007/images/003335.jpg -./VOC/train/VOCdevkit/VOC2007/images/003336.jpg -./VOC/train/VOCdevkit/VOC2007/images/003337.jpg -./VOC/train/VOCdevkit/VOC2007/images/003338.jpg -./VOC/train/VOCdevkit/VOC2007/images/003339.jpg -./VOC/train/VOCdevkit/VOC2007/images/003343.jpg -./VOC/train/VOCdevkit/VOC2007/images/003344.jpg -./VOC/train/VOCdevkit/VOC2007/images/003349.jpg -./VOC/train/VOCdevkit/VOC2007/images/003350.jpg -./VOC/train/VOCdevkit/VOC2007/images/003351.jpg -./VOC/train/VOCdevkit/VOC2007/images/003354.jpg -./VOC/train/VOCdevkit/VOC2007/images/003355.jpg -./VOC/train/VOCdevkit/VOC2007/images/003356.jpg -./VOC/train/VOCdevkit/VOC2007/images/003359.jpg -./VOC/train/VOCdevkit/VOC2007/images/003360.jpg -./VOC/train/VOCdevkit/VOC2007/images/003362.jpg -./VOC/train/VOCdevkit/VOC2007/images/003363.jpg -./VOC/train/VOCdevkit/VOC2007/images/003365.jpg -./VOC/train/VOCdevkit/VOC2007/images/003367.jpg -./VOC/train/VOCdevkit/VOC2007/images/003369.jpg -./VOC/train/VOCdevkit/VOC2007/images/003370.jpg -./VOC/train/VOCdevkit/VOC2007/images/003373.jpg -./VOC/train/VOCdevkit/VOC2007/images/003374.jpg -./VOC/train/VOCdevkit/VOC2007/images/003376.jpg -./VOC/train/VOCdevkit/VOC2007/images/003377.jpg -./VOC/train/VOCdevkit/VOC2007/images/003379.jpg -./VOC/train/VOCdevkit/VOC2007/images/003380.jpg -./VOC/train/VOCdevkit/VOC2007/images/003382.jpg -./VOC/train/VOCdevkit/VOC2007/images/003386.jpg -./VOC/train/VOCdevkit/VOC2007/images/003390.jpg -./VOC/train/VOCdevkit/VOC2007/images/003391.jpg -./VOC/train/VOCdevkit/VOC2007/images/003392.jpg -./VOC/train/VOCdevkit/VOC2007/images/003395.jpg -./VOC/train/VOCdevkit/VOC2007/images/003396.jpg -./VOC/train/VOCdevkit/VOC2007/images/003397.jpg -./VOC/train/VOCdevkit/VOC2007/images/003398.jpg -./VOC/train/VOCdevkit/VOC2007/images/003401.jpg -./VOC/train/VOCdevkit/VOC2007/images/003403.jpg -./VOC/train/VOCdevkit/VOC2007/images/003404.jpg -./VOC/train/VOCdevkit/VOC2007/images/003406.jpg -./VOC/train/VOCdevkit/VOC2007/images/003407.jpg -./VOC/train/VOCdevkit/VOC2007/images/003408.jpg -./VOC/train/VOCdevkit/VOC2007/images/003410.jpg -./VOC/train/VOCdevkit/VOC2007/images/003412.jpg -./VOC/train/VOCdevkit/VOC2007/images/003413.jpg -./VOC/train/VOCdevkit/VOC2007/images/003415.jpg -./VOC/train/VOCdevkit/VOC2007/images/003416.jpg -./VOC/train/VOCdevkit/VOC2007/images/003417.jpg -./VOC/train/VOCdevkit/VOC2007/images/003419.jpg -./VOC/train/VOCdevkit/VOC2007/images/003420.jpg -./VOC/train/VOCdevkit/VOC2007/images/003421.jpg -./VOC/train/VOCdevkit/VOC2007/images/003422.jpg -./VOC/train/VOCdevkit/VOC2007/images/003424.jpg -./VOC/train/VOCdevkit/VOC2007/images/003425.jpg -./VOC/train/VOCdevkit/VOC2007/images/003429.jpg -./VOC/train/VOCdevkit/VOC2007/images/003430.jpg -./VOC/train/VOCdevkit/VOC2007/images/003433.jpg -./VOC/train/VOCdevkit/VOC2007/images/003435.jpg -./VOC/train/VOCdevkit/VOC2007/images/003436.jpg -./VOC/train/VOCdevkit/VOC2007/images/003439.jpg -./VOC/train/VOCdevkit/VOC2007/images/003441.jpg -./VOC/train/VOCdevkit/VOC2007/images/003443.jpg -./VOC/train/VOCdevkit/VOC2007/images/003444.jpg -./VOC/train/VOCdevkit/VOC2007/images/003449.jpg -./VOC/train/VOCdevkit/VOC2007/images/003450.jpg -./VOC/train/VOCdevkit/VOC2007/images/003451.jpg -./VOC/train/VOCdevkit/VOC2007/images/003452.jpg -./VOC/train/VOCdevkit/VOC2007/images/003453.jpg -./VOC/train/VOCdevkit/VOC2007/images/003455.jpg -./VOC/train/VOCdevkit/VOC2007/images/003458.jpg -./VOC/train/VOCdevkit/VOC2007/images/003461.jpg -./VOC/train/VOCdevkit/VOC2007/images/003462.jpg -./VOC/train/VOCdevkit/VOC2007/images/003464.jpg -./VOC/train/VOCdevkit/VOC2007/images/003465.jpg -./VOC/train/VOCdevkit/VOC2007/images/003466.jpg -./VOC/train/VOCdevkit/VOC2007/images/003468.jpg -./VOC/train/VOCdevkit/VOC2007/images/003469.jpg -./VOC/train/VOCdevkit/VOC2007/images/003470.jpg -./VOC/train/VOCdevkit/VOC2007/images/003477.jpg -./VOC/train/VOCdevkit/VOC2007/images/003484.jpg -./VOC/train/VOCdevkit/VOC2007/images/003487.jpg -./VOC/train/VOCdevkit/VOC2007/images/003489.jpg -./VOC/train/VOCdevkit/VOC2007/images/003491.jpg -./VOC/train/VOCdevkit/VOC2007/images/003492.jpg -./VOC/train/VOCdevkit/VOC2007/images/003493.jpg -./VOC/train/VOCdevkit/VOC2007/images/003496.jpg -./VOC/train/VOCdevkit/VOC2007/images/003497.jpg -./VOC/train/VOCdevkit/VOC2007/images/003499.jpg -./VOC/train/VOCdevkit/VOC2007/images/003500.jpg -./VOC/train/VOCdevkit/VOC2007/images/003506.jpg -./VOC/train/VOCdevkit/VOC2007/images/003508.jpg -./VOC/train/VOCdevkit/VOC2007/images/003509.jpg -./VOC/train/VOCdevkit/VOC2007/images/003510.jpg -./VOC/train/VOCdevkit/VOC2007/images/003511.jpg -./VOC/train/VOCdevkit/VOC2007/images/003516.jpg -./VOC/train/VOCdevkit/VOC2007/images/003518.jpg -./VOC/train/VOCdevkit/VOC2007/images/003519.jpg -./VOC/train/VOCdevkit/VOC2007/images/003521.jpg -./VOC/train/VOCdevkit/VOC2007/images/003522.jpg -./VOC/train/VOCdevkit/VOC2007/images/003524.jpg -./VOC/train/VOCdevkit/VOC2007/images/003525.jpg -./VOC/train/VOCdevkit/VOC2007/images/003528.jpg -./VOC/train/VOCdevkit/VOC2007/images/003529.jpg -./VOC/train/VOCdevkit/VOC2007/images/003530.jpg -./VOC/train/VOCdevkit/VOC2007/images/003536.jpg -./VOC/train/VOCdevkit/VOC2007/images/003537.jpg -./VOC/train/VOCdevkit/VOC2007/images/003539.jpg -./VOC/train/VOCdevkit/VOC2007/images/003546.jpg -./VOC/train/VOCdevkit/VOC2007/images/003548.jpg -./VOC/train/VOCdevkit/VOC2007/images/003549.jpg -./VOC/train/VOCdevkit/VOC2007/images/003550.jpg -./VOC/train/VOCdevkit/VOC2007/images/003551.jpg -./VOC/train/VOCdevkit/VOC2007/images/003554.jpg -./VOC/train/VOCdevkit/VOC2007/images/003555.jpg -./VOC/train/VOCdevkit/VOC2007/images/003556.jpg -./VOC/train/VOCdevkit/VOC2007/images/003564.jpg -./VOC/train/VOCdevkit/VOC2007/images/003565.jpg -./VOC/train/VOCdevkit/VOC2007/images/003566.jpg -./VOC/train/VOCdevkit/VOC2007/images/003567.jpg -./VOC/train/VOCdevkit/VOC2007/images/003575.jpg -./VOC/train/VOCdevkit/VOC2007/images/003576.jpg -./VOC/train/VOCdevkit/VOC2007/images/003577.jpg -./VOC/train/VOCdevkit/VOC2007/images/003580.jpg -./VOC/train/VOCdevkit/VOC2007/images/003585.jpg -./VOC/train/VOCdevkit/VOC2007/images/003586.jpg -./VOC/train/VOCdevkit/VOC2007/images/003587.jpg -./VOC/train/VOCdevkit/VOC2007/images/003588.jpg -./VOC/train/VOCdevkit/VOC2007/images/003589.jpg -./VOC/train/VOCdevkit/VOC2007/images/003593.jpg -./VOC/train/VOCdevkit/VOC2007/images/003594.jpg -./VOC/train/VOCdevkit/VOC2007/images/003596.jpg -./VOC/train/VOCdevkit/VOC2007/images/003597.jpg -./VOC/train/VOCdevkit/VOC2007/images/003599.jpg -./VOC/train/VOCdevkit/VOC2007/images/003603.jpg -./VOC/train/VOCdevkit/VOC2007/images/003604.jpg -./VOC/train/VOCdevkit/VOC2007/images/003605.jpg -./VOC/train/VOCdevkit/VOC2007/images/003606.jpg -./VOC/train/VOCdevkit/VOC2007/images/003608.jpg -./VOC/train/VOCdevkit/VOC2007/images/003609.jpg -./VOC/train/VOCdevkit/VOC2007/images/003611.jpg -./VOC/train/VOCdevkit/VOC2007/images/003614.jpg -./VOC/train/VOCdevkit/VOC2007/images/003618.jpg -./VOC/train/VOCdevkit/VOC2007/images/003620.jpg -./VOC/train/VOCdevkit/VOC2007/images/003621.jpg -./VOC/train/VOCdevkit/VOC2007/images/003622.jpg -./VOC/train/VOCdevkit/VOC2007/images/003623.jpg -./VOC/train/VOCdevkit/VOC2007/images/003625.jpg -./VOC/train/VOCdevkit/VOC2007/images/003627.jpg -./VOC/train/VOCdevkit/VOC2007/images/003628.jpg -./VOC/train/VOCdevkit/VOC2007/images/003629.jpg -./VOC/train/VOCdevkit/VOC2007/images/003632.jpg -./VOC/train/VOCdevkit/VOC2007/images/003634.jpg -./VOC/train/VOCdevkit/VOC2007/images/003635.jpg -./VOC/train/VOCdevkit/VOC2007/images/003636.jpg -./VOC/train/VOCdevkit/VOC2007/images/003638.jpg -./VOC/train/VOCdevkit/VOC2007/images/003639.jpg -./VOC/train/VOCdevkit/VOC2007/images/003640.jpg -./VOC/train/VOCdevkit/VOC2007/images/003642.jpg -./VOC/train/VOCdevkit/VOC2007/images/003644.jpg -./VOC/train/VOCdevkit/VOC2007/images/003645.jpg -./VOC/train/VOCdevkit/VOC2007/images/003646.jpg -./VOC/train/VOCdevkit/VOC2007/images/003648.jpg -./VOC/train/VOCdevkit/VOC2007/images/003651.jpg -./VOC/train/VOCdevkit/VOC2007/images/003654.jpg -./VOC/train/VOCdevkit/VOC2007/images/003655.jpg -./VOC/train/VOCdevkit/VOC2007/images/003656.jpg -./VOC/train/VOCdevkit/VOC2007/images/003657.jpg -./VOC/train/VOCdevkit/VOC2007/images/003658.jpg -./VOC/train/VOCdevkit/VOC2007/images/003660.jpg -./VOC/train/VOCdevkit/VOC2007/images/003662.jpg -./VOC/train/VOCdevkit/VOC2007/images/003663.jpg -./VOC/train/VOCdevkit/VOC2007/images/003664.jpg -./VOC/train/VOCdevkit/VOC2007/images/003667.jpg -./VOC/train/VOCdevkit/VOC2007/images/003669.jpg -./VOC/train/VOCdevkit/VOC2007/images/003671.jpg -./VOC/train/VOCdevkit/VOC2007/images/003673.jpg -./VOC/train/VOCdevkit/VOC2007/images/003674.jpg -./VOC/train/VOCdevkit/VOC2007/images/003675.jpg -./VOC/train/VOCdevkit/VOC2007/images/003678.jpg -./VOC/train/VOCdevkit/VOC2007/images/003679.jpg -./VOC/train/VOCdevkit/VOC2007/images/003681.jpg -./VOC/train/VOCdevkit/VOC2007/images/003684.jpg -./VOC/train/VOCdevkit/VOC2007/images/003685.jpg -./VOC/train/VOCdevkit/VOC2007/images/003688.jpg -./VOC/train/VOCdevkit/VOC2007/images/003690.jpg -./VOC/train/VOCdevkit/VOC2007/images/003691.jpg -./VOC/train/VOCdevkit/VOC2007/images/003694.jpg -./VOC/train/VOCdevkit/VOC2007/images/003695.jpg -./VOC/train/VOCdevkit/VOC2007/images/003696.jpg -./VOC/train/VOCdevkit/VOC2007/images/003698.jpg -./VOC/train/VOCdevkit/VOC2007/images/003699.jpg -./VOC/train/VOCdevkit/VOC2007/images/003700.jpg -./VOC/train/VOCdevkit/VOC2007/images/003703.jpg -./VOC/train/VOCdevkit/VOC2007/images/003704.jpg -./VOC/train/VOCdevkit/VOC2007/images/003705.jpg -./VOC/train/VOCdevkit/VOC2007/images/003706.jpg -./VOC/train/VOCdevkit/VOC2007/images/003708.jpg -./VOC/train/VOCdevkit/VOC2007/images/003709.jpg -./VOC/train/VOCdevkit/VOC2007/images/003711.jpg -./VOC/train/VOCdevkit/VOC2007/images/003713.jpg -./VOC/train/VOCdevkit/VOC2007/images/003714.jpg -./VOC/train/VOCdevkit/VOC2007/images/003717.jpg -./VOC/train/VOCdevkit/VOC2007/images/003721.jpg -./VOC/train/VOCdevkit/VOC2007/images/003722.jpg -./VOC/train/VOCdevkit/VOC2007/images/003727.jpg -./VOC/train/VOCdevkit/VOC2007/images/003729.jpg -./VOC/train/VOCdevkit/VOC2007/images/003732.jpg -./VOC/train/VOCdevkit/VOC2007/images/003735.jpg -./VOC/train/VOCdevkit/VOC2007/images/003740.jpg -./VOC/train/VOCdevkit/VOC2007/images/003743.jpg -./VOC/train/VOCdevkit/VOC2007/images/003748.jpg -./VOC/train/VOCdevkit/VOC2007/images/003749.jpg -./VOC/train/VOCdevkit/VOC2007/images/003750.jpg -./VOC/train/VOCdevkit/VOC2007/images/003751.jpg -./VOC/train/VOCdevkit/VOC2007/images/003752.jpg -./VOC/train/VOCdevkit/VOC2007/images/003753.jpg -./VOC/train/VOCdevkit/VOC2007/images/003754.jpg -./VOC/train/VOCdevkit/VOC2007/images/003758.jpg -./VOC/train/VOCdevkit/VOC2007/images/003759.jpg -./VOC/train/VOCdevkit/VOC2007/images/003760.jpg -./VOC/train/VOCdevkit/VOC2007/images/003763.jpg -./VOC/train/VOCdevkit/VOC2007/images/003767.jpg -./VOC/train/VOCdevkit/VOC2007/images/003772.jpg -./VOC/train/VOCdevkit/VOC2007/images/003773.jpg -./VOC/train/VOCdevkit/VOC2007/images/003774.jpg -./VOC/train/VOCdevkit/VOC2007/images/003779.jpg -./VOC/train/VOCdevkit/VOC2007/images/003780.jpg -./VOC/train/VOCdevkit/VOC2007/images/003781.jpg -./VOC/train/VOCdevkit/VOC2007/images/003783.jpg -./VOC/train/VOCdevkit/VOC2007/images/003784.jpg -./VOC/train/VOCdevkit/VOC2007/images/003786.jpg -./VOC/train/VOCdevkit/VOC2007/images/003788.jpg -./VOC/train/VOCdevkit/VOC2007/images/003790.jpg -./VOC/train/VOCdevkit/VOC2007/images/003791.jpg -./VOC/train/VOCdevkit/VOC2007/images/003792.jpg -./VOC/train/VOCdevkit/VOC2007/images/003793.jpg -./VOC/train/VOCdevkit/VOC2007/images/003796.jpg -./VOC/train/VOCdevkit/VOC2007/images/003797.jpg -./VOC/train/VOCdevkit/VOC2007/images/003798.jpg -./VOC/train/VOCdevkit/VOC2007/images/003803.jpg -./VOC/train/VOCdevkit/VOC2007/images/003806.jpg -./VOC/train/VOCdevkit/VOC2007/images/003807.jpg -./VOC/train/VOCdevkit/VOC2007/images/003808.jpg -./VOC/train/VOCdevkit/VOC2007/images/003809.jpg -./VOC/train/VOCdevkit/VOC2007/images/003811.jpg -./VOC/train/VOCdevkit/VOC2007/images/003814.jpg -./VOC/train/VOCdevkit/VOC2007/images/003817.jpg -./VOC/train/VOCdevkit/VOC2007/images/003818.jpg -./VOC/train/VOCdevkit/VOC2007/images/003820.jpg -./VOC/train/VOCdevkit/VOC2007/images/003821.jpg -./VOC/train/VOCdevkit/VOC2007/images/003824.jpg -./VOC/train/VOCdevkit/VOC2007/images/003826.jpg -./VOC/train/VOCdevkit/VOC2007/images/003827.jpg -./VOC/train/VOCdevkit/VOC2007/images/003828.jpg -./VOC/train/VOCdevkit/VOC2007/images/003830.jpg -./VOC/train/VOCdevkit/VOC2007/images/003834.jpg -./VOC/train/VOCdevkit/VOC2007/images/003835.jpg -./VOC/train/VOCdevkit/VOC2007/images/003837.jpg -./VOC/train/VOCdevkit/VOC2007/images/003838.jpg -./VOC/train/VOCdevkit/VOC2007/images/003844.jpg -./VOC/train/VOCdevkit/VOC2007/images/003845.jpg -./VOC/train/VOCdevkit/VOC2007/images/003846.jpg -./VOC/train/VOCdevkit/VOC2007/images/003847.jpg -./VOC/train/VOCdevkit/VOC2007/images/003848.jpg -./VOC/train/VOCdevkit/VOC2007/images/003849.jpg -./VOC/train/VOCdevkit/VOC2007/images/003855.jpg -./VOC/train/VOCdevkit/VOC2007/images/003856.jpg -./VOC/train/VOCdevkit/VOC2007/images/003857.jpg -./VOC/train/VOCdevkit/VOC2007/images/003859.jpg -./VOC/train/VOCdevkit/VOC2007/images/003860.jpg -./VOC/train/VOCdevkit/VOC2007/images/003861.jpg -./VOC/train/VOCdevkit/VOC2007/images/003863.jpg -./VOC/train/VOCdevkit/VOC2007/images/003865.jpg -./VOC/train/VOCdevkit/VOC2007/images/003866.jpg -./VOC/train/VOCdevkit/VOC2007/images/003868.jpg -./VOC/train/VOCdevkit/VOC2007/images/003869.jpg -./VOC/train/VOCdevkit/VOC2007/images/003871.jpg -./VOC/train/VOCdevkit/VOC2007/images/003872.jpg -./VOC/train/VOCdevkit/VOC2007/images/003874.jpg -./VOC/train/VOCdevkit/VOC2007/images/003876.jpg -./VOC/train/VOCdevkit/VOC2007/images/003877.jpg -./VOC/train/VOCdevkit/VOC2007/images/003879.jpg -./VOC/train/VOCdevkit/VOC2007/images/003885.jpg -./VOC/train/VOCdevkit/VOC2007/images/003886.jpg -./VOC/train/VOCdevkit/VOC2007/images/003887.jpg -./VOC/train/VOCdevkit/VOC2007/images/003889.jpg -./VOC/train/VOCdevkit/VOC2007/images/003890.jpg -./VOC/train/VOCdevkit/VOC2007/images/003891.jpg -./VOC/train/VOCdevkit/VOC2007/images/003895.jpg -./VOC/train/VOCdevkit/VOC2007/images/003898.jpg -./VOC/train/VOCdevkit/VOC2007/images/003899.jpg -./VOC/train/VOCdevkit/VOC2007/images/003905.jpg -./VOC/train/VOCdevkit/VOC2007/images/003907.jpg -./VOC/train/VOCdevkit/VOC2007/images/003911.jpg -./VOC/train/VOCdevkit/VOC2007/images/003912.jpg -./VOC/train/VOCdevkit/VOC2007/images/003913.jpg -./VOC/train/VOCdevkit/VOC2007/images/003915.jpg -./VOC/train/VOCdevkit/VOC2007/images/003918.jpg -./VOC/train/VOCdevkit/VOC2007/images/003919.jpg -./VOC/train/VOCdevkit/VOC2007/images/003921.jpg -./VOC/train/VOCdevkit/VOC2007/images/003923.jpg -./VOC/train/VOCdevkit/VOC2007/images/003924.jpg -./VOC/train/VOCdevkit/VOC2007/images/003926.jpg -./VOC/train/VOCdevkit/VOC2007/images/003932.jpg -./VOC/train/VOCdevkit/VOC2007/images/003935.jpg -./VOC/train/VOCdevkit/VOC2007/images/003936.jpg -./VOC/train/VOCdevkit/VOC2007/images/003937.jpg -./VOC/train/VOCdevkit/VOC2007/images/003939.jpg -./VOC/train/VOCdevkit/VOC2007/images/003941.jpg -./VOC/train/VOCdevkit/VOC2007/images/003945.jpg -./VOC/train/VOCdevkit/VOC2007/images/003946.jpg -./VOC/train/VOCdevkit/VOC2007/images/003947.jpg -./VOC/train/VOCdevkit/VOC2007/images/003948.jpg -./VOC/train/VOCdevkit/VOC2007/images/003949.jpg -./VOC/train/VOCdevkit/VOC2007/images/003953.jpg -./VOC/train/VOCdevkit/VOC2007/images/003954.jpg -./VOC/train/VOCdevkit/VOC2007/images/003956.jpg -./VOC/train/VOCdevkit/VOC2007/images/003957.jpg -./VOC/train/VOCdevkit/VOC2007/images/003960.jpg -./VOC/train/VOCdevkit/VOC2007/images/003961.jpg -./VOC/train/VOCdevkit/VOC2007/images/003963.jpg -./VOC/train/VOCdevkit/VOC2007/images/003965.jpg -./VOC/train/VOCdevkit/VOC2007/images/003966.jpg -./VOC/train/VOCdevkit/VOC2007/images/003969.jpg -./VOC/train/VOCdevkit/VOC2007/images/003970.jpg -./VOC/train/VOCdevkit/VOC2007/images/003971.jpg -./VOC/train/VOCdevkit/VOC2007/images/003973.jpg -./VOC/train/VOCdevkit/VOC2007/images/003974.jpg -./VOC/train/VOCdevkit/VOC2007/images/003979.jpg -./VOC/train/VOCdevkit/VOC2007/images/003983.jpg -./VOC/train/VOCdevkit/VOC2007/images/003984.jpg -./VOC/train/VOCdevkit/VOC2007/images/003986.jpg -./VOC/train/VOCdevkit/VOC2007/images/003987.jpg -./VOC/train/VOCdevkit/VOC2007/images/003988.jpg -./VOC/train/VOCdevkit/VOC2007/images/003990.jpg -./VOC/train/VOCdevkit/VOC2007/images/003991.jpg -./VOC/train/VOCdevkit/VOC2007/images/003992.jpg -./VOC/train/VOCdevkit/VOC2007/images/003993.jpg -./VOC/train/VOCdevkit/VOC2007/images/003994.jpg -./VOC/train/VOCdevkit/VOC2007/images/003996.jpg -./VOC/train/VOCdevkit/VOC2007/images/003997.jpg -./VOC/train/VOCdevkit/VOC2007/images/003998.jpg -./VOC/train/VOCdevkit/VOC2007/images/004003.jpg -./VOC/train/VOCdevkit/VOC2007/images/004005.jpg -./VOC/train/VOCdevkit/VOC2007/images/004008.jpg -./VOC/train/VOCdevkit/VOC2007/images/004009.jpg -./VOC/train/VOCdevkit/VOC2007/images/004010.jpg -./VOC/train/VOCdevkit/VOC2007/images/004011.jpg -./VOC/train/VOCdevkit/VOC2007/images/004012.jpg -./VOC/train/VOCdevkit/VOC2007/images/004013.jpg -./VOC/train/VOCdevkit/VOC2007/images/004014.jpg -./VOC/train/VOCdevkit/VOC2007/images/004015.jpg -./VOC/train/VOCdevkit/VOC2007/images/004016.jpg -./VOC/train/VOCdevkit/VOC2007/images/004017.jpg -./VOC/train/VOCdevkit/VOC2007/images/004019.jpg -./VOC/train/VOCdevkit/VOC2007/images/004020.jpg -./VOC/train/VOCdevkit/VOC2007/images/004023.jpg -./VOC/train/VOCdevkit/VOC2007/images/004025.jpg -./VOC/train/VOCdevkit/VOC2007/images/004028.jpg -./VOC/train/VOCdevkit/VOC2007/images/004031.jpg -./VOC/train/VOCdevkit/VOC2007/images/004033.jpg -./VOC/train/VOCdevkit/VOC2007/images/004034.jpg -./VOC/train/VOCdevkit/VOC2007/images/004035.jpg -./VOC/train/VOCdevkit/VOC2007/images/004037.jpg -./VOC/train/VOCdevkit/VOC2007/images/004039.jpg -./VOC/train/VOCdevkit/VOC2007/images/004046.jpg -./VOC/train/VOCdevkit/VOC2007/images/004047.jpg -./VOC/train/VOCdevkit/VOC2007/images/004051.jpg -./VOC/train/VOCdevkit/VOC2007/images/004052.jpg -./VOC/train/VOCdevkit/VOC2007/images/004057.jpg -./VOC/train/VOCdevkit/VOC2007/images/004058.jpg -./VOC/train/VOCdevkit/VOC2007/images/004060.jpg -./VOC/train/VOCdevkit/VOC2007/images/004066.jpg -./VOC/train/VOCdevkit/VOC2007/images/004067.jpg -./VOC/train/VOCdevkit/VOC2007/images/004069.jpg -./VOC/train/VOCdevkit/VOC2007/images/004073.jpg -./VOC/train/VOCdevkit/VOC2007/images/004075.jpg -./VOC/train/VOCdevkit/VOC2007/images/004076.jpg -./VOC/train/VOCdevkit/VOC2007/images/004077.jpg -./VOC/train/VOCdevkit/VOC2007/images/004082.jpg -./VOC/train/VOCdevkit/VOC2007/images/004085.jpg -./VOC/train/VOCdevkit/VOC2007/images/004087.jpg -./VOC/train/VOCdevkit/VOC2007/images/004089.jpg -./VOC/train/VOCdevkit/VOC2007/images/004091.jpg -./VOC/train/VOCdevkit/VOC2007/images/004092.jpg -./VOC/train/VOCdevkit/VOC2007/images/004093.jpg -./VOC/train/VOCdevkit/VOC2007/images/004095.jpg -./VOC/train/VOCdevkit/VOC2007/images/004100.jpg -./VOC/train/VOCdevkit/VOC2007/images/004102.jpg -./VOC/train/VOCdevkit/VOC2007/images/004105.jpg -./VOC/train/VOCdevkit/VOC2007/images/004106.jpg -./VOC/train/VOCdevkit/VOC2007/images/004108.jpg -./VOC/train/VOCdevkit/VOC2007/images/004110.jpg -./VOC/train/VOCdevkit/VOC2007/images/004111.jpg -./VOC/train/VOCdevkit/VOC2007/images/004113.jpg -./VOC/train/VOCdevkit/VOC2007/images/004117.jpg -./VOC/train/VOCdevkit/VOC2007/images/004120.jpg -./VOC/train/VOCdevkit/VOC2007/images/004121.jpg -./VOC/train/VOCdevkit/VOC2007/images/004122.jpg -./VOC/train/VOCdevkit/VOC2007/images/004129.jpg -./VOC/train/VOCdevkit/VOC2007/images/004131.jpg -./VOC/train/VOCdevkit/VOC2007/images/004133.jpg -./VOC/train/VOCdevkit/VOC2007/images/004135.jpg -./VOC/train/VOCdevkit/VOC2007/images/004136.jpg -./VOC/train/VOCdevkit/VOC2007/images/004137.jpg -./VOC/train/VOCdevkit/VOC2007/images/004138.jpg -./VOC/train/VOCdevkit/VOC2007/images/004140.jpg -./VOC/train/VOCdevkit/VOC2007/images/004141.jpg -./VOC/train/VOCdevkit/VOC2007/images/004142.jpg -./VOC/train/VOCdevkit/VOC2007/images/004143.jpg -./VOC/train/VOCdevkit/VOC2007/images/004145.jpg -./VOC/train/VOCdevkit/VOC2007/images/004146.jpg -./VOC/train/VOCdevkit/VOC2007/images/004148.jpg -./VOC/train/VOCdevkit/VOC2007/images/004149.jpg -./VOC/train/VOCdevkit/VOC2007/images/004150.jpg -./VOC/train/VOCdevkit/VOC2007/images/004152.jpg -./VOC/train/VOCdevkit/VOC2007/images/004158.jpg -./VOC/train/VOCdevkit/VOC2007/images/004163.jpg -./VOC/train/VOCdevkit/VOC2007/images/004164.jpg -./VOC/train/VOCdevkit/VOC2007/images/004168.jpg -./VOC/train/VOCdevkit/VOC2007/images/004169.jpg -./VOC/train/VOCdevkit/VOC2007/images/004170.jpg -./VOC/train/VOCdevkit/VOC2007/images/004171.jpg -./VOC/train/VOCdevkit/VOC2007/images/004174.jpg -./VOC/train/VOCdevkit/VOC2007/images/004178.jpg -./VOC/train/VOCdevkit/VOC2007/images/004185.jpg -./VOC/train/VOCdevkit/VOC2007/images/004186.jpg -./VOC/train/VOCdevkit/VOC2007/images/004189.jpg -./VOC/train/VOCdevkit/VOC2007/images/004190.jpg -./VOC/train/VOCdevkit/VOC2007/images/004191.jpg -./VOC/train/VOCdevkit/VOC2007/images/004192.jpg -./VOC/train/VOCdevkit/VOC2007/images/004193.jpg -./VOC/train/VOCdevkit/VOC2007/images/004194.jpg -./VOC/train/VOCdevkit/VOC2007/images/004195.jpg -./VOC/train/VOCdevkit/VOC2007/images/004196.jpg -./VOC/train/VOCdevkit/VOC2007/images/004200.jpg -./VOC/train/VOCdevkit/VOC2007/images/004201.jpg -./VOC/train/VOCdevkit/VOC2007/images/004203.jpg -./VOC/train/VOCdevkit/VOC2007/images/004204.jpg -./VOC/train/VOCdevkit/VOC2007/images/004205.jpg -./VOC/train/VOCdevkit/VOC2007/images/004209.jpg -./VOC/train/VOCdevkit/VOC2007/images/004212.jpg -./VOC/train/VOCdevkit/VOC2007/images/004215.jpg -./VOC/train/VOCdevkit/VOC2007/images/004220.jpg -./VOC/train/VOCdevkit/VOC2007/images/004221.jpg -./VOC/train/VOCdevkit/VOC2007/images/004223.jpg -./VOC/train/VOCdevkit/VOC2007/images/004224.jpg -./VOC/train/VOCdevkit/VOC2007/images/004228.jpg -./VOC/train/VOCdevkit/VOC2007/images/004229.jpg -./VOC/train/VOCdevkit/VOC2007/images/004230.jpg -./VOC/train/VOCdevkit/VOC2007/images/004231.jpg -./VOC/train/VOCdevkit/VOC2007/images/004232.jpg -./VOC/train/VOCdevkit/VOC2007/images/004237.jpg -./VOC/train/VOCdevkit/VOC2007/images/004239.jpg -./VOC/train/VOCdevkit/VOC2007/images/004241.jpg -./VOC/train/VOCdevkit/VOC2007/images/004242.jpg -./VOC/train/VOCdevkit/VOC2007/images/004244.jpg -./VOC/train/VOCdevkit/VOC2007/images/004246.jpg -./VOC/train/VOCdevkit/VOC2007/images/004247.jpg -./VOC/train/VOCdevkit/VOC2007/images/004253.jpg -./VOC/train/VOCdevkit/VOC2007/images/004255.jpg -./VOC/train/VOCdevkit/VOC2007/images/004256.jpg -./VOC/train/VOCdevkit/VOC2007/images/004257.jpg -./VOC/train/VOCdevkit/VOC2007/images/004258.jpg -./VOC/train/VOCdevkit/VOC2007/images/004259.jpg -./VOC/train/VOCdevkit/VOC2007/images/004263.jpg -./VOC/train/VOCdevkit/VOC2007/images/004264.jpg -./VOC/train/VOCdevkit/VOC2007/images/004265.jpg -./VOC/train/VOCdevkit/VOC2007/images/004269.jpg -./VOC/train/VOCdevkit/VOC2007/images/004270.jpg -./VOC/train/VOCdevkit/VOC2007/images/004271.jpg -./VOC/train/VOCdevkit/VOC2007/images/004272.jpg -./VOC/train/VOCdevkit/VOC2007/images/004273.jpg -./VOC/train/VOCdevkit/VOC2007/images/004274.jpg -./VOC/train/VOCdevkit/VOC2007/images/004275.jpg -./VOC/train/VOCdevkit/VOC2007/images/004279.jpg -./VOC/train/VOCdevkit/VOC2007/images/004280.jpg -./VOC/train/VOCdevkit/VOC2007/images/004281.jpg -./VOC/train/VOCdevkit/VOC2007/images/004283.jpg -./VOC/train/VOCdevkit/VOC2007/images/004284.jpg -./VOC/train/VOCdevkit/VOC2007/images/004286.jpg -./VOC/train/VOCdevkit/VOC2007/images/004287.jpg -./VOC/train/VOCdevkit/VOC2007/images/004291.jpg -./VOC/train/VOCdevkit/VOC2007/images/004292.jpg -./VOC/train/VOCdevkit/VOC2007/images/004293.jpg -./VOC/train/VOCdevkit/VOC2007/images/004295.jpg -./VOC/train/VOCdevkit/VOC2007/images/004296.jpg -./VOC/train/VOCdevkit/VOC2007/images/004298.jpg -./VOC/train/VOCdevkit/VOC2007/images/004300.jpg -./VOC/train/VOCdevkit/VOC2007/images/004303.jpg -./VOC/train/VOCdevkit/VOC2007/images/004304.jpg -./VOC/train/VOCdevkit/VOC2007/images/004307.jpg -./VOC/train/VOCdevkit/VOC2007/images/004310.jpg -./VOC/train/VOCdevkit/VOC2007/images/004312.jpg -./VOC/train/VOCdevkit/VOC2007/images/004315.jpg -./VOC/train/VOCdevkit/VOC2007/images/004318.jpg -./VOC/train/VOCdevkit/VOC2007/images/004321.jpg -./VOC/train/VOCdevkit/VOC2007/images/004322.jpg -./VOC/train/VOCdevkit/VOC2007/images/004323.jpg -./VOC/train/VOCdevkit/VOC2007/images/004325.jpg -./VOC/train/VOCdevkit/VOC2007/images/004326.jpg -./VOC/train/VOCdevkit/VOC2007/images/004327.jpg -./VOC/train/VOCdevkit/VOC2007/images/004329.jpg -./VOC/train/VOCdevkit/VOC2007/images/004331.jpg -./VOC/train/VOCdevkit/VOC2007/images/004333.jpg -./VOC/train/VOCdevkit/VOC2007/images/004338.jpg -./VOC/train/VOCdevkit/VOC2007/images/004339.jpg -./VOC/train/VOCdevkit/VOC2007/images/004341.jpg -./VOC/train/VOCdevkit/VOC2007/images/004345.jpg -./VOC/train/VOCdevkit/VOC2007/images/004346.jpg -./VOC/train/VOCdevkit/VOC2007/images/004347.jpg -./VOC/train/VOCdevkit/VOC2007/images/004349.jpg -./VOC/train/VOCdevkit/VOC2007/images/004351.jpg -./VOC/train/VOCdevkit/VOC2007/images/004352.jpg -./VOC/train/VOCdevkit/VOC2007/images/004354.jpg -./VOC/train/VOCdevkit/VOC2007/images/004356.jpg -./VOC/train/VOCdevkit/VOC2007/images/004359.jpg -./VOC/train/VOCdevkit/VOC2007/images/004360.jpg -./VOC/train/VOCdevkit/VOC2007/images/004361.jpg -./VOC/train/VOCdevkit/VOC2007/images/004364.jpg -./VOC/train/VOCdevkit/VOC2007/images/004365.jpg -./VOC/train/VOCdevkit/VOC2007/images/004367.jpg -./VOC/train/VOCdevkit/VOC2007/images/004368.jpg -./VOC/train/VOCdevkit/VOC2007/images/004369.jpg -./VOC/train/VOCdevkit/VOC2007/images/004370.jpg -./VOC/train/VOCdevkit/VOC2007/images/004371.jpg -./VOC/train/VOCdevkit/VOC2007/images/004372.jpg -./VOC/train/VOCdevkit/VOC2007/images/004376.jpg -./VOC/train/VOCdevkit/VOC2007/images/004379.jpg -./VOC/train/VOCdevkit/VOC2007/images/004380.jpg -./VOC/train/VOCdevkit/VOC2007/images/004384.jpg -./VOC/train/VOCdevkit/VOC2007/images/004386.jpg -./VOC/train/VOCdevkit/VOC2007/images/004387.jpg -./VOC/train/VOCdevkit/VOC2007/images/004389.jpg -./VOC/train/VOCdevkit/VOC2007/images/004390.jpg -./VOC/train/VOCdevkit/VOC2007/images/004391.jpg -./VOC/train/VOCdevkit/VOC2007/images/004392.jpg -./VOC/train/VOCdevkit/VOC2007/images/004396.jpg -./VOC/train/VOCdevkit/VOC2007/images/004397.jpg -./VOC/train/VOCdevkit/VOC2007/images/004404.jpg -./VOC/train/VOCdevkit/VOC2007/images/004405.jpg -./VOC/train/VOCdevkit/VOC2007/images/004409.jpg -./VOC/train/VOCdevkit/VOC2007/images/004411.jpg -./VOC/train/VOCdevkit/VOC2007/images/004421.jpg -./VOC/train/VOCdevkit/VOC2007/images/004423.jpg -./VOC/train/VOCdevkit/VOC2007/images/004424.jpg -./VOC/train/VOCdevkit/VOC2007/images/004429.jpg -./VOC/train/VOCdevkit/VOC2007/images/004430.jpg -./VOC/train/VOCdevkit/VOC2007/images/004432.jpg -./VOC/train/VOCdevkit/VOC2007/images/004433.jpg -./VOC/train/VOCdevkit/VOC2007/images/004434.jpg -./VOC/train/VOCdevkit/VOC2007/images/004436.jpg -./VOC/train/VOCdevkit/VOC2007/images/004437.jpg -./VOC/train/VOCdevkit/VOC2007/images/004438.jpg -./VOC/train/VOCdevkit/VOC2007/images/004439.jpg -./VOC/train/VOCdevkit/VOC2007/images/004441.jpg -./VOC/train/VOCdevkit/VOC2007/images/004446.jpg -./VOC/train/VOCdevkit/VOC2007/images/004450.jpg -./VOC/train/VOCdevkit/VOC2007/images/004452.jpg -./VOC/train/VOCdevkit/VOC2007/images/004455.jpg -./VOC/train/VOCdevkit/VOC2007/images/004457.jpg -./VOC/train/VOCdevkit/VOC2007/images/004459.jpg -./VOC/train/VOCdevkit/VOC2007/images/004463.jpg -./VOC/train/VOCdevkit/VOC2007/images/004464.jpg -./VOC/train/VOCdevkit/VOC2007/images/004466.jpg -./VOC/train/VOCdevkit/VOC2007/images/004468.jpg -./VOC/train/VOCdevkit/VOC2007/images/004470.jpg -./VOC/train/VOCdevkit/VOC2007/images/004471.jpg -./VOC/train/VOCdevkit/VOC2007/images/004474.jpg -./VOC/train/VOCdevkit/VOC2007/images/004479.jpg -./VOC/train/VOCdevkit/VOC2007/images/004481.jpg -./VOC/train/VOCdevkit/VOC2007/images/004484.jpg -./VOC/train/VOCdevkit/VOC2007/images/004487.jpg -./VOC/train/VOCdevkit/VOC2007/images/004488.jpg -./VOC/train/VOCdevkit/VOC2007/images/004490.jpg -./VOC/train/VOCdevkit/VOC2007/images/004493.jpg -./VOC/train/VOCdevkit/VOC2007/images/004494.jpg -./VOC/train/VOCdevkit/VOC2007/images/004495.jpg -./VOC/train/VOCdevkit/VOC2007/images/004496.jpg -./VOC/train/VOCdevkit/VOC2007/images/004498.jpg -./VOC/train/VOCdevkit/VOC2007/images/004499.jpg -./VOC/train/VOCdevkit/VOC2007/images/004500.jpg -./VOC/train/VOCdevkit/VOC2007/images/004502.jpg -./VOC/train/VOCdevkit/VOC2007/images/004507.jpg -./VOC/train/VOCdevkit/VOC2007/images/004508.jpg -./VOC/train/VOCdevkit/VOC2007/images/004509.jpg -./VOC/train/VOCdevkit/VOC2007/images/004510.jpg -./VOC/train/VOCdevkit/VOC2007/images/004512.jpg -./VOC/train/VOCdevkit/VOC2007/images/004514.jpg -./VOC/train/VOCdevkit/VOC2007/images/004517.jpg -./VOC/train/VOCdevkit/VOC2007/images/004518.jpg -./VOC/train/VOCdevkit/VOC2007/images/004519.jpg -./VOC/train/VOCdevkit/VOC2007/images/004520.jpg -./VOC/train/VOCdevkit/VOC2007/images/004524.jpg -./VOC/train/VOCdevkit/VOC2007/images/004526.jpg -./VOC/train/VOCdevkit/VOC2007/images/004527.jpg -./VOC/train/VOCdevkit/VOC2007/images/004528.jpg -./VOC/train/VOCdevkit/VOC2007/images/004530.jpg -./VOC/train/VOCdevkit/VOC2007/images/004532.jpg -./VOC/train/VOCdevkit/VOC2007/images/004535.jpg -./VOC/train/VOCdevkit/VOC2007/images/004537.jpg -./VOC/train/VOCdevkit/VOC2007/images/004539.jpg -./VOC/train/VOCdevkit/VOC2007/images/004540.jpg -./VOC/train/VOCdevkit/VOC2007/images/004542.jpg -./VOC/train/VOCdevkit/VOC2007/images/004544.jpg -./VOC/train/VOCdevkit/VOC2007/images/004548.jpg -./VOC/train/VOCdevkit/VOC2007/images/004549.jpg -./VOC/train/VOCdevkit/VOC2007/images/004551.jpg -./VOC/train/VOCdevkit/VOC2007/images/004552.jpg -./VOC/train/VOCdevkit/VOC2007/images/004553.jpg -./VOC/train/VOCdevkit/VOC2007/images/004555.jpg -./VOC/train/VOCdevkit/VOC2007/images/004558.jpg -./VOC/train/VOCdevkit/VOC2007/images/004562.jpg -./VOC/train/VOCdevkit/VOC2007/images/004563.jpg -./VOC/train/VOCdevkit/VOC2007/images/004565.jpg -./VOC/train/VOCdevkit/VOC2007/images/004566.jpg -./VOC/train/VOCdevkit/VOC2007/images/004570.jpg -./VOC/train/VOCdevkit/VOC2007/images/004571.jpg -./VOC/train/VOCdevkit/VOC2007/images/004574.jpg -./VOC/train/VOCdevkit/VOC2007/images/004576.jpg -./VOC/train/VOCdevkit/VOC2007/images/004579.jpg -./VOC/train/VOCdevkit/VOC2007/images/004581.jpg -./VOC/train/VOCdevkit/VOC2007/images/004584.jpg -./VOC/train/VOCdevkit/VOC2007/images/004585.jpg -./VOC/train/VOCdevkit/VOC2007/images/004587.jpg -./VOC/train/VOCdevkit/VOC2007/images/004588.jpg -./VOC/train/VOCdevkit/VOC2007/images/004591.jpg -./VOC/train/VOCdevkit/VOC2007/images/004592.jpg -./VOC/train/VOCdevkit/VOC2007/images/004595.jpg -./VOC/train/VOCdevkit/VOC2007/images/004597.jpg -./VOC/train/VOCdevkit/VOC2007/images/004600.jpg -./VOC/train/VOCdevkit/VOC2007/images/004601.jpg -./VOC/train/VOCdevkit/VOC2007/images/004604.jpg -./VOC/train/VOCdevkit/VOC2007/images/004605.jpg -./VOC/train/VOCdevkit/VOC2007/images/004606.jpg -./VOC/train/VOCdevkit/VOC2007/images/004607.jpg -./VOC/train/VOCdevkit/VOC2007/images/004609.jpg -./VOC/train/VOCdevkit/VOC2007/images/004611.jpg -./VOC/train/VOCdevkit/VOC2007/images/004612.jpg -./VOC/train/VOCdevkit/VOC2007/images/004618.jpg -./VOC/train/VOCdevkit/VOC2007/images/004622.jpg -./VOC/train/VOCdevkit/VOC2007/images/004623.jpg -./VOC/train/VOCdevkit/VOC2007/images/004625.jpg -./VOC/train/VOCdevkit/VOC2007/images/004626.jpg -./VOC/train/VOCdevkit/VOC2007/images/004627.jpg -./VOC/train/VOCdevkit/VOC2007/images/004628.jpg -./VOC/train/VOCdevkit/VOC2007/images/004630.jpg -./VOC/train/VOCdevkit/VOC2007/images/004631.jpg -./VOC/train/VOCdevkit/VOC2007/images/004632.jpg -./VOC/train/VOCdevkit/VOC2007/images/004634.jpg -./VOC/train/VOCdevkit/VOC2007/images/004636.jpg -./VOC/train/VOCdevkit/VOC2007/images/004643.jpg -./VOC/train/VOCdevkit/VOC2007/images/004644.jpg -./VOC/train/VOCdevkit/VOC2007/images/004647.jpg -./VOC/train/VOCdevkit/VOC2007/images/004648.jpg -./VOC/train/VOCdevkit/VOC2007/images/004649.jpg -./VOC/train/VOCdevkit/VOC2007/images/004651.jpg -./VOC/train/VOCdevkit/VOC2007/images/004652.jpg -./VOC/train/VOCdevkit/VOC2007/images/004653.jpg -./VOC/train/VOCdevkit/VOC2007/images/004654.jpg -./VOC/train/VOCdevkit/VOC2007/images/004655.jpg -./VOC/train/VOCdevkit/VOC2007/images/004656.jpg -./VOC/train/VOCdevkit/VOC2007/images/004660.jpg -./VOC/train/VOCdevkit/VOC2007/images/004662.jpg -./VOC/train/VOCdevkit/VOC2007/images/004671.jpg -./VOC/train/VOCdevkit/VOC2007/images/004672.jpg -./VOC/train/VOCdevkit/VOC2007/images/004673.jpg -./VOC/train/VOCdevkit/VOC2007/images/004674.jpg -./VOC/train/VOCdevkit/VOC2007/images/004675.jpg -./VOC/train/VOCdevkit/VOC2007/images/004676.jpg -./VOC/train/VOCdevkit/VOC2007/images/004679.jpg -./VOC/train/VOCdevkit/VOC2007/images/004682.jpg -./VOC/train/VOCdevkit/VOC2007/images/004683.jpg -./VOC/train/VOCdevkit/VOC2007/images/004685.jpg -./VOC/train/VOCdevkit/VOC2007/images/004686.jpg -./VOC/train/VOCdevkit/VOC2007/images/004687.jpg -./VOC/train/VOCdevkit/VOC2007/images/004689.jpg -./VOC/train/VOCdevkit/VOC2007/images/004691.jpg -./VOC/train/VOCdevkit/VOC2007/images/004692.jpg -./VOC/train/VOCdevkit/VOC2007/images/004693.jpg -./VOC/train/VOCdevkit/VOC2007/images/004694.jpg -./VOC/train/VOCdevkit/VOC2007/images/004699.jpg -./VOC/train/VOCdevkit/VOC2007/images/004701.jpg -./VOC/train/VOCdevkit/VOC2007/images/004702.jpg -./VOC/train/VOCdevkit/VOC2007/images/004705.jpg -./VOC/train/VOCdevkit/VOC2007/images/004706.jpg -./VOC/train/VOCdevkit/VOC2007/images/004707.jpg -./VOC/train/VOCdevkit/VOC2007/images/004708.jpg -./VOC/train/VOCdevkit/VOC2007/images/004710.jpg -./VOC/train/VOCdevkit/VOC2007/images/004714.jpg -./VOC/train/VOCdevkit/VOC2007/images/004715.jpg -./VOC/train/VOCdevkit/VOC2007/images/004718.jpg -./VOC/train/VOCdevkit/VOC2007/images/004719.jpg -./VOC/train/VOCdevkit/VOC2007/images/004722.jpg -./VOC/train/VOCdevkit/VOC2007/images/004723.jpg -./VOC/train/VOCdevkit/VOC2007/images/004727.jpg -./VOC/train/VOCdevkit/VOC2007/images/004732.jpg -./VOC/train/VOCdevkit/VOC2007/images/004735.jpg -./VOC/train/VOCdevkit/VOC2007/images/004737.jpg -./VOC/train/VOCdevkit/VOC2007/images/004742.jpg -./VOC/train/VOCdevkit/VOC2007/images/004743.jpg -./VOC/train/VOCdevkit/VOC2007/images/004746.jpg -./VOC/train/VOCdevkit/VOC2007/images/004747.jpg -./VOC/train/VOCdevkit/VOC2007/images/004748.jpg -./VOC/train/VOCdevkit/VOC2007/images/004750.jpg -./VOC/train/VOCdevkit/VOC2007/images/004753.jpg -./VOC/train/VOCdevkit/VOC2007/images/004754.jpg -./VOC/train/VOCdevkit/VOC2007/images/004760.jpg -./VOC/train/VOCdevkit/VOC2007/images/004761.jpg -./VOC/train/VOCdevkit/VOC2007/images/004768.jpg -./VOC/train/VOCdevkit/VOC2007/images/004770.jpg -./VOC/train/VOCdevkit/VOC2007/images/004773.jpg -./VOC/train/VOCdevkit/VOC2007/images/004776.jpg -./VOC/train/VOCdevkit/VOC2007/images/004777.jpg -./VOC/train/VOCdevkit/VOC2007/images/004779.jpg -./VOC/train/VOCdevkit/VOC2007/images/004782.jpg -./VOC/train/VOCdevkit/VOC2007/images/004783.jpg -./VOC/train/VOCdevkit/VOC2007/images/004785.jpg -./VOC/train/VOCdevkit/VOC2007/images/004786.jpg -./VOC/train/VOCdevkit/VOC2007/images/004788.jpg -./VOC/train/VOCdevkit/VOC2007/images/004789.jpg -./VOC/train/VOCdevkit/VOC2007/images/004790.jpg -./VOC/train/VOCdevkit/VOC2007/images/004792.jpg -./VOC/train/VOCdevkit/VOC2007/images/004793.jpg -./VOC/train/VOCdevkit/VOC2007/images/004794.jpg -./VOC/train/VOCdevkit/VOC2007/images/004796.jpg -./VOC/train/VOCdevkit/VOC2007/images/004797.jpg -./VOC/train/VOCdevkit/VOC2007/images/004799.jpg -./VOC/train/VOCdevkit/VOC2007/images/004801.jpg -./VOC/train/VOCdevkit/VOC2007/images/004805.jpg -./VOC/train/VOCdevkit/VOC2007/images/004808.jpg -./VOC/train/VOCdevkit/VOC2007/images/004812.jpg -./VOC/train/VOCdevkit/VOC2007/images/004814.jpg -./VOC/train/VOCdevkit/VOC2007/images/004815.jpg -./VOC/train/VOCdevkit/VOC2007/images/004816.jpg -./VOC/train/VOCdevkit/VOC2007/images/004818.jpg -./VOC/train/VOCdevkit/VOC2007/images/004823.jpg -./VOC/train/VOCdevkit/VOC2007/images/004825.jpg -./VOC/train/VOCdevkit/VOC2007/images/004826.jpg -./VOC/train/VOCdevkit/VOC2007/images/004828.jpg -./VOC/train/VOCdevkit/VOC2007/images/004830.jpg -./VOC/train/VOCdevkit/VOC2007/images/004831.jpg -./VOC/train/VOCdevkit/VOC2007/images/004832.jpg -./VOC/train/VOCdevkit/VOC2007/images/004834.jpg -./VOC/train/VOCdevkit/VOC2007/images/004836.jpg -./VOC/train/VOCdevkit/VOC2007/images/004837.jpg -./VOC/train/VOCdevkit/VOC2007/images/004839.jpg -./VOC/train/VOCdevkit/VOC2007/images/004840.jpg -./VOC/train/VOCdevkit/VOC2007/images/004841.jpg -./VOC/train/VOCdevkit/VOC2007/images/004842.jpg -./VOC/train/VOCdevkit/VOC2007/images/004846.jpg -./VOC/train/VOCdevkit/VOC2007/images/004848.jpg -./VOC/train/VOCdevkit/VOC2007/images/004849.jpg -./VOC/train/VOCdevkit/VOC2007/images/004850.jpg -./VOC/train/VOCdevkit/VOC2007/images/004852.jpg -./VOC/train/VOCdevkit/VOC2007/images/004856.jpg -./VOC/train/VOCdevkit/VOC2007/images/004857.jpg -./VOC/train/VOCdevkit/VOC2007/images/004859.jpg -./VOC/train/VOCdevkit/VOC2007/images/004863.jpg -./VOC/train/VOCdevkit/VOC2007/images/004866.jpg -./VOC/train/VOCdevkit/VOC2007/images/004867.jpg -./VOC/train/VOCdevkit/VOC2007/images/004868.jpg -./VOC/train/VOCdevkit/VOC2007/images/004869.jpg -./VOC/train/VOCdevkit/VOC2007/images/004872.jpg -./VOC/train/VOCdevkit/VOC2007/images/004873.jpg -./VOC/train/VOCdevkit/VOC2007/images/004876.jpg -./VOC/train/VOCdevkit/VOC2007/images/004878.jpg -./VOC/train/VOCdevkit/VOC2007/images/004879.jpg -./VOC/train/VOCdevkit/VOC2007/images/004882.jpg -./VOC/train/VOCdevkit/VOC2007/images/004885.jpg -./VOC/train/VOCdevkit/VOC2007/images/004886.jpg -./VOC/train/VOCdevkit/VOC2007/images/004890.jpg -./VOC/train/VOCdevkit/VOC2007/images/004895.jpg -./VOC/train/VOCdevkit/VOC2007/images/004896.jpg -./VOC/train/VOCdevkit/VOC2007/images/004897.jpg -./VOC/train/VOCdevkit/VOC2007/images/004898.jpg -./VOC/train/VOCdevkit/VOC2007/images/004902.jpg -./VOC/train/VOCdevkit/VOC2007/images/004903.jpg -./VOC/train/VOCdevkit/VOC2007/images/004905.jpg -./VOC/train/VOCdevkit/VOC2007/images/004907.jpg -./VOC/train/VOCdevkit/VOC2007/images/004910.jpg -./VOC/train/VOCdevkit/VOC2007/images/004911.jpg -./VOC/train/VOCdevkit/VOC2007/images/004912.jpg -./VOC/train/VOCdevkit/VOC2007/images/004913.jpg -./VOC/train/VOCdevkit/VOC2007/images/004916.jpg -./VOC/train/VOCdevkit/VOC2007/images/004926.jpg -./VOC/train/VOCdevkit/VOC2007/images/004928.jpg -./VOC/train/VOCdevkit/VOC2007/images/004929.jpg -./VOC/train/VOCdevkit/VOC2007/images/004931.jpg -./VOC/train/VOCdevkit/VOC2007/images/004935.jpg -./VOC/train/VOCdevkit/VOC2007/images/004936.jpg -./VOC/train/VOCdevkit/VOC2007/images/004938.jpg -./VOC/train/VOCdevkit/VOC2007/images/004939.jpg -./VOC/train/VOCdevkit/VOC2007/images/004943.jpg -./VOC/train/VOCdevkit/VOC2007/images/004946.jpg -./VOC/train/VOCdevkit/VOC2007/images/004948.jpg -./VOC/train/VOCdevkit/VOC2007/images/004950.jpg -./VOC/train/VOCdevkit/VOC2007/images/004951.jpg -./VOC/train/VOCdevkit/VOC2007/images/004953.jpg -./VOC/train/VOCdevkit/VOC2007/images/004954.jpg -./VOC/train/VOCdevkit/VOC2007/images/004955.jpg -./VOC/train/VOCdevkit/VOC2007/images/004956.jpg -./VOC/train/VOCdevkit/VOC2007/images/004958.jpg -./VOC/train/VOCdevkit/VOC2007/images/004960.jpg -./VOC/train/VOCdevkit/VOC2007/images/004961.jpg -./VOC/train/VOCdevkit/VOC2007/images/004962.jpg -./VOC/train/VOCdevkit/VOC2007/images/004963.jpg -./VOC/train/VOCdevkit/VOC2007/images/004966.jpg -./VOC/train/VOCdevkit/VOC2007/images/004967.jpg -./VOC/train/VOCdevkit/VOC2007/images/004968.jpg -./VOC/train/VOCdevkit/VOC2007/images/004972.jpg -./VOC/train/VOCdevkit/VOC2007/images/004973.jpg -./VOC/train/VOCdevkit/VOC2007/images/004974.jpg -./VOC/train/VOCdevkit/VOC2007/images/004976.jpg -./VOC/train/VOCdevkit/VOC2007/images/004977.jpg -./VOC/train/VOCdevkit/VOC2007/images/004982.jpg -./VOC/train/VOCdevkit/VOC2007/images/004983.jpg -./VOC/train/VOCdevkit/VOC2007/images/004984.jpg -./VOC/train/VOCdevkit/VOC2007/images/004985.jpg -./VOC/train/VOCdevkit/VOC2007/images/004986.jpg -./VOC/train/VOCdevkit/VOC2007/images/004987.jpg -./VOC/train/VOCdevkit/VOC2007/images/004990.jpg -./VOC/train/VOCdevkit/VOC2007/images/004991.jpg -./VOC/train/VOCdevkit/VOC2007/images/004992.jpg -./VOC/train/VOCdevkit/VOC2007/images/004994.jpg -./VOC/train/VOCdevkit/VOC2007/images/004995.jpg -./VOC/train/VOCdevkit/VOC2007/images/004997.jpg -./VOC/train/VOCdevkit/VOC2007/images/004998.jpg -./VOC/train/VOCdevkit/VOC2007/images/004999.jpg -./VOC/train/VOCdevkit/VOC2007/images/005001.jpg -./VOC/train/VOCdevkit/VOC2007/images/005003.jpg -./VOC/train/VOCdevkit/VOC2007/images/005004.jpg -./VOC/train/VOCdevkit/VOC2007/images/005006.jpg -./VOC/train/VOCdevkit/VOC2007/images/005007.jpg -./VOC/train/VOCdevkit/VOC2007/images/005014.jpg -./VOC/train/VOCdevkit/VOC2007/images/005016.jpg -./VOC/train/VOCdevkit/VOC2007/images/005018.jpg -./VOC/train/VOCdevkit/VOC2007/images/005020.jpg -./VOC/train/VOCdevkit/VOC2007/images/005023.jpg -./VOC/train/VOCdevkit/VOC2007/images/005024.jpg -./VOC/train/VOCdevkit/VOC2007/images/005026.jpg -./VOC/train/VOCdevkit/VOC2007/images/005027.jpg -./VOC/train/VOCdevkit/VOC2007/images/005028.jpg -./VOC/train/VOCdevkit/VOC2007/images/005029.jpg -./VOC/train/VOCdevkit/VOC2007/images/005032.jpg -./VOC/train/VOCdevkit/VOC2007/images/005033.jpg -./VOC/train/VOCdevkit/VOC2007/images/005036.jpg -./VOC/train/VOCdevkit/VOC2007/images/005037.jpg -./VOC/train/VOCdevkit/VOC2007/images/005039.jpg -./VOC/train/VOCdevkit/VOC2007/images/005042.jpg -./VOC/train/VOCdevkit/VOC2007/images/005045.jpg -./VOC/train/VOCdevkit/VOC2007/images/005047.jpg -./VOC/train/VOCdevkit/VOC2007/images/005052.jpg -./VOC/train/VOCdevkit/VOC2007/images/005054.jpg -./VOC/train/VOCdevkit/VOC2007/images/005055.jpg -./VOC/train/VOCdevkit/VOC2007/images/005056.jpg -./VOC/train/VOCdevkit/VOC2007/images/005057.jpg -./VOC/train/VOCdevkit/VOC2007/images/005058.jpg -./VOC/train/VOCdevkit/VOC2007/images/005061.jpg -./VOC/train/VOCdevkit/VOC2007/images/005062.jpg -./VOC/train/VOCdevkit/VOC2007/images/005063.jpg -./VOC/train/VOCdevkit/VOC2007/images/005064.jpg -./VOC/train/VOCdevkit/VOC2007/images/005065.jpg -./VOC/train/VOCdevkit/VOC2007/images/005067.jpg -./VOC/train/VOCdevkit/VOC2007/images/005068.jpg -./VOC/train/VOCdevkit/VOC2007/images/005071.jpg -./VOC/train/VOCdevkit/VOC2007/images/005072.jpg -./VOC/train/VOCdevkit/VOC2007/images/005073.jpg -./VOC/train/VOCdevkit/VOC2007/images/005077.jpg -./VOC/train/VOCdevkit/VOC2007/images/005078.jpg -./VOC/train/VOCdevkit/VOC2007/images/005079.jpg -./VOC/train/VOCdevkit/VOC2007/images/005081.jpg -./VOC/train/VOCdevkit/VOC2007/images/005084.jpg -./VOC/train/VOCdevkit/VOC2007/images/005085.jpg -./VOC/train/VOCdevkit/VOC2007/images/005086.jpg -./VOC/train/VOCdevkit/VOC2007/images/005090.jpg -./VOC/train/VOCdevkit/VOC2007/images/005093.jpg -./VOC/train/VOCdevkit/VOC2007/images/005094.jpg -./VOC/train/VOCdevkit/VOC2007/images/005097.jpg -./VOC/train/VOCdevkit/VOC2007/images/005101.jpg -./VOC/train/VOCdevkit/VOC2007/images/005102.jpg -./VOC/train/VOCdevkit/VOC2007/images/005104.jpg -./VOC/train/VOCdevkit/VOC2007/images/005107.jpg -./VOC/train/VOCdevkit/VOC2007/images/005108.jpg -./VOC/train/VOCdevkit/VOC2007/images/005110.jpg -./VOC/train/VOCdevkit/VOC2007/images/005111.jpg -./VOC/train/VOCdevkit/VOC2007/images/005114.jpg -./VOC/train/VOCdevkit/VOC2007/images/005116.jpg -./VOC/train/VOCdevkit/VOC2007/images/005121.jpg -./VOC/train/VOCdevkit/VOC2007/images/005122.jpg -./VOC/train/VOCdevkit/VOC2007/images/005124.jpg -./VOC/train/VOCdevkit/VOC2007/images/005128.jpg -./VOC/train/VOCdevkit/VOC2007/images/005129.jpg -./VOC/train/VOCdevkit/VOC2007/images/005130.jpg -./VOC/train/VOCdevkit/VOC2007/images/005131.jpg -./VOC/train/VOCdevkit/VOC2007/images/005134.jpg -./VOC/train/VOCdevkit/VOC2007/images/005135.jpg -./VOC/train/VOCdevkit/VOC2007/images/005136.jpg -./VOC/train/VOCdevkit/VOC2007/images/005138.jpg -./VOC/train/VOCdevkit/VOC2007/images/005143.jpg -./VOC/train/VOCdevkit/VOC2007/images/005144.jpg -./VOC/train/VOCdevkit/VOC2007/images/005145.jpg -./VOC/train/VOCdevkit/VOC2007/images/005146.jpg -./VOC/train/VOCdevkit/VOC2007/images/005150.jpg -./VOC/train/VOCdevkit/VOC2007/images/005153.jpg -./VOC/train/VOCdevkit/VOC2007/images/005156.jpg -./VOC/train/VOCdevkit/VOC2007/images/005159.jpg -./VOC/train/VOCdevkit/VOC2007/images/005160.jpg -./VOC/train/VOCdevkit/VOC2007/images/005161.jpg -./VOC/train/VOCdevkit/VOC2007/images/005168.jpg -./VOC/train/VOCdevkit/VOC2007/images/005169.jpg -./VOC/train/VOCdevkit/VOC2007/images/005171.jpg -./VOC/train/VOCdevkit/VOC2007/images/005173.jpg -./VOC/train/VOCdevkit/VOC2007/images/005175.jpg -./VOC/train/VOCdevkit/VOC2007/images/005176.jpg -./VOC/train/VOCdevkit/VOC2007/images/005177.jpg -./VOC/train/VOCdevkit/VOC2007/images/005179.jpg -./VOC/train/VOCdevkit/VOC2007/images/005181.jpg -./VOC/train/VOCdevkit/VOC2007/images/005183.jpg -./VOC/train/VOCdevkit/VOC2007/images/005185.jpg -./VOC/train/VOCdevkit/VOC2007/images/005186.jpg -./VOC/train/VOCdevkit/VOC2007/images/005189.jpg -./VOC/train/VOCdevkit/VOC2007/images/005190.jpg -./VOC/train/VOCdevkit/VOC2007/images/005191.jpg -./VOC/train/VOCdevkit/VOC2007/images/005195.jpg -./VOC/train/VOCdevkit/VOC2007/images/005199.jpg -./VOC/train/VOCdevkit/VOC2007/images/005202.jpg -./VOC/train/VOCdevkit/VOC2007/images/005203.jpg -./VOC/train/VOCdevkit/VOC2007/images/005208.jpg -./VOC/train/VOCdevkit/VOC2007/images/005209.jpg -./VOC/train/VOCdevkit/VOC2007/images/005210.jpg -./VOC/train/VOCdevkit/VOC2007/images/005212.jpg -./VOC/train/VOCdevkit/VOC2007/images/005214.jpg -./VOC/train/VOCdevkit/VOC2007/images/005215.jpg -./VOC/train/VOCdevkit/VOC2007/images/005217.jpg -./VOC/train/VOCdevkit/VOC2007/images/005219.jpg -./VOC/train/VOCdevkit/VOC2007/images/005220.jpg -./VOC/train/VOCdevkit/VOC2007/images/005222.jpg -./VOC/train/VOCdevkit/VOC2007/images/005223.jpg -./VOC/train/VOCdevkit/VOC2007/images/005224.jpg -./VOC/train/VOCdevkit/VOC2007/images/005229.jpg -./VOC/train/VOCdevkit/VOC2007/images/005230.jpg -./VOC/train/VOCdevkit/VOC2007/images/005231.jpg -./VOC/train/VOCdevkit/VOC2007/images/005236.jpg -./VOC/train/VOCdevkit/VOC2007/images/005239.jpg -./VOC/train/VOCdevkit/VOC2007/images/005242.jpg -./VOC/train/VOCdevkit/VOC2007/images/005244.jpg -./VOC/train/VOCdevkit/VOC2007/images/005245.jpg -./VOC/train/VOCdevkit/VOC2007/images/005246.jpg -./VOC/train/VOCdevkit/VOC2007/images/005248.jpg -./VOC/train/VOCdevkit/VOC2007/images/005253.jpg -./VOC/train/VOCdevkit/VOC2007/images/005254.jpg -./VOC/train/VOCdevkit/VOC2007/images/005257.jpg -./VOC/train/VOCdevkit/VOC2007/images/005258.jpg -./VOC/train/VOCdevkit/VOC2007/images/005259.jpg -./VOC/train/VOCdevkit/VOC2007/images/005260.jpg -./VOC/train/VOCdevkit/VOC2007/images/005262.jpg -./VOC/train/VOCdevkit/VOC2007/images/005263.jpg -./VOC/train/VOCdevkit/VOC2007/images/005264.jpg -./VOC/train/VOCdevkit/VOC2007/images/005267.jpg -./VOC/train/VOCdevkit/VOC2007/images/005268.jpg -./VOC/train/VOCdevkit/VOC2007/images/005269.jpg -./VOC/train/VOCdevkit/VOC2007/images/005270.jpg -./VOC/train/VOCdevkit/VOC2007/images/005273.jpg -./VOC/train/VOCdevkit/VOC2007/images/005274.jpg -./VOC/train/VOCdevkit/VOC2007/images/005278.jpg -./VOC/train/VOCdevkit/VOC2007/images/005281.jpg -./VOC/train/VOCdevkit/VOC2007/images/005283.jpg -./VOC/train/VOCdevkit/VOC2007/images/005285.jpg -./VOC/train/VOCdevkit/VOC2007/images/005288.jpg -./VOC/train/VOCdevkit/VOC2007/images/005290.jpg -./VOC/train/VOCdevkit/VOC2007/images/005292.jpg -./VOC/train/VOCdevkit/VOC2007/images/005293.jpg -./VOC/train/VOCdevkit/VOC2007/images/005297.jpg -./VOC/train/VOCdevkit/VOC2007/images/005298.jpg -./VOC/train/VOCdevkit/VOC2007/images/005303.jpg -./VOC/train/VOCdevkit/VOC2007/images/005304.jpg -./VOC/train/VOCdevkit/VOC2007/images/005305.jpg -./VOC/train/VOCdevkit/VOC2007/images/005306.jpg -./VOC/train/VOCdevkit/VOC2007/images/005307.jpg -./VOC/train/VOCdevkit/VOC2007/images/005310.jpg -./VOC/train/VOCdevkit/VOC2007/images/005311.jpg -./VOC/train/VOCdevkit/VOC2007/images/005312.jpg -./VOC/train/VOCdevkit/VOC2007/images/005314.jpg -./VOC/train/VOCdevkit/VOC2007/images/005315.jpg -./VOC/train/VOCdevkit/VOC2007/images/005318.jpg -./VOC/train/VOCdevkit/VOC2007/images/005319.jpg -./VOC/train/VOCdevkit/VOC2007/images/005320.jpg -./VOC/train/VOCdevkit/VOC2007/images/005325.jpg -./VOC/train/VOCdevkit/VOC2007/images/005326.jpg -./VOC/train/VOCdevkit/VOC2007/images/005327.jpg -./VOC/train/VOCdevkit/VOC2007/images/005328.jpg -./VOC/train/VOCdevkit/VOC2007/images/005331.jpg -./VOC/train/VOCdevkit/VOC2007/images/005336.jpg -./VOC/train/VOCdevkit/VOC2007/images/005337.jpg -./VOC/train/VOCdevkit/VOC2007/images/005338.jpg -./VOC/train/VOCdevkit/VOC2007/images/005340.jpg -./VOC/train/VOCdevkit/VOC2007/images/005343.jpg -./VOC/train/VOCdevkit/VOC2007/images/005344.jpg -./VOC/train/VOCdevkit/VOC2007/images/005345.jpg -./VOC/train/VOCdevkit/VOC2007/images/005346.jpg -./VOC/train/VOCdevkit/VOC2007/images/005348.jpg -./VOC/train/VOCdevkit/VOC2007/images/005349.jpg -./VOC/train/VOCdevkit/VOC2007/images/005350.jpg -./VOC/train/VOCdevkit/VOC2007/images/005351.jpg -./VOC/train/VOCdevkit/VOC2007/images/005352.jpg -./VOC/train/VOCdevkit/VOC2007/images/005355.jpg -./VOC/train/VOCdevkit/VOC2007/images/005358.jpg -./VOC/train/VOCdevkit/VOC2007/images/005360.jpg -./VOC/train/VOCdevkit/VOC2007/images/005363.jpg -./VOC/train/VOCdevkit/VOC2007/images/005365.jpg -./VOC/train/VOCdevkit/VOC2007/images/005367.jpg -./VOC/train/VOCdevkit/VOC2007/images/005368.jpg -./VOC/train/VOCdevkit/VOC2007/images/005369.jpg -./VOC/train/VOCdevkit/VOC2007/images/005370.jpg -./VOC/train/VOCdevkit/VOC2007/images/005371.jpg -./VOC/train/VOCdevkit/VOC2007/images/005373.jpg -./VOC/train/VOCdevkit/VOC2007/images/005374.jpg -./VOC/train/VOCdevkit/VOC2007/images/005378.jpg -./VOC/train/VOCdevkit/VOC2007/images/005379.jpg -./VOC/train/VOCdevkit/VOC2007/images/005380.jpg -./VOC/train/VOCdevkit/VOC2007/images/005383.jpg -./VOC/train/VOCdevkit/VOC2007/images/005384.jpg -./VOC/train/VOCdevkit/VOC2007/images/005385.jpg -./VOC/train/VOCdevkit/VOC2007/images/005387.jpg -./VOC/train/VOCdevkit/VOC2007/images/005388.jpg -./VOC/train/VOCdevkit/VOC2007/images/005389.jpg -./VOC/train/VOCdevkit/VOC2007/images/005391.jpg -./VOC/train/VOCdevkit/VOC2007/images/005393.jpg -./VOC/train/VOCdevkit/VOC2007/images/005395.jpg -./VOC/train/VOCdevkit/VOC2007/images/005396.jpg -./VOC/train/VOCdevkit/VOC2007/images/005397.jpg -./VOC/train/VOCdevkit/VOC2007/images/005398.jpg -./VOC/train/VOCdevkit/VOC2007/images/005404.jpg -./VOC/train/VOCdevkit/VOC2007/images/005405.jpg -./VOC/train/VOCdevkit/VOC2007/images/005406.jpg -./VOC/train/VOCdevkit/VOC2007/images/005407.jpg -./VOC/train/VOCdevkit/VOC2007/images/005408.jpg -./VOC/train/VOCdevkit/VOC2007/images/005410.jpg -./VOC/train/VOCdevkit/VOC2007/images/005413.jpg -./VOC/train/VOCdevkit/VOC2007/images/005414.jpg -./VOC/train/VOCdevkit/VOC2007/images/005416.jpg -./VOC/train/VOCdevkit/VOC2007/images/005417.jpg -./VOC/train/VOCdevkit/VOC2007/images/005418.jpg -./VOC/train/VOCdevkit/VOC2007/images/005419.jpg -./VOC/train/VOCdevkit/VOC2007/images/005420.jpg -./VOC/train/VOCdevkit/VOC2007/images/005421.jpg -./VOC/train/VOCdevkit/VOC2007/images/005423.jpg -./VOC/train/VOCdevkit/VOC2007/images/005424.jpg -./VOC/train/VOCdevkit/VOC2007/images/005429.jpg -./VOC/train/VOCdevkit/VOC2007/images/005430.jpg -./VOC/train/VOCdevkit/VOC2007/images/005431.jpg -./VOC/train/VOCdevkit/VOC2007/images/005433.jpg -./VOC/train/VOCdevkit/VOC2007/images/005434.jpg -./VOC/train/VOCdevkit/VOC2007/images/005436.jpg -./VOC/train/VOCdevkit/VOC2007/images/005438.jpg -./VOC/train/VOCdevkit/VOC2007/images/005439.jpg -./VOC/train/VOCdevkit/VOC2007/images/005440.jpg -./VOC/train/VOCdevkit/VOC2007/images/005441.jpg -./VOC/train/VOCdevkit/VOC2007/images/005445.jpg -./VOC/train/VOCdevkit/VOC2007/images/005448.jpg -./VOC/train/VOCdevkit/VOC2007/images/005450.jpg -./VOC/train/VOCdevkit/VOC2007/images/005451.jpg -./VOC/train/VOCdevkit/VOC2007/images/005453.jpg -./VOC/train/VOCdevkit/VOC2007/images/005454.jpg -./VOC/train/VOCdevkit/VOC2007/images/005455.jpg -./VOC/train/VOCdevkit/VOC2007/images/005457.jpg -./VOC/train/VOCdevkit/VOC2007/images/005461.jpg -./VOC/train/VOCdevkit/VOC2007/images/005465.jpg -./VOC/train/VOCdevkit/VOC2007/images/005467.jpg -./VOC/train/VOCdevkit/VOC2007/images/005469.jpg -./VOC/train/VOCdevkit/VOC2007/images/005470.jpg -./VOC/train/VOCdevkit/VOC2007/images/005471.jpg -./VOC/train/VOCdevkit/VOC2007/images/005475.jpg -./VOC/train/VOCdevkit/VOC2007/images/005478.jpg -./VOC/train/VOCdevkit/VOC2007/images/005481.jpg -./VOC/train/VOCdevkit/VOC2007/images/005483.jpg -./VOC/train/VOCdevkit/VOC2007/images/005485.jpg -./VOC/train/VOCdevkit/VOC2007/images/005486.jpg -./VOC/train/VOCdevkit/VOC2007/images/005487.jpg -./VOC/train/VOCdevkit/VOC2007/images/005489.jpg -./VOC/train/VOCdevkit/VOC2007/images/005496.jpg -./VOC/train/VOCdevkit/VOC2007/images/005497.jpg -./VOC/train/VOCdevkit/VOC2007/images/005499.jpg -./VOC/train/VOCdevkit/VOC2007/images/005507.jpg -./VOC/train/VOCdevkit/VOC2007/images/005508.jpg -./VOC/train/VOCdevkit/VOC2007/images/005509.jpg -./VOC/train/VOCdevkit/VOC2007/images/005510.jpg -./VOC/train/VOCdevkit/VOC2007/images/005511.jpg -./VOC/train/VOCdevkit/VOC2007/images/005514.jpg -./VOC/train/VOCdevkit/VOC2007/images/005515.jpg -./VOC/train/VOCdevkit/VOC2007/images/005517.jpg -./VOC/train/VOCdevkit/VOC2007/images/005518.jpg -./VOC/train/VOCdevkit/VOC2007/images/005519.jpg -./VOC/train/VOCdevkit/VOC2007/images/005521.jpg -./VOC/train/VOCdevkit/VOC2007/images/005522.jpg -./VOC/train/VOCdevkit/VOC2007/images/005524.jpg -./VOC/train/VOCdevkit/VOC2007/images/005526.jpg -./VOC/train/VOCdevkit/VOC2007/images/005527.jpg -./VOC/train/VOCdevkit/VOC2007/images/005530.jpg -./VOC/train/VOCdevkit/VOC2007/images/005531.jpg -./VOC/train/VOCdevkit/VOC2007/images/005535.jpg -./VOC/train/VOCdevkit/VOC2007/images/005536.jpg -./VOC/train/VOCdevkit/VOC2007/images/005539.jpg -./VOC/train/VOCdevkit/VOC2007/images/005541.jpg -./VOC/train/VOCdevkit/VOC2007/images/005542.jpg -./VOC/train/VOCdevkit/VOC2007/images/005544.jpg -./VOC/train/VOCdevkit/VOC2007/images/005547.jpg -./VOC/train/VOCdevkit/VOC2007/images/005549.jpg -./VOC/train/VOCdevkit/VOC2007/images/005550.jpg -./VOC/train/VOCdevkit/VOC2007/images/005552.jpg -./VOC/train/VOCdevkit/VOC2007/images/005554.jpg -./VOC/train/VOCdevkit/VOC2007/images/005559.jpg -./VOC/train/VOCdevkit/VOC2007/images/005563.jpg -./VOC/train/VOCdevkit/VOC2007/images/005566.jpg -./VOC/train/VOCdevkit/VOC2007/images/005568.jpg -./VOC/train/VOCdevkit/VOC2007/images/005573.jpg -./VOC/train/VOCdevkit/VOC2007/images/005574.jpg -./VOC/train/VOCdevkit/VOC2007/images/005576.jpg -./VOC/train/VOCdevkit/VOC2007/images/005577.jpg -./VOC/train/VOCdevkit/VOC2007/images/005579.jpg -./VOC/train/VOCdevkit/VOC2007/images/005582.jpg -./VOC/train/VOCdevkit/VOC2007/images/005583.jpg -./VOC/train/VOCdevkit/VOC2007/images/005584.jpg -./VOC/train/VOCdevkit/VOC2007/images/005585.jpg -./VOC/train/VOCdevkit/VOC2007/images/005586.jpg -./VOC/train/VOCdevkit/VOC2007/images/005588.jpg -./VOC/train/VOCdevkit/VOC2007/images/005590.jpg -./VOC/train/VOCdevkit/VOC2007/images/005591.jpg -./VOC/train/VOCdevkit/VOC2007/images/005592.jpg -./VOC/train/VOCdevkit/VOC2007/images/005593.jpg -./VOC/train/VOCdevkit/VOC2007/images/005599.jpg -./VOC/train/VOCdevkit/VOC2007/images/005600.jpg -./VOC/train/VOCdevkit/VOC2007/images/005601.jpg -./VOC/train/VOCdevkit/VOC2007/images/005603.jpg -./VOC/train/VOCdevkit/VOC2007/images/005605.jpg -./VOC/train/VOCdevkit/VOC2007/images/005606.jpg -./VOC/train/VOCdevkit/VOC2007/images/005608.jpg -./VOC/train/VOCdevkit/VOC2007/images/005609.jpg -./VOC/train/VOCdevkit/VOC2007/images/005611.jpg -./VOC/train/VOCdevkit/VOC2007/images/005613.jpg -./VOC/train/VOCdevkit/VOC2007/images/005614.jpg -./VOC/train/VOCdevkit/VOC2007/images/005615.jpg -./VOC/train/VOCdevkit/VOC2007/images/005618.jpg -./VOC/train/VOCdevkit/VOC2007/images/005620.jpg -./VOC/train/VOCdevkit/VOC2007/images/005624.jpg -./VOC/train/VOCdevkit/VOC2007/images/005625.jpg -./VOC/train/VOCdevkit/VOC2007/images/005629.jpg -./VOC/train/VOCdevkit/VOC2007/images/005630.jpg -./VOC/train/VOCdevkit/VOC2007/images/005631.jpg -./VOC/train/VOCdevkit/VOC2007/images/005636.jpg -./VOC/train/VOCdevkit/VOC2007/images/005637.jpg -./VOC/train/VOCdevkit/VOC2007/images/005639.jpg -./VOC/train/VOCdevkit/VOC2007/images/005640.jpg -./VOC/train/VOCdevkit/VOC2007/images/005641.jpg -./VOC/train/VOCdevkit/VOC2007/images/005644.jpg -./VOC/train/VOCdevkit/VOC2007/images/005645.jpg -./VOC/train/VOCdevkit/VOC2007/images/005647.jpg -./VOC/train/VOCdevkit/VOC2007/images/005648.jpg -./VOC/train/VOCdevkit/VOC2007/images/005652.jpg -./VOC/train/VOCdevkit/VOC2007/images/005653.jpg -./VOC/train/VOCdevkit/VOC2007/images/005654.jpg -./VOC/train/VOCdevkit/VOC2007/images/005655.jpg -./VOC/train/VOCdevkit/VOC2007/images/005657.jpg -./VOC/train/VOCdevkit/VOC2007/images/005658.jpg -./VOC/train/VOCdevkit/VOC2007/images/005660.jpg -./VOC/train/VOCdevkit/VOC2007/images/005662.jpg -./VOC/train/VOCdevkit/VOC2007/images/005664.jpg -./VOC/train/VOCdevkit/VOC2007/images/005668.jpg -./VOC/train/VOCdevkit/VOC2007/images/005669.jpg -./VOC/train/VOCdevkit/VOC2007/images/005672.jpg -./VOC/train/VOCdevkit/VOC2007/images/005674.jpg -./VOC/train/VOCdevkit/VOC2007/images/005676.jpg -./VOC/train/VOCdevkit/VOC2007/images/005679.jpg -./VOC/train/VOCdevkit/VOC2007/images/005680.jpg -./VOC/train/VOCdevkit/VOC2007/images/005682.jpg -./VOC/train/VOCdevkit/VOC2007/images/005685.jpg -./VOC/train/VOCdevkit/VOC2007/images/005686.jpg -./VOC/train/VOCdevkit/VOC2007/images/005687.jpg -./VOC/train/VOCdevkit/VOC2007/images/005693.jpg -./VOC/train/VOCdevkit/VOC2007/images/005695.jpg -./VOC/train/VOCdevkit/VOC2007/images/005696.jpg -./VOC/train/VOCdevkit/VOC2007/images/005697.jpg -./VOC/train/VOCdevkit/VOC2007/images/005699.jpg -./VOC/train/VOCdevkit/VOC2007/images/005700.jpg -./VOC/train/VOCdevkit/VOC2007/images/005701.jpg -./VOC/train/VOCdevkit/VOC2007/images/005702.jpg -./VOC/train/VOCdevkit/VOC2007/images/005704.jpg -./VOC/train/VOCdevkit/VOC2007/images/005705.jpg -./VOC/train/VOCdevkit/VOC2007/images/005710.jpg -./VOC/train/VOCdevkit/VOC2007/images/005713.jpg -./VOC/train/VOCdevkit/VOC2007/images/005714.jpg -./VOC/train/VOCdevkit/VOC2007/images/005715.jpg -./VOC/train/VOCdevkit/VOC2007/images/005716.jpg -./VOC/train/VOCdevkit/VOC2007/images/005718.jpg -./VOC/train/VOCdevkit/VOC2007/images/005719.jpg -./VOC/train/VOCdevkit/VOC2007/images/005723.jpg -./VOC/train/VOCdevkit/VOC2007/images/005728.jpg -./VOC/train/VOCdevkit/VOC2007/images/005729.jpg -./VOC/train/VOCdevkit/VOC2007/images/005730.jpg -./VOC/train/VOCdevkit/VOC2007/images/005731.jpg -./VOC/train/VOCdevkit/VOC2007/images/005732.jpg -./VOC/train/VOCdevkit/VOC2007/images/005735.jpg -./VOC/train/VOCdevkit/VOC2007/images/005736.jpg -./VOC/train/VOCdevkit/VOC2007/images/005738.jpg -./VOC/train/VOCdevkit/VOC2007/images/005740.jpg -./VOC/train/VOCdevkit/VOC2007/images/005741.jpg -./VOC/train/VOCdevkit/VOC2007/images/005742.jpg -./VOC/train/VOCdevkit/VOC2007/images/005743.jpg -./VOC/train/VOCdevkit/VOC2007/images/005747.jpg -./VOC/train/VOCdevkit/VOC2007/images/005749.jpg -./VOC/train/VOCdevkit/VOC2007/images/005752.jpg -./VOC/train/VOCdevkit/VOC2007/images/005755.jpg -./VOC/train/VOCdevkit/VOC2007/images/005756.jpg -./VOC/train/VOCdevkit/VOC2007/images/005757.jpg -./VOC/train/VOCdevkit/VOC2007/images/005760.jpg -./VOC/train/VOCdevkit/VOC2007/images/005761.jpg -./VOC/train/VOCdevkit/VOC2007/images/005762.jpg -./VOC/train/VOCdevkit/VOC2007/images/005764.jpg -./VOC/train/VOCdevkit/VOC2007/images/005765.jpg -./VOC/train/VOCdevkit/VOC2007/images/005768.jpg -./VOC/train/VOCdevkit/VOC2007/images/005769.jpg -./VOC/train/VOCdevkit/VOC2007/images/005773.jpg -./VOC/train/VOCdevkit/VOC2007/images/005779.jpg -./VOC/train/VOCdevkit/VOC2007/images/005780.jpg -./VOC/train/VOCdevkit/VOC2007/images/005781.jpg -./VOC/train/VOCdevkit/VOC2007/images/005782.jpg -./VOC/train/VOCdevkit/VOC2007/images/005783.jpg -./VOC/train/VOCdevkit/VOC2007/images/005784.jpg -./VOC/train/VOCdevkit/VOC2007/images/005786.jpg -./VOC/train/VOCdevkit/VOC2007/images/005788.jpg -./VOC/train/VOCdevkit/VOC2007/images/005789.jpg -./VOC/train/VOCdevkit/VOC2007/images/005790.jpg -./VOC/train/VOCdevkit/VOC2007/images/005791.jpg -./VOC/train/VOCdevkit/VOC2007/images/005794.jpg -./VOC/train/VOCdevkit/VOC2007/images/005796.jpg -./VOC/train/VOCdevkit/VOC2007/images/005799.jpg -./VOC/train/VOCdevkit/VOC2007/images/005803.jpg -./VOC/train/VOCdevkit/VOC2007/images/005805.jpg -./VOC/train/VOCdevkit/VOC2007/images/005806.jpg -./VOC/train/VOCdevkit/VOC2007/images/005811.jpg -./VOC/train/VOCdevkit/VOC2007/images/005812.jpg -./VOC/train/VOCdevkit/VOC2007/images/005813.jpg -./VOC/train/VOCdevkit/VOC2007/images/005814.jpg -./VOC/train/VOCdevkit/VOC2007/images/005815.jpg -./VOC/train/VOCdevkit/VOC2007/images/005817.jpg -./VOC/train/VOCdevkit/VOC2007/images/005818.jpg -./VOC/train/VOCdevkit/VOC2007/images/005819.jpg -./VOC/train/VOCdevkit/VOC2007/images/005821.jpg -./VOC/train/VOCdevkit/VOC2007/images/005824.jpg -./VOC/train/VOCdevkit/VOC2007/images/005825.jpg -./VOC/train/VOCdevkit/VOC2007/images/005826.jpg -./VOC/train/VOCdevkit/VOC2007/images/005828.jpg -./VOC/train/VOCdevkit/VOC2007/images/005829.jpg -./VOC/train/VOCdevkit/VOC2007/images/005830.jpg -./VOC/train/VOCdevkit/VOC2007/images/005831.jpg -./VOC/train/VOCdevkit/VOC2007/images/005836.jpg -./VOC/train/VOCdevkit/VOC2007/images/005838.jpg -./VOC/train/VOCdevkit/VOC2007/images/005839.jpg -./VOC/train/VOCdevkit/VOC2007/images/005840.jpg -./VOC/train/VOCdevkit/VOC2007/images/005841.jpg -./VOC/train/VOCdevkit/VOC2007/images/005843.jpg -./VOC/train/VOCdevkit/VOC2007/images/005845.jpg -./VOC/train/VOCdevkit/VOC2007/images/005850.jpg -./VOC/train/VOCdevkit/VOC2007/images/005851.jpg -./VOC/train/VOCdevkit/VOC2007/images/005852.jpg -./VOC/train/VOCdevkit/VOC2007/images/005853.jpg -./VOC/train/VOCdevkit/VOC2007/images/005854.jpg -./VOC/train/VOCdevkit/VOC2007/images/005856.jpg -./VOC/train/VOCdevkit/VOC2007/images/005859.jpg -./VOC/train/VOCdevkit/VOC2007/images/005860.jpg -./VOC/train/VOCdevkit/VOC2007/images/005861.jpg -./VOC/train/VOCdevkit/VOC2007/images/005863.jpg -./VOC/train/VOCdevkit/VOC2007/images/005864.jpg -./VOC/train/VOCdevkit/VOC2007/images/005867.jpg -./VOC/train/VOCdevkit/VOC2007/images/005868.jpg -./VOC/train/VOCdevkit/VOC2007/images/005873.jpg -./VOC/train/VOCdevkit/VOC2007/images/005874.jpg -./VOC/train/VOCdevkit/VOC2007/images/005875.jpg -./VOC/train/VOCdevkit/VOC2007/images/005877.jpg -./VOC/train/VOCdevkit/VOC2007/images/005878.jpg -./VOC/train/VOCdevkit/VOC2007/images/005879.jpg -./VOC/train/VOCdevkit/VOC2007/images/005881.jpg -./VOC/train/VOCdevkit/VOC2007/images/005884.jpg -./VOC/train/VOCdevkit/VOC2007/images/005885.jpg -./VOC/train/VOCdevkit/VOC2007/images/005888.jpg -./VOC/train/VOCdevkit/VOC2007/images/005889.jpg -./VOC/train/VOCdevkit/VOC2007/images/005893.jpg -./VOC/train/VOCdevkit/VOC2007/images/005894.jpg -./VOC/train/VOCdevkit/VOC2007/images/005895.jpg -./VOC/train/VOCdevkit/VOC2007/images/005897.jpg -./VOC/train/VOCdevkit/VOC2007/images/005899.jpg -./VOC/train/VOCdevkit/VOC2007/images/005901.jpg -./VOC/train/VOCdevkit/VOC2007/images/005903.jpg -./VOC/train/VOCdevkit/VOC2007/images/005905.jpg -./VOC/train/VOCdevkit/VOC2007/images/005906.jpg -./VOC/train/VOCdevkit/VOC2007/images/005908.jpg -./VOC/train/VOCdevkit/VOC2007/images/005909.jpg -./VOC/train/VOCdevkit/VOC2007/images/005910.jpg -./VOC/train/VOCdevkit/VOC2007/images/005911.jpg -./VOC/train/VOCdevkit/VOC2007/images/005912.jpg -./VOC/train/VOCdevkit/VOC2007/images/005914.jpg -./VOC/train/VOCdevkit/VOC2007/images/005917.jpg -./VOC/train/VOCdevkit/VOC2007/images/005918.jpg -./VOC/train/VOCdevkit/VOC2007/images/005919.jpg -./VOC/train/VOCdevkit/VOC2007/images/005920.jpg -./VOC/train/VOCdevkit/VOC2007/images/005923.jpg -./VOC/train/VOCdevkit/VOC2007/images/005928.jpg -./VOC/train/VOCdevkit/VOC2007/images/005930.jpg -./VOC/train/VOCdevkit/VOC2007/images/005938.jpg -./VOC/train/VOCdevkit/VOC2007/images/005940.jpg -./VOC/train/VOCdevkit/VOC2007/images/005947.jpg -./VOC/train/VOCdevkit/VOC2007/images/005948.jpg -./VOC/train/VOCdevkit/VOC2007/images/005951.jpg -./VOC/train/VOCdevkit/VOC2007/images/005952.jpg -./VOC/train/VOCdevkit/VOC2007/images/005954.jpg -./VOC/train/VOCdevkit/VOC2007/images/005956.jpg -./VOC/train/VOCdevkit/VOC2007/images/005960.jpg -./VOC/train/VOCdevkit/VOC2007/images/005961.jpg -./VOC/train/VOCdevkit/VOC2007/images/005963.jpg -./VOC/train/VOCdevkit/VOC2007/images/005964.jpg -./VOC/train/VOCdevkit/VOC2007/images/005968.jpg -./VOC/train/VOCdevkit/VOC2007/images/005970.jpg -./VOC/train/VOCdevkit/VOC2007/images/005971.jpg -./VOC/train/VOCdevkit/VOC2007/images/005975.jpg -./VOC/train/VOCdevkit/VOC2007/images/005979.jpg -./VOC/train/VOCdevkit/VOC2007/images/005980.jpg -./VOC/train/VOCdevkit/VOC2007/images/005981.jpg -./VOC/train/VOCdevkit/VOC2007/images/005983.jpg -./VOC/train/VOCdevkit/VOC2007/images/005984.jpg -./VOC/train/VOCdevkit/VOC2007/images/005985.jpg -./VOC/train/VOCdevkit/VOC2007/images/005988.jpg -./VOC/train/VOCdevkit/VOC2007/images/005989.jpg -./VOC/train/VOCdevkit/VOC2007/images/005990.jpg -./VOC/train/VOCdevkit/VOC2007/images/005991.jpg -./VOC/train/VOCdevkit/VOC2007/images/005992.jpg -./VOC/train/VOCdevkit/VOC2007/images/005995.jpg -./VOC/train/VOCdevkit/VOC2007/images/005996.jpg -./VOC/train/VOCdevkit/VOC2007/images/005998.jpg -./VOC/train/VOCdevkit/VOC2007/images/006000.jpg -./VOC/train/VOCdevkit/VOC2007/images/006001.jpg -./VOC/train/VOCdevkit/VOC2007/images/006004.jpg -./VOC/train/VOCdevkit/VOC2007/images/006005.jpg -./VOC/train/VOCdevkit/VOC2007/images/006009.jpg -./VOC/train/VOCdevkit/VOC2007/images/006011.jpg -./VOC/train/VOCdevkit/VOC2007/images/006012.jpg -./VOC/train/VOCdevkit/VOC2007/images/006018.jpg -./VOC/train/VOCdevkit/VOC2007/images/006020.jpg -./VOC/train/VOCdevkit/VOC2007/images/006023.jpg -./VOC/train/VOCdevkit/VOC2007/images/006025.jpg -./VOC/train/VOCdevkit/VOC2007/images/006026.jpg -./VOC/train/VOCdevkit/VOC2007/images/006027.jpg -./VOC/train/VOCdevkit/VOC2007/images/006028.jpg -./VOC/train/VOCdevkit/VOC2007/images/006029.jpg -./VOC/train/VOCdevkit/VOC2007/images/006030.jpg -./VOC/train/VOCdevkit/VOC2007/images/006033.jpg -./VOC/train/VOCdevkit/VOC2007/images/006035.jpg -./VOC/train/VOCdevkit/VOC2007/images/006038.jpg -./VOC/train/VOCdevkit/VOC2007/images/006041.jpg -./VOC/train/VOCdevkit/VOC2007/images/006042.jpg -./VOC/train/VOCdevkit/VOC2007/images/006043.jpg -./VOC/train/VOCdevkit/VOC2007/images/006045.jpg -./VOC/train/VOCdevkit/VOC2007/images/006046.jpg -./VOC/train/VOCdevkit/VOC2007/images/006055.jpg -./VOC/train/VOCdevkit/VOC2007/images/006058.jpg -./VOC/train/VOCdevkit/VOC2007/images/006061.jpg -./VOC/train/VOCdevkit/VOC2007/images/006062.jpg -./VOC/train/VOCdevkit/VOC2007/images/006065.jpg -./VOC/train/VOCdevkit/VOC2007/images/006066.jpg -./VOC/train/VOCdevkit/VOC2007/images/006067.jpg -./VOC/train/VOCdevkit/VOC2007/images/006069.jpg -./VOC/train/VOCdevkit/VOC2007/images/006070.jpg -./VOC/train/VOCdevkit/VOC2007/images/006071.jpg -./VOC/train/VOCdevkit/VOC2007/images/006073.jpg -./VOC/train/VOCdevkit/VOC2007/images/006074.jpg -./VOC/train/VOCdevkit/VOC2007/images/006078.jpg -./VOC/train/VOCdevkit/VOC2007/images/006079.jpg -./VOC/train/VOCdevkit/VOC2007/images/006084.jpg -./VOC/train/VOCdevkit/VOC2007/images/006088.jpg -./VOC/train/VOCdevkit/VOC2007/images/006089.jpg -./VOC/train/VOCdevkit/VOC2007/images/006091.jpg -./VOC/train/VOCdevkit/VOC2007/images/006095.jpg -./VOC/train/VOCdevkit/VOC2007/images/006096.jpg -./VOC/train/VOCdevkit/VOC2007/images/006097.jpg -./VOC/train/VOCdevkit/VOC2007/images/006098.jpg -./VOC/train/VOCdevkit/VOC2007/images/006100.jpg -./VOC/train/VOCdevkit/VOC2007/images/006103.jpg -./VOC/train/VOCdevkit/VOC2007/images/006104.jpg -./VOC/train/VOCdevkit/VOC2007/images/006105.jpg -./VOC/train/VOCdevkit/VOC2007/images/006107.jpg -./VOC/train/VOCdevkit/VOC2007/images/006108.jpg -./VOC/train/VOCdevkit/VOC2007/images/006111.jpg -./VOC/train/VOCdevkit/VOC2007/images/006117.jpg -./VOC/train/VOCdevkit/VOC2007/images/006120.jpg -./VOC/train/VOCdevkit/VOC2007/images/006123.jpg -./VOC/train/VOCdevkit/VOC2007/images/006124.jpg -./VOC/train/VOCdevkit/VOC2007/images/006125.jpg -./VOC/train/VOCdevkit/VOC2007/images/006128.jpg -./VOC/train/VOCdevkit/VOC2007/images/006129.jpg -./VOC/train/VOCdevkit/VOC2007/images/006130.jpg -./VOC/train/VOCdevkit/VOC2007/images/006131.jpg -./VOC/train/VOCdevkit/VOC2007/images/006133.jpg -./VOC/train/VOCdevkit/VOC2007/images/006134.jpg -./VOC/train/VOCdevkit/VOC2007/images/006135.jpg -./VOC/train/VOCdevkit/VOC2007/images/006136.jpg -./VOC/train/VOCdevkit/VOC2007/images/006139.jpg -./VOC/train/VOCdevkit/VOC2007/images/006140.jpg -./VOC/train/VOCdevkit/VOC2007/images/006141.jpg -./VOC/train/VOCdevkit/VOC2007/images/006146.jpg -./VOC/train/VOCdevkit/VOC2007/images/006148.jpg -./VOC/train/VOCdevkit/VOC2007/images/006150.jpg -./VOC/train/VOCdevkit/VOC2007/images/006151.jpg -./VOC/train/VOCdevkit/VOC2007/images/006153.jpg -./VOC/train/VOCdevkit/VOC2007/images/006156.jpg -./VOC/train/VOCdevkit/VOC2007/images/006158.jpg -./VOC/train/VOCdevkit/VOC2007/images/006159.jpg -./VOC/train/VOCdevkit/VOC2007/images/006161.jpg -./VOC/train/VOCdevkit/VOC2007/images/006162.jpg -./VOC/train/VOCdevkit/VOC2007/images/006163.jpg -./VOC/train/VOCdevkit/VOC2007/images/006166.jpg -./VOC/train/VOCdevkit/VOC2007/images/006170.jpg -./VOC/train/VOCdevkit/VOC2007/images/006171.jpg -./VOC/train/VOCdevkit/VOC2007/images/006172.jpg -./VOC/train/VOCdevkit/VOC2007/images/006174.jpg -./VOC/train/VOCdevkit/VOC2007/images/006175.jpg -./VOC/train/VOCdevkit/VOC2007/images/006176.jpg -./VOC/train/VOCdevkit/VOC2007/images/006177.jpg -./VOC/train/VOCdevkit/VOC2007/images/006179.jpg -./VOC/train/VOCdevkit/VOC2007/images/006180.jpg -./VOC/train/VOCdevkit/VOC2007/images/006181.jpg -./VOC/train/VOCdevkit/VOC2007/images/006183.jpg -./VOC/train/VOCdevkit/VOC2007/images/006184.jpg -./VOC/train/VOCdevkit/VOC2007/images/006185.jpg -./VOC/train/VOCdevkit/VOC2007/images/006187.jpg -./VOC/train/VOCdevkit/VOC2007/images/006188.jpg -./VOC/train/VOCdevkit/VOC2007/images/006189.jpg -./VOC/train/VOCdevkit/VOC2007/images/006190.jpg -./VOC/train/VOCdevkit/VOC2007/images/006196.jpg -./VOC/train/VOCdevkit/VOC2007/images/006198.jpg -./VOC/train/VOCdevkit/VOC2007/images/006201.jpg -./VOC/train/VOCdevkit/VOC2007/images/006202.jpg -./VOC/train/VOCdevkit/VOC2007/images/006203.jpg -./VOC/train/VOCdevkit/VOC2007/images/006206.jpg -./VOC/train/VOCdevkit/VOC2007/images/006208.jpg -./VOC/train/VOCdevkit/VOC2007/images/006209.jpg -./VOC/train/VOCdevkit/VOC2007/images/006210.jpg -./VOC/train/VOCdevkit/VOC2007/images/006212.jpg -./VOC/train/VOCdevkit/VOC2007/images/006214.jpg -./VOC/train/VOCdevkit/VOC2007/images/006215.jpg -./VOC/train/VOCdevkit/VOC2007/images/006216.jpg -./VOC/train/VOCdevkit/VOC2007/images/006218.jpg -./VOC/train/VOCdevkit/VOC2007/images/006219.jpg -./VOC/train/VOCdevkit/VOC2007/images/006220.jpg -./VOC/train/VOCdevkit/VOC2007/images/006221.jpg -./VOC/train/VOCdevkit/VOC2007/images/006222.jpg -./VOC/train/VOCdevkit/VOC2007/images/006223.jpg -./VOC/train/VOCdevkit/VOC2007/images/006224.jpg -./VOC/train/VOCdevkit/VOC2007/images/006225.jpg -./VOC/train/VOCdevkit/VOC2007/images/006229.jpg -./VOC/train/VOCdevkit/VOC2007/images/006230.jpg -./VOC/train/VOCdevkit/VOC2007/images/006233.jpg -./VOC/train/VOCdevkit/VOC2007/images/006234.jpg -./VOC/train/VOCdevkit/VOC2007/images/006235.jpg -./VOC/train/VOCdevkit/VOC2007/images/006236.jpg -./VOC/train/VOCdevkit/VOC2007/images/006238.jpg -./VOC/train/VOCdevkit/VOC2007/images/006240.jpg -./VOC/train/VOCdevkit/VOC2007/images/006241.jpg -./VOC/train/VOCdevkit/VOC2007/images/006243.jpg -./VOC/train/VOCdevkit/VOC2007/images/006247.jpg -./VOC/train/VOCdevkit/VOC2007/images/006249.jpg -./VOC/train/VOCdevkit/VOC2007/images/006250.jpg -./VOC/train/VOCdevkit/VOC2007/images/006251.jpg -./VOC/train/VOCdevkit/VOC2007/images/006252.jpg -./VOC/train/VOCdevkit/VOC2007/images/006254.jpg -./VOC/train/VOCdevkit/VOC2007/images/006258.jpg -./VOC/train/VOCdevkit/VOC2007/images/006259.jpg -./VOC/train/VOCdevkit/VOC2007/images/006260.jpg -./VOC/train/VOCdevkit/VOC2007/images/006261.jpg -./VOC/train/VOCdevkit/VOC2007/images/006262.jpg -./VOC/train/VOCdevkit/VOC2007/images/006264.jpg -./VOC/train/VOCdevkit/VOC2007/images/006267.jpg -./VOC/train/VOCdevkit/VOC2007/images/006269.jpg -./VOC/train/VOCdevkit/VOC2007/images/006270.jpg -./VOC/train/VOCdevkit/VOC2007/images/006272.jpg -./VOC/train/VOCdevkit/VOC2007/images/006275.jpg -./VOC/train/VOCdevkit/VOC2007/images/006276.jpg -./VOC/train/VOCdevkit/VOC2007/images/006277.jpg -./VOC/train/VOCdevkit/VOC2007/images/006279.jpg -./VOC/train/VOCdevkit/VOC2007/images/006281.jpg -./VOC/train/VOCdevkit/VOC2007/images/006282.jpg -./VOC/train/VOCdevkit/VOC2007/images/006284.jpg -./VOC/train/VOCdevkit/VOC2007/images/006285.jpg -./VOC/train/VOCdevkit/VOC2007/images/006286.jpg -./VOC/train/VOCdevkit/VOC2007/images/006289.jpg -./VOC/train/VOCdevkit/VOC2007/images/006290.jpg -./VOC/train/VOCdevkit/VOC2007/images/006291.jpg -./VOC/train/VOCdevkit/VOC2007/images/006295.jpg -./VOC/train/VOCdevkit/VOC2007/images/006296.jpg -./VOC/train/VOCdevkit/VOC2007/images/006299.jpg -./VOC/train/VOCdevkit/VOC2007/images/006300.jpg -./VOC/train/VOCdevkit/VOC2007/images/006301.jpg -./VOC/train/VOCdevkit/VOC2007/images/006304.jpg -./VOC/train/VOCdevkit/VOC2007/images/006305.jpg -./VOC/train/VOCdevkit/VOC2007/images/006306.jpg -./VOC/train/VOCdevkit/VOC2007/images/006309.jpg -./VOC/train/VOCdevkit/VOC2007/images/006314.jpg -./VOC/train/VOCdevkit/VOC2007/images/006318.jpg -./VOC/train/VOCdevkit/VOC2007/images/006319.jpg -./VOC/train/VOCdevkit/VOC2007/images/006320.jpg -./VOC/train/VOCdevkit/VOC2007/images/006321.jpg -./VOC/train/VOCdevkit/VOC2007/images/006323.jpg -./VOC/train/VOCdevkit/VOC2007/images/006325.jpg -./VOC/train/VOCdevkit/VOC2007/images/006329.jpg -./VOC/train/VOCdevkit/VOC2007/images/006330.jpg -./VOC/train/VOCdevkit/VOC2007/images/006335.jpg -./VOC/train/VOCdevkit/VOC2007/images/006337.jpg -./VOC/train/VOCdevkit/VOC2007/images/006338.jpg -./VOC/train/VOCdevkit/VOC2007/images/006339.jpg -./VOC/train/VOCdevkit/VOC2007/images/006341.jpg -./VOC/train/VOCdevkit/VOC2007/images/006344.jpg -./VOC/train/VOCdevkit/VOC2007/images/006346.jpg -./VOC/train/VOCdevkit/VOC2007/images/006348.jpg -./VOC/train/VOCdevkit/VOC2007/images/006349.jpg -./VOC/train/VOCdevkit/VOC2007/images/006350.jpg -./VOC/train/VOCdevkit/VOC2007/images/006351.jpg -./VOC/train/VOCdevkit/VOC2007/images/006352.jpg -./VOC/train/VOCdevkit/VOC2007/images/006353.jpg -./VOC/train/VOCdevkit/VOC2007/images/006355.jpg -./VOC/train/VOCdevkit/VOC2007/images/006357.jpg -./VOC/train/VOCdevkit/VOC2007/images/006362.jpg -./VOC/train/VOCdevkit/VOC2007/images/006363.jpg -./VOC/train/VOCdevkit/VOC2007/images/006366.jpg -./VOC/train/VOCdevkit/VOC2007/images/006367.jpg -./VOC/train/VOCdevkit/VOC2007/images/006369.jpg -./VOC/train/VOCdevkit/VOC2007/images/006371.jpg -./VOC/train/VOCdevkit/VOC2007/images/006374.jpg -./VOC/train/VOCdevkit/VOC2007/images/006375.jpg -./VOC/train/VOCdevkit/VOC2007/images/006377.jpg -./VOC/train/VOCdevkit/VOC2007/images/006381.jpg -./VOC/train/VOCdevkit/VOC2007/images/006382.jpg -./VOC/train/VOCdevkit/VOC2007/images/006385.jpg -./VOC/train/VOCdevkit/VOC2007/images/006387.jpg -./VOC/train/VOCdevkit/VOC2007/images/006391.jpg -./VOC/train/VOCdevkit/VOC2007/images/006392.jpg -./VOC/train/VOCdevkit/VOC2007/images/006395.jpg -./VOC/train/VOCdevkit/VOC2007/images/006396.jpg -./VOC/train/VOCdevkit/VOC2007/images/006398.jpg -./VOC/train/VOCdevkit/VOC2007/images/006400.jpg -./VOC/train/VOCdevkit/VOC2007/images/006404.jpg -./VOC/train/VOCdevkit/VOC2007/images/006409.jpg -./VOC/train/VOCdevkit/VOC2007/images/006411.jpg -./VOC/train/VOCdevkit/VOC2007/images/006417.jpg -./VOC/train/VOCdevkit/VOC2007/images/006418.jpg -./VOC/train/VOCdevkit/VOC2007/images/006419.jpg -./VOC/train/VOCdevkit/VOC2007/images/006421.jpg -./VOC/train/VOCdevkit/VOC2007/images/006424.jpg -./VOC/train/VOCdevkit/VOC2007/images/006425.jpg -./VOC/train/VOCdevkit/VOC2007/images/006427.jpg -./VOC/train/VOCdevkit/VOC2007/images/006428.jpg -./VOC/train/VOCdevkit/VOC2007/images/006429.jpg -./VOC/train/VOCdevkit/VOC2007/images/006430.jpg -./VOC/train/VOCdevkit/VOC2007/images/006433.jpg -./VOC/train/VOCdevkit/VOC2007/images/006434.jpg -./VOC/train/VOCdevkit/VOC2007/images/006436.jpg -./VOC/train/VOCdevkit/VOC2007/images/006437.jpg -./VOC/train/VOCdevkit/VOC2007/images/006438.jpg -./VOC/train/VOCdevkit/VOC2007/images/006440.jpg -./VOC/train/VOCdevkit/VOC2007/images/006442.jpg -./VOC/train/VOCdevkit/VOC2007/images/006443.jpg -./VOC/train/VOCdevkit/VOC2007/images/006444.jpg -./VOC/train/VOCdevkit/VOC2007/images/006445.jpg -./VOC/train/VOCdevkit/VOC2007/images/006447.jpg -./VOC/train/VOCdevkit/VOC2007/images/006448.jpg -./VOC/train/VOCdevkit/VOC2007/images/006449.jpg -./VOC/train/VOCdevkit/VOC2007/images/006450.jpg -./VOC/train/VOCdevkit/VOC2007/images/006455.jpg -./VOC/train/VOCdevkit/VOC2007/images/006456.jpg -./VOC/train/VOCdevkit/VOC2007/images/006458.jpg -./VOC/train/VOCdevkit/VOC2007/images/006459.jpg -./VOC/train/VOCdevkit/VOC2007/images/006462.jpg -./VOC/train/VOCdevkit/VOC2007/images/006463.jpg -./VOC/train/VOCdevkit/VOC2007/images/006465.jpg -./VOC/train/VOCdevkit/VOC2007/images/006466.jpg -./VOC/train/VOCdevkit/VOC2007/images/006468.jpg -./VOC/train/VOCdevkit/VOC2007/images/006470.jpg -./VOC/train/VOCdevkit/VOC2007/images/006472.jpg -./VOC/train/VOCdevkit/VOC2007/images/006473.jpg -./VOC/train/VOCdevkit/VOC2007/images/006474.jpg -./VOC/train/VOCdevkit/VOC2007/images/006475.jpg -./VOC/train/VOCdevkit/VOC2007/images/006476.jpg -./VOC/train/VOCdevkit/VOC2007/images/006480.jpg -./VOC/train/VOCdevkit/VOC2007/images/006482.jpg -./VOC/train/VOCdevkit/VOC2007/images/006483.jpg -./VOC/train/VOCdevkit/VOC2007/images/006484.jpg -./VOC/train/VOCdevkit/VOC2007/images/006486.jpg -./VOC/train/VOCdevkit/VOC2007/images/006488.jpg -./VOC/train/VOCdevkit/VOC2007/images/006492.jpg -./VOC/train/VOCdevkit/VOC2007/images/006495.jpg -./VOC/train/VOCdevkit/VOC2007/images/006497.jpg -./VOC/train/VOCdevkit/VOC2007/images/006499.jpg -./VOC/train/VOCdevkit/VOC2007/images/006501.jpg -./VOC/train/VOCdevkit/VOC2007/images/006503.jpg -./VOC/train/VOCdevkit/VOC2007/images/006506.jpg -./VOC/train/VOCdevkit/VOC2007/images/006507.jpg -./VOC/train/VOCdevkit/VOC2007/images/006509.jpg -./VOC/train/VOCdevkit/VOC2007/images/006512.jpg -./VOC/train/VOCdevkit/VOC2007/images/006515.jpg -./VOC/train/VOCdevkit/VOC2007/images/006519.jpg -./VOC/train/VOCdevkit/VOC2007/images/006520.jpg -./VOC/train/VOCdevkit/VOC2007/images/006523.jpg -./VOC/train/VOCdevkit/VOC2007/images/006524.jpg -./VOC/train/VOCdevkit/VOC2007/images/006529.jpg -./VOC/train/VOCdevkit/VOC2007/images/006530.jpg -./VOC/train/VOCdevkit/VOC2007/images/006532.jpg -./VOC/train/VOCdevkit/VOC2007/images/006534.jpg -./VOC/train/VOCdevkit/VOC2007/images/006536.jpg -./VOC/train/VOCdevkit/VOC2007/images/006538.jpg -./VOC/train/VOCdevkit/VOC2007/images/006542.jpg -./VOC/train/VOCdevkit/VOC2007/images/006543.jpg -./VOC/train/VOCdevkit/VOC2007/images/006547.jpg -./VOC/train/VOCdevkit/VOC2007/images/006548.jpg -./VOC/train/VOCdevkit/VOC2007/images/006549.jpg -./VOC/train/VOCdevkit/VOC2007/images/006550.jpg -./VOC/train/VOCdevkit/VOC2007/images/006551.jpg -./VOC/train/VOCdevkit/VOC2007/images/006553.jpg -./VOC/train/VOCdevkit/VOC2007/images/006556.jpg -./VOC/train/VOCdevkit/VOC2007/images/006560.jpg -./VOC/train/VOCdevkit/VOC2007/images/006562.jpg -./VOC/train/VOCdevkit/VOC2007/images/006564.jpg -./VOC/train/VOCdevkit/VOC2007/images/006565.jpg -./VOC/train/VOCdevkit/VOC2007/images/006569.jpg -./VOC/train/VOCdevkit/VOC2007/images/006570.jpg -./VOC/train/VOCdevkit/VOC2007/images/006572.jpg -./VOC/train/VOCdevkit/VOC2007/images/006575.jpg -./VOC/train/VOCdevkit/VOC2007/images/006576.jpg -./VOC/train/VOCdevkit/VOC2007/images/006578.jpg -./VOC/train/VOCdevkit/VOC2007/images/006583.jpg -./VOC/train/VOCdevkit/VOC2007/images/006584.jpg -./VOC/train/VOCdevkit/VOC2007/images/006585.jpg -./VOC/train/VOCdevkit/VOC2007/images/006587.jpg -./VOC/train/VOCdevkit/VOC2007/images/006588.jpg -./VOC/train/VOCdevkit/VOC2007/images/006593.jpg -./VOC/train/VOCdevkit/VOC2007/images/006595.jpg -./VOC/train/VOCdevkit/VOC2007/images/006597.jpg -./VOC/train/VOCdevkit/VOC2007/images/006599.jpg -./VOC/train/VOCdevkit/VOC2007/images/006602.jpg -./VOC/train/VOCdevkit/VOC2007/images/006603.jpg -./VOC/train/VOCdevkit/VOC2007/images/006605.jpg -./VOC/train/VOCdevkit/VOC2007/images/006606.jpg -./VOC/train/VOCdevkit/VOC2007/images/006609.jpg -./VOC/train/VOCdevkit/VOC2007/images/006610.jpg -./VOC/train/VOCdevkit/VOC2007/images/006611.jpg -./VOC/train/VOCdevkit/VOC2007/images/006612.jpg -./VOC/train/VOCdevkit/VOC2007/images/006617.jpg -./VOC/train/VOCdevkit/VOC2007/images/006618.jpg -./VOC/train/VOCdevkit/VOC2007/images/006619.jpg -./VOC/train/VOCdevkit/VOC2007/images/006621.jpg -./VOC/train/VOCdevkit/VOC2007/images/006622.jpg -./VOC/train/VOCdevkit/VOC2007/images/006625.jpg -./VOC/train/VOCdevkit/VOC2007/images/006626.jpg -./VOC/train/VOCdevkit/VOC2007/images/006627.jpg -./VOC/train/VOCdevkit/VOC2007/images/006628.jpg -./VOC/train/VOCdevkit/VOC2007/images/006631.jpg -./VOC/train/VOCdevkit/VOC2007/images/006632.jpg -./VOC/train/VOCdevkit/VOC2007/images/006635.jpg -./VOC/train/VOCdevkit/VOC2007/images/006636.jpg -./VOC/train/VOCdevkit/VOC2007/images/006637.jpg -./VOC/train/VOCdevkit/VOC2007/images/006638.jpg -./VOC/train/VOCdevkit/VOC2007/images/006643.jpg -./VOC/train/VOCdevkit/VOC2007/images/006645.jpg -./VOC/train/VOCdevkit/VOC2007/images/006647.jpg -./VOC/train/VOCdevkit/VOC2007/images/006648.jpg -./VOC/train/VOCdevkit/VOC2007/images/006652.jpg -./VOC/train/VOCdevkit/VOC2007/images/006654.jpg -./VOC/train/VOCdevkit/VOC2007/images/006657.jpg -./VOC/train/VOCdevkit/VOC2007/images/006658.jpg -./VOC/train/VOCdevkit/VOC2007/images/006660.jpg -./VOC/train/VOCdevkit/VOC2007/images/006661.jpg -./VOC/train/VOCdevkit/VOC2007/images/006664.jpg -./VOC/train/VOCdevkit/VOC2007/images/006666.jpg -./VOC/train/VOCdevkit/VOC2007/images/006667.jpg -./VOC/train/VOCdevkit/VOC2007/images/006668.jpg -./VOC/train/VOCdevkit/VOC2007/images/006670.jpg -./VOC/train/VOCdevkit/VOC2007/images/006671.jpg -./VOC/train/VOCdevkit/VOC2007/images/006673.jpg -./VOC/train/VOCdevkit/VOC2007/images/006674.jpg -./VOC/train/VOCdevkit/VOC2007/images/006677.jpg -./VOC/train/VOCdevkit/VOC2007/images/006678.jpg -./VOC/train/VOCdevkit/VOC2007/images/006679.jpg -./VOC/train/VOCdevkit/VOC2007/images/006681.jpg -./VOC/train/VOCdevkit/VOC2007/images/006682.jpg -./VOC/train/VOCdevkit/VOC2007/images/006684.jpg -./VOC/train/VOCdevkit/VOC2007/images/006687.jpg -./VOC/train/VOCdevkit/VOC2007/images/006689.jpg -./VOC/train/VOCdevkit/VOC2007/images/006690.jpg -./VOC/train/VOCdevkit/VOC2007/images/006694.jpg -./VOC/train/VOCdevkit/VOC2007/images/006695.jpg -./VOC/train/VOCdevkit/VOC2007/images/006696.jpg -./VOC/train/VOCdevkit/VOC2007/images/006697.jpg -./VOC/train/VOCdevkit/VOC2007/images/006698.jpg -./VOC/train/VOCdevkit/VOC2007/images/006699.jpg -./VOC/train/VOCdevkit/VOC2007/images/006702.jpg -./VOC/train/VOCdevkit/VOC2007/images/006703.jpg -./VOC/train/VOCdevkit/VOC2007/images/006704.jpg -./VOC/train/VOCdevkit/VOC2007/images/006706.jpg -./VOC/train/VOCdevkit/VOC2007/images/006707.jpg -./VOC/train/VOCdevkit/VOC2007/images/006708.jpg -./VOC/train/VOCdevkit/VOC2007/images/006709.jpg -./VOC/train/VOCdevkit/VOC2007/images/006714.jpg -./VOC/train/VOCdevkit/VOC2007/images/006718.jpg -./VOC/train/VOCdevkit/VOC2007/images/006719.jpg -./VOC/train/VOCdevkit/VOC2007/images/006722.jpg -./VOC/train/VOCdevkit/VOC2007/images/006725.jpg -./VOC/train/VOCdevkit/VOC2007/images/006726.jpg -./VOC/train/VOCdevkit/VOC2007/images/006727.jpg -./VOC/train/VOCdevkit/VOC2007/images/006730.jpg -./VOC/train/VOCdevkit/VOC2007/images/006731.jpg -./VOC/train/VOCdevkit/VOC2007/images/006734.jpg -./VOC/train/VOCdevkit/VOC2007/images/006735.jpg -./VOC/train/VOCdevkit/VOC2007/images/006736.jpg -./VOC/train/VOCdevkit/VOC2007/images/006738.jpg -./VOC/train/VOCdevkit/VOC2007/images/006739.jpg -./VOC/train/VOCdevkit/VOC2007/images/006740.jpg -./VOC/train/VOCdevkit/VOC2007/images/006747.jpg -./VOC/train/VOCdevkit/VOC2007/images/006748.jpg -./VOC/train/VOCdevkit/VOC2007/images/006751.jpg -./VOC/train/VOCdevkit/VOC2007/images/006753.jpg -./VOC/train/VOCdevkit/VOC2007/images/006755.jpg -./VOC/train/VOCdevkit/VOC2007/images/006759.jpg -./VOC/train/VOCdevkit/VOC2007/images/006760.jpg -./VOC/train/VOCdevkit/VOC2007/images/006761.jpg -./VOC/train/VOCdevkit/VOC2007/images/006762.jpg -./VOC/train/VOCdevkit/VOC2007/images/006765.jpg -./VOC/train/VOCdevkit/VOC2007/images/006766.jpg -./VOC/train/VOCdevkit/VOC2007/images/006768.jpg -./VOC/train/VOCdevkit/VOC2007/images/006769.jpg -./VOC/train/VOCdevkit/VOC2007/images/006772.jpg -./VOC/train/VOCdevkit/VOC2007/images/006773.jpg -./VOC/train/VOCdevkit/VOC2007/images/006777.jpg -./VOC/train/VOCdevkit/VOC2007/images/006781.jpg -./VOC/train/VOCdevkit/VOC2007/images/006782.jpg -./VOC/train/VOCdevkit/VOC2007/images/006783.jpg -./VOC/train/VOCdevkit/VOC2007/images/006784.jpg -./VOC/train/VOCdevkit/VOC2007/images/006786.jpg -./VOC/train/VOCdevkit/VOC2007/images/006789.jpg -./VOC/train/VOCdevkit/VOC2007/images/006794.jpg -./VOC/train/VOCdevkit/VOC2007/images/006797.jpg -./VOC/train/VOCdevkit/VOC2007/images/006799.jpg -./VOC/train/VOCdevkit/VOC2007/images/006800.jpg -./VOC/train/VOCdevkit/VOC2007/images/006802.jpg -./VOC/train/VOCdevkit/VOC2007/images/006803.jpg -./VOC/train/VOCdevkit/VOC2007/images/006805.jpg -./VOC/train/VOCdevkit/VOC2007/images/006806.jpg -./VOC/train/VOCdevkit/VOC2007/images/006808.jpg -./VOC/train/VOCdevkit/VOC2007/images/006810.jpg -./VOC/train/VOCdevkit/VOC2007/images/006813.jpg -./VOC/train/VOCdevkit/VOC2007/images/006814.jpg -./VOC/train/VOCdevkit/VOC2007/images/006819.jpg -./VOC/train/VOCdevkit/VOC2007/images/006821.jpg -./VOC/train/VOCdevkit/VOC2007/images/006822.jpg -./VOC/train/VOCdevkit/VOC2007/images/006824.jpg -./VOC/train/VOCdevkit/VOC2007/images/006825.jpg -./VOC/train/VOCdevkit/VOC2007/images/006827.jpg -./VOC/train/VOCdevkit/VOC2007/images/006828.jpg -./VOC/train/VOCdevkit/VOC2007/images/006829.jpg -./VOC/train/VOCdevkit/VOC2007/images/006833.jpg -./VOC/train/VOCdevkit/VOC2007/images/006835.jpg -./VOC/train/VOCdevkit/VOC2007/images/006836.jpg -./VOC/train/VOCdevkit/VOC2007/images/006838.jpg -./VOC/train/VOCdevkit/VOC2007/images/006839.jpg -./VOC/train/VOCdevkit/VOC2007/images/006840.jpg -./VOC/train/VOCdevkit/VOC2007/images/006841.jpg -./VOC/train/VOCdevkit/VOC2007/images/006842.jpg -./VOC/train/VOCdevkit/VOC2007/images/006844.jpg -./VOC/train/VOCdevkit/VOC2007/images/006845.jpg -./VOC/train/VOCdevkit/VOC2007/images/006847.jpg -./VOC/train/VOCdevkit/VOC2007/images/006848.jpg -./VOC/train/VOCdevkit/VOC2007/images/006849.jpg -./VOC/train/VOCdevkit/VOC2007/images/006850.jpg -./VOC/train/VOCdevkit/VOC2007/images/006852.jpg -./VOC/train/VOCdevkit/VOC2007/images/006855.jpg -./VOC/train/VOCdevkit/VOC2007/images/006858.jpg -./VOC/train/VOCdevkit/VOC2007/images/006859.jpg -./VOC/train/VOCdevkit/VOC2007/images/006860.jpg -./VOC/train/VOCdevkit/VOC2007/images/006862.jpg -./VOC/train/VOCdevkit/VOC2007/images/006864.jpg -./VOC/train/VOCdevkit/VOC2007/images/006865.jpg -./VOC/train/VOCdevkit/VOC2007/images/006866.jpg -./VOC/train/VOCdevkit/VOC2007/images/006867.jpg -./VOC/train/VOCdevkit/VOC2007/images/006868.jpg -./VOC/train/VOCdevkit/VOC2007/images/006869.jpg -./VOC/train/VOCdevkit/VOC2007/images/006874.jpg -./VOC/train/VOCdevkit/VOC2007/images/006876.jpg -./VOC/train/VOCdevkit/VOC2007/images/006878.jpg -./VOC/train/VOCdevkit/VOC2007/images/006880.jpg -./VOC/train/VOCdevkit/VOC2007/images/006883.jpg -./VOC/train/VOCdevkit/VOC2007/images/006884.jpg -./VOC/train/VOCdevkit/VOC2007/images/006886.jpg -./VOC/train/VOCdevkit/VOC2007/images/006887.jpg -./VOC/train/VOCdevkit/VOC2007/images/006892.jpg -./VOC/train/VOCdevkit/VOC2007/images/006893.jpg -./VOC/train/VOCdevkit/VOC2007/images/006896.jpg -./VOC/train/VOCdevkit/VOC2007/images/006899.jpg -./VOC/train/VOCdevkit/VOC2007/images/006900.jpg -./VOC/train/VOCdevkit/VOC2007/images/006903.jpg -./VOC/train/VOCdevkit/VOC2007/images/006908.jpg -./VOC/train/VOCdevkit/VOC2007/images/006909.jpg -./VOC/train/VOCdevkit/VOC2007/images/006910.jpg -./VOC/train/VOCdevkit/VOC2007/images/006911.jpg -./VOC/train/VOCdevkit/VOC2007/images/006912.jpg -./VOC/train/VOCdevkit/VOC2007/images/006914.jpg -./VOC/train/VOCdevkit/VOC2007/images/006916.jpg -./VOC/train/VOCdevkit/VOC2007/images/006917.jpg -./VOC/train/VOCdevkit/VOC2007/images/006918.jpg -./VOC/train/VOCdevkit/VOC2007/images/006919.jpg -./VOC/train/VOCdevkit/VOC2007/images/006922.jpg -./VOC/train/VOCdevkit/VOC2007/images/006924.jpg -./VOC/train/VOCdevkit/VOC2007/images/006930.jpg -./VOC/train/VOCdevkit/VOC2007/images/006931.jpg -./VOC/train/VOCdevkit/VOC2007/images/006932.jpg -./VOC/train/VOCdevkit/VOC2007/images/006933.jpg -./VOC/train/VOCdevkit/VOC2007/images/006934.jpg -./VOC/train/VOCdevkit/VOC2007/images/006935.jpg -./VOC/train/VOCdevkit/VOC2007/images/006939.jpg -./VOC/train/VOCdevkit/VOC2007/images/006940.jpg -./VOC/train/VOCdevkit/VOC2007/images/006943.jpg -./VOC/train/VOCdevkit/VOC2007/images/006944.jpg -./VOC/train/VOCdevkit/VOC2007/images/006945.jpg -./VOC/train/VOCdevkit/VOC2007/images/006947.jpg -./VOC/train/VOCdevkit/VOC2007/images/006948.jpg -./VOC/train/VOCdevkit/VOC2007/images/006949.jpg -./VOC/train/VOCdevkit/VOC2007/images/006950.jpg -./VOC/train/VOCdevkit/VOC2007/images/006952.jpg -./VOC/train/VOCdevkit/VOC2007/images/006953.jpg -./VOC/train/VOCdevkit/VOC2007/images/006956.jpg -./VOC/train/VOCdevkit/VOC2007/images/006958.jpg -./VOC/train/VOCdevkit/VOC2007/images/006959.jpg -./VOC/train/VOCdevkit/VOC2007/images/006962.jpg -./VOC/train/VOCdevkit/VOC2007/images/006963.jpg -./VOC/train/VOCdevkit/VOC2007/images/006965.jpg -./VOC/train/VOCdevkit/VOC2007/images/006966.jpg -./VOC/train/VOCdevkit/VOC2007/images/006968.jpg -./VOC/train/VOCdevkit/VOC2007/images/006971.jpg -./VOC/train/VOCdevkit/VOC2007/images/006972.jpg -./VOC/train/VOCdevkit/VOC2007/images/006976.jpg -./VOC/train/VOCdevkit/VOC2007/images/006981.jpg -./VOC/train/VOCdevkit/VOC2007/images/006983.jpg -./VOC/train/VOCdevkit/VOC2007/images/006987.jpg -./VOC/train/VOCdevkit/VOC2007/images/006988.jpg -./VOC/train/VOCdevkit/VOC2007/images/006989.jpg -./VOC/train/VOCdevkit/VOC2007/images/006990.jpg -./VOC/train/VOCdevkit/VOC2007/images/006994.jpg -./VOC/train/VOCdevkit/VOC2007/images/006995.jpg -./VOC/train/VOCdevkit/VOC2007/images/007002.jpg -./VOC/train/VOCdevkit/VOC2007/images/007003.jpg -./VOC/train/VOCdevkit/VOC2007/images/007004.jpg -./VOC/train/VOCdevkit/VOC2007/images/007006.jpg -./VOC/train/VOCdevkit/VOC2007/images/007007.jpg -./VOC/train/VOCdevkit/VOC2007/images/007008.jpg -./VOC/train/VOCdevkit/VOC2007/images/007009.jpg -./VOC/train/VOCdevkit/VOC2007/images/007011.jpg -./VOC/train/VOCdevkit/VOC2007/images/007016.jpg -./VOC/train/VOCdevkit/VOC2007/images/007018.jpg -./VOC/train/VOCdevkit/VOC2007/images/007020.jpg -./VOC/train/VOCdevkit/VOC2007/images/007021.jpg -./VOC/train/VOCdevkit/VOC2007/images/007022.jpg -./VOC/train/VOCdevkit/VOC2007/images/007023.jpg -./VOC/train/VOCdevkit/VOC2007/images/007025.jpg -./VOC/train/VOCdevkit/VOC2007/images/007029.jpg -./VOC/train/VOCdevkit/VOC2007/images/007031.jpg -./VOC/train/VOCdevkit/VOC2007/images/007033.jpg -./VOC/train/VOCdevkit/VOC2007/images/007035.jpg -./VOC/train/VOCdevkit/VOC2007/images/007036.jpg -./VOC/train/VOCdevkit/VOC2007/images/007038.jpg -./VOC/train/VOCdevkit/VOC2007/images/007039.jpg -./VOC/train/VOCdevkit/VOC2007/images/007040.jpg -./VOC/train/VOCdevkit/VOC2007/images/007042.jpg -./VOC/train/VOCdevkit/VOC2007/images/007045.jpg -./VOC/train/VOCdevkit/VOC2007/images/007046.jpg -./VOC/train/VOCdevkit/VOC2007/images/007048.jpg -./VOC/train/VOCdevkit/VOC2007/images/007049.jpg -./VOC/train/VOCdevkit/VOC2007/images/007050.jpg -./VOC/train/VOCdevkit/VOC2007/images/007052.jpg -./VOC/train/VOCdevkit/VOC2007/images/007054.jpg -./VOC/train/VOCdevkit/VOC2007/images/007056.jpg -./VOC/train/VOCdevkit/VOC2007/images/007058.jpg -./VOC/train/VOCdevkit/VOC2007/images/007059.jpg -./VOC/train/VOCdevkit/VOC2007/images/007062.jpg -./VOC/train/VOCdevkit/VOC2007/images/007064.jpg -./VOC/train/VOCdevkit/VOC2007/images/007065.jpg -./VOC/train/VOCdevkit/VOC2007/images/007068.jpg -./VOC/train/VOCdevkit/VOC2007/images/007070.jpg -./VOC/train/VOCdevkit/VOC2007/images/007071.jpg -./VOC/train/VOCdevkit/VOC2007/images/007072.jpg -./VOC/train/VOCdevkit/VOC2007/images/007073.jpg -./VOC/train/VOCdevkit/VOC2007/images/007074.jpg -./VOC/train/VOCdevkit/VOC2007/images/007075.jpg -./VOC/train/VOCdevkit/VOC2007/images/007077.jpg -./VOC/train/VOCdevkit/VOC2007/images/007078.jpg -./VOC/train/VOCdevkit/VOC2007/images/007079.jpg -./VOC/train/VOCdevkit/VOC2007/images/007080.jpg -./VOC/train/VOCdevkit/VOC2007/images/007084.jpg -./VOC/train/VOCdevkit/VOC2007/images/007086.jpg -./VOC/train/VOCdevkit/VOC2007/images/007088.jpg -./VOC/train/VOCdevkit/VOC2007/images/007089.jpg -./VOC/train/VOCdevkit/VOC2007/images/007090.jpg -./VOC/train/VOCdevkit/VOC2007/images/007092.jpg -./VOC/train/VOCdevkit/VOC2007/images/007093.jpg -./VOC/train/VOCdevkit/VOC2007/images/007095.jpg -./VOC/train/VOCdevkit/VOC2007/images/007097.jpg -./VOC/train/VOCdevkit/VOC2007/images/007100.jpg -./VOC/train/VOCdevkit/VOC2007/images/007101.jpg -./VOC/train/VOCdevkit/VOC2007/images/007104.jpg -./VOC/train/VOCdevkit/VOC2007/images/007105.jpg -./VOC/train/VOCdevkit/VOC2007/images/007108.jpg -./VOC/train/VOCdevkit/VOC2007/images/007109.jpg -./VOC/train/VOCdevkit/VOC2007/images/007113.jpg -./VOC/train/VOCdevkit/VOC2007/images/007114.jpg -./VOC/train/VOCdevkit/VOC2007/images/007117.jpg -./VOC/train/VOCdevkit/VOC2007/images/007121.jpg -./VOC/train/VOCdevkit/VOC2007/images/007122.jpg -./VOC/train/VOCdevkit/VOC2007/images/007123.jpg -./VOC/train/VOCdevkit/VOC2007/images/007125.jpg -./VOC/train/VOCdevkit/VOC2007/images/007128.jpg -./VOC/train/VOCdevkit/VOC2007/images/007129.jpg -./VOC/train/VOCdevkit/VOC2007/images/007130.jpg -./VOC/train/VOCdevkit/VOC2007/images/007132.jpg -./VOC/train/VOCdevkit/VOC2007/images/007133.jpg -./VOC/train/VOCdevkit/VOC2007/images/007138.jpg -./VOC/train/VOCdevkit/VOC2007/images/007139.jpg -./VOC/train/VOCdevkit/VOC2007/images/007140.jpg -./VOC/train/VOCdevkit/VOC2007/images/007141.jpg -./VOC/train/VOCdevkit/VOC2007/images/007144.jpg -./VOC/train/VOCdevkit/VOC2007/images/007146.jpg -./VOC/train/VOCdevkit/VOC2007/images/007147.jpg -./VOC/train/VOCdevkit/VOC2007/images/007148.jpg -./VOC/train/VOCdevkit/VOC2007/images/007149.jpg -./VOC/train/VOCdevkit/VOC2007/images/007150.jpg -./VOC/train/VOCdevkit/VOC2007/images/007152.jpg -./VOC/train/VOCdevkit/VOC2007/images/007153.jpg -./VOC/train/VOCdevkit/VOC2007/images/007154.jpg -./VOC/train/VOCdevkit/VOC2007/images/007159.jpg -./VOC/train/VOCdevkit/VOC2007/images/007162.jpg -./VOC/train/VOCdevkit/VOC2007/images/007163.jpg -./VOC/train/VOCdevkit/VOC2007/images/007165.jpg -./VOC/train/VOCdevkit/VOC2007/images/007166.jpg -./VOC/train/VOCdevkit/VOC2007/images/007167.jpg -./VOC/train/VOCdevkit/VOC2007/images/007168.jpg -./VOC/train/VOCdevkit/VOC2007/images/007172.jpg -./VOC/train/VOCdevkit/VOC2007/images/007174.jpg -./VOC/train/VOCdevkit/VOC2007/images/007177.jpg -./VOC/train/VOCdevkit/VOC2007/images/007180.jpg -./VOC/train/VOCdevkit/VOC2007/images/007182.jpg -./VOC/train/VOCdevkit/VOC2007/images/007184.jpg -./VOC/train/VOCdevkit/VOC2007/images/007185.jpg -./VOC/train/VOCdevkit/VOC2007/images/007187.jpg -./VOC/train/VOCdevkit/VOC2007/images/007189.jpg -./VOC/train/VOCdevkit/VOC2007/images/007191.jpg -./VOC/train/VOCdevkit/VOC2007/images/007193.jpg -./VOC/train/VOCdevkit/VOC2007/images/007194.jpg -./VOC/train/VOCdevkit/VOC2007/images/007197.jpg -./VOC/train/VOCdevkit/VOC2007/images/007200.jpg -./VOC/train/VOCdevkit/VOC2007/images/007204.jpg -./VOC/train/VOCdevkit/VOC2007/images/007205.jpg -./VOC/train/VOCdevkit/VOC2007/images/007208.jpg -./VOC/train/VOCdevkit/VOC2007/images/007210.jpg -./VOC/train/VOCdevkit/VOC2007/images/007211.jpg -./VOC/train/VOCdevkit/VOC2007/images/007212.jpg -./VOC/train/VOCdevkit/VOC2007/images/007213.jpg -./VOC/train/VOCdevkit/VOC2007/images/007214.jpg -./VOC/train/VOCdevkit/VOC2007/images/007215.jpg -./VOC/train/VOCdevkit/VOC2007/images/007216.jpg -./VOC/train/VOCdevkit/VOC2007/images/007217.jpg -./VOC/train/VOCdevkit/VOC2007/images/007219.jpg -./VOC/train/VOCdevkit/VOC2007/images/007222.jpg -./VOC/train/VOCdevkit/VOC2007/images/007223.jpg -./VOC/train/VOCdevkit/VOC2007/images/007224.jpg -./VOC/train/VOCdevkit/VOC2007/images/007227.jpg -./VOC/train/VOCdevkit/VOC2007/images/007230.jpg -./VOC/train/VOCdevkit/VOC2007/images/007234.jpg -./VOC/train/VOCdevkit/VOC2007/images/007236.jpg -./VOC/train/VOCdevkit/VOC2007/images/007241.jpg -./VOC/train/VOCdevkit/VOC2007/images/007243.jpg -./VOC/train/VOCdevkit/VOC2007/images/007244.jpg -./VOC/train/VOCdevkit/VOC2007/images/007245.jpg -./VOC/train/VOCdevkit/VOC2007/images/007247.jpg -./VOC/train/VOCdevkit/VOC2007/images/007249.jpg -./VOC/train/VOCdevkit/VOC2007/images/007250.jpg -./VOC/train/VOCdevkit/VOC2007/images/007256.jpg -./VOC/train/VOCdevkit/VOC2007/images/007258.jpg -./VOC/train/VOCdevkit/VOC2007/images/007259.jpg -./VOC/train/VOCdevkit/VOC2007/images/007260.jpg -./VOC/train/VOCdevkit/VOC2007/images/007261.jpg -./VOC/train/VOCdevkit/VOC2007/images/007263.jpg -./VOC/train/VOCdevkit/VOC2007/images/007266.jpg -./VOC/train/VOCdevkit/VOC2007/images/007270.jpg -./VOC/train/VOCdevkit/VOC2007/images/007271.jpg -./VOC/train/VOCdevkit/VOC2007/images/007274.jpg -./VOC/train/VOCdevkit/VOC2007/images/007275.jpg -./VOC/train/VOCdevkit/VOC2007/images/007276.jpg -./VOC/train/VOCdevkit/VOC2007/images/007279.jpg -./VOC/train/VOCdevkit/VOC2007/images/007280.jpg -./VOC/train/VOCdevkit/VOC2007/images/007283.jpg -./VOC/train/VOCdevkit/VOC2007/images/007284.jpg -./VOC/train/VOCdevkit/VOC2007/images/007285.jpg -./VOC/train/VOCdevkit/VOC2007/images/007289.jpg -./VOC/train/VOCdevkit/VOC2007/images/007292.jpg -./VOC/train/VOCdevkit/VOC2007/images/007294.jpg -./VOC/train/VOCdevkit/VOC2007/images/007295.jpg -./VOC/train/VOCdevkit/VOC2007/images/007296.jpg -./VOC/train/VOCdevkit/VOC2007/images/007297.jpg -./VOC/train/VOCdevkit/VOC2007/images/007298.jpg -./VOC/train/VOCdevkit/VOC2007/images/007299.jpg -./VOC/train/VOCdevkit/VOC2007/images/007300.jpg -./VOC/train/VOCdevkit/VOC2007/images/007302.jpg -./VOC/train/VOCdevkit/VOC2007/images/007305.jpg -./VOC/train/VOCdevkit/VOC2007/images/007308.jpg -./VOC/train/VOCdevkit/VOC2007/images/007311.jpg -./VOC/train/VOCdevkit/VOC2007/images/007314.jpg -./VOC/train/VOCdevkit/VOC2007/images/007318.jpg -./VOC/train/VOCdevkit/VOC2007/images/007322.jpg -./VOC/train/VOCdevkit/VOC2007/images/007323.jpg -./VOC/train/VOCdevkit/VOC2007/images/007325.jpg -./VOC/train/VOCdevkit/VOC2007/images/007327.jpg -./VOC/train/VOCdevkit/VOC2007/images/007329.jpg -./VOC/train/VOCdevkit/VOC2007/images/007330.jpg -./VOC/train/VOCdevkit/VOC2007/images/007334.jpg -./VOC/train/VOCdevkit/VOC2007/images/007336.jpg -./VOC/train/VOCdevkit/VOC2007/images/007343.jpg -./VOC/train/VOCdevkit/VOC2007/images/007344.jpg -./VOC/train/VOCdevkit/VOC2007/images/007346.jpg -./VOC/train/VOCdevkit/VOC2007/images/007350.jpg -./VOC/train/VOCdevkit/VOC2007/images/007351.jpg -./VOC/train/VOCdevkit/VOC2007/images/007356.jpg -./VOC/train/VOCdevkit/VOC2007/images/007359.jpg -./VOC/train/VOCdevkit/VOC2007/images/007361.jpg -./VOC/train/VOCdevkit/VOC2007/images/007363.jpg -./VOC/train/VOCdevkit/VOC2007/images/007365.jpg -./VOC/train/VOCdevkit/VOC2007/images/007369.jpg -./VOC/train/VOCdevkit/VOC2007/images/007370.jpg -./VOC/train/VOCdevkit/VOC2007/images/007372.jpg -./VOC/train/VOCdevkit/VOC2007/images/007373.jpg -./VOC/train/VOCdevkit/VOC2007/images/007374.jpg -./VOC/train/VOCdevkit/VOC2007/images/007375.jpg -./VOC/train/VOCdevkit/VOC2007/images/007376.jpg -./VOC/train/VOCdevkit/VOC2007/images/007381.jpg -./VOC/train/VOCdevkit/VOC2007/images/007383.jpg -./VOC/train/VOCdevkit/VOC2007/images/007385.jpg -./VOC/train/VOCdevkit/VOC2007/images/007388.jpg -./VOC/train/VOCdevkit/VOC2007/images/007389.jpg -./VOC/train/VOCdevkit/VOC2007/images/007390.jpg -./VOC/train/VOCdevkit/VOC2007/images/007394.jpg -./VOC/train/VOCdevkit/VOC2007/images/007396.jpg -./VOC/train/VOCdevkit/VOC2007/images/007398.jpg -./VOC/train/VOCdevkit/VOC2007/images/007408.jpg -./VOC/train/VOCdevkit/VOC2007/images/007410.jpg -./VOC/train/VOCdevkit/VOC2007/images/007411.jpg -./VOC/train/VOCdevkit/VOC2007/images/007413.jpg -./VOC/train/VOCdevkit/VOC2007/images/007414.jpg -./VOC/train/VOCdevkit/VOC2007/images/007416.jpg -./VOC/train/VOCdevkit/VOC2007/images/007417.jpg -./VOC/train/VOCdevkit/VOC2007/images/007419.jpg -./VOC/train/VOCdevkit/VOC2007/images/007421.jpg -./VOC/train/VOCdevkit/VOC2007/images/007422.jpg -./VOC/train/VOCdevkit/VOC2007/images/007424.jpg -./VOC/train/VOCdevkit/VOC2007/images/007425.jpg -./VOC/train/VOCdevkit/VOC2007/images/007427.jpg -./VOC/train/VOCdevkit/VOC2007/images/007431.jpg -./VOC/train/VOCdevkit/VOC2007/images/007432.jpg -./VOC/train/VOCdevkit/VOC2007/images/007433.jpg -./VOC/train/VOCdevkit/VOC2007/images/007435.jpg -./VOC/train/VOCdevkit/VOC2007/images/007436.jpg -./VOC/train/VOCdevkit/VOC2007/images/007437.jpg -./VOC/train/VOCdevkit/VOC2007/images/007438.jpg -./VOC/train/VOCdevkit/VOC2007/images/007439.jpg -./VOC/train/VOCdevkit/VOC2007/images/007443.jpg -./VOC/train/VOCdevkit/VOC2007/images/007445.jpg -./VOC/train/VOCdevkit/VOC2007/images/007446.jpg -./VOC/train/VOCdevkit/VOC2007/images/007448.jpg -./VOC/train/VOCdevkit/VOC2007/images/007449.jpg -./VOC/train/VOCdevkit/VOC2007/images/007451.jpg -./VOC/train/VOCdevkit/VOC2007/images/007454.jpg -./VOC/train/VOCdevkit/VOC2007/images/007457.jpg -./VOC/train/VOCdevkit/VOC2007/images/007458.jpg -./VOC/train/VOCdevkit/VOC2007/images/007460.jpg -./VOC/train/VOCdevkit/VOC2007/images/007461.jpg -./VOC/train/VOCdevkit/VOC2007/images/007465.jpg -./VOC/train/VOCdevkit/VOC2007/images/007466.jpg -./VOC/train/VOCdevkit/VOC2007/images/007467.jpg -./VOC/train/VOCdevkit/VOC2007/images/007468.jpg -./VOC/train/VOCdevkit/VOC2007/images/007470.jpg -./VOC/train/VOCdevkit/VOC2007/images/007474.jpg -./VOC/train/VOCdevkit/VOC2007/images/007475.jpg -./VOC/train/VOCdevkit/VOC2007/images/007477.jpg -./VOC/train/VOCdevkit/VOC2007/images/007479.jpg -./VOC/train/VOCdevkit/VOC2007/images/007480.jpg -./VOC/train/VOCdevkit/VOC2007/images/007481.jpg -./VOC/train/VOCdevkit/VOC2007/images/007482.jpg -./VOC/train/VOCdevkit/VOC2007/images/007483.jpg -./VOC/train/VOCdevkit/VOC2007/images/007484.jpg -./VOC/train/VOCdevkit/VOC2007/images/007486.jpg -./VOC/train/VOCdevkit/VOC2007/images/007489.jpg -./VOC/train/VOCdevkit/VOC2007/images/007490.jpg -./VOC/train/VOCdevkit/VOC2007/images/007491.jpg -./VOC/train/VOCdevkit/VOC2007/images/007493.jpg -./VOC/train/VOCdevkit/VOC2007/images/007497.jpg -./VOC/train/VOCdevkit/VOC2007/images/007498.jpg -./VOC/train/VOCdevkit/VOC2007/images/007503.jpg -./VOC/train/VOCdevkit/VOC2007/images/007506.jpg -./VOC/train/VOCdevkit/VOC2007/images/007511.jpg -./VOC/train/VOCdevkit/VOC2007/images/007513.jpg -./VOC/train/VOCdevkit/VOC2007/images/007517.jpg -./VOC/train/VOCdevkit/VOC2007/images/007519.jpg -./VOC/train/VOCdevkit/VOC2007/images/007521.jpg -./VOC/train/VOCdevkit/VOC2007/images/007523.jpg -./VOC/train/VOCdevkit/VOC2007/images/007524.jpg -./VOC/train/VOCdevkit/VOC2007/images/007525.jpg -./VOC/train/VOCdevkit/VOC2007/images/007526.jpg -./VOC/train/VOCdevkit/VOC2007/images/007527.jpg -./VOC/train/VOCdevkit/VOC2007/images/007528.jpg -./VOC/train/VOCdevkit/VOC2007/images/007530.jpg -./VOC/train/VOCdevkit/VOC2007/images/007533.jpg -./VOC/train/VOCdevkit/VOC2007/images/007535.jpg -./VOC/train/VOCdevkit/VOC2007/images/007536.jpg -./VOC/train/VOCdevkit/VOC2007/images/007537.jpg -./VOC/train/VOCdevkit/VOC2007/images/007538.jpg -./VOC/train/VOCdevkit/VOC2007/images/007540.jpg -./VOC/train/VOCdevkit/VOC2007/images/007543.jpg -./VOC/train/VOCdevkit/VOC2007/images/007544.jpg -./VOC/train/VOCdevkit/VOC2007/images/007546.jpg -./VOC/train/VOCdevkit/VOC2007/images/007547.jpg -./VOC/train/VOCdevkit/VOC2007/images/007551.jpg -./VOC/train/VOCdevkit/VOC2007/images/007555.jpg -./VOC/train/VOCdevkit/VOC2007/images/007558.jpg -./VOC/train/VOCdevkit/VOC2007/images/007559.jpg -./VOC/train/VOCdevkit/VOC2007/images/007563.jpg -./VOC/train/VOCdevkit/VOC2007/images/007565.jpg -./VOC/train/VOCdevkit/VOC2007/images/007566.jpg -./VOC/train/VOCdevkit/VOC2007/images/007568.jpg -./VOC/train/VOCdevkit/VOC2007/images/007570.jpg -./VOC/train/VOCdevkit/VOC2007/images/007571.jpg -./VOC/train/VOCdevkit/VOC2007/images/007572.jpg -./VOC/train/VOCdevkit/VOC2007/images/007575.jpg -./VOC/train/VOCdevkit/VOC2007/images/007576.jpg -./VOC/train/VOCdevkit/VOC2007/images/007578.jpg -./VOC/train/VOCdevkit/VOC2007/images/007579.jpg -./VOC/train/VOCdevkit/VOC2007/images/007585.jpg -./VOC/train/VOCdevkit/VOC2007/images/007586.jpg -./VOC/train/VOCdevkit/VOC2007/images/007590.jpg -./VOC/train/VOCdevkit/VOC2007/images/007592.jpg -./VOC/train/VOCdevkit/VOC2007/images/007594.jpg -./VOC/train/VOCdevkit/VOC2007/images/007600.jpg -./VOC/train/VOCdevkit/VOC2007/images/007601.jpg -./VOC/train/VOCdevkit/VOC2007/images/007603.jpg -./VOC/train/VOCdevkit/VOC2007/images/007605.jpg -./VOC/train/VOCdevkit/VOC2007/images/007606.jpg -./VOC/train/VOCdevkit/VOC2007/images/007611.jpg -./VOC/train/VOCdevkit/VOC2007/images/007612.jpg -./VOC/train/VOCdevkit/VOC2007/images/007614.jpg -./VOC/train/VOCdevkit/VOC2007/images/007615.jpg -./VOC/train/VOCdevkit/VOC2007/images/007618.jpg -./VOC/train/VOCdevkit/VOC2007/images/007619.jpg -./VOC/train/VOCdevkit/VOC2007/images/007621.jpg -./VOC/train/VOCdevkit/VOC2007/images/007622.jpg -./VOC/train/VOCdevkit/VOC2007/images/007624.jpg -./VOC/train/VOCdevkit/VOC2007/images/007626.jpg -./VOC/train/VOCdevkit/VOC2007/images/007629.jpg -./VOC/train/VOCdevkit/VOC2007/images/007631.jpg -./VOC/train/VOCdevkit/VOC2007/images/007633.jpg -./VOC/train/VOCdevkit/VOC2007/images/007637.jpg -./VOC/train/VOCdevkit/VOC2007/images/007639.jpg -./VOC/train/VOCdevkit/VOC2007/images/007640.jpg -./VOC/train/VOCdevkit/VOC2007/images/007642.jpg -./VOC/train/VOCdevkit/VOC2007/images/007647.jpg -./VOC/train/VOCdevkit/VOC2007/images/007649.jpg -./VOC/train/VOCdevkit/VOC2007/images/007650.jpg -./VOC/train/VOCdevkit/VOC2007/images/007653.jpg -./VOC/train/VOCdevkit/VOC2007/images/007654.jpg -./VOC/train/VOCdevkit/VOC2007/images/007655.jpg -./VOC/train/VOCdevkit/VOC2007/images/007656.jpg -./VOC/train/VOCdevkit/VOC2007/images/007657.jpg -./VOC/train/VOCdevkit/VOC2007/images/007662.jpg -./VOC/train/VOCdevkit/VOC2007/images/007663.jpg -./VOC/train/VOCdevkit/VOC2007/images/007664.jpg -./VOC/train/VOCdevkit/VOC2007/images/007666.jpg -./VOC/train/VOCdevkit/VOC2007/images/007667.jpg -./VOC/train/VOCdevkit/VOC2007/images/007668.jpg -./VOC/train/VOCdevkit/VOC2007/images/007670.jpg -./VOC/train/VOCdevkit/VOC2007/images/007671.jpg -./VOC/train/VOCdevkit/VOC2007/images/007672.jpg -./VOC/train/VOCdevkit/VOC2007/images/007673.jpg -./VOC/train/VOCdevkit/VOC2007/images/007675.jpg -./VOC/train/VOCdevkit/VOC2007/images/007677.jpg -./VOC/train/VOCdevkit/VOC2007/images/007678.jpg -./VOC/train/VOCdevkit/VOC2007/images/007679.jpg -./VOC/train/VOCdevkit/VOC2007/images/007680.jpg -./VOC/train/VOCdevkit/VOC2007/images/007682.jpg -./VOC/train/VOCdevkit/VOC2007/images/007683.jpg -./VOC/train/VOCdevkit/VOC2007/images/007685.jpg -./VOC/train/VOCdevkit/VOC2007/images/007687.jpg -./VOC/train/VOCdevkit/VOC2007/images/007688.jpg -./VOC/train/VOCdevkit/VOC2007/images/007691.jpg -./VOC/train/VOCdevkit/VOC2007/images/007692.jpg -./VOC/train/VOCdevkit/VOC2007/images/007694.jpg -./VOC/train/VOCdevkit/VOC2007/images/007696.jpg -./VOC/train/VOCdevkit/VOC2007/images/007697.jpg -./VOC/train/VOCdevkit/VOC2007/images/007699.jpg -./VOC/train/VOCdevkit/VOC2007/images/007702.jpg -./VOC/train/VOCdevkit/VOC2007/images/007704.jpg -./VOC/train/VOCdevkit/VOC2007/images/007705.jpg -./VOC/train/VOCdevkit/VOC2007/images/007709.jpg -./VOC/train/VOCdevkit/VOC2007/images/007712.jpg -./VOC/train/VOCdevkit/VOC2007/images/007713.jpg -./VOC/train/VOCdevkit/VOC2007/images/007715.jpg -./VOC/train/VOCdevkit/VOC2007/images/007718.jpg -./VOC/train/VOCdevkit/VOC2007/images/007720.jpg -./VOC/train/VOCdevkit/VOC2007/images/007721.jpg -./VOC/train/VOCdevkit/VOC2007/images/007723.jpg -./VOC/train/VOCdevkit/VOC2007/images/007724.jpg -./VOC/train/VOCdevkit/VOC2007/images/007727.jpg -./VOC/train/VOCdevkit/VOC2007/images/007729.jpg -./VOC/train/VOCdevkit/VOC2007/images/007731.jpg -./VOC/train/VOCdevkit/VOC2007/images/007732.jpg -./VOC/train/VOCdevkit/VOC2007/images/007735.jpg -./VOC/train/VOCdevkit/VOC2007/images/007736.jpg -./VOC/train/VOCdevkit/VOC2007/images/007740.jpg -./VOC/train/VOCdevkit/VOC2007/images/007742.jpg -./VOC/train/VOCdevkit/VOC2007/images/007743.jpg -./VOC/train/VOCdevkit/VOC2007/images/007745.jpg -./VOC/train/VOCdevkit/VOC2007/images/007746.jpg -./VOC/train/VOCdevkit/VOC2007/images/007748.jpg -./VOC/train/VOCdevkit/VOC2007/images/007749.jpg -./VOC/train/VOCdevkit/VOC2007/images/007751.jpg -./VOC/train/VOCdevkit/VOC2007/images/007753.jpg -./VOC/train/VOCdevkit/VOC2007/images/007754.jpg -./VOC/train/VOCdevkit/VOC2007/images/007758.jpg -./VOC/train/VOCdevkit/VOC2007/images/007760.jpg -./VOC/train/VOCdevkit/VOC2007/images/007762.jpg -./VOC/train/VOCdevkit/VOC2007/images/007763.jpg -./VOC/train/VOCdevkit/VOC2007/images/007765.jpg -./VOC/train/VOCdevkit/VOC2007/images/007767.jpg -./VOC/train/VOCdevkit/VOC2007/images/007768.jpg -./VOC/train/VOCdevkit/VOC2007/images/007772.jpg -./VOC/train/VOCdevkit/VOC2007/images/007773.jpg -./VOC/train/VOCdevkit/VOC2007/images/007775.jpg -./VOC/train/VOCdevkit/VOC2007/images/007776.jpg -./VOC/train/VOCdevkit/VOC2007/images/007777.jpg -./VOC/train/VOCdevkit/VOC2007/images/007779.jpg -./VOC/train/VOCdevkit/VOC2007/images/007781.jpg -./VOC/train/VOCdevkit/VOC2007/images/007786.jpg -./VOC/train/VOCdevkit/VOC2007/images/007790.jpg -./VOC/train/VOCdevkit/VOC2007/images/007791.jpg -./VOC/train/VOCdevkit/VOC2007/images/007793.jpg -./VOC/train/VOCdevkit/VOC2007/images/007795.jpg -./VOC/train/VOCdevkit/VOC2007/images/007798.jpg -./VOC/train/VOCdevkit/VOC2007/images/007799.jpg -./VOC/train/VOCdevkit/VOC2007/images/007803.jpg -./VOC/train/VOCdevkit/VOC2007/images/007809.jpg -./VOC/train/VOCdevkit/VOC2007/images/007810.jpg -./VOC/train/VOCdevkit/VOC2007/images/007812.jpg -./VOC/train/VOCdevkit/VOC2007/images/007813.jpg -./VOC/train/VOCdevkit/VOC2007/images/007814.jpg -./VOC/train/VOCdevkit/VOC2007/images/007815.jpg -./VOC/train/VOCdevkit/VOC2007/images/007819.jpg -./VOC/train/VOCdevkit/VOC2007/images/007820.jpg -./VOC/train/VOCdevkit/VOC2007/images/007821.jpg -./VOC/train/VOCdevkit/VOC2007/images/007824.jpg -./VOC/train/VOCdevkit/VOC2007/images/007826.jpg -./VOC/train/VOCdevkit/VOC2007/images/007831.jpg -./VOC/train/VOCdevkit/VOC2007/images/007833.jpg -./VOC/train/VOCdevkit/VOC2007/images/007834.jpg -./VOC/train/VOCdevkit/VOC2007/images/007836.jpg -./VOC/train/VOCdevkit/VOC2007/images/007838.jpg -./VOC/train/VOCdevkit/VOC2007/images/007840.jpg -./VOC/train/VOCdevkit/VOC2007/images/007841.jpg -./VOC/train/VOCdevkit/VOC2007/images/007843.jpg -./VOC/train/VOCdevkit/VOC2007/images/007845.jpg -./VOC/train/VOCdevkit/VOC2007/images/007847.jpg -./VOC/train/VOCdevkit/VOC2007/images/007853.jpg -./VOC/train/VOCdevkit/VOC2007/images/007854.jpg -./VOC/train/VOCdevkit/VOC2007/images/007855.jpg -./VOC/train/VOCdevkit/VOC2007/images/007856.jpg -./VOC/train/VOCdevkit/VOC2007/images/007857.jpg -./VOC/train/VOCdevkit/VOC2007/images/007859.jpg -./VOC/train/VOCdevkit/VOC2007/images/007863.jpg -./VOC/train/VOCdevkit/VOC2007/images/007864.jpg -./VOC/train/VOCdevkit/VOC2007/images/007865.jpg -./VOC/train/VOCdevkit/VOC2007/images/007868.jpg -./VOC/train/VOCdevkit/VOC2007/images/007869.jpg -./VOC/train/VOCdevkit/VOC2007/images/007872.jpg -./VOC/train/VOCdevkit/VOC2007/images/007873.jpg -./VOC/train/VOCdevkit/VOC2007/images/007876.jpg -./VOC/train/VOCdevkit/VOC2007/images/007877.jpg -./VOC/train/VOCdevkit/VOC2007/images/007878.jpg -./VOC/train/VOCdevkit/VOC2007/images/007883.jpg -./VOC/train/VOCdevkit/VOC2007/images/007884.jpg -./VOC/train/VOCdevkit/VOC2007/images/007885.jpg -./VOC/train/VOCdevkit/VOC2007/images/007886.jpg -./VOC/train/VOCdevkit/VOC2007/images/007889.jpg -./VOC/train/VOCdevkit/VOC2007/images/007890.jpg -./VOC/train/VOCdevkit/VOC2007/images/007897.jpg -./VOC/train/VOCdevkit/VOC2007/images/007898.jpg -./VOC/train/VOCdevkit/VOC2007/images/007899.jpg -./VOC/train/VOCdevkit/VOC2007/images/007900.jpg -./VOC/train/VOCdevkit/VOC2007/images/007901.jpg -./VOC/train/VOCdevkit/VOC2007/images/007902.jpg -./VOC/train/VOCdevkit/VOC2007/images/007905.jpg -./VOC/train/VOCdevkit/VOC2007/images/007908.jpg -./VOC/train/VOCdevkit/VOC2007/images/007909.jpg -./VOC/train/VOCdevkit/VOC2007/images/007910.jpg -./VOC/train/VOCdevkit/VOC2007/images/007911.jpg -./VOC/train/VOCdevkit/VOC2007/images/007914.jpg -./VOC/train/VOCdevkit/VOC2007/images/007915.jpg -./VOC/train/VOCdevkit/VOC2007/images/007916.jpg -./VOC/train/VOCdevkit/VOC2007/images/007919.jpg -./VOC/train/VOCdevkit/VOC2007/images/007920.jpg -./VOC/train/VOCdevkit/VOC2007/images/007921.jpg -./VOC/train/VOCdevkit/VOC2007/images/007923.jpg -./VOC/train/VOCdevkit/VOC2007/images/007924.jpg -./VOC/train/VOCdevkit/VOC2007/images/007925.jpg -./VOC/train/VOCdevkit/VOC2007/images/007926.jpg -./VOC/train/VOCdevkit/VOC2007/images/007928.jpg -./VOC/train/VOCdevkit/VOC2007/images/007931.jpg -./VOC/train/VOCdevkit/VOC2007/images/007932.jpg -./VOC/train/VOCdevkit/VOC2007/images/007933.jpg -./VOC/train/VOCdevkit/VOC2007/images/007935.jpg -./VOC/train/VOCdevkit/VOC2007/images/007939.jpg -./VOC/train/VOCdevkit/VOC2007/images/007940.jpg -./VOC/train/VOCdevkit/VOC2007/images/007943.jpg -./VOC/train/VOCdevkit/VOC2007/images/007946.jpg -./VOC/train/VOCdevkit/VOC2007/images/007947.jpg -./VOC/train/VOCdevkit/VOC2007/images/007950.jpg -./VOC/train/VOCdevkit/VOC2007/images/007953.jpg -./VOC/train/VOCdevkit/VOC2007/images/007954.jpg -./VOC/train/VOCdevkit/VOC2007/images/007956.jpg -./VOC/train/VOCdevkit/VOC2007/images/007958.jpg -./VOC/train/VOCdevkit/VOC2007/images/007959.jpg -./VOC/train/VOCdevkit/VOC2007/images/007963.jpg -./VOC/train/VOCdevkit/VOC2007/images/007964.jpg -./VOC/train/VOCdevkit/VOC2007/images/007968.jpg -./VOC/train/VOCdevkit/VOC2007/images/007970.jpg -./VOC/train/VOCdevkit/VOC2007/images/007971.jpg -./VOC/train/VOCdevkit/VOC2007/images/007974.jpg -./VOC/train/VOCdevkit/VOC2007/images/007976.jpg -./VOC/train/VOCdevkit/VOC2007/images/007979.jpg -./VOC/train/VOCdevkit/VOC2007/images/007980.jpg -./VOC/train/VOCdevkit/VOC2007/images/007984.jpg -./VOC/train/VOCdevkit/VOC2007/images/007987.jpg -./VOC/train/VOCdevkit/VOC2007/images/007991.jpg -./VOC/train/VOCdevkit/VOC2007/images/007996.jpg -./VOC/train/VOCdevkit/VOC2007/images/007997.jpg -./VOC/train/VOCdevkit/VOC2007/images/007998.jpg -./VOC/train/VOCdevkit/VOC2007/images/007999.jpg -./VOC/train/VOCdevkit/VOC2007/images/008001.jpg -./VOC/train/VOCdevkit/VOC2007/images/008002.jpg -./VOC/train/VOCdevkit/VOC2007/images/008004.jpg -./VOC/train/VOCdevkit/VOC2007/images/008005.jpg -./VOC/train/VOCdevkit/VOC2007/images/008008.jpg -./VOC/train/VOCdevkit/VOC2007/images/008009.jpg -./VOC/train/VOCdevkit/VOC2007/images/008012.jpg -./VOC/train/VOCdevkit/VOC2007/images/008017.jpg -./VOC/train/VOCdevkit/VOC2007/images/008019.jpg -./VOC/train/VOCdevkit/VOC2007/images/008023.jpg -./VOC/train/VOCdevkit/VOC2007/images/008024.jpg -./VOC/train/VOCdevkit/VOC2007/images/008026.jpg -./VOC/train/VOCdevkit/VOC2007/images/008029.jpg -./VOC/train/VOCdevkit/VOC2007/images/008031.jpg -./VOC/train/VOCdevkit/VOC2007/images/008032.jpg -./VOC/train/VOCdevkit/VOC2007/images/008033.jpg -./VOC/train/VOCdevkit/VOC2007/images/008036.jpg -./VOC/train/VOCdevkit/VOC2007/images/008037.jpg -./VOC/train/VOCdevkit/VOC2007/images/008040.jpg -./VOC/train/VOCdevkit/VOC2007/images/008042.jpg -./VOC/train/VOCdevkit/VOC2007/images/008043.jpg -./VOC/train/VOCdevkit/VOC2007/images/008044.jpg -./VOC/train/VOCdevkit/VOC2007/images/008048.jpg -./VOC/train/VOCdevkit/VOC2007/images/008049.jpg -./VOC/train/VOCdevkit/VOC2007/images/008051.jpg -./VOC/train/VOCdevkit/VOC2007/images/008053.jpg -./VOC/train/VOCdevkit/VOC2007/images/008057.jpg -./VOC/train/VOCdevkit/VOC2007/images/008060.jpg -./VOC/train/VOCdevkit/VOC2007/images/008061.jpg -./VOC/train/VOCdevkit/VOC2007/images/008062.jpg -./VOC/train/VOCdevkit/VOC2007/images/008063.jpg -./VOC/train/VOCdevkit/VOC2007/images/008064.jpg -./VOC/train/VOCdevkit/VOC2007/images/008067.jpg -./VOC/train/VOCdevkit/VOC2007/images/008068.jpg -./VOC/train/VOCdevkit/VOC2007/images/008069.jpg -./VOC/train/VOCdevkit/VOC2007/images/008072.jpg -./VOC/train/VOCdevkit/VOC2007/images/008075.jpg -./VOC/train/VOCdevkit/VOC2007/images/008076.jpg -./VOC/train/VOCdevkit/VOC2007/images/008079.jpg -./VOC/train/VOCdevkit/VOC2007/images/008082.jpg -./VOC/train/VOCdevkit/VOC2007/images/008083.jpg -./VOC/train/VOCdevkit/VOC2007/images/008084.jpg -./VOC/train/VOCdevkit/VOC2007/images/008085.jpg -./VOC/train/VOCdevkit/VOC2007/images/008086.jpg -./VOC/train/VOCdevkit/VOC2007/images/008087.jpg -./VOC/train/VOCdevkit/VOC2007/images/008091.jpg -./VOC/train/VOCdevkit/VOC2007/images/008093.jpg -./VOC/train/VOCdevkit/VOC2007/images/008095.jpg -./VOC/train/VOCdevkit/VOC2007/images/008096.jpg -./VOC/train/VOCdevkit/VOC2007/images/008098.jpg -./VOC/train/VOCdevkit/VOC2007/images/008100.jpg -./VOC/train/VOCdevkit/VOC2007/images/008101.jpg -./VOC/train/VOCdevkit/VOC2007/images/008103.jpg -./VOC/train/VOCdevkit/VOC2007/images/008105.jpg -./VOC/train/VOCdevkit/VOC2007/images/008106.jpg -./VOC/train/VOCdevkit/VOC2007/images/008107.jpg -./VOC/train/VOCdevkit/VOC2007/images/008108.jpg -./VOC/train/VOCdevkit/VOC2007/images/008112.jpg -./VOC/train/VOCdevkit/VOC2007/images/008115.jpg -./VOC/train/VOCdevkit/VOC2007/images/008116.jpg -./VOC/train/VOCdevkit/VOC2007/images/008117.jpg -./VOC/train/VOCdevkit/VOC2007/images/008121.jpg -./VOC/train/VOCdevkit/VOC2007/images/008122.jpg -./VOC/train/VOCdevkit/VOC2007/images/008125.jpg -./VOC/train/VOCdevkit/VOC2007/images/008127.jpg -./VOC/train/VOCdevkit/VOC2007/images/008130.jpg -./VOC/train/VOCdevkit/VOC2007/images/008132.jpg -./VOC/train/VOCdevkit/VOC2007/images/008137.jpg -./VOC/train/VOCdevkit/VOC2007/images/008138.jpg -./VOC/train/VOCdevkit/VOC2007/images/008139.jpg -./VOC/train/VOCdevkit/VOC2007/images/008140.jpg -./VOC/train/VOCdevkit/VOC2007/images/008141.jpg -./VOC/train/VOCdevkit/VOC2007/images/008142.jpg -./VOC/train/VOCdevkit/VOC2007/images/008144.jpg -./VOC/train/VOCdevkit/VOC2007/images/008150.jpg -./VOC/train/VOCdevkit/VOC2007/images/008151.jpg -./VOC/train/VOCdevkit/VOC2007/images/008159.jpg -./VOC/train/VOCdevkit/VOC2007/images/008160.jpg -./VOC/train/VOCdevkit/VOC2007/images/008163.jpg -./VOC/train/VOCdevkit/VOC2007/images/008164.jpg -./VOC/train/VOCdevkit/VOC2007/images/008166.jpg -./VOC/train/VOCdevkit/VOC2007/images/008168.jpg -./VOC/train/VOCdevkit/VOC2007/images/008169.jpg -./VOC/train/VOCdevkit/VOC2007/images/008171.jpg -./VOC/train/VOCdevkit/VOC2007/images/008173.jpg -./VOC/train/VOCdevkit/VOC2007/images/008174.jpg -./VOC/train/VOCdevkit/VOC2007/images/008175.jpg -./VOC/train/VOCdevkit/VOC2007/images/008177.jpg -./VOC/train/VOCdevkit/VOC2007/images/008180.jpg -./VOC/train/VOCdevkit/VOC2007/images/008186.jpg -./VOC/train/VOCdevkit/VOC2007/images/008188.jpg -./VOC/train/VOCdevkit/VOC2007/images/008189.jpg -./VOC/train/VOCdevkit/VOC2007/images/008190.jpg -./VOC/train/VOCdevkit/VOC2007/images/008191.jpg -./VOC/train/VOCdevkit/VOC2007/images/008197.jpg -./VOC/train/VOCdevkit/VOC2007/images/008199.jpg -./VOC/train/VOCdevkit/VOC2007/images/008200.jpg -./VOC/train/VOCdevkit/VOC2007/images/008202.jpg -./VOC/train/VOCdevkit/VOC2007/images/008203.jpg -./VOC/train/VOCdevkit/VOC2007/images/008204.jpg -./VOC/train/VOCdevkit/VOC2007/images/008208.jpg -./VOC/train/VOCdevkit/VOC2007/images/008209.jpg -./VOC/train/VOCdevkit/VOC2007/images/008211.jpg -./VOC/train/VOCdevkit/VOC2007/images/008213.jpg -./VOC/train/VOCdevkit/VOC2007/images/008216.jpg -./VOC/train/VOCdevkit/VOC2007/images/008218.jpg -./VOC/train/VOCdevkit/VOC2007/images/008220.jpg -./VOC/train/VOCdevkit/VOC2007/images/008222.jpg -./VOC/train/VOCdevkit/VOC2007/images/008223.jpg -./VOC/train/VOCdevkit/VOC2007/images/008224.jpg -./VOC/train/VOCdevkit/VOC2007/images/008225.jpg -./VOC/train/VOCdevkit/VOC2007/images/008226.jpg -./VOC/train/VOCdevkit/VOC2007/images/008229.jpg -./VOC/train/VOCdevkit/VOC2007/images/008232.jpg -./VOC/train/VOCdevkit/VOC2007/images/008235.jpg -./VOC/train/VOCdevkit/VOC2007/images/008236.jpg -./VOC/train/VOCdevkit/VOC2007/images/008241.jpg -./VOC/train/VOCdevkit/VOC2007/images/008244.jpg -./VOC/train/VOCdevkit/VOC2007/images/008248.jpg -./VOC/train/VOCdevkit/VOC2007/images/008250.jpg -./VOC/train/VOCdevkit/VOC2007/images/008251.jpg -./VOC/train/VOCdevkit/VOC2007/images/008252.jpg -./VOC/train/VOCdevkit/VOC2007/images/008253.jpg -./VOC/train/VOCdevkit/VOC2007/images/008254.jpg -./VOC/train/VOCdevkit/VOC2007/images/008258.jpg -./VOC/train/VOCdevkit/VOC2007/images/008260.jpg -./VOC/train/VOCdevkit/VOC2007/images/008261.jpg -./VOC/train/VOCdevkit/VOC2007/images/008262.jpg -./VOC/train/VOCdevkit/VOC2007/images/008263.jpg -./VOC/train/VOCdevkit/VOC2007/images/008268.jpg -./VOC/train/VOCdevkit/VOC2007/images/008269.jpg -./VOC/train/VOCdevkit/VOC2007/images/008272.jpg -./VOC/train/VOCdevkit/VOC2007/images/008275.jpg -./VOC/train/VOCdevkit/VOC2007/images/008279.jpg -./VOC/train/VOCdevkit/VOC2007/images/008280.jpg -./VOC/train/VOCdevkit/VOC2007/images/008281.jpg -./VOC/train/VOCdevkit/VOC2007/images/008282.jpg -./VOC/train/VOCdevkit/VOC2007/images/008284.jpg -./VOC/train/VOCdevkit/VOC2007/images/008285.jpg -./VOC/train/VOCdevkit/VOC2007/images/008292.jpg -./VOC/train/VOCdevkit/VOC2007/images/008293.jpg -./VOC/train/VOCdevkit/VOC2007/images/008294.jpg -./VOC/train/VOCdevkit/VOC2007/images/008295.jpg -./VOC/train/VOCdevkit/VOC2007/images/008296.jpg -./VOC/train/VOCdevkit/VOC2007/images/008297.jpg -./VOC/train/VOCdevkit/VOC2007/images/008299.jpg -./VOC/train/VOCdevkit/VOC2007/images/008300.jpg -./VOC/train/VOCdevkit/VOC2007/images/008301.jpg -./VOC/train/VOCdevkit/VOC2007/images/008302.jpg -./VOC/train/VOCdevkit/VOC2007/images/008306.jpg -./VOC/train/VOCdevkit/VOC2007/images/008307.jpg -./VOC/train/VOCdevkit/VOC2007/images/008310.jpg -./VOC/train/VOCdevkit/VOC2007/images/008311.jpg -./VOC/train/VOCdevkit/VOC2007/images/008312.jpg -./VOC/train/VOCdevkit/VOC2007/images/008313.jpg -./VOC/train/VOCdevkit/VOC2007/images/008315.jpg -./VOC/train/VOCdevkit/VOC2007/images/008316.jpg -./VOC/train/VOCdevkit/VOC2007/images/008317.jpg -./VOC/train/VOCdevkit/VOC2007/images/008318.jpg -./VOC/train/VOCdevkit/VOC2007/images/008319.jpg -./VOC/train/VOCdevkit/VOC2007/images/008320.jpg -./VOC/train/VOCdevkit/VOC2007/images/008322.jpg -./VOC/train/VOCdevkit/VOC2007/images/008323.jpg -./VOC/train/VOCdevkit/VOC2007/images/008326.jpg -./VOC/train/VOCdevkit/VOC2007/images/008327.jpg -./VOC/train/VOCdevkit/VOC2007/images/008329.jpg -./VOC/train/VOCdevkit/VOC2007/images/008332.jpg -./VOC/train/VOCdevkit/VOC2007/images/008335.jpg -./VOC/train/VOCdevkit/VOC2007/images/008336.jpg -./VOC/train/VOCdevkit/VOC2007/images/008338.jpg -./VOC/train/VOCdevkit/VOC2007/images/008341.jpg -./VOC/train/VOCdevkit/VOC2007/images/008342.jpg -./VOC/train/VOCdevkit/VOC2007/images/008345.jpg -./VOC/train/VOCdevkit/VOC2007/images/008346.jpg -./VOC/train/VOCdevkit/VOC2007/images/008349.jpg -./VOC/train/VOCdevkit/VOC2007/images/008351.jpg -./VOC/train/VOCdevkit/VOC2007/images/008355.jpg -./VOC/train/VOCdevkit/VOC2007/images/008359.jpg -./VOC/train/VOCdevkit/VOC2007/images/008360.jpg -./VOC/train/VOCdevkit/VOC2007/images/008364.jpg -./VOC/train/VOCdevkit/VOC2007/images/008365.jpg -./VOC/train/VOCdevkit/VOC2007/images/008368.jpg -./VOC/train/VOCdevkit/VOC2007/images/008370.jpg -./VOC/train/VOCdevkit/VOC2007/images/008372.jpg -./VOC/train/VOCdevkit/VOC2007/images/008374.jpg -./VOC/train/VOCdevkit/VOC2007/images/008376.jpg -./VOC/train/VOCdevkit/VOC2007/images/008381.jpg -./VOC/train/VOCdevkit/VOC2007/images/008384.jpg -./VOC/train/VOCdevkit/VOC2007/images/008385.jpg -./VOC/train/VOCdevkit/VOC2007/images/008386.jpg -./VOC/train/VOCdevkit/VOC2007/images/008387.jpg -./VOC/train/VOCdevkit/VOC2007/images/008388.jpg -./VOC/train/VOCdevkit/VOC2007/images/008390.jpg -./VOC/train/VOCdevkit/VOC2007/images/008391.jpg -./VOC/train/VOCdevkit/VOC2007/images/008397.jpg -./VOC/train/VOCdevkit/VOC2007/images/008398.jpg -./VOC/train/VOCdevkit/VOC2007/images/008403.jpg -./VOC/train/VOCdevkit/VOC2007/images/008409.jpg -./VOC/train/VOCdevkit/VOC2007/images/008410.jpg -./VOC/train/VOCdevkit/VOC2007/images/008413.jpg -./VOC/train/VOCdevkit/VOC2007/images/008415.jpg -./VOC/train/VOCdevkit/VOC2007/images/008416.jpg -./VOC/train/VOCdevkit/VOC2007/images/008422.jpg -./VOC/train/VOCdevkit/VOC2007/images/008423.jpg -./VOC/train/VOCdevkit/VOC2007/images/008424.jpg -./VOC/train/VOCdevkit/VOC2007/images/008425.jpg -./VOC/train/VOCdevkit/VOC2007/images/008426.jpg -./VOC/train/VOCdevkit/VOC2007/images/008427.jpg -./VOC/train/VOCdevkit/VOC2007/images/008429.jpg -./VOC/train/VOCdevkit/VOC2007/images/008430.jpg -./VOC/train/VOCdevkit/VOC2007/images/008433.jpg -./VOC/train/VOCdevkit/VOC2007/images/008434.jpg -./VOC/train/VOCdevkit/VOC2007/images/008437.jpg -./VOC/train/VOCdevkit/VOC2007/images/008438.jpg -./VOC/train/VOCdevkit/VOC2007/images/008442.jpg -./VOC/train/VOCdevkit/VOC2007/images/008443.jpg -./VOC/train/VOCdevkit/VOC2007/images/008444.jpg -./VOC/train/VOCdevkit/VOC2007/images/008445.jpg -./VOC/train/VOCdevkit/VOC2007/images/008449.jpg -./VOC/train/VOCdevkit/VOC2007/images/008450.jpg -./VOC/train/VOCdevkit/VOC2007/images/008452.jpg -./VOC/train/VOCdevkit/VOC2007/images/008453.jpg -./VOC/train/VOCdevkit/VOC2007/images/008454.jpg -./VOC/train/VOCdevkit/VOC2007/images/008456.jpg -./VOC/train/VOCdevkit/VOC2007/images/008461.jpg -./VOC/train/VOCdevkit/VOC2007/images/008462.jpg -./VOC/train/VOCdevkit/VOC2007/images/008465.jpg -./VOC/train/VOCdevkit/VOC2007/images/008466.jpg -./VOC/train/VOCdevkit/VOC2007/images/008467.jpg -./VOC/train/VOCdevkit/VOC2007/images/008468.jpg -./VOC/train/VOCdevkit/VOC2007/images/008470.jpg -./VOC/train/VOCdevkit/VOC2007/images/008472.jpg -./VOC/train/VOCdevkit/VOC2007/images/008475.jpg -./VOC/train/VOCdevkit/VOC2007/images/008477.jpg -./VOC/train/VOCdevkit/VOC2007/images/008478.jpg -./VOC/train/VOCdevkit/VOC2007/images/008482.jpg -./VOC/train/VOCdevkit/VOC2007/images/008483.jpg -./VOC/train/VOCdevkit/VOC2007/images/008484.jpg -./VOC/train/VOCdevkit/VOC2007/images/008485.jpg -./VOC/train/VOCdevkit/VOC2007/images/008492.jpg -./VOC/train/VOCdevkit/VOC2007/images/008494.jpg -./VOC/train/VOCdevkit/VOC2007/images/008495.jpg -./VOC/train/VOCdevkit/VOC2007/images/008498.jpg -./VOC/train/VOCdevkit/VOC2007/images/008499.jpg -./VOC/train/VOCdevkit/VOC2007/images/008502.jpg -./VOC/train/VOCdevkit/VOC2007/images/008503.jpg -./VOC/train/VOCdevkit/VOC2007/images/008506.jpg -./VOC/train/VOCdevkit/VOC2007/images/008509.jpg -./VOC/train/VOCdevkit/VOC2007/images/008512.jpg -./VOC/train/VOCdevkit/VOC2007/images/008513.jpg -./VOC/train/VOCdevkit/VOC2007/images/008514.jpg -./VOC/train/VOCdevkit/VOC2007/images/008517.jpg -./VOC/train/VOCdevkit/VOC2007/images/008518.jpg -./VOC/train/VOCdevkit/VOC2007/images/008519.jpg -./VOC/train/VOCdevkit/VOC2007/images/008521.jpg -./VOC/train/VOCdevkit/VOC2007/images/008522.jpg -./VOC/train/VOCdevkit/VOC2007/images/008523.jpg -./VOC/train/VOCdevkit/VOC2007/images/008524.jpg -./VOC/train/VOCdevkit/VOC2007/images/008526.jpg -./VOC/train/VOCdevkit/VOC2007/images/008529.jpg -./VOC/train/VOCdevkit/VOC2007/images/008530.jpg -./VOC/train/VOCdevkit/VOC2007/images/008533.jpg -./VOC/train/VOCdevkit/VOC2007/images/008534.jpg -./VOC/train/VOCdevkit/VOC2007/images/008535.jpg -./VOC/train/VOCdevkit/VOC2007/images/008536.jpg -./VOC/train/VOCdevkit/VOC2007/images/008541.jpg -./VOC/train/VOCdevkit/VOC2007/images/008542.jpg -./VOC/train/VOCdevkit/VOC2007/images/008549.jpg -./VOC/train/VOCdevkit/VOC2007/images/008550.jpg -./VOC/train/VOCdevkit/VOC2007/images/008553.jpg -./VOC/train/VOCdevkit/VOC2007/images/008556.jpg -./VOC/train/VOCdevkit/VOC2007/images/008557.jpg -./VOC/train/VOCdevkit/VOC2007/images/008558.jpg -./VOC/train/VOCdevkit/VOC2007/images/008559.jpg -./VOC/train/VOCdevkit/VOC2007/images/008562.jpg -./VOC/train/VOCdevkit/VOC2007/images/008564.jpg -./VOC/train/VOCdevkit/VOC2007/images/008568.jpg -./VOC/train/VOCdevkit/VOC2007/images/008572.jpg -./VOC/train/VOCdevkit/VOC2007/images/008573.jpg -./VOC/train/VOCdevkit/VOC2007/images/008576.jpg -./VOC/train/VOCdevkit/VOC2007/images/008581.jpg -./VOC/train/VOCdevkit/VOC2007/images/008582.jpg -./VOC/train/VOCdevkit/VOC2007/images/008584.jpg -./VOC/train/VOCdevkit/VOC2007/images/008585.jpg -./VOC/train/VOCdevkit/VOC2007/images/008586.jpg -./VOC/train/VOCdevkit/VOC2007/images/008587.jpg -./VOC/train/VOCdevkit/VOC2007/images/008588.jpg -./VOC/train/VOCdevkit/VOC2007/images/008592.jpg -./VOC/train/VOCdevkit/VOC2007/images/008595.jpg -./VOC/train/VOCdevkit/VOC2007/images/008596.jpg -./VOC/train/VOCdevkit/VOC2007/images/008601.jpg -./VOC/train/VOCdevkit/VOC2007/images/008602.jpg -./VOC/train/VOCdevkit/VOC2007/images/008604.jpg -./VOC/train/VOCdevkit/VOC2007/images/008606.jpg -./VOC/train/VOCdevkit/VOC2007/images/008607.jpg -./VOC/train/VOCdevkit/VOC2007/images/008608.jpg -./VOC/train/VOCdevkit/VOC2007/images/008610.jpg -./VOC/train/VOCdevkit/VOC2007/images/008612.jpg -./VOC/train/VOCdevkit/VOC2007/images/008615.jpg -./VOC/train/VOCdevkit/VOC2007/images/008617.jpg -./VOC/train/VOCdevkit/VOC2007/images/008618.jpg -./VOC/train/VOCdevkit/VOC2007/images/008620.jpg -./VOC/train/VOCdevkit/VOC2007/images/008621.jpg -./VOC/train/VOCdevkit/VOC2007/images/008624.jpg -./VOC/train/VOCdevkit/VOC2007/images/008628.jpg -./VOC/train/VOCdevkit/VOC2007/images/008633.jpg -./VOC/train/VOCdevkit/VOC2007/images/008635.jpg -./VOC/train/VOCdevkit/VOC2007/images/008636.jpg -./VOC/train/VOCdevkit/VOC2007/images/008638.jpg -./VOC/train/VOCdevkit/VOC2007/images/008639.jpg -./VOC/train/VOCdevkit/VOC2007/images/008644.jpg -./VOC/train/VOCdevkit/VOC2007/images/008645.jpg -./VOC/train/VOCdevkit/VOC2007/images/008647.jpg -./VOC/train/VOCdevkit/VOC2007/images/008653.jpg -./VOC/train/VOCdevkit/VOC2007/images/008654.jpg -./VOC/train/VOCdevkit/VOC2007/images/008655.jpg -./VOC/train/VOCdevkit/VOC2007/images/008663.jpg -./VOC/train/VOCdevkit/VOC2007/images/008665.jpg -./VOC/train/VOCdevkit/VOC2007/images/008667.jpg -./VOC/train/VOCdevkit/VOC2007/images/008670.jpg -./VOC/train/VOCdevkit/VOC2007/images/008676.jpg -./VOC/train/VOCdevkit/VOC2007/images/008680.jpg -./VOC/train/VOCdevkit/VOC2007/images/008683.jpg -./VOC/train/VOCdevkit/VOC2007/images/008687.jpg -./VOC/train/VOCdevkit/VOC2007/images/008688.jpg -./VOC/train/VOCdevkit/VOC2007/images/008690.jpg -./VOC/train/VOCdevkit/VOC2007/images/008691.jpg -./VOC/train/VOCdevkit/VOC2007/images/008692.jpg -./VOC/train/VOCdevkit/VOC2007/images/008695.jpg -./VOC/train/VOCdevkit/VOC2007/images/008698.jpg -./VOC/train/VOCdevkit/VOC2007/images/008699.jpg -./VOC/train/VOCdevkit/VOC2007/images/008701.jpg -./VOC/train/VOCdevkit/VOC2007/images/008702.jpg -./VOC/train/VOCdevkit/VOC2007/images/008706.jpg -./VOC/train/VOCdevkit/VOC2007/images/008709.jpg -./VOC/train/VOCdevkit/VOC2007/images/008710.jpg -./VOC/train/VOCdevkit/VOC2007/images/008713.jpg -./VOC/train/VOCdevkit/VOC2007/images/008716.jpg -./VOC/train/VOCdevkit/VOC2007/images/008717.jpg -./VOC/train/VOCdevkit/VOC2007/images/008718.jpg -./VOC/train/VOCdevkit/VOC2007/images/008720.jpg -./VOC/train/VOCdevkit/VOC2007/images/008722.jpg -./VOC/train/VOCdevkit/VOC2007/images/008723.jpg -./VOC/train/VOCdevkit/VOC2007/images/008725.jpg -./VOC/train/VOCdevkit/VOC2007/images/008727.jpg -./VOC/train/VOCdevkit/VOC2007/images/008728.jpg -./VOC/train/VOCdevkit/VOC2007/images/008730.jpg -./VOC/train/VOCdevkit/VOC2007/images/008731.jpg -./VOC/train/VOCdevkit/VOC2007/images/008732.jpg -./VOC/train/VOCdevkit/VOC2007/images/008733.jpg -./VOC/train/VOCdevkit/VOC2007/images/008738.jpg -./VOC/train/VOCdevkit/VOC2007/images/008739.jpg -./VOC/train/VOCdevkit/VOC2007/images/008741.jpg -./VOC/train/VOCdevkit/VOC2007/images/008742.jpg -./VOC/train/VOCdevkit/VOC2007/images/008744.jpg -./VOC/train/VOCdevkit/VOC2007/images/008747.jpg -./VOC/train/VOCdevkit/VOC2007/images/008748.jpg -./VOC/train/VOCdevkit/VOC2007/images/008749.jpg -./VOC/train/VOCdevkit/VOC2007/images/008750.jpg -./VOC/train/VOCdevkit/VOC2007/images/008752.jpg -./VOC/train/VOCdevkit/VOC2007/images/008753.jpg -./VOC/train/VOCdevkit/VOC2007/images/008755.jpg -./VOC/train/VOCdevkit/VOC2007/images/008756.jpg -./VOC/train/VOCdevkit/VOC2007/images/008757.jpg -./VOC/train/VOCdevkit/VOC2007/images/008759.jpg -./VOC/train/VOCdevkit/VOC2007/images/008760.jpg -./VOC/train/VOCdevkit/VOC2007/images/008764.jpg -./VOC/train/VOCdevkit/VOC2007/images/008766.jpg -./VOC/train/VOCdevkit/VOC2007/images/008768.jpg -./VOC/train/VOCdevkit/VOC2007/images/008769.jpg -./VOC/train/VOCdevkit/VOC2007/images/008770.jpg -./VOC/train/VOCdevkit/VOC2007/images/008771.jpg -./VOC/train/VOCdevkit/VOC2007/images/008772.jpg -./VOC/train/VOCdevkit/VOC2007/images/008773.jpg -./VOC/train/VOCdevkit/VOC2007/images/008775.jpg -./VOC/train/VOCdevkit/VOC2007/images/008776.jpg -./VOC/train/VOCdevkit/VOC2007/images/008783.jpg -./VOC/train/VOCdevkit/VOC2007/images/008784.jpg -./VOC/train/VOCdevkit/VOC2007/images/008790.jpg -./VOC/train/VOCdevkit/VOC2007/images/008793.jpg -./VOC/train/VOCdevkit/VOC2007/images/008794.jpg -./VOC/train/VOCdevkit/VOC2007/images/008796.jpg -./VOC/train/VOCdevkit/VOC2007/images/008799.jpg -./VOC/train/VOCdevkit/VOC2007/images/008801.jpg -./VOC/train/VOCdevkit/VOC2007/images/008805.jpg -./VOC/train/VOCdevkit/VOC2007/images/008806.jpg -./VOC/train/VOCdevkit/VOC2007/images/008809.jpg -./VOC/train/VOCdevkit/VOC2007/images/008810.jpg -./VOC/train/VOCdevkit/VOC2007/images/008811.jpg -./VOC/train/VOCdevkit/VOC2007/images/008813.jpg -./VOC/train/VOCdevkit/VOC2007/images/008814.jpg -./VOC/train/VOCdevkit/VOC2007/images/008815.jpg -./VOC/train/VOCdevkit/VOC2007/images/008817.jpg -./VOC/train/VOCdevkit/VOC2007/images/008819.jpg -./VOC/train/VOCdevkit/VOC2007/images/008822.jpg -./VOC/train/VOCdevkit/VOC2007/images/008823.jpg -./VOC/train/VOCdevkit/VOC2007/images/008826.jpg -./VOC/train/VOCdevkit/VOC2007/images/008831.jpg -./VOC/train/VOCdevkit/VOC2007/images/008833.jpg -./VOC/train/VOCdevkit/VOC2007/images/008835.jpg -./VOC/train/VOCdevkit/VOC2007/images/008836.jpg -./VOC/train/VOCdevkit/VOC2007/images/008837.jpg -./VOC/train/VOCdevkit/VOC2007/images/008838.jpg -./VOC/train/VOCdevkit/VOC2007/images/008840.jpg -./VOC/train/VOCdevkit/VOC2007/images/008841.jpg -./VOC/train/VOCdevkit/VOC2007/images/008843.jpg -./VOC/train/VOCdevkit/VOC2007/images/008847.jpg -./VOC/train/VOCdevkit/VOC2007/images/008848.jpg -./VOC/train/VOCdevkit/VOC2007/images/008849.jpg -./VOC/train/VOCdevkit/VOC2007/images/008854.jpg -./VOC/train/VOCdevkit/VOC2007/images/008856.jpg -./VOC/train/VOCdevkit/VOC2007/images/008858.jpg -./VOC/train/VOCdevkit/VOC2007/images/008859.jpg -./VOC/train/VOCdevkit/VOC2007/images/008862.jpg -./VOC/train/VOCdevkit/VOC2007/images/008865.jpg -./VOC/train/VOCdevkit/VOC2007/images/008867.jpg -./VOC/train/VOCdevkit/VOC2007/images/008871.jpg -./VOC/train/VOCdevkit/VOC2007/images/008872.jpg -./VOC/train/VOCdevkit/VOC2007/images/008873.jpg -./VOC/train/VOCdevkit/VOC2007/images/008874.jpg -./VOC/train/VOCdevkit/VOC2007/images/008876.jpg -./VOC/train/VOCdevkit/VOC2007/images/008878.jpg -./VOC/train/VOCdevkit/VOC2007/images/008879.jpg -./VOC/train/VOCdevkit/VOC2007/images/008880.jpg -./VOC/train/VOCdevkit/VOC2007/images/008883.jpg -./VOC/train/VOCdevkit/VOC2007/images/008884.jpg -./VOC/train/VOCdevkit/VOC2007/images/008885.jpg -./VOC/train/VOCdevkit/VOC2007/images/008886.jpg -./VOC/train/VOCdevkit/VOC2007/images/008888.jpg -./VOC/train/VOCdevkit/VOC2007/images/008890.jpg -./VOC/train/VOCdevkit/VOC2007/images/008891.jpg -./VOC/train/VOCdevkit/VOC2007/images/008892.jpg -./VOC/train/VOCdevkit/VOC2007/images/008900.jpg -./VOC/train/VOCdevkit/VOC2007/images/008905.jpg -./VOC/train/VOCdevkit/VOC2007/images/008909.jpg -./VOC/train/VOCdevkit/VOC2007/images/008911.jpg -./VOC/train/VOCdevkit/VOC2007/images/008913.jpg -./VOC/train/VOCdevkit/VOC2007/images/008914.jpg -./VOC/train/VOCdevkit/VOC2007/images/008917.jpg -./VOC/train/VOCdevkit/VOC2007/images/008919.jpg -./VOC/train/VOCdevkit/VOC2007/images/008920.jpg -./VOC/train/VOCdevkit/VOC2007/images/008921.jpg -./VOC/train/VOCdevkit/VOC2007/images/008923.jpg -./VOC/train/VOCdevkit/VOC2007/images/008926.jpg -./VOC/train/VOCdevkit/VOC2007/images/008927.jpg -./VOC/train/VOCdevkit/VOC2007/images/008929.jpg -./VOC/train/VOCdevkit/VOC2007/images/008930.jpg -./VOC/train/VOCdevkit/VOC2007/images/008931.jpg -./VOC/train/VOCdevkit/VOC2007/images/008932.jpg -./VOC/train/VOCdevkit/VOC2007/images/008933.jpg -./VOC/train/VOCdevkit/VOC2007/images/008936.jpg -./VOC/train/VOCdevkit/VOC2007/images/008939.jpg -./VOC/train/VOCdevkit/VOC2007/images/008940.jpg -./VOC/train/VOCdevkit/VOC2007/images/008942.jpg -./VOC/train/VOCdevkit/VOC2007/images/008943.jpg -./VOC/train/VOCdevkit/VOC2007/images/008944.jpg -./VOC/train/VOCdevkit/VOC2007/images/008948.jpg -./VOC/train/VOCdevkit/VOC2007/images/008951.jpg -./VOC/train/VOCdevkit/VOC2007/images/008953.jpg -./VOC/train/VOCdevkit/VOC2007/images/008955.jpg -./VOC/train/VOCdevkit/VOC2007/images/008958.jpg -./VOC/train/VOCdevkit/VOC2007/images/008960.jpg -./VOC/train/VOCdevkit/VOC2007/images/008961.jpg -./VOC/train/VOCdevkit/VOC2007/images/008962.jpg -./VOC/train/VOCdevkit/VOC2007/images/008965.jpg -./VOC/train/VOCdevkit/VOC2007/images/008966.jpg -./VOC/train/VOCdevkit/VOC2007/images/008967.jpg -./VOC/train/VOCdevkit/VOC2007/images/008968.jpg -./VOC/train/VOCdevkit/VOC2007/images/008969.jpg -./VOC/train/VOCdevkit/VOC2007/images/008970.jpg -./VOC/train/VOCdevkit/VOC2007/images/008971.jpg -./VOC/train/VOCdevkit/VOC2007/images/008973.jpg -./VOC/train/VOCdevkit/VOC2007/images/008975.jpg -./VOC/train/VOCdevkit/VOC2007/images/008976.jpg -./VOC/train/VOCdevkit/VOC2007/images/008978.jpg -./VOC/train/VOCdevkit/VOC2007/images/008979.jpg -./VOC/train/VOCdevkit/VOC2007/images/008980.jpg -./VOC/train/VOCdevkit/VOC2007/images/008982.jpg -./VOC/train/VOCdevkit/VOC2007/images/008983.jpg -./VOC/train/VOCdevkit/VOC2007/images/008985.jpg -./VOC/train/VOCdevkit/VOC2007/images/008987.jpg -./VOC/train/VOCdevkit/VOC2007/images/008988.jpg -./VOC/train/VOCdevkit/VOC2007/images/008989.jpg -./VOC/train/VOCdevkit/VOC2007/images/008995.jpg -./VOC/train/VOCdevkit/VOC2007/images/008997.jpg -./VOC/train/VOCdevkit/VOC2007/images/008999.jpg -./VOC/train/VOCdevkit/VOC2007/images/009000.jpg -./VOC/train/VOCdevkit/VOC2007/images/009002.jpg -./VOC/train/VOCdevkit/VOC2007/images/009004.jpg -./VOC/train/VOCdevkit/VOC2007/images/009005.jpg -./VOC/train/VOCdevkit/VOC2007/images/009006.jpg -./VOC/train/VOCdevkit/VOC2007/images/009007.jpg -./VOC/train/VOCdevkit/VOC2007/images/009015.jpg -./VOC/train/VOCdevkit/VOC2007/images/009016.jpg -./VOC/train/VOCdevkit/VOC2007/images/009018.jpg -./VOC/train/VOCdevkit/VOC2007/images/009019.jpg -./VOC/train/VOCdevkit/VOC2007/images/009020.jpg -./VOC/train/VOCdevkit/VOC2007/images/009022.jpg -./VOC/train/VOCdevkit/VOC2007/images/009024.jpg -./VOC/train/VOCdevkit/VOC2007/images/009027.jpg -./VOC/train/VOCdevkit/VOC2007/images/009029.jpg -./VOC/train/VOCdevkit/VOC2007/images/009032.jpg -./VOC/train/VOCdevkit/VOC2007/images/009034.jpg -./VOC/train/VOCdevkit/VOC2007/images/009035.jpg -./VOC/train/VOCdevkit/VOC2007/images/009036.jpg -./VOC/train/VOCdevkit/VOC2007/images/009037.jpg -./VOC/train/VOCdevkit/VOC2007/images/009039.jpg -./VOC/train/VOCdevkit/VOC2007/images/009042.jpg -./VOC/train/VOCdevkit/VOC2007/images/009045.jpg -./VOC/train/VOCdevkit/VOC2007/images/009048.jpg -./VOC/train/VOCdevkit/VOC2007/images/009049.jpg -./VOC/train/VOCdevkit/VOC2007/images/009051.jpg -./VOC/train/VOCdevkit/VOC2007/images/009053.jpg -./VOC/train/VOCdevkit/VOC2007/images/009058.jpg -./VOC/train/VOCdevkit/VOC2007/images/009059.jpg -./VOC/train/VOCdevkit/VOC2007/images/009060.jpg -./VOC/train/VOCdevkit/VOC2007/images/009063.jpg -./VOC/train/VOCdevkit/VOC2007/images/009064.jpg -./VOC/train/VOCdevkit/VOC2007/images/009066.jpg -./VOC/train/VOCdevkit/VOC2007/images/009068.jpg -./VOC/train/VOCdevkit/VOC2007/images/009072.jpg -./VOC/train/VOCdevkit/VOC2007/images/009073.jpg -./VOC/train/VOCdevkit/VOC2007/images/009078.jpg -./VOC/train/VOCdevkit/VOC2007/images/009079.jpg -./VOC/train/VOCdevkit/VOC2007/images/009080.jpg -./VOC/train/VOCdevkit/VOC2007/images/009085.jpg -./VOC/train/VOCdevkit/VOC2007/images/009086.jpg -./VOC/train/VOCdevkit/VOC2007/images/009087.jpg -./VOC/train/VOCdevkit/VOC2007/images/009089.jpg -./VOC/train/VOCdevkit/VOC2007/images/009091.jpg -./VOC/train/VOCdevkit/VOC2007/images/009094.jpg -./VOC/train/VOCdevkit/VOC2007/images/009098.jpg -./VOC/train/VOCdevkit/VOC2007/images/009099.jpg -./VOC/train/VOCdevkit/VOC2007/images/009100.jpg -./VOC/train/VOCdevkit/VOC2007/images/009105.jpg -./VOC/train/VOCdevkit/VOC2007/images/009106.jpg -./VOC/train/VOCdevkit/VOC2007/images/009108.jpg -./VOC/train/VOCdevkit/VOC2007/images/009112.jpg -./VOC/train/VOCdevkit/VOC2007/images/009113.jpg -./VOC/train/VOCdevkit/VOC2007/images/009114.jpg -./VOC/train/VOCdevkit/VOC2007/images/009116.jpg -./VOC/train/VOCdevkit/VOC2007/images/009117.jpg -./VOC/train/VOCdevkit/VOC2007/images/009121.jpg -./VOC/train/VOCdevkit/VOC2007/images/009123.jpg -./VOC/train/VOCdevkit/VOC2007/images/009126.jpg -./VOC/train/VOCdevkit/VOC2007/images/009128.jpg -./VOC/train/VOCdevkit/VOC2007/images/009129.jpg -./VOC/train/VOCdevkit/VOC2007/images/009131.jpg -./VOC/train/VOCdevkit/VOC2007/images/009133.jpg -./VOC/train/VOCdevkit/VOC2007/images/009136.jpg -./VOC/train/VOCdevkit/VOC2007/images/009138.jpg -./VOC/train/VOCdevkit/VOC2007/images/009141.jpg -./VOC/train/VOCdevkit/VOC2007/images/009144.jpg -./VOC/train/VOCdevkit/VOC2007/images/009147.jpg -./VOC/train/VOCdevkit/VOC2007/images/009148.jpg -./VOC/train/VOCdevkit/VOC2007/images/009150.jpg -./VOC/train/VOCdevkit/VOC2007/images/009151.jpg -./VOC/train/VOCdevkit/VOC2007/images/009153.jpg -./VOC/train/VOCdevkit/VOC2007/images/009155.jpg -./VOC/train/VOCdevkit/VOC2007/images/009157.jpg -./VOC/train/VOCdevkit/VOC2007/images/009159.jpg -./VOC/train/VOCdevkit/VOC2007/images/009160.jpg -./VOC/train/VOCdevkit/VOC2007/images/009161.jpg -./VOC/train/VOCdevkit/VOC2007/images/009162.jpg -./VOC/train/VOCdevkit/VOC2007/images/009163.jpg -./VOC/train/VOCdevkit/VOC2007/images/009166.jpg -./VOC/train/VOCdevkit/VOC2007/images/009168.jpg -./VOC/train/VOCdevkit/VOC2007/images/009173.jpg -./VOC/train/VOCdevkit/VOC2007/images/009174.jpg -./VOC/train/VOCdevkit/VOC2007/images/009175.jpg -./VOC/train/VOCdevkit/VOC2007/images/009177.jpg -./VOC/train/VOCdevkit/VOC2007/images/009178.jpg -./VOC/train/VOCdevkit/VOC2007/images/009179.jpg -./VOC/train/VOCdevkit/VOC2007/images/009180.jpg -./VOC/train/VOCdevkit/VOC2007/images/009181.jpg -./VOC/train/VOCdevkit/VOC2007/images/009184.jpg -./VOC/train/VOCdevkit/VOC2007/images/009185.jpg -./VOC/train/VOCdevkit/VOC2007/images/009186.jpg -./VOC/train/VOCdevkit/VOC2007/images/009187.jpg -./VOC/train/VOCdevkit/VOC2007/images/009189.jpg -./VOC/train/VOCdevkit/VOC2007/images/009191.jpg -./VOC/train/VOCdevkit/VOC2007/images/009192.jpg -./VOC/train/VOCdevkit/VOC2007/images/009193.jpg -./VOC/train/VOCdevkit/VOC2007/images/009194.jpg -./VOC/train/VOCdevkit/VOC2007/images/009195.jpg -./VOC/train/VOCdevkit/VOC2007/images/009196.jpg -./VOC/train/VOCdevkit/VOC2007/images/009197.jpg -./VOC/train/VOCdevkit/VOC2007/images/009200.jpg -./VOC/train/VOCdevkit/VOC2007/images/009202.jpg -./VOC/train/VOCdevkit/VOC2007/images/009205.jpg -./VOC/train/VOCdevkit/VOC2007/images/009208.jpg -./VOC/train/VOCdevkit/VOC2007/images/009209.jpg -./VOC/train/VOCdevkit/VOC2007/images/009212.jpg -./VOC/train/VOCdevkit/VOC2007/images/009213.jpg -./VOC/train/VOCdevkit/VOC2007/images/009214.jpg -./VOC/train/VOCdevkit/VOC2007/images/009215.jpg -./VOC/train/VOCdevkit/VOC2007/images/009218.jpg -./VOC/train/VOCdevkit/VOC2007/images/009221.jpg -./VOC/train/VOCdevkit/VOC2007/images/009224.jpg -./VOC/train/VOCdevkit/VOC2007/images/009227.jpg -./VOC/train/VOCdevkit/VOC2007/images/009230.jpg -./VOC/train/VOCdevkit/VOC2007/images/009236.jpg -./VOC/train/VOCdevkit/VOC2007/images/009238.jpg -./VOC/train/VOCdevkit/VOC2007/images/009239.jpg -./VOC/train/VOCdevkit/VOC2007/images/009242.jpg -./VOC/train/VOCdevkit/VOC2007/images/009244.jpg -./VOC/train/VOCdevkit/VOC2007/images/009245.jpg -./VOC/train/VOCdevkit/VOC2007/images/009246.jpg -./VOC/train/VOCdevkit/VOC2007/images/009247.jpg -./VOC/train/VOCdevkit/VOC2007/images/009249.jpg -./VOC/train/VOCdevkit/VOC2007/images/009250.jpg -./VOC/train/VOCdevkit/VOC2007/images/009251.jpg -./VOC/train/VOCdevkit/VOC2007/images/009252.jpg -./VOC/train/VOCdevkit/VOC2007/images/009254.jpg -./VOC/train/VOCdevkit/VOC2007/images/009255.jpg -./VOC/train/VOCdevkit/VOC2007/images/009259.jpg -./VOC/train/VOCdevkit/VOC2007/images/009268.jpg -./VOC/train/VOCdevkit/VOC2007/images/009269.jpg -./VOC/train/VOCdevkit/VOC2007/images/009270.jpg -./VOC/train/VOCdevkit/VOC2007/images/009271.jpg -./VOC/train/VOCdevkit/VOC2007/images/009272.jpg -./VOC/train/VOCdevkit/VOC2007/images/009273.jpg -./VOC/train/VOCdevkit/VOC2007/images/009278.jpg -./VOC/train/VOCdevkit/VOC2007/images/009279.jpg -./VOC/train/VOCdevkit/VOC2007/images/009281.jpg -./VOC/train/VOCdevkit/VOC2007/images/009282.jpg -./VOC/train/VOCdevkit/VOC2007/images/009283.jpg -./VOC/train/VOCdevkit/VOC2007/images/009285.jpg -./VOC/train/VOCdevkit/VOC2007/images/009286.jpg -./VOC/train/VOCdevkit/VOC2007/images/009287.jpg -./VOC/train/VOCdevkit/VOC2007/images/009288.jpg -./VOC/train/VOCdevkit/VOC2007/images/009289.jpg -./VOC/train/VOCdevkit/VOC2007/images/009290.jpg -./VOC/train/VOCdevkit/VOC2007/images/009291.jpg -./VOC/train/VOCdevkit/VOC2007/images/009295.jpg -./VOC/train/VOCdevkit/VOC2007/images/009296.jpg -./VOC/train/VOCdevkit/VOC2007/images/009299.jpg -./VOC/train/VOCdevkit/VOC2007/images/009303.jpg -./VOC/train/VOCdevkit/VOC2007/images/009306.jpg -./VOC/train/VOCdevkit/VOC2007/images/009307.jpg -./VOC/train/VOCdevkit/VOC2007/images/009308.jpg -./VOC/train/VOCdevkit/VOC2007/images/009309.jpg -./VOC/train/VOCdevkit/VOC2007/images/009312.jpg -./VOC/train/VOCdevkit/VOC2007/images/009315.jpg -./VOC/train/VOCdevkit/VOC2007/images/009316.jpg -./VOC/train/VOCdevkit/VOC2007/images/009318.jpg -./VOC/train/VOCdevkit/VOC2007/images/009323.jpg -./VOC/train/VOCdevkit/VOC2007/images/009324.jpg -./VOC/train/VOCdevkit/VOC2007/images/009325.jpg -./VOC/train/VOCdevkit/VOC2007/images/009326.jpg -./VOC/train/VOCdevkit/VOC2007/images/009327.jpg -./VOC/train/VOCdevkit/VOC2007/images/009330.jpg -./VOC/train/VOCdevkit/VOC2007/images/009331.jpg -./VOC/train/VOCdevkit/VOC2007/images/009333.jpg -./VOC/train/VOCdevkit/VOC2007/images/009334.jpg -./VOC/train/VOCdevkit/VOC2007/images/009336.jpg -./VOC/train/VOCdevkit/VOC2007/images/009337.jpg -./VOC/train/VOCdevkit/VOC2007/images/009339.jpg -./VOC/train/VOCdevkit/VOC2007/images/009342.jpg -./VOC/train/VOCdevkit/VOC2007/images/009343.jpg -./VOC/train/VOCdevkit/VOC2007/images/009347.jpg -./VOC/train/VOCdevkit/VOC2007/images/009348.jpg -./VOC/train/VOCdevkit/VOC2007/images/009349.jpg -./VOC/train/VOCdevkit/VOC2007/images/009350.jpg -./VOC/train/VOCdevkit/VOC2007/images/009351.jpg -./VOC/train/VOCdevkit/VOC2007/images/009354.jpg -./VOC/train/VOCdevkit/VOC2007/images/009358.jpg -./VOC/train/VOCdevkit/VOC2007/images/009359.jpg -./VOC/train/VOCdevkit/VOC2007/images/009362.jpg -./VOC/train/VOCdevkit/VOC2007/images/009365.jpg -./VOC/train/VOCdevkit/VOC2007/images/009368.jpg -./VOC/train/VOCdevkit/VOC2007/images/009371.jpg -./VOC/train/VOCdevkit/VOC2007/images/009373.jpg -./VOC/train/VOCdevkit/VOC2007/images/009374.jpg -./VOC/train/VOCdevkit/VOC2007/images/009375.jpg -./VOC/train/VOCdevkit/VOC2007/images/009377.jpg -./VOC/train/VOCdevkit/VOC2007/images/009378.jpg -./VOC/train/VOCdevkit/VOC2007/images/009382.jpg -./VOC/train/VOCdevkit/VOC2007/images/009386.jpg -./VOC/train/VOCdevkit/VOC2007/images/009388.jpg -./VOC/train/VOCdevkit/VOC2007/images/009389.jpg -./VOC/train/VOCdevkit/VOC2007/images/009392.jpg -./VOC/train/VOCdevkit/VOC2007/images/009393.jpg -./VOC/train/VOCdevkit/VOC2007/images/009394.jpg -./VOC/train/VOCdevkit/VOC2007/images/009398.jpg -./VOC/train/VOCdevkit/VOC2007/images/009401.jpg -./VOC/train/VOCdevkit/VOC2007/images/009405.jpg -./VOC/train/VOCdevkit/VOC2007/images/009406.jpg -./VOC/train/VOCdevkit/VOC2007/images/009407.jpg -./VOC/train/VOCdevkit/VOC2007/images/009408.jpg -./VOC/train/VOCdevkit/VOC2007/images/009409.jpg -./VOC/train/VOCdevkit/VOC2007/images/009410.jpg -./VOC/train/VOCdevkit/VOC2007/images/009411.jpg -./VOC/train/VOCdevkit/VOC2007/images/009412.jpg -./VOC/train/VOCdevkit/VOC2007/images/009413.jpg -./VOC/train/VOCdevkit/VOC2007/images/009414.jpg -./VOC/train/VOCdevkit/VOC2007/images/009417.jpg -./VOC/train/VOCdevkit/VOC2007/images/009418.jpg -./VOC/train/VOCdevkit/VOC2007/images/009419.jpg -./VOC/train/VOCdevkit/VOC2007/images/009420.jpg -./VOC/train/VOCdevkit/VOC2007/images/009421.jpg -./VOC/train/VOCdevkit/VOC2007/images/009422.jpg -./VOC/train/VOCdevkit/VOC2007/images/009424.jpg -./VOC/train/VOCdevkit/VOC2007/images/009429.jpg -./VOC/train/VOCdevkit/VOC2007/images/009432.jpg -./VOC/train/VOCdevkit/VOC2007/images/009433.jpg -./VOC/train/VOCdevkit/VOC2007/images/009434.jpg -./VOC/train/VOCdevkit/VOC2007/images/009437.jpg -./VOC/train/VOCdevkit/VOC2007/images/009438.jpg -./VOC/train/VOCdevkit/VOC2007/images/009439.jpg -./VOC/train/VOCdevkit/VOC2007/images/009440.jpg -./VOC/train/VOCdevkit/VOC2007/images/009443.jpg -./VOC/train/VOCdevkit/VOC2007/images/009445.jpg -./VOC/train/VOCdevkit/VOC2007/images/009446.jpg -./VOC/train/VOCdevkit/VOC2007/images/009448.jpg -./VOC/train/VOCdevkit/VOC2007/images/009454.jpg -./VOC/train/VOCdevkit/VOC2007/images/009455.jpg -./VOC/train/VOCdevkit/VOC2007/images/009456.jpg -./VOC/train/VOCdevkit/VOC2007/images/009457.jpg -./VOC/train/VOCdevkit/VOC2007/images/009458.jpg -./VOC/train/VOCdevkit/VOC2007/images/009459.jpg -./VOC/train/VOCdevkit/VOC2007/images/009460.jpg -./VOC/train/VOCdevkit/VOC2007/images/009461.jpg -./VOC/train/VOCdevkit/VOC2007/images/009463.jpg -./VOC/train/VOCdevkit/VOC2007/images/009464.jpg -./VOC/train/VOCdevkit/VOC2007/images/009465.jpg -./VOC/train/VOCdevkit/VOC2007/images/009466.jpg -./VOC/train/VOCdevkit/VOC2007/images/009468.jpg -./VOC/train/VOCdevkit/VOC2007/images/009469.jpg -./VOC/train/VOCdevkit/VOC2007/images/009470.jpg -./VOC/train/VOCdevkit/VOC2007/images/009472.jpg -./VOC/train/VOCdevkit/VOC2007/images/009476.jpg -./VOC/train/VOCdevkit/VOC2007/images/009477.jpg -./VOC/train/VOCdevkit/VOC2007/images/009479.jpg -./VOC/train/VOCdevkit/VOC2007/images/009480.jpg -./VOC/train/VOCdevkit/VOC2007/images/009481.jpg -./VOC/train/VOCdevkit/VOC2007/images/009484.jpg -./VOC/train/VOCdevkit/VOC2007/images/009488.jpg -./VOC/train/VOCdevkit/VOC2007/images/009490.jpg -./VOC/train/VOCdevkit/VOC2007/images/009491.jpg -./VOC/train/VOCdevkit/VOC2007/images/009494.jpg -./VOC/train/VOCdevkit/VOC2007/images/009496.jpg -./VOC/train/VOCdevkit/VOC2007/images/009497.jpg -./VOC/train/VOCdevkit/VOC2007/images/009499.jpg -./VOC/train/VOCdevkit/VOC2007/images/009500.jpg -./VOC/train/VOCdevkit/VOC2007/images/009502.jpg -./VOC/train/VOCdevkit/VOC2007/images/009504.jpg -./VOC/train/VOCdevkit/VOC2007/images/009507.jpg -./VOC/train/VOCdevkit/VOC2007/images/009508.jpg -./VOC/train/VOCdevkit/VOC2007/images/009512.jpg -./VOC/train/VOCdevkit/VOC2007/images/009515.jpg -./VOC/train/VOCdevkit/VOC2007/images/009516.jpg -./VOC/train/VOCdevkit/VOC2007/images/009517.jpg -./VOC/train/VOCdevkit/VOC2007/images/009518.jpg -./VOC/train/VOCdevkit/VOC2007/images/009519.jpg -./VOC/train/VOCdevkit/VOC2007/images/009520.jpg -./VOC/train/VOCdevkit/VOC2007/images/009523.jpg -./VOC/train/VOCdevkit/VOC2007/images/009524.jpg -./VOC/train/VOCdevkit/VOC2007/images/009526.jpg -./VOC/train/VOCdevkit/VOC2007/images/009527.jpg -./VOC/train/VOCdevkit/VOC2007/images/009528.jpg -./VOC/train/VOCdevkit/VOC2007/images/009531.jpg -./VOC/train/VOCdevkit/VOC2007/images/009532.jpg -./VOC/train/VOCdevkit/VOC2007/images/009533.jpg -./VOC/train/VOCdevkit/VOC2007/images/009537.jpg -./VOC/train/VOCdevkit/VOC2007/images/009540.jpg -./VOC/train/VOCdevkit/VOC2007/images/009541.jpg -./VOC/train/VOCdevkit/VOC2007/images/009542.jpg -./VOC/train/VOCdevkit/VOC2007/images/009543.jpg -./VOC/train/VOCdevkit/VOC2007/images/009545.jpg -./VOC/train/VOCdevkit/VOC2007/images/009546.jpg -./VOC/train/VOCdevkit/VOC2007/images/009549.jpg -./VOC/train/VOCdevkit/VOC2007/images/009550.jpg -./VOC/train/VOCdevkit/VOC2007/images/009551.jpg -./VOC/train/VOCdevkit/VOC2007/images/009557.jpg -./VOC/train/VOCdevkit/VOC2007/images/009558.jpg -./VOC/train/VOCdevkit/VOC2007/images/009560.jpg -./VOC/train/VOCdevkit/VOC2007/images/009562.jpg -./VOC/train/VOCdevkit/VOC2007/images/009565.jpg -./VOC/train/VOCdevkit/VOC2007/images/009566.jpg -./VOC/train/VOCdevkit/VOC2007/images/009567.jpg -./VOC/train/VOCdevkit/VOC2007/images/009568.jpg -./VOC/train/VOCdevkit/VOC2007/images/009571.jpg -./VOC/train/VOCdevkit/VOC2007/images/009573.jpg -./VOC/train/VOCdevkit/VOC2007/images/009576.jpg -./VOC/train/VOCdevkit/VOC2007/images/009577.jpg -./VOC/train/VOCdevkit/VOC2007/images/009579.jpg -./VOC/train/VOCdevkit/VOC2007/images/009580.jpg -./VOC/train/VOCdevkit/VOC2007/images/009584.jpg -./VOC/train/VOCdevkit/VOC2007/images/009585.jpg -./VOC/train/VOCdevkit/VOC2007/images/009586.jpg -./VOC/train/VOCdevkit/VOC2007/images/009587.jpg -./VOC/train/VOCdevkit/VOC2007/images/009588.jpg -./VOC/train/VOCdevkit/VOC2007/images/009591.jpg -./VOC/train/VOCdevkit/VOC2007/images/009596.jpg -./VOC/train/VOCdevkit/VOC2007/images/009597.jpg -./VOC/train/VOCdevkit/VOC2007/images/009598.jpg -./VOC/train/VOCdevkit/VOC2007/images/009600.jpg -./VOC/train/VOCdevkit/VOC2007/images/009603.jpg -./VOC/train/VOCdevkit/VOC2007/images/009605.jpg -./VOC/train/VOCdevkit/VOC2007/images/009609.jpg -./VOC/train/VOCdevkit/VOC2007/images/009611.jpg -./VOC/train/VOCdevkit/VOC2007/images/009613.jpg -./VOC/train/VOCdevkit/VOC2007/images/009614.jpg -./VOC/train/VOCdevkit/VOC2007/images/009615.jpg -./VOC/train/VOCdevkit/VOC2007/images/009617.jpg -./VOC/train/VOCdevkit/VOC2007/images/009618.jpg -./VOC/train/VOCdevkit/VOC2007/images/009619.jpg -./VOC/train/VOCdevkit/VOC2007/images/009620.jpg -./VOC/train/VOCdevkit/VOC2007/images/009621.jpg -./VOC/train/VOCdevkit/VOC2007/images/009623.jpg -./VOC/train/VOCdevkit/VOC2007/images/009627.jpg -./VOC/train/VOCdevkit/VOC2007/images/009629.jpg -./VOC/train/VOCdevkit/VOC2007/images/009634.jpg -./VOC/train/VOCdevkit/VOC2007/images/009636.jpg -./VOC/train/VOCdevkit/VOC2007/images/009637.jpg -./VOC/train/VOCdevkit/VOC2007/images/009638.jpg -./VOC/train/VOCdevkit/VOC2007/images/009641.jpg -./VOC/train/VOCdevkit/VOC2007/images/009644.jpg -./VOC/train/VOCdevkit/VOC2007/images/009647.jpg -./VOC/train/VOCdevkit/VOC2007/images/009649.jpg -./VOC/train/VOCdevkit/VOC2007/images/009650.jpg -./VOC/train/VOCdevkit/VOC2007/images/009654.jpg -./VOC/train/VOCdevkit/VOC2007/images/009655.jpg -./VOC/train/VOCdevkit/VOC2007/images/009656.jpg -./VOC/train/VOCdevkit/VOC2007/images/009658.jpg -./VOC/train/VOCdevkit/VOC2007/images/009659.jpg -./VOC/train/VOCdevkit/VOC2007/images/009664.jpg -./VOC/train/VOCdevkit/VOC2007/images/009666.jpg -./VOC/train/VOCdevkit/VOC2007/images/009667.jpg -./VOC/train/VOCdevkit/VOC2007/images/009668.jpg -./VOC/train/VOCdevkit/VOC2007/images/009670.jpg -./VOC/train/VOCdevkit/VOC2007/images/009671.jpg -./VOC/train/VOCdevkit/VOC2007/images/009676.jpg -./VOC/train/VOCdevkit/VOC2007/images/009678.jpg -./VOC/train/VOCdevkit/VOC2007/images/009679.jpg -./VOC/train/VOCdevkit/VOC2007/images/009681.jpg -./VOC/train/VOCdevkit/VOC2007/images/009684.jpg -./VOC/train/VOCdevkit/VOC2007/images/009685.jpg -./VOC/train/VOCdevkit/VOC2007/images/009686.jpg -./VOC/train/VOCdevkit/VOC2007/images/009687.jpg -./VOC/train/VOCdevkit/VOC2007/images/009691.jpg -./VOC/train/VOCdevkit/VOC2007/images/009692.jpg -./VOC/train/VOCdevkit/VOC2007/images/009693.jpg -./VOC/train/VOCdevkit/VOC2007/images/009695.jpg -./VOC/train/VOCdevkit/VOC2007/images/009698.jpg -./VOC/train/VOCdevkit/VOC2007/images/009699.jpg -./VOC/train/VOCdevkit/VOC2007/images/009700.jpg -./VOC/train/VOCdevkit/VOC2007/images/009702.jpg -./VOC/train/VOCdevkit/VOC2007/images/009703.jpg -./VOC/train/VOCdevkit/VOC2007/images/009706.jpg -./VOC/train/VOCdevkit/VOC2007/images/009707.jpg -./VOC/train/VOCdevkit/VOC2007/images/009709.jpg -./VOC/train/VOCdevkit/VOC2007/images/009710.jpg -./VOC/train/VOCdevkit/VOC2007/images/009711.jpg -./VOC/train/VOCdevkit/VOC2007/images/009712.jpg -./VOC/train/VOCdevkit/VOC2007/images/009713.jpg -./VOC/train/VOCdevkit/VOC2007/images/009717.jpg -./VOC/train/VOCdevkit/VOC2007/images/009718.jpg -./VOC/train/VOCdevkit/VOC2007/images/009719.jpg -./VOC/train/VOCdevkit/VOC2007/images/009721.jpg -./VOC/train/VOCdevkit/VOC2007/images/009724.jpg -./VOC/train/VOCdevkit/VOC2007/images/009726.jpg -./VOC/train/VOCdevkit/VOC2007/images/009729.jpg -./VOC/train/VOCdevkit/VOC2007/images/009732.jpg -./VOC/train/VOCdevkit/VOC2007/images/009733.jpg -./VOC/train/VOCdevkit/VOC2007/images/009734.jpg -./VOC/train/VOCdevkit/VOC2007/images/009735.jpg -./VOC/train/VOCdevkit/VOC2007/images/009737.jpg -./VOC/train/VOCdevkit/VOC2007/images/009738.jpg -./VOC/train/VOCdevkit/VOC2007/images/009743.jpg -./VOC/train/VOCdevkit/VOC2007/images/009745.jpg -./VOC/train/VOCdevkit/VOC2007/images/009746.jpg -./VOC/train/VOCdevkit/VOC2007/images/009747.jpg -./VOC/train/VOCdevkit/VOC2007/images/009748.jpg -./VOC/train/VOCdevkit/VOC2007/images/009749.jpg -./VOC/train/VOCdevkit/VOC2007/images/009754.jpg -./VOC/train/VOCdevkit/VOC2007/images/009755.jpg -./VOC/train/VOCdevkit/VOC2007/images/009756.jpg -./VOC/train/VOCdevkit/VOC2007/images/009758.jpg -./VOC/train/VOCdevkit/VOC2007/images/009761.jpg -./VOC/train/VOCdevkit/VOC2007/images/009762.jpg -./VOC/train/VOCdevkit/VOC2007/images/009763.jpg -./VOC/train/VOCdevkit/VOC2007/images/009764.jpg -./VOC/train/VOCdevkit/VOC2007/images/009767.jpg -./VOC/train/VOCdevkit/VOC2007/images/009772.jpg -./VOC/train/VOCdevkit/VOC2007/images/009773.jpg -./VOC/train/VOCdevkit/VOC2007/images/009774.jpg -./VOC/train/VOCdevkit/VOC2007/images/009776.jpg -./VOC/train/VOCdevkit/VOC2007/images/009778.jpg -./VOC/train/VOCdevkit/VOC2007/images/009780.jpg -./VOC/train/VOCdevkit/VOC2007/images/009781.jpg -./VOC/train/VOCdevkit/VOC2007/images/009785.jpg -./VOC/train/VOCdevkit/VOC2007/images/009789.jpg -./VOC/train/VOCdevkit/VOC2007/images/009790.jpg -./VOC/train/VOCdevkit/VOC2007/images/009792.jpg -./VOC/train/VOCdevkit/VOC2007/images/009794.jpg -./VOC/train/VOCdevkit/VOC2007/images/009796.jpg -./VOC/train/VOCdevkit/VOC2007/images/009797.jpg -./VOC/train/VOCdevkit/VOC2007/images/009800.jpg -./VOC/train/VOCdevkit/VOC2007/images/009801.jpg -./VOC/train/VOCdevkit/VOC2007/images/009805.jpg -./VOC/train/VOCdevkit/VOC2007/images/009807.jpg -./VOC/train/VOCdevkit/VOC2007/images/009808.jpg -./VOC/train/VOCdevkit/VOC2007/images/009809.jpg -./VOC/train/VOCdevkit/VOC2007/images/009810.jpg -./VOC/train/VOCdevkit/VOC2007/images/009813.jpg -./VOC/train/VOCdevkit/VOC2007/images/009816.jpg -./VOC/train/VOCdevkit/VOC2007/images/009819.jpg -./VOC/train/VOCdevkit/VOC2007/images/009822.jpg -./VOC/train/VOCdevkit/VOC2007/images/009823.jpg -./VOC/train/VOCdevkit/VOC2007/images/009825.jpg -./VOC/train/VOCdevkit/VOC2007/images/009828.jpg -./VOC/train/VOCdevkit/VOC2007/images/009830.jpg -./VOC/train/VOCdevkit/VOC2007/images/009831.jpg -./VOC/train/VOCdevkit/VOC2007/images/009832.jpg -./VOC/train/VOCdevkit/VOC2007/images/009833.jpg -./VOC/train/VOCdevkit/VOC2007/images/009834.jpg -./VOC/train/VOCdevkit/VOC2007/images/009836.jpg -./VOC/train/VOCdevkit/VOC2007/images/009839.jpg -./VOC/train/VOCdevkit/VOC2007/images/009841.jpg -./VOC/train/VOCdevkit/VOC2007/images/009842.jpg -./VOC/train/VOCdevkit/VOC2007/images/009845.jpg -./VOC/train/VOCdevkit/VOC2007/images/009848.jpg -./VOC/train/VOCdevkit/VOC2007/images/009851.jpg -./VOC/train/VOCdevkit/VOC2007/images/009852.jpg -./VOC/train/VOCdevkit/VOC2007/images/009855.jpg -./VOC/train/VOCdevkit/VOC2007/images/009858.jpg -./VOC/train/VOCdevkit/VOC2007/images/009859.jpg -./VOC/train/VOCdevkit/VOC2007/images/009860.jpg -./VOC/train/VOCdevkit/VOC2007/images/009862.jpg -./VOC/train/VOCdevkit/VOC2007/images/009863.jpg -./VOC/train/VOCdevkit/VOC2007/images/009865.jpg -./VOC/train/VOCdevkit/VOC2007/images/009867.jpg -./VOC/train/VOCdevkit/VOC2007/images/009868.jpg -./VOC/train/VOCdevkit/VOC2007/images/009869.jpg -./VOC/train/VOCdevkit/VOC2007/images/009870.jpg -./VOC/train/VOCdevkit/VOC2007/images/009872.jpg -./VOC/train/VOCdevkit/VOC2007/images/009874.jpg -./VOC/train/VOCdevkit/VOC2007/images/009877.jpg -./VOC/train/VOCdevkit/VOC2007/images/009878.jpg -./VOC/train/VOCdevkit/VOC2007/images/009879.jpg -./VOC/train/VOCdevkit/VOC2007/images/009880.jpg -./VOC/train/VOCdevkit/VOC2007/images/009881.jpg -./VOC/train/VOCdevkit/VOC2007/images/009882.jpg -./VOC/train/VOCdevkit/VOC2007/images/009884.jpg -./VOC/train/VOCdevkit/VOC2007/images/009886.jpg -./VOC/train/VOCdevkit/VOC2007/images/009887.jpg -./VOC/train/VOCdevkit/VOC2007/images/009894.jpg -./VOC/train/VOCdevkit/VOC2007/images/009896.jpg -./VOC/train/VOCdevkit/VOC2007/images/009897.jpg -./VOC/train/VOCdevkit/VOC2007/images/009898.jpg -./VOC/train/VOCdevkit/VOC2007/images/009900.jpg -./VOC/train/VOCdevkit/VOC2007/images/009902.jpg -./VOC/train/VOCdevkit/VOC2007/images/009904.jpg -./VOC/train/VOCdevkit/VOC2007/images/009905.jpg -./VOC/train/VOCdevkit/VOC2007/images/009908.jpg -./VOC/train/VOCdevkit/VOC2007/images/009911.jpg -./VOC/train/VOCdevkit/VOC2007/images/009913.jpg -./VOC/train/VOCdevkit/VOC2007/images/009917.jpg -./VOC/train/VOCdevkit/VOC2007/images/009918.jpg -./VOC/train/VOCdevkit/VOC2007/images/009920.jpg -./VOC/train/VOCdevkit/VOC2007/images/009923.jpg -./VOC/train/VOCdevkit/VOC2007/images/009926.jpg -./VOC/train/VOCdevkit/VOC2007/images/009932.jpg -./VOC/train/VOCdevkit/VOC2007/images/009935.jpg -./VOC/train/VOCdevkit/VOC2007/images/009938.jpg -./VOC/train/VOCdevkit/VOC2007/images/009939.jpg -./VOC/train/VOCdevkit/VOC2007/images/009940.jpg -./VOC/train/VOCdevkit/VOC2007/images/009942.jpg -./VOC/train/VOCdevkit/VOC2007/images/009944.jpg -./VOC/train/VOCdevkit/VOC2007/images/009945.jpg -./VOC/train/VOCdevkit/VOC2007/images/009946.jpg -./VOC/train/VOCdevkit/VOC2007/images/009947.jpg -./VOC/train/VOCdevkit/VOC2007/images/009949.jpg -./VOC/train/VOCdevkit/VOC2007/images/009950.jpg -./VOC/train/VOCdevkit/VOC2007/images/009954.jpg -./VOC/train/VOCdevkit/VOC2007/images/009955.jpg -./VOC/train/VOCdevkit/VOC2007/images/009958.jpg -./VOC/train/VOCdevkit/VOC2007/images/009959.jpg -./VOC/train/VOCdevkit/VOC2007/images/009961.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000003.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000007.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000008.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000009.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000015.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000016.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000019.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000021.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000023.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000026.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000027.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000028.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000032.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000033.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000034.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000036.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000041.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000043.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000045.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000050.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000051.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000053.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000056.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000059.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000060.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000062.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000064.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000067.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000070.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000074.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000075.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000076.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000078.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000080.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000085.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000089.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000090.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000093.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000095.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000096.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000097.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000099.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000103.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000107.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000109.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000112.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000115.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000116.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000119.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000120.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000123.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000128.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000131.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000132.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000134.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000138.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000140.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000141.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000142.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000143.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000144.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000145.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000148.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000149.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000151.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000154.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000162.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000163.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000174.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000176.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000177.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000181.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000182.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000183.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000187.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000188.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000189.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000190.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000191.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000192.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000193.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000194.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000195.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000196.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000197.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000199.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000202.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000203.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000204.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000207.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000213.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000215.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000217.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000219.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000222.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000223.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000226.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000227.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000233.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000234.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000235.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000236.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000237.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000238.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000239.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000243.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000244.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000246.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000251.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000252.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000253.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000254.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000255.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000259.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000260.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000261.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000262.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000264.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000266.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000268.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000270.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000271.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000272.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000273.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000274.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000275.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000277.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000278.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000281.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000283.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000284.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000287.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000289.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000290.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000291.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000297.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000298.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000304.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000305.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000306.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000307.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000309.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000311.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000313.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000315.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000316.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000318.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000321.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000328.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000330.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000335.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000336.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000338.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000339.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000340.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000342.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000343.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000345.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000346.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000348.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000354.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000356.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000358.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000359.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000364.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000365.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000367.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000371.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000373.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000376.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000378.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000380.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000381.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000382.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000383.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000391.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000392.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000393.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000397.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000398.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000399.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000400.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000401.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000403.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000405.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000407.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000408.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000413.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000414.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000415.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000416.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000418.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000419.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000421.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000422.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000423.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000424.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000426.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000428.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000432.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000435.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000436.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000437.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000442.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000443.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000445.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000446.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000447.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000448.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000452.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000455.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000457.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000461.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000464.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000465.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000466.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000469.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000470.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000471.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000472.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000473.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000474.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000475.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000480.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000481.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000488.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000489.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000491.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000492.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000493.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000495.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000496.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000498.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000499.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000501.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000502.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000505.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000510.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000511.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000512.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000514.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000515.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000516.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000522.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000527.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000531.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000532.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000533.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000535.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000540.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000541.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000544.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000545.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000547.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000548.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000552.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000553.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000558.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000559.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000561.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000562.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000563.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000564.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000566.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000568.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000569.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000572.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000573.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000578.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000579.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000581.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000583.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000584.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000585.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000588.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000589.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000595.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000599.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000602.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000605.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000607.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000609.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000613.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000614.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000615.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000619.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000620.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000622.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000623.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000626.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000628.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000630.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000634.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000636.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000640.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000641.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000645.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000646.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000647.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000648.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000650.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000652.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000655.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000656.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000657.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000659.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000660.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000661.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000662.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000666.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000669.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000670.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000672.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000673.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000674.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000676.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000677.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000678.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000683.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000689.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000690.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000691.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000694.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000695.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000696.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000697.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000699.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000700.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000703.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000704.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000705.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000706.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000711.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000714.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000716.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000721.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000723.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000724.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000725.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000726.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000727.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000729.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000731.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000732.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000733.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000734.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000737.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000740.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000742.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000745.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000748.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000753.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000756.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000760.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000761.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000764.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000765.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000769.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000775.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000776.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000777.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000778.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000780.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000782.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000783.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000785.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000787.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000788.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000790.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000792.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000793.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000795.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000796.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000798.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000801.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000803.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000804.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000806.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000808.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000811.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000814.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000815.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000817.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000824.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000825.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000828.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000829.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000832.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000833.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000834.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000835.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000837.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000839.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000841.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000842.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000844.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000847.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000848.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000851.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000853.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000854.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000857.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000858.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000860.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000861.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000863.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000864.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000867.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000868.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000870.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000873.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000875.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000876.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000878.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000880.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000881.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000883.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000884.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000885.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000887.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000897.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000899.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000901.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000902.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000904.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000905.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000908.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000910.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000911.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000912.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000914.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000915.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000916.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000917.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000919.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000922.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000923.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000924.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000928.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000931.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000934.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000936.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000939.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000940.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000941.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000942.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000943.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000944.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000950.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000952.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000953.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000956.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000957.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000959.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000960.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000964.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000965.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000970.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000971.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000972.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000973.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000976.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000979.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000981.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000982.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000984.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000985.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000987.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000992.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000993.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_000999.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001004.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001007.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001009.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001012.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001013.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001018.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001020.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001021.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001022.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001023.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001024.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001026.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001028.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001030.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001031.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001034.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001035.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001036.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001039.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001040.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001041.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001046.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001047.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001048.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001056.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001057.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001060.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001062.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001063.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001068.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001070.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001071.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001074.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001075.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001076.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001077.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001078.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001080.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001081.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001083.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001089.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001090.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001092.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001099.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001104.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001106.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001111.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001112.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001113.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001114.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001115.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001118.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001119.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001120.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001121.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001122.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001130.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001134.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001135.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001136.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001137.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001139.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001140.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001142.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001143.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001150.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001154.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001155.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001158.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001159.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001160.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001161.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001164.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001166.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001167.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001168.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001169.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001170.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001171.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001177.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001182.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001183.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001188.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001189.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001190.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001192.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001194.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001196.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001199.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001202.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001203.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001205.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001206.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001208.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001210.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001215.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001218.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001219.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001220.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001221.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001223.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001225.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001226.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001227.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001230.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001231.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001235.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001236.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001238.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001241.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001245.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001248.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001249.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001255.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001260.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001262.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001263.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001264.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001267.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001271.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001272.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001274.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001275.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001278.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001283.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001284.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001285.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001290.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001294.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001296.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001299.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001301.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001302.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001304.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001306.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001307.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001308.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001310.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001312.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001314.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001318.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001320.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001322.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001325.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001329.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001333.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001334.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001335.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001336.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001338.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001340.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001344.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001346.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001349.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001351.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001353.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001356.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001357.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001358.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001359.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001366.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001367.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001369.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001373.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001374.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001375.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001376.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001379.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001380.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001382.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001383.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001385.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001387.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001388.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001389.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001390.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001391.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001395.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001399.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001401.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001402.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001404.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001405.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001408.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001410.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001413.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001414.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001415.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001419.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001420.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001427.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001428.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001429.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001430.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001431.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001432.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001433.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001434.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001436.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001437.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001439.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001440.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001444.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001445.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001446.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001448.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001451.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001454.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001455.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001456.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001460.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001461.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001462.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001464.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001466.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001467.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001468.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001470.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001475.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001478.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001479.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001481.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001482.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001486.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001488.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001491.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001493.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001494.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001495.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001498.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001500.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001501.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001503.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001504.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001510.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001513.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001514.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001516.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001520.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001522.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001523.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001525.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001527.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001529.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001531.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001533.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001534.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001538.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001539.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001540.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001541.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001542.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001543.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001544.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001546.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001547.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001549.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001550.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001551.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001553.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001563.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001564.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001566.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001574.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001575.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001576.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001577.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001580.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001582.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001586.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001589.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001590.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001591.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001592.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001593.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001594.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001596.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001598.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001601.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001602.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001605.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001607.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001609.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001610.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001613.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001615.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001617.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001619.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001620.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001622.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001624.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001625.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001626.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001631.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001632.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001636.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001638.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001640.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001641.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001643.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001645.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001648.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001649.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001652.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001653.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001655.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001659.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001660.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001661.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001663.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001666.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001667.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001668.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001669.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001670.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001673.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001676.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001679.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001680.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001681.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001682.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001688.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001690.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001691.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001692.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001694.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001697.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001699.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001702.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001704.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001706.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001708.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001709.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001710.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001712.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001714.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001715.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001716.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001717.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001722.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001723.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001724.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001727.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001729.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001730.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001731.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001735.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001736.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001737.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001741.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001742.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001744.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001745.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001746.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001750.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001751.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001757.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001761.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001763.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001764.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001765.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001769.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001772.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001773.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001774.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001775.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001781.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001782.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001783.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001784.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001787.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001789.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001791.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001792.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001796.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001797.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001799.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001801.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001802.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001806.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001808.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001809.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001810.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001811.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001812.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001813.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001814.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001815.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001816.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001820.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001821.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001823.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001825.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001829.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001830.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001832.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001834.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001836.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001837.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001838.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001841.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001842.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001843.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001845.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001849.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001850.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001852.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001854.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001856.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001858.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001860.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001862.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001863.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001865.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001866.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001867.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001869.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001871.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001872.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001874.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001876.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001880.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001881.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001882.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001885.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001888.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001894.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001895.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001896.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001899.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001903.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001905.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001907.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001908.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001909.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001910.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001911.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001914.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001919.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001920.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001921.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001926.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001928.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001929.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001930.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001932.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001934.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001937.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001941.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001945.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001946.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001947.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001951.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001955.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001956.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001957.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001958.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001961.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001965.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001966.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001967.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001969.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001970.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001971.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001977.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001978.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001979.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001980.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001982.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001985.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001986.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001987.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001989.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001992.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001997.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_001998.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002000.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002001.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002003.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002004.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002005.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002007.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002009.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002011.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002013.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002017.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002021.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002023.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002026.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002031.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002032.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002033.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002035.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002036.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002039.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002043.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002045.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002046.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002047.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002056.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002058.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002061.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002062.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002064.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002067.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002069.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002071.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002079.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002080.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002086.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002088.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002092.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002093.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002094.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002096.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002099.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002103.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002107.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002112.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002113.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002114.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002115.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002116.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002117.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002118.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002119.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002123.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002124.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002129.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002131.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002132.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002138.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002140.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002144.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002145.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002146.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002148.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002150.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002151.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002152.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002153.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002155.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002156.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002158.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002160.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002162.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002167.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002169.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002172.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002175.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002176.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002177.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002179.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002181.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002182.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002191.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002193.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002194.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002195.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002197.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002198.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002199.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002200.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002201.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002202.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002204.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002205.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002206.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002207.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002208.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002209.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002210.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002212.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002215.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002218.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002220.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002221.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002222.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002223.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002225.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002227.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002231.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002234.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002236.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002239.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002240.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002241.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002243.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002244.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002247.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002248.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002250.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002251.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002255.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002258.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002259.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002262.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002267.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002269.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002270.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002272.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002273.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002278.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002279.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002280.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002281.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002283.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002288.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002292.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002293.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002294.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002296.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002298.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002299.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002304.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002305.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002307.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002311.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002312.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002314.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002317.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002321.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002322.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002324.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002325.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002327.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002328.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002329.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002330.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002331.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002335.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002338.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002340.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002343.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002344.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002347.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002349.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002356.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002357.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002358.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002359.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002362.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002365.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002366.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002368.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002369.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002370.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002372.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002374.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002377.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002378.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002379.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002383.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002384.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002389.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002395.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002399.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002401.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002403.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002404.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002405.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002408.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002410.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002411.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002412.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002414.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002418.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002419.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002422.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002424.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002425.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002428.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002429.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002430.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002434.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002436.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002437.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002438.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002439.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002441.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002442.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002444.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002445.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002446.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002448.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002451.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002452.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002454.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002456.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002457.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002458.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002459.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002461.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002464.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002465.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002466.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002467.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002470.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002471.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002473.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002477.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002481.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002482.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002483.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002484.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002485.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002487.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002491.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002492.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002494.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002495.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002499.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002501.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002502.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002504.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002506.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002508.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002509.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002510.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002512.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002514.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002515.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002516.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002521.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002523.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002524.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002526.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002527.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002533.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002540.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002541.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002542.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002543.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002547.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002549.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002551.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002555.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002558.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002562.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002564.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002566.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002568.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002574.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002575.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002576.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002578.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002579.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002583.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002584.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002588.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002589.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002590.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002597.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002598.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002599.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002601.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002603.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002606.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002610.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002612.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002613.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002616.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002621.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002622.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002623.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002624.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002625.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002631.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002634.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002638.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002639.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002640.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002641.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002643.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002645.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002647.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002648.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002649.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002650.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002652.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002653.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002662.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002665.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002666.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002668.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002670.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002672.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002673.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002674.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002675.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002676.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002677.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002678.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002679.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002680.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002681.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002682.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002684.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002686.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002687.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002696.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002697.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002698.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002700.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002701.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002704.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002705.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002709.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002710.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002712.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002714.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002715.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002716.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002718.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002720.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002725.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002728.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002730.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002732.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002733.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002735.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002736.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002738.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002741.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002746.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002749.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002750.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002751.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002752.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002753.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002756.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002760.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002762.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002766.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002767.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002768.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002772.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002773.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002774.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002775.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002776.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002778.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002783.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002784.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002787.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002789.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002791.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002792.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002793.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002794.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002795.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002801.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002804.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002806.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002808.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002809.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002811.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002813.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002814.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002817.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002820.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002823.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002826.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002829.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002830.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002831.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002834.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002835.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002838.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002842.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002843.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002845.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002847.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002848.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002850.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002852.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002854.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002856.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002857.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002859.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002860.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002864.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002866.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002868.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002869.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002870.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002872.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002873.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002875.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002876.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002879.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002880.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002882.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002883.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002885.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002887.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002890.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002891.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002892.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002894.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002897.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002899.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002900.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002903.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002904.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002906.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002908.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002909.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002910.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002913.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002916.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002917.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002920.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002922.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002926.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002929.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002930.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002931.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002932.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002936.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002942.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002943.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002946.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002947.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002948.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002951.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002954.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002955.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002956.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002957.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002958.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002960.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002961.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002965.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002966.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002968.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002970.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002971.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002972.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002973.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002977.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002983.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002984.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002985.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002988.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002992.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002993.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002997.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_002999.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003001.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003003.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003005.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003008.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003013.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003015.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003017.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003018.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003020.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003021.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003022.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003023.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003025.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003026.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003030.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003033.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003034.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003039.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003041.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003043.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003045.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003048.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003049.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003051.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003053.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003056.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003057.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003059.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003060.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003061.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003062.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003063.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003065.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003067.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003068.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003072.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003075.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003076.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003079.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003081.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003083.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003087.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003088.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003089.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003090.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003093.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003094.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003095.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003099.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003100.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003101.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003104.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003106.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003107.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003108.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003110.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003112.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003114.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003120.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003122.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003127.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003128.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003132.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003134.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003135.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003136.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003140.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003141.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003143.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003144.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003146.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003151.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003152.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003154.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003155.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003157.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003160.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003161.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003167.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003168.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003170.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003178.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003180.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003181.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003182.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003186.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003187.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003189.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003191.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003193.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003196.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003200.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003202.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003203.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003205.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003208.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003209.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003210.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003211.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003213.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003220.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003222.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003224.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003225.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003228.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003231.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003232.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003238.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003239.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003242.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003244.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003245.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003248.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003249.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003251.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003252.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003255.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003256.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003261.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003263.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003264.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003265.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003266.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003269.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003270.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003271.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003272.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003275.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003276.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003277.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003278.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003280.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003283.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003286.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003287.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003288.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003289.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003290.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003291.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003295.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003297.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003300.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003302.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003303.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003304.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003305.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003311.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003313.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003316.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003318.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003320.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003321.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003323.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003326.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003329.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003330.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003331.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003333.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003334.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003335.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003336.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003338.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003342.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003343.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003344.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003347.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003348.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003351.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003359.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003360.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003362.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003369.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003373.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003374.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003378.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003379.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003380.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003381.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003382.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003384.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003386.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003393.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003394.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003395.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003402.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003405.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003407.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003409.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003414.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003415.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003417.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003418.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003420.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003423.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003424.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003426.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003429.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003430.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003432.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003433.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003434.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003435.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003437.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003439.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003442.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003443.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003447.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003448.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003449.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003451.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003452.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003453.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003458.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003461.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003462.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003463.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003464.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003466.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003467.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003469.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003472.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003475.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003476.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003477.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003478.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003479.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003480.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003482.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003483.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003484.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003485.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003488.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003489.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003492.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003493.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003496.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003497.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003498.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003499.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003500.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003501.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003504.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003507.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003510.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003511.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003514.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003515.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003520.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003521.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003522.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003523.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003524.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003526.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003531.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003533.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003534.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003542.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003544.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003545.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003546.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003547.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003552.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003557.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003559.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003560.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003562.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003565.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003571.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003572.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003575.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003576.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003577.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003578.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003579.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003580.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003582.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003585.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003587.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003589.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003590.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003591.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003592.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003593.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003596.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003598.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003604.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003607.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003608.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003609.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003610.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003611.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003613.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003617.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003618.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003619.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003621.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003622.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003624.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003626.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003635.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003636.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003637.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003638.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003645.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003647.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003650.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003652.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003653.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003655.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003658.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003659.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003662.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003665.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003667.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003671.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003672.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003673.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003674.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003675.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003676.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003677.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003680.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003681.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003682.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003683.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003684.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003685.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003688.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003689.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003691.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003694.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003697.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003701.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003703.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003704.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003706.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003707.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003709.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003712.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003713.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003718.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003720.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003721.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003722.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003726.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003729.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003732.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003733.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003737.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003743.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003744.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003745.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003746.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003748.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003749.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003753.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003754.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003755.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003756.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003761.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003762.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003763.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003764.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003766.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003767.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003768.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003769.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003772.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003773.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003774.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003775.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003776.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003777.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003779.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003780.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003781.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003782.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003788.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003789.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003791.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003793.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003794.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003796.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003799.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003800.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003801.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003802.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003811.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003812.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003813.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003814.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003815.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003819.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003820.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003821.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003825.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003826.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003827.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003829.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003830.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003831.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003835.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003838.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003840.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003841.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003842.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003843.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003844.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003846.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003847.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003849.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003852.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003854.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003856.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003858.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003860.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003864.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003866.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003868.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003870.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003871.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003873.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003874.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003876.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003881.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003882.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003883.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003884.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003885.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003886.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003888.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003891.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003892.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003894.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003904.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003905.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003908.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003913.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003914.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003915.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003916.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003920.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003921.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003922.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003924.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003925.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003926.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003929.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003932.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003933.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003939.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003940.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003941.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003942.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003943.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003944.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003945.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003947.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003948.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003951.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003956.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003958.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003962.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003965.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003966.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003967.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003969.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003970.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003971.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003974.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003975.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003976.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003978.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003983.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003984.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003985.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003986.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003988.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003989.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003992.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003995.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003996.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003997.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_003998.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004000.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004003.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004004.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004006.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004007.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004008.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004014.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004015.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004016.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004017.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004018.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004020.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004021.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004022.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004024.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004026.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004027.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004030.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004036.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004040.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004044.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004045.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004046.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004048.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004053.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004056.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004058.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004064.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004069.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004071.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004074.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004075.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004076.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004077.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004080.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004081.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004087.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004088.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004090.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004092.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004093.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004097.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004100.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004101.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004102.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004103.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004106.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004110.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004112.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004113.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004119.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004120.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004121.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004122.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004123.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004124.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004125.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004126.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004127.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004130.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004134.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004135.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004137.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004138.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004140.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004142.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004145.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004148.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004155.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004161.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004163.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004165.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004166.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004171.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004174.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004175.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004176.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004178.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004182.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004188.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004189.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004190.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004195.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004196.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004198.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004201.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004203.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004205.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004208.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004212.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004213.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004214.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004216.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004217.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004218.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004221.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004224.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004230.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004231.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004232.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004234.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004235.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004239.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004242.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004243.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004245.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004246.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004247.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004251.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004258.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004259.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004263.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004265.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004269.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004270.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004271.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004273.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004274.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004276.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004278.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004279.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004280.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004284.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004287.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004288.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004289.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004290.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004291.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004292.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004293.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004296.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004297.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004301.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004303.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004306.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004307.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004308.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004312.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004313.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004314.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004317.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004318.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004319.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004321.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004324.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004325.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004326.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004327.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004328.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004330.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004331.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004333.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004339.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004342.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004344.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004345.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004347.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004348.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004353.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004354.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004357.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004358.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004362.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004363.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004365.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004367.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004371.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004372.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004374.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004376.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004378.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004380.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004384.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004385.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004387.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004389.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004391.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004394.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004396.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004398.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004399.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004402.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004403.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004408.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004410.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004411.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004412.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004414.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004416.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004417.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004418.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004419.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004422.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004425.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004426.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004427.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004428.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004430.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004431.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004433.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004435.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004436.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004438.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004439.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004441.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004443.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004445.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004450.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004452.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004453.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004455.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004457.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004458.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004459.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004460.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004462.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004464.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004469.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004470.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004471.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004476.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004477.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004478.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004479.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004480.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004482.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004487.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004488.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004490.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004492.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004493.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004497.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004498.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004499.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004501.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004502.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004504.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004505.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004506.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004510.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004512.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004513.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004515.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004518.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004520.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004522.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004525.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004526.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004528.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004532.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004533.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004534.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004538.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004539.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004540.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004541.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004544.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004545.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004546.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004547.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004549.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004550.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004551.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004552.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004553.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004554.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004559.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004564.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004568.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004570.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004574.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004575.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004579.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004581.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004583.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004584.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004585.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004588.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004589.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004590.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004592.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004593.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004599.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004602.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004603.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004605.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004606.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004607.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004610.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004611.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004612.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004613.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004614.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004615.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004616.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004617.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004619.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004620.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004621.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004624.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004630.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004631.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004632.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004633.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004634.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004635.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004636.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004640.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004646.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004647.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004648.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004649.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004653.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004654.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004656.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004659.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004661.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004662.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004663.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004665.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004666.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004667.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004668.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004670.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004671.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004672.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004677.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004678.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004679.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004684.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004687.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004688.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004689.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004690.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004692.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004695.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004696.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004697.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004701.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004702.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004703.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004704.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004705.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004706.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004707.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004711.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004713.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004716.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004718.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004720.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004722.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004725.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004726.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004729.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004730.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004732.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004736.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004739.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004740.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004742.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004745.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004749.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004750.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004752.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004754.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004756.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004760.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004763.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004764.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004766.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004767.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004768.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004771.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004774.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004776.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004777.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004778.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004781.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004783.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004784.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004786.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004794.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004795.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004797.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004802.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004804.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004807.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004808.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004812.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004814.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004819.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004821.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004822.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004825.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004827.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004832.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004833.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004834.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004837.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004838.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004841.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004844.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004845.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004847.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004849.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004850.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004851.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004852.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004854.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004856.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004858.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004862.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004866.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004868.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004869.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004872.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004873.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004874.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004875.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004876.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004881.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004885.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004887.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004892.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004893.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004894.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004896.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004898.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004899.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004900.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004903.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004904.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004907.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004908.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004910.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004911.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004914.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004917.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004920.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004921.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004923.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004926.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004930.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004931.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004933.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004934.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004935.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004937.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004938.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004940.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004942.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004945.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004946.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004948.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004950.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004955.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004961.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004964.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004966.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004967.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004968.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004969.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004970.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004973.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004974.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004975.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004976.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004977.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004979.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004981.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004982.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004983.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004984.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004985.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004986.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004990.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004991.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004995.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_004998.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005000.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005001.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005003.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005006.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005008.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005010.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005013.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005015.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005016.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005023.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005032.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005033.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005035.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005036.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005040.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005043.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005045.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005046.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005049.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005051.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005057.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005061.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005063.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005064.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005065.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005068.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005070.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005071.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005072.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005074.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005078.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005080.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005081.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005085.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005088.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005089.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005090.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005092.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005094.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005096.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005097.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005101.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005107.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005108.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005109.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005110.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005111.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005114.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005115.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005117.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005123.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005127.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005132.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005134.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005136.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005137.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005139.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005140.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005146.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005150.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005151.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005156.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005158.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005159.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005160.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005166.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005167.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005168.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005171.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005172.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005174.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005175.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005178.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005181.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005182.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005183.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005186.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005190.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005191.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005193.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005194.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005196.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005197.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005201.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005204.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005205.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005208.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005209.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005213.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005214.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005215.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005216.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005217.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005218.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005220.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005221.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005231.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005233.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005234.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005235.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005236.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005240.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005242.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005243.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005244.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005245.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005247.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005248.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005250.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005251.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005252.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005253.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005254.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005255.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005260.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005261.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005266.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005269.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005270.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005271.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005272.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005276.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005277.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005279.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005281.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005282.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005283.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005288.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005294.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005295.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005296.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005297.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005300.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005303.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005304.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005309.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005310.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005313.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005315.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005316.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005319.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005321.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005323.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005324.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005325.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005327.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005329.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005331.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005333.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005335.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005336.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005337.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005338.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005342.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005345.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005346.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005347.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005348.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005349.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005354.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005356.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005357.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005359.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005360.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005362.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005363.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005365.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005367.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005369.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005373.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005374.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005375.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005376.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005378.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005379.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005380.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005382.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005386.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005389.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005393.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005395.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005396.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005398.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005399.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005400.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005404.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005405.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005408.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005412.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005414.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005415.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005417.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005421.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005422.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005423.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005427.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005429.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005431.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005433.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005436.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005439.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005443.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005444.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005445.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005446.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005447.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005449.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005451.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005455.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005456.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005460.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005463.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005465.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005467.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005469.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005472.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005473.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005477.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005480.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005484.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005485.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005490.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005491.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005494.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005496.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005498.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005500.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005501.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005502.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005504.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005505.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005507.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005510.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005511.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005512.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005514.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005517.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005521.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005522.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005523.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005525.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005526.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005527.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005530.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005531.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005534.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005538.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005541.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005544.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005548.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005549.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005550.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005552.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005553.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005558.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005560.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005561.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005563.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005564.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005566.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005569.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005570.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005572.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005573.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005574.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005582.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005584.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005588.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005589.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005591.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005593.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005599.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005600.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005601.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005603.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005608.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005609.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005610.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005611.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005612.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005614.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005616.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005618.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005623.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005625.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005626.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005627.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005628.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005631.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005633.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005634.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005635.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005636.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005637.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005638.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005639.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005641.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005642.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005643.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005646.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005649.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005650.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005652.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005653.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005656.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005657.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005660.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005663.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005664.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005668.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005673.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005675.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005676.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005677.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005678.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005679.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005680.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005681.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005682.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005683.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005685.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005686.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005687.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005691.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005695.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005698.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005699.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005701.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005702.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005703.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005705.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005706.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005707.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005713.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005714.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005716.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005720.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005721.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005724.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005726.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005727.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005728.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005732.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005734.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005735.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005736.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005737.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005738.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005739.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005742.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005747.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005748.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005750.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005752.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005757.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005761.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005763.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005764.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005767.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005768.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005774.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005777.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005779.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005780.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005788.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005790.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005791.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005792.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005794.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005796.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005798.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005800.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005801.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005803.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005808.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005810.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005812.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005816.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005817.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005818.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005821.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005822.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005823.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005825.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005831.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005832.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005834.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005838.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005839.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005843.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005845.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005846.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005847.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005848.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005850.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005853.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005855.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005856.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005857.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005860.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005863.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005865.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005867.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005869.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005871.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005873.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005874.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005875.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005877.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005878.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005881.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005882.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005883.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005884.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005889.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005890.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005891.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005893.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005895.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005897.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005898.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005902.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005903.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005904.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005905.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005907.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005914.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005915.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005916.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005918.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005921.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005923.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005924.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005926.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005928.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005929.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005933.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005934.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005935.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005936.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005937.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005938.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005939.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005943.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005945.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005954.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005956.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005957.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005959.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005960.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005962.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005964.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005967.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005968.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005970.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005972.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005975.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005976.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005977.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005978.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005979.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005980.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005982.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005984.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005987.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005989.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005991.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_005997.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006000.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006004.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006007.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006008.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006010.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006014.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006017.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006020.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006021.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006024.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006027.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006028.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006031.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006032.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006034.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006036.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006038.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006039.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006041.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006045.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006046.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006047.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006049.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006050.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006058.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006059.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006062.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006063.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006064.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006065.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006067.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006068.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006070.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006071.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006072.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006074.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006076.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006078.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006081.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006085.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006087.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006088.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006090.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006092.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006094.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006096.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006099.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006100.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006102.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006104.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006108.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006109.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006111.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006112.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006113.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006117.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006119.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006120.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006121.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006124.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006128.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006129.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006130.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006135.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006136.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006140.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006143.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006144.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006145.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006148.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006151.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006152.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006154.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006158.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006159.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006163.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006164.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006166.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006169.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006170.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006175.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006178.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006179.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006181.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006182.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006186.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006188.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006190.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006192.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006194.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006195.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006200.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006203.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006205.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006207.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006210.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006211.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006213.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006215.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006216.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006218.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006219.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006220.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006221.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006222.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006224.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006225.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006227.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006232.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006233.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006234.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006235.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006239.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006240.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006242.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006244.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006249.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006250.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006253.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006254.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006256.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006258.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006262.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006265.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006267.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006269.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006271.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006272.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006273.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006275.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006276.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006280.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006281.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006282.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006285.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006288.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006289.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006290.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006294.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006295.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006298.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006300.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006303.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006307.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006310.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006311.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006315.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006316.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006317.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006320.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006323.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006325.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006327.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006329.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006330.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006331.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006335.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006336.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006337.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006339.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006341.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006345.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006347.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006349.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006351.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006353.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006355.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006356.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006359.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006362.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006364.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006365.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006366.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006368.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006369.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006370.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006373.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006376.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006377.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006382.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006384.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006386.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006387.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006389.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006390.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006392.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006394.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006397.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006400.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006401.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006403.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006404.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006407.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006408.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006409.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006410.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006416.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006417.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006419.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006421.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006424.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006425.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006427.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006429.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006430.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006432.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006433.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006434.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006436.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006438.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006441.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006447.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006448.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006449.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006452.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006458.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006461.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006462.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006463.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006467.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006470.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006474.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006475.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006477.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006480.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006481.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006482.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006483.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006487.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006488.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006489.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006490.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006491.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006496.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006497.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006500.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006502.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006503.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006506.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006509.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006511.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006512.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006517.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006520.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006522.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006523.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006524.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006526.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006528.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006530.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006534.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006538.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006540.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006543.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006546.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006547.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006548.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006549.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006553.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006554.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006558.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006561.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006562.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006564.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006566.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006568.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006570.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006576.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006578.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006579.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006585.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006586.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006587.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006588.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006591.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006598.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006599.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006600.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006602.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006604.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006605.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006606.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006609.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006610.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006611.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006613.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006614.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006616.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006617.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006619.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006621.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006623.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006624.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006625.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006626.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006631.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006634.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006635.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006637.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006638.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006641.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006642.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006645.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006646.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006649.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006650.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006654.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006655.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006656.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006657.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006660.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006662.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006663.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006665.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006667.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006668.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006671.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006677.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006682.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006684.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006686.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006690.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006691.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006692.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006694.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006696.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006700.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006701.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006703.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006705.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006708.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006710.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006712.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006714.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006715.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006716.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006717.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006718.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006720.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006722.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006724.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006728.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006730.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006731.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006732.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006733.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006737.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006743.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006746.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006747.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006748.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006750.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006751.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006752.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006753.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006761.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006762.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006764.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006765.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006767.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006773.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006774.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006776.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006777.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006778.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006779.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006781.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006784.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006785.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006792.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006793.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006796.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006797.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006798.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006800.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006802.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006807.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006808.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006810.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006811.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006813.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006815.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006816.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006817.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006818.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006819.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006820.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006824.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006825.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006827.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006828.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006831.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006832.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006833.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006834.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006835.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006837.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006839.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006841.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006843.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006844.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006847.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006849.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006855.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006857.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006863.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006864.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006865.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006868.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006870.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006872.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006873.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006874.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006877.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006879.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006880.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006881.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006882.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006885.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006887.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006889.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006890.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006892.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006896.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006898.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006900.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006902.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006903.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006904.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006907.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006908.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006909.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006910.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006912.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006919.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006920.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006921.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006923.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006924.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006925.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006926.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006933.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006936.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006939.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006941.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006944.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006946.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006948.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006949.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006950.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006951.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006952.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006953.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006954.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006956.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006959.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006960.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006961.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006962.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006965.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006967.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006968.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006969.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006973.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006979.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006980.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006981.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006986.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006987.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006989.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006991.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006992.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006997.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006998.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_006999.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007003.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007004.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007006.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007009.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007010.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007011.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007012.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007014.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007019.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007021.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007022.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007025.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007026.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007028.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007030.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007031.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007032.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007034.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007038.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007039.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007043.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007045.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007048.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007050.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007056.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007057.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007058.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007059.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007060.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007061.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007064.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007067.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007069.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007070.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007075.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007076.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007081.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007085.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007086.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007090.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007091.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007095.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007096.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007097.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007101.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007103.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007106.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007108.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007112.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007114.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007115.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007118.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007119.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007120.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007123.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007124.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007129.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007130.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007131.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007134.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007138.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007142.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007143.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007145.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007146.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007151.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007156.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007161.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007163.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007164.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007165.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007166.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007167.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007168.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007169.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007171.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007176.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007179.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007181.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007182.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007184.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007187.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007188.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007189.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007190.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007194.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007195.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007196.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007197.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007201.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007205.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007207.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007208.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007211.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007214.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007216.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007217.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007218.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007219.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007221.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007222.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007223.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007225.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007226.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007227.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007231.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007236.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007237.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007239.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007241.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007242.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007245.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007246.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007247.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007250.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007252.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007254.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007256.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007260.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007261.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007264.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007265.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007266.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007269.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007273.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007274.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007277.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007279.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007280.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007281.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007282.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007285.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007286.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007287.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007289.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007291.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007293.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007295.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007298.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007305.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007307.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007311.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007312.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007313.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007314.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007317.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007319.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007320.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007321.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007323.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007324.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007325.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007327.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007332.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007334.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007335.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007336.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007339.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007343.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007344.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007346.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007348.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007352.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007353.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007356.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007357.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007358.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007363.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007364.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007374.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007375.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007378.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007382.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007383.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007384.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007388.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007389.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007390.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007392.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007393.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007394.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007397.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007398.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007402.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007403.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007404.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007409.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007410.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007415.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007417.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007421.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007423.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007424.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007425.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007428.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007430.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007431.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007432.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007433.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007434.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007435.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007438.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007441.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007442.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007443.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007444.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007446.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007448.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007452.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007455.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007456.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007458.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007459.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007461.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007465.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007466.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007469.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007470.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007471.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007472.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007473.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007476.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007477.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007478.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007480.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007485.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007486.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007488.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007491.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007494.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007496.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007497.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007498.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007500.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007501.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007504.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007507.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007509.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007510.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007511.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007513.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007514.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007515.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007521.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007524.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007525.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007527.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007528.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007529.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007531.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007533.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007534.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007537.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007538.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007544.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007546.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007548.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007556.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007558.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007559.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007561.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007565.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007573.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007574.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007576.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007579.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007581.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007583.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007584.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007585.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007586.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007587.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007588.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007589.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007591.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007593.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007594.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007595.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007596.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007597.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007599.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007604.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007608.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007610.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007611.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007612.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007613.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007617.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007618.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007621.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007623.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007625.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007630.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007632.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007635.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007640.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007641.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007643.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007646.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007648.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007649.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007653.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007656.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007660.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007661.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007662.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007664.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007665.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007666.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007668.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007669.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007673.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007675.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007676.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007677.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007682.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007683.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007685.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007688.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007690.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007691.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007692.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007693.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007694.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007696.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007697.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007698.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007701.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007702.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007704.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007706.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007709.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007710.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007714.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007716.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007717.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007724.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007726.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007729.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007730.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007733.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007735.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007736.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007737.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007738.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007739.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007741.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007742.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007745.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007746.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007748.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007749.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007750.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007752.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007755.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007757.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007759.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007760.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007761.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007764.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007766.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007768.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007777.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007779.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007780.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007781.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007786.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007787.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007788.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007789.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007791.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007793.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007794.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007797.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007798.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007804.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007806.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007811.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007812.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007814.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007816.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007817.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007819.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007823.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007825.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007827.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007828.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007829.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007831.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007833.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007835.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007836.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007837.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007839.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007840.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007841.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007842.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007843.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007848.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007850.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007852.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007853.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007854.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007855.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007858.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007861.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007864.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007869.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007870.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007871.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007872.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007873.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007875.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007877.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007879.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007882.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007883.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007884.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007887.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007888.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007890.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007891.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007893.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007895.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007897.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007902.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007904.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007907.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007909.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007912.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007913.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007914.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007915.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007916.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007917.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007918.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007922.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007923.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007928.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007931.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007932.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007933.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007935.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007936.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007937.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007938.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007940.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007941.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007942.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007945.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007947.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007948.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007949.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007950.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007953.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007954.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007955.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007962.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007964.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007966.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007969.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007970.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007973.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007975.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007977.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007981.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007985.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007986.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007987.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007988.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007989.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007990.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007993.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007994.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007997.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007998.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_007999.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008001.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008004.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008007.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008011.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008012.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008018.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008020.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008021.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008022.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008024.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008025.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008028.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008029.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008031.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008034.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008040.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008043.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008044.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008048.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008050.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008053.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008057.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008058.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008064.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008069.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008070.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008072.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008074.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008075.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008080.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008083.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008086.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008091.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008092.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008093.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008095.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008096.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008097.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008103.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008106.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008109.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008112.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008113.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008115.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008116.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008120.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008121.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008122.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008123.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008125.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008127.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008130.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008131.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008132.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008134.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008141.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008145.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008146.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008148.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008150.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008152.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008154.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008155.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008162.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008166.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008169.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008170.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008175.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008176.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008177.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008179.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008180.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008184.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008190.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008191.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008192.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008193.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008194.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008197.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008199.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008200.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008203.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008206.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008208.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008210.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008211.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008212.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008215.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008217.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008218.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008220.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008221.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008223.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008224.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008227.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008231.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008232.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008233.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008234.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008235.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008237.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008241.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008242.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008246.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008247.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008252.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008254.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008262.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008263.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008266.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008268.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008269.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008271.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008272.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008274.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008275.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008276.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008278.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008279.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008281.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008284.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008287.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008288.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008292.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008294.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008296.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008297.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008300.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008301.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008302.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008307.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008309.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008310.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008313.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008314.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008315.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008318.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008319.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008320.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008321.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008322.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008323.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008324.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008325.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008330.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008331.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008335.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008336.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008337.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008338.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008341.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008342.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008343.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008344.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008345.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008346.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008347.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008354.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008356.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008357.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008359.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008362.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008363.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008364.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008365.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008366.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008368.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008370.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008373.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008376.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008377.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008379.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008380.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008382.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008384.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008387.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008388.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008391.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008392.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008393.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008395.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008402.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008403.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008404.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008410.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008411.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008416.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008421.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008423.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008424.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008428.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008429.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008431.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008432.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008433.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008434.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008435.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008437.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008439.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008440.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008443.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008444.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008446.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008447.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008450.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008453.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008455.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008461.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008462.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008464.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008466.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008467.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008469.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008470.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008471.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008474.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008476.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008479.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008480.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008482.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008487.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008488.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008490.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008496.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008497.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008500.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008501.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008506.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008507.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008508.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008511.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008512.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008517.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008521.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008522.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008523.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008524.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008525.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008526.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008527.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008528.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008530.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008531.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008533.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008537.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008538.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008541.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008544.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008545.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008546.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008547.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008549.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008550.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008552.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008554.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008560.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008564.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008570.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008572.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008574.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008578.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008579.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008583.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008585.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008588.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008589.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008590.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008591.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008593.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008595.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008598.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008600.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008601.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008606.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008607.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008608.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008611.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008613.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008615.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008616.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008617.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008618.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008619.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008621.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008622.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008623.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008624.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008627.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008628.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008632.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008635.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008636.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008637.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008641.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008642.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008649.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008652.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008654.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008658.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008659.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008662.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008665.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008666.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008668.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008671.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008673.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008674.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008675.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008676.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008679.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008681.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008682.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008683.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008684.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008685.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008689.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008690.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008691.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008694.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008695.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008696.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008697.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008700.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008701.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008705.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008706.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008707.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008708.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008711.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008713.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008714.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008717.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008718.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008724.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008725.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008726.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008732.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008735.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008739.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008744.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008745.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008746.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008748.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008749.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008751.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008753.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008755.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008757.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008765.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008767.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008772.jpg -./VOC/train/VOCdevkit/VOC2012/images/2008_008773.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000001.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000006.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000009.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000010.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000011.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000012.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000013.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000014.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000015.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000016.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000017.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000021.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000022.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000026.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000027.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000028.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000029.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000030.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000032.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000035.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000039.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000040.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000041.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000045.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000051.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000056.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000058.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000059.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000060.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000063.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000067.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000068.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000072.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000074.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000078.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000080.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000085.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000087.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000088.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000089.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000090.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000091.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000093.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000096.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000097.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000100.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000102.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000103.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000104.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000109.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000119.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000120.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000121.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000122.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000124.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000128.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000130.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000131.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000132.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000135.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000136.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000137.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000140.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000141.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000142.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000145.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000146.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000149.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000150.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000151.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000156.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000157.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000158.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000159.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000160.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000161.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000164.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000165.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000168.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000169.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000171.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000176.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000177.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000181.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000182.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000183.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000184.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000188.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000189.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000192.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000195.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000197.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000198.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000199.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000201.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000203.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000205.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000206.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000209.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000212.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000214.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000216.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000217.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000218.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000219.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000223.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000225.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000227.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000232.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000233.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000237.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000239.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000242.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000244.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000247.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000248.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000249.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000250.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000251.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000253.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000254.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000260.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000268.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000276.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000277.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000280.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000281.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000282.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000283.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000284.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000285.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000286.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000287.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000288.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000289.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000290.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000291.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000293.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000297.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000298.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000300.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000303.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000304.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000305.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000308.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000309.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000312.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000316.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000317.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000318.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000320.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000321.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000322.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000327.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000328.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000330.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000335.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000336.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000337.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000339.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000340.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000341.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000342.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000343.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000344.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000347.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000351.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000354.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000356.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000366.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000367.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000370.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000375.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000377.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000378.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000379.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000385.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000387.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000389.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000390.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000391.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000393.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000397.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000398.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000399.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000400.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000402.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000405.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000408.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000409.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000410.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000411.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000412.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000414.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000416.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000417.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000418.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000419.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000420.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000421.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000422.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000426.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000430.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000435.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000438.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000439.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000440.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000443.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000444.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000445.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000446.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000449.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000452.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000453.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000454.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000455.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000456.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000457.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000461.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000463.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000464.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000466.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000469.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000471.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000472.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000474.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000476.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000477.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000483.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000486.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000487.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000488.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000491.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000493.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000494.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000496.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000499.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000500.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000501.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000502.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000503.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000504.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000505.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000511.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000512.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000513.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000515.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000516.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000522.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000523.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000525.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000526.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000527.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000529.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000532.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000535.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000539.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000542.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000544.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000545.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000546.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000547.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000549.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000550.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000552.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000553.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000557.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000558.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000559.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000560.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000562.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000563.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000565.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000566.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000568.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000573.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000574.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000575.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000576.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000577.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000579.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000585.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000586.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000590.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000591.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000592.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000593.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000595.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000597.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000599.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000600.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000602.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000603.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000604.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000606.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000608.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000611.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000614.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000615.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000617.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000619.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000624.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000625.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000626.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000628.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000631.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000632.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000634.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000635.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000636.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000637.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000638.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000641.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000642.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000647.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000648.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000651.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000653.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000655.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000658.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000661.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000662.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000663.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000664.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000670.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000672.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000674.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000675.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000676.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000677.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000679.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000681.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000683.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000684.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000686.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000689.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000690.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000691.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000692.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000694.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000695.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000696.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000702.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000704.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000705.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000708.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000709.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000712.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000716.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000718.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000720.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000722.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000723.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000724.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000725.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000726.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000727.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000730.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000731.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000732.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000734.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000737.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000741.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000742.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000744.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000745.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000746.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000748.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000750.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000752.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000755.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000756.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000757.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000759.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000760.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000762.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000763.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000768.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000771.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000774.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000777.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000778.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000779.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000782.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000783.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000789.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000790.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000791.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000793.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000794.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000796.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000797.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000801.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000804.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000811.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000812.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000815.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000816.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000817.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000820.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000821.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000823.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000824.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000825.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000828.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000829.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000830.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000831.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000833.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000834.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000837.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000839.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000840.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000843.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000845.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000846.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000848.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000849.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000851.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000852.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000854.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000856.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000858.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000862.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000865.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000867.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000869.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000871.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000874.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000879.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000882.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000886.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000887.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000889.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000890.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000892.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000894.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000895.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000896.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000897.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000898.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000899.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000901.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000902.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000904.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000906.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000909.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000910.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000915.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000919.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000920.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000923.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000924.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000925.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000926.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000927.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000928.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000930.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000931.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000932.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000934.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000935.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000937.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000938.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000939.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000945.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000948.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000953.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000954.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000955.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000958.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000960.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000961.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000962.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000964.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000966.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000967.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000969.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000970.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000971.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000973.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000974.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000975.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000979.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000980.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000981.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000985.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000987.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000989.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000990.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000991.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000992.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000995.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000996.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_000998.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001000.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001006.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001007.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001008.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001009.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001011.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001012.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001013.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001016.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001019.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001021.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001024.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001026.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001027.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001028.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001030.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001036.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001038.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001040.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001044.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001056.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001057.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001059.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001061.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001068.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001069.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001070.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001074.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001075.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001078.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001079.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001081.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001083.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001085.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001090.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001091.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001094.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001095.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001096.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001097.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001100.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001102.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001103.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001104.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001106.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001107.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001108.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001110.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001111.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001113.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001117.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001118.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001120.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001121.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001124.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001126.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001128.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001129.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001134.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001135.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001137.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001138.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001139.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001140.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001145.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001146.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001148.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001151.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001152.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001153.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001154.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001155.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001159.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001160.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001163.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001164.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001166.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001172.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001177.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001180.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001181.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001184.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001188.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001190.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001192.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001194.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001195.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001196.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001197.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001198.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001199.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001201.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001203.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001205.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001206.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001207.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001208.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001212.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001215.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001216.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001217.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001221.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001224.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001225.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001227.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001230.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001236.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001237.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001238.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001240.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001241.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001242.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001243.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001245.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001249.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001251.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001252.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001253.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001254.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001255.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001259.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001260.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001263.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001264.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001266.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001268.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001270.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001271.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001278.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001279.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001282.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001283.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001285.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001286.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001288.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001289.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001291.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001299.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001300.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001301.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001303.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001305.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001306.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001308.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001309.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001311.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001312.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001313.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001314.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001316.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001319.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001320.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001321.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001322.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001323.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001326.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001327.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001328.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001329.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001332.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001333.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001339.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001343.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001344.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001345.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001348.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001349.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001354.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001355.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001357.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001359.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001360.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001363.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001364.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001366.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001367.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001368.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001369.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001370.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001371.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001372.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001374.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001375.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001376.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001384.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001385.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001387.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001388.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001389.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001390.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001391.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001393.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001395.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001397.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001398.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001403.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001407.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001409.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001411.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001412.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001413.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001414.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001417.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001419.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001422.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001424.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001426.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001427.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001431.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001433.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001434.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001435.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001437.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001440.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001443.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001444.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001446.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001447.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001448.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001449.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001450.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001452.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001453.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001456.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001457.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001462.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001463.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001466.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001468.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001470.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001472.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001474.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001475.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001476.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001479.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001480.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001481.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001484.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001490.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001493.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001494.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001498.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001500.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001501.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001502.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001505.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001507.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001508.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001509.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001514.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001516.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001517.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001518.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001521.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001522.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001526.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001534.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001535.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001537.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001538.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001539.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001541.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001542.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001544.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001546.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001549.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001550.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001553.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001554.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001555.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001558.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001562.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001565.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001566.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001568.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001570.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001575.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001577.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001581.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001585.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001587.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001589.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001590.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001591.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001593.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001594.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001595.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001598.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001602.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001605.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001606.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001607.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001608.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001611.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001612.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001614.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001615.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001617.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001618.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001621.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001623.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001625.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001627.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001631.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001633.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001635.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001636.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001638.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001640.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001642.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001643.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001644.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001645.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001646.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001648.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001651.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001653.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001657.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001660.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001663.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001664.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001667.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001670.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001671.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001673.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001674.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001675.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001676.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001677.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001678.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001682.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001683.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001684.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001687.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001689.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001690.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001693.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001695.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001696.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001699.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001704.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001705.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001706.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001707.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001709.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001713.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001715.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001718.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001720.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001723.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001724.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001731.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001732.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001733.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001734.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001735.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001738.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001740.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001741.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001743.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001744.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001746.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001747.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001749.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001750.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001751.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001752.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001754.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001755.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001759.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001764.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001765.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001767.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001768.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001774.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001775.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001778.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001779.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001780.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001781.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001782.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001783.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001784.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001792.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001794.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001798.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001799.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001800.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001801.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001802.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001804.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001806.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001807.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001809.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001810.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001811.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001812.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001816.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001817.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001818.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001820.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001822.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001823.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001825.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001826.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001827.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001828.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001830.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001831.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001833.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001835.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001837.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001839.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001840.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001846.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001847.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001848.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001850.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001851.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001852.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001853.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001854.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001856.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001858.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001861.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001864.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001865.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001867.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001868.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001869.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001871.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001873.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001874.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001875.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001881.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001884.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001885.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001888.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001890.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001894.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001897.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001898.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001902.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001904.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001905.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001906.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001907.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001908.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001909.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001910.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001911.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001915.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001916.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001917.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001922.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001926.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001927.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001929.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001931.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001933.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001934.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001937.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001940.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001941.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001945.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001948.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001949.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001952.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001959.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001960.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001961.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001962.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001964.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001965.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001967.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001971.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001972.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001973.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001975.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001976.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001977.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001979.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001980.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001984.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001988.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001990.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001991.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001994.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001997.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_001999.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002000.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002001.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002003.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002008.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002009.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002010.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002011.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002012.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002018.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002019.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002024.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002031.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002035.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002039.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002040.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002044.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002046.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002047.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002053.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002056.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002057.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002058.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002060.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002061.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002064.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002072.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002077.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002078.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002083.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002086.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002087.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002088.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002089.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002093.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002094.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002096.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002097.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002099.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002103.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002104.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002107.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002110.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002111.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002112.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002116.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002117.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002118.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002119.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002120.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002122.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002123.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002126.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002127.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002128.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002129.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002131.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002136.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002137.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002139.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002141.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002144.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002145.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002146.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002149.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002150.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002151.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002152.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002153.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002155.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002164.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002165.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002169.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002171.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002173.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002175.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002176.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002177.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002180.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002182.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002191.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002192.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002193.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002194.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002197.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002198.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002199.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002202.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002203.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002204.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002205.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002208.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002211.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002212.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002214.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002215.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002216.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002219.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002221.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002222.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002225.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002226.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002228.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002230.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002231.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002232.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002235.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002236.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002238.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002239.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002240.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002242.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002245.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002252.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002253.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002254.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002256.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002258.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002259.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002262.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002264.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002265.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002267.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002268.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002271.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002272.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002273.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002274.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002281.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002282.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002285.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002286.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002289.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002291.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002295.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002297.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002298.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002299.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002301.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002302.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002305.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002306.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002308.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002311.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002312.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002314.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002317.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002319.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002320.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002324.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002325.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002326.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002328.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002331.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002333.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002335.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002338.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002339.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002343.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002346.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002348.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002349.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002352.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002358.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002360.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002362.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002363.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002366.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002370.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002371.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002372.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002373.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002374.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002376.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002377.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002380.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002381.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002382.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002386.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002387.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002388.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002390.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002391.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002393.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002397.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002398.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002399.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002400.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002401.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002404.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002407.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002408.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002409.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002414.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002415.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002416.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002419.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002420.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002422.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002423.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002424.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002425.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002429.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002431.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002432.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002433.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002434.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002436.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002438.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002439.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002441.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002443.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002444.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002445.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002448.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002449.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002452.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002453.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002456.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002457.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002460.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002464.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002465.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002470.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002471.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002472.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002474.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002475.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002476.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002477.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002487.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002488.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002499.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002500.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002504.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002505.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002506.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002510.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002512.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002514.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002515.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002517.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002518.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002521.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002522.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002523.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002524.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002525.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002527.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002530.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002531.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002532.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002535.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002537.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002539.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002542.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002543.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002546.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002549.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002552.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002553.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002556.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002557.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002558.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002559.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002561.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002562.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002563.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002565.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002566.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002568.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002569.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002570.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002571.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002573.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002577.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002579.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002580.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002584.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002585.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002586.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002588.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002591.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002592.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002594.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002595.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002597.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002599.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002604.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002605.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002607.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002608.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002609.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002611.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002612.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002613.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002614.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002615.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002616.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002618.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002620.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002621.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002624.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002625.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002626.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002628.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002632.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002634.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002635.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002638.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002645.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002648.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002649.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002651.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002652.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002659.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002662.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002663.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002665.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002667.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002668.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002669.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002670.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002671.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002672.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002673.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002674.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002675.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002676.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002680.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002681.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002683.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002684.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002685.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002687.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002688.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002689.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002695.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002697.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002698.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002703.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002704.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002705.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002708.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002710.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002711.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002712.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002713.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002714.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002715.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002717.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002725.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002727.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002728.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002732.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002733.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002734.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002739.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002741.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002743.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002744.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002746.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002749.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002750.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002752.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002753.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002754.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002755.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002759.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002762.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002763.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002764.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002765.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002771.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002772.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002774.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002777.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002778.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002779.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002780.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002784.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002785.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002789.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002790.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002791.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002792.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002798.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002799.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002800.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002803.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002806.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002807.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002808.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002809.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002813.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002814.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002816.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002817.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002820.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002824.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002827.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002830.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002831.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002833.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002835.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002836.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002837.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002838.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002841.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002842.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002843.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002844.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002845.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002847.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002849.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002850.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002851.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002853.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002855.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002856.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002862.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002865.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002867.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002869.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002872.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002876.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002877.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002879.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002882.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002883.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002885.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002887.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002888.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002890.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002893.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002894.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002897.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002898.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002901.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002902.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002908.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002910.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002912.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002914.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002917.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002918.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002920.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002921.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002925.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002928.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002932.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002933.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002935.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002936.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002937.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002938.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002940.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002941.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002946.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002947.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002952.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002954.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002955.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002957.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002958.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002960.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002961.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002962.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002967.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002970.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002971.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002972.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002975.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002976.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002977.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002978.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002980.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002982.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002983.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002984.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002985.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002986.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002988.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002990.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002993.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002995.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002998.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_002999.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003000.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003003.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003005.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003006.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003007.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003010.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003012.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003013.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003018.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003019.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003020.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003022.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003023.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003031.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003032.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003033.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003034.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003035.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003039.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003043.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003044.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003053.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003056.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003058.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003059.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003063.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003064.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003065.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003067.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003068.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003070.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003071.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003074.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003075.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003076.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003077.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003078.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003080.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003083.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003087.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003088.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003089.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003090.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003091.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003093.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003095.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003097.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003107.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003108.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003109.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003110.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003114.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003115.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003116.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003118.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003122.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003123.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003125.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003126.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003127.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003128.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003129.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003130.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003132.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003136.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003138.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003140.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003142.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003143.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003144.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003146.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003150.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003151.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003153.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003154.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003155.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003156.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003157.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003164.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003165.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003166.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003168.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003172.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003173.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003175.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003181.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003183.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003187.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003189.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003191.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003193.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003194.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003196.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003198.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003199.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003200.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003201.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003204.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003208.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003209.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003212.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003214.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003217.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003218.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003219.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003222.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003224.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003225.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003230.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003232.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003233.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003234.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003238.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003241.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003247.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003249.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003251.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003253.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003254.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003255.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003259.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003261.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003262.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003265.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003266.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003267.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003269.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003271.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003272.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003273.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003276.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003277.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003278.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003282.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003284.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003285.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003288.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003290.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003294.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003297.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003299.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003300.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003301.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003304.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003305.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003309.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003310.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003311.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003312.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003315.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003316.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003317.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003320.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003323.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003326.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003327.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003333.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003338.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003340.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003343.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003345.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003346.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003347.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003348.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003349.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003351.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003352.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003353.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003360.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003363.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003365.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003367.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003369.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003372.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003373.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003375.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003376.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003377.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003378.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003379.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003380.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003381.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003383.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003384.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003385.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003386.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003387.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003394.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003395.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003396.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003399.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003400.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003402.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003407.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003409.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003411.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003415.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003416.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003417.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003419.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003422.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003425.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003430.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003431.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003433.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003436.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003440.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003441.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003443.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003445.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003446.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003447.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003450.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003453.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003454.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003455.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003456.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003457.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003458.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003459.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003460.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003461.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003462.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003466.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003467.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003468.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003469.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003476.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003481.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003482.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003487.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003488.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003489.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003490.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003491.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003492.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003494.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003497.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003498.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003499.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003500.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003504.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003507.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003508.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003509.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003510.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003511.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003513.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003517.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003520.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003521.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003522.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003523.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003524.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003528.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003530.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003531.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003533.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003534.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003537.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003538.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003539.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003540.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003541.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003542.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003543.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003544.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003545.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003546.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003549.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003551.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003554.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003555.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003560.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003562.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003563.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003564.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003565.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003566.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003569.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003571.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003572.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003576.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003577.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003581.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003583.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003588.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003589.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003592.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003594.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003598.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003600.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003601.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003605.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003606.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003607.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003608.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003609.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003612.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003613.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003614.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003618.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003624.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003626.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003627.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003633.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003634.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003635.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003636.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003637.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003638.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003639.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003640.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003642.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003644.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003646.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003647.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003650.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003652.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003654.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003655.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003656.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003657.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003660.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003663.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003664.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003666.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003667.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003668.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003669.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003671.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003677.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003679.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003683.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003685.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003686.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003688.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003689.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003690.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003694.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003695.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003696.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003697.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003698.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003702.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003703.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003704.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003705.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003707.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003708.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003709.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003710.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003711.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003713.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003714.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003717.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003718.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003720.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003722.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003725.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003726.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003732.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003734.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003735.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003736.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003738.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003739.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003743.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003747.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003751.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003752.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003753.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003756.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003757.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003759.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003760.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003765.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003768.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003771.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003773.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003775.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003776.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003781.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003783.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003784.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003785.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003786.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003790.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003793.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003795.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003799.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003800.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003801.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003802.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003804.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003806.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003808.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003810.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003813.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003814.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003815.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003816.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003818.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003819.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003820.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003821.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003822.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003825.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003827.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003829.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003832.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003835.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003836.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003837.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003838.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003840.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003843.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003846.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003847.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003848.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003849.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003852.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003855.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003857.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003858.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003860.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003863.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003865.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003867.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003870.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003873.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003874.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003879.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003883.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003884.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003888.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003892.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003895.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003896.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003897.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003899.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003900.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003901.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003902.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003903.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003904.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003905.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003908.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003911.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003912.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003913.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003914.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003916.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003920.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003921.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003922.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003928.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003929.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003933.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003936.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003938.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003942.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003944.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003947.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003950.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003951.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003955.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003956.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003958.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003961.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003962.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003965.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003966.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003969.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003971.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003973.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003974.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003975.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003976.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003977.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003982.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003985.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003986.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003991.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003992.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003993.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003994.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_003995.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004001.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004004.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004005.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004007.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004012.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004016.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004018.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004019.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004020.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004021.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004022.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004023.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004025.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004031.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004032.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004033.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004034.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004038.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004040.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004043.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004044.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004050.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004051.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004058.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004062.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004069.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004070.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004072.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004074.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004075.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004076.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004078.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004083.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004085.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004088.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004091.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004092.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004093.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004094.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004095.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004096.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004099.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004100.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004102.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004103.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004108.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004109.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004111.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004112.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004113.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004117.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004118.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004121.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004122.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004124.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004125.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004126.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004128.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004129.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004131.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004134.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004138.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004139.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004140.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004141.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004142.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004148.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004150.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004152.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004153.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004154.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004157.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004159.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004161.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004162.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004163.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004164.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004165.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004166.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004168.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004169.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004170.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004171.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004173.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004174.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004175.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004176.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004177.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004178.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004179.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004180.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004181.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004183.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004186.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004187.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004188.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004191.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004193.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004197.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004199.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004200.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004201.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004202.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004203.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004205.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004207.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004210.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004211.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004212.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004213.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004217.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004218.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004221.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004222.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004224.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004225.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004227.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004228.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004231.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004232.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004233.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004234.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004241.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004242.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004243.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004244.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004247.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004248.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004249.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004255.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004258.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004261.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004262.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004263.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004264.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004271.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004272.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004273.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004274.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004276.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004277.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004278.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004279.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004283.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004284.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004285.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004289.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004290.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004291.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004295.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004298.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004300.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004301.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004303.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004307.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004308.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004309.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004312.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004315.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004316.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004317.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004319.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004322.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004323.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004324.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004327.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004328.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004329.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004332.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004334.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004336.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004338.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004340.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004341.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004346.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004347.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004351.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004357.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004358.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004359.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004364.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004366.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004368.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004369.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004370.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004371.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004374.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004375.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004377.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004382.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004383.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004390.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004392.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004394.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004397.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004399.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004402.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004403.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004404.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004409.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004410.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004411.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004414.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004417.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004419.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004424.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004425.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004426.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004429.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004432.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004434.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004435.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004436.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004438.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004440.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004442.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004444.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004445.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004446.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004448.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004449.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004451.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004452.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004453.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004454.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004455.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004456.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004457.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004464.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004465.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004468.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004471.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004475.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004477.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004478.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004479.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004483.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004486.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004492.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004494.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004496.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004497.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004499.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004501.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004502.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004503.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004504.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004507.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004508.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004509.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004511.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004513.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004514.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004518.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004524.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004525.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004527.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004529.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004530.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004532.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004535.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004537.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004539.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004540.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004542.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004543.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004545.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004547.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004548.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004551.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004552.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004554.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004556.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004557.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004559.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004560.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004561.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004562.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004565.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004568.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004570.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004571.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004572.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004579.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004580.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004581.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004582.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004587.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004588.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004590.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004592.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004593.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004594.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004598.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004601.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004606.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004607.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004614.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004616.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004619.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004620.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004623.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004624.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004625.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004626.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004628.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004630.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004631.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004634.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004635.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004639.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004642.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004643.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004645.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004647.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004648.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004651.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004652.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004653.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004655.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004656.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004661.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004662.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004664.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004667.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004669.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004670.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004671.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004674.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004677.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004679.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004681.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004683.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004684.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004686.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004687.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004688.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004694.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004697.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004701.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004705.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004706.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004708.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004709.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004710.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004713.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004716.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004718.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004720.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004721.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004723.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004728.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004730.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004731.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004732.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004734.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004737.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004738.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004744.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004745.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004746.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004748.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004749.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004754.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004756.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004759.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004760.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004761.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004763.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004764.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004765.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004766.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004768.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004769.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004771.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004772.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004779.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004780.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004781.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004782.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004784.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004786.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004787.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004789.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004790.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004794.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004796.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004797.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004798.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004799.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004801.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004804.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004806.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004812.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004813.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004815.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004817.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004820.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004822.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004823.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004824.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004828.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004829.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004830.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004831.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004834.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004836.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004839.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004841.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004845.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004846.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004847.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004848.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004849.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004855.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004856.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004857.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004858.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004859.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004865.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004867.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004868.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004869.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004871.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004872.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004874.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004876.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004877.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004880.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004882.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004885.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004886.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004887.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004888.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004889.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004890.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004895.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004897.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004898.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004899.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004901.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004902.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004903.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004904.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004905.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004907.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004913.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004914.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004917.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004919.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004921.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004922.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004926.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004929.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004930.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004933.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004934.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004939.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004940.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004942.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004943.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004944.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004945.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004946.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004947.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004953.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004956.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004958.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004959.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004961.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004962.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004965.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004969.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004971.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004972.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004974.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004975.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004977.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004979.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004980.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004982.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004983.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004984.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004986.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004987.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004988.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004990.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004993.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004994.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004996.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_004999.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005000.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005001.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005005.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005006.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005008.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005015.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005016.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005019.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005024.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005025.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005030.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005031.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005033.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005035.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005036.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005038.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005040.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005044.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005045.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005051.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005056.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005057.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005060.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005061.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005062.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005064.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005068.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005069.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005070.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005075.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005076.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005078.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005079.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005080.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005081.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005083.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005085.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005086.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005087.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005089.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005094.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005095.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005102.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005103.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005104.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005107.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005111.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005114.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005118.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005119.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005120.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005126.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005127.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005128.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005129.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005130.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005131.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005137.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005140.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005141.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005142.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005144.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005145.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005148.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005149.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005150.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005152.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005153.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005154.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005155.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005156.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005158.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005160.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005161.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005162.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005163.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005165.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005168.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005170.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005171.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005172.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005177.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005178.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005181.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005183.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005189.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005190.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005191.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005193.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005194.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005198.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005201.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005202.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005203.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005204.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005205.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005210.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005211.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005215.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005216.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005217.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005218.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005219.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005220.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005221.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005222.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005225.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005231.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005232.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005234.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005236.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005239.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005240.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005242.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005246.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005247.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005251.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005256.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005260.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005262.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005263.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005265.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005267.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005268.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005269.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005272.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005278.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005279.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005282.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005286.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005287.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005288.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005292.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005293.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005294.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005297.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005299.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005300.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005302.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005303.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005307.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005308.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005309.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005310.jpg -./VOC/train/VOCdevkit/VOC2012/images/2009_005311.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000001.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000003.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000009.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000014.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000015.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000018.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000020.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000023.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000024.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000026.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000027.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000031.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000033.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000035.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000036.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000038.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000043.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000045.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000048.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000050.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000053.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000056.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000061.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000063.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000065.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000067.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000069.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000071.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000072.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000074.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000075.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000076.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000079.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000080.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000083.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000085.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000087.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000088.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000089.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000090.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000091.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000095.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000097.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000099.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000103.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000109.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000110.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000111.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000113.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000114.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000117.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000118.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000120.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000124.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000127.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000131.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000132.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000136.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000137.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000138.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000139.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000140.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000141.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000145.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000148.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000151.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000152.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000157.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000159.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000160.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000162.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000163.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000165.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000169.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000170.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000172.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000174.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000175.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000177.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000178.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000182.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000183.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000184.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000187.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000189.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000190.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000193.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000194.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000195.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000196.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000197.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000198.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000199.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000202.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000203.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000204.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000209.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000211.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000213.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000216.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000218.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000222.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000224.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000227.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000233.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000234.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000238.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000241.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000244.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000245.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000246.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000247.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000248.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000249.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000250.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000254.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000255.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000256.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000260.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000261.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000262.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000263.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000264.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000266.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000269.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000270.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000272.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000273.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000276.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000279.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000283.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000284.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000285.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000286.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000291.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000293.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000295.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000296.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000299.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000302.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000303.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000307.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000308.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000309.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000310.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000312.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000313.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000317.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000318.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000320.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000321.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000323.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000324.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000325.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000327.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000329.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000330.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000335.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000336.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000337.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000342.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000344.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000347.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000349.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000351.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000352.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000356.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000358.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000362.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000370.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000371.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000372.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000374.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000375.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000376.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000377.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000379.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000381.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000382.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000384.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000386.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000388.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000389.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000390.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000392.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000393.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000394.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000395.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000399.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000401.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000404.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000409.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000413.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000415.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000418.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000419.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000420.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000422.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000426.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000427.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000431.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000432.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000433.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000435.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000436.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000437.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000439.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000442.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000444.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000446.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000447.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000448.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000449.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000453.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000456.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000458.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000459.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000461.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000462.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000463.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000465.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000466.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000468.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000469.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000470.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000473.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000474.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000475.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000477.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000480.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000483.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000484.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000485.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000488.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000490.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000492.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000493.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000495.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000497.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000498.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000500.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000502.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000503.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000506.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000508.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000510.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000511.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000513.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000515.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000522.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000524.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000526.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000527.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000530.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000534.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000537.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000538.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000541.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000545.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000547.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000548.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000549.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000552.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000553.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000556.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000557.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000559.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000561.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000562.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000564.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000568.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000571.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000572.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000573.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000574.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000576.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000577.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000578.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000581.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000582.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000583.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000586.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000588.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000590.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000591.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000601.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000602.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000603.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000604.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000608.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000613.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000616.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000617.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000621.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000622.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000624.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000626.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000628.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000630.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000632.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000633.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000635.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000639.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000641.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000644.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000645.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000646.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000647.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000648.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000651.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000655.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000658.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000661.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000664.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000665.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000666.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000667.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000669.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000671.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000674.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000675.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000678.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000679.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000681.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000682.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000683.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000685.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000687.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000688.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000689.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000690.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000691.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000692.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000694.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000695.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000697.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000702.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000705.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000707.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000710.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000711.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000712.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000715.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000716.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000717.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000721.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000722.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000723.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000724.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000726.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000727.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000729.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000731.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000735.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000737.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000738.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000739.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000740.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000743.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000744.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000746.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000747.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000748.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000749.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000750.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000754.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000759.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000760.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000761.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000764.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000765.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000769.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000771.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000772.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000773.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000778.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000782.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000785.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000786.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000787.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000788.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000791.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000792.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000797.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000799.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000800.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000802.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000803.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000806.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000807.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000808.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000810.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000811.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000814.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000815.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000821.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000822.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000827.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000828.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000829.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000830.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000831.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000836.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000837.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000838.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000842.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000846.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000847.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000849.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000855.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000857.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000860.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000862.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000863.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000865.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000866.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000870.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000871.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000872.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000874.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000875.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000876.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000879.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000883.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000885.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000887.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000889.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000891.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000893.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000897.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000898.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000899.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000904.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000906.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000907.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000908.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000910.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000912.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000914.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000915.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000918.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000920.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000922.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000923.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000926.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000927.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000928.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000929.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000931.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000938.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000939.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000941.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000942.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000944.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000945.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000947.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000948.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000952.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000954.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000955.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000956.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000959.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000961.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000968.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000970.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000971.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000973.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000974.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000975.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000978.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000979.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000981.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000983.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000984.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000986.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000989.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000991.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000993.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000994.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000995.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_000996.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001000.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001006.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001008.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001009.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001010.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001011.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001012.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001013.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001016.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001017.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001020.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001021.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001023.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001024.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001025.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001030.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001032.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001036.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001039.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001043.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001044.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001049.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001051.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001057.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001061.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001063.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001069.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001070.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001074.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001076.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001077.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001079.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001080.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001085.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001087.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001089.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001092.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001094.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001099.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001100.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001103.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001104.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001106.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001107.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001109.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001110.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001111.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001112.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001113.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001117.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001118.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001119.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001120.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001121.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001123.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001124.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001125.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001126.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001127.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001130.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001131.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001134.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001139.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001140.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001142.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001143.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001148.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001149.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001151.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001152.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001154.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001158.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001159.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001160.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001163.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001164.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001172.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001174.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001175.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001177.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001179.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001181.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001183.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001184.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001188.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001189.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001192.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001193.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001195.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001199.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001201.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001204.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001205.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001206.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001210.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001211.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001212.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001214.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001215.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001216.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001218.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001219.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001220.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001224.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001225.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001234.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001237.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001240.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001241.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001242.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001245.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001246.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001247.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001250.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001251.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001253.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001254.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001256.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001261.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001263.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001264.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001270.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001271.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001272.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001273.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001274.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001275.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001277.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001279.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001282.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001286.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001287.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001288.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001289.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001291.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001292.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001293.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001294.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001299.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001301.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001305.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001310.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001311.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001312.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001313.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001315.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001317.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001320.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001321.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001325.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001326.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001327.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001328.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001329.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001331.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001333.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001337.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001338.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001339.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001343.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001344.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001347.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001351.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001355.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001356.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001357.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001360.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001363.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001364.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001366.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001367.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001370.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001372.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001374.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001376.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001382.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001383.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001385.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001386.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001390.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001394.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001395.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001397.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001399.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001401.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001402.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001403.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001405.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001407.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001408.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001410.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001411.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001412.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001413.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001417.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001418.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001421.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001422.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001425.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001426.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001430.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001431.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001432.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001433.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001434.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001435.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001439.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001441.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001448.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001449.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001450.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001451.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001452.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001453.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001455.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001456.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001457.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001458.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001461.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001463.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001464.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001465.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001468.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001472.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001473.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001478.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001479.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001480.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001481.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001486.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001487.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001489.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001497.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001499.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001501.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001502.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001503.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001505.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001511.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001514.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001515.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001516.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001518.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001520.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001522.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001525.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001528.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001529.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001533.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001534.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001535.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001537.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001539.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001540.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001543.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001544.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001547.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001548.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001550.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001551.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001552.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001553.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001555.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001557.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001560.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001561.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001562.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001563.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001569.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001571.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001572.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001574.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001576.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001577.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001579.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001580.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001583.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001584.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001586.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001587.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001590.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001592.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001594.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001595.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001596.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001599.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001601.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001602.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001603.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001606.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001607.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001608.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001614.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001618.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001619.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001625.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001626.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001630.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001633.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001635.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001636.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001637.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001638.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001640.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001644.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001645.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001646.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001647.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001649.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001650.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001652.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001656.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001659.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001660.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001665.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001668.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001669.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001671.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001674.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001675.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001676.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001679.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001680.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001682.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001685.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001687.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001689.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001690.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001691.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001692.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001694.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001697.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001698.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001699.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001700.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001705.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001706.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001709.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001710.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001712.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001715.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001717.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001718.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001720.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001726.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001729.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001731.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001732.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001734.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001737.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001739.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001743.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001744.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001746.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001747.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001748.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001749.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001752.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001753.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001754.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001756.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001757.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001759.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001760.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001762.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001763.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001767.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001768.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001771.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001773.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001776.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001777.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001780.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001783.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001784.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001785.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001787.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001788.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001794.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001795.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001796.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001797.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001801.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001803.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001806.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001807.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001808.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001810.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001814.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001817.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001819.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001820.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001821.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001823.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001827.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001828.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001829.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001830.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001836.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001837.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001838.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001841.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001842.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001843.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001845.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001846.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001849.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001850.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001851.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001852.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001853.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001856.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001857.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001858.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001860.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001862.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001863.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001864.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001868.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001869.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001870.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001877.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001881.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001884.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001885.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001891.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001892.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001893.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001896.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001899.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001904.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001907.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001908.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001911.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001913.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001916.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001918.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001919.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001921.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001922.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001923.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001924.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001927.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001929.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001931.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001933.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001934.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001937.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001938.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001939.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001940.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001941.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001944.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001948.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001950.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001951.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001954.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001956.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001957.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001960.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001962.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001966.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001967.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001968.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001970.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001973.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001974.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001976.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001978.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001979.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001980.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001981.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001982.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001986.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001987.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001988.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001992.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001993.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001994.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001995.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_001998.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002000.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002005.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002006.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002015.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002017.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002018.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002019.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002020.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002022.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002023.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002025.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002026.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002029.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002030.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002032.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002039.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002040.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002041.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002044.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002045.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002046.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002047.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002048.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002050.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002057.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002058.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002060.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002065.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002067.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002068.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002070.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002080.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002085.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002086.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002089.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002094.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002095.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002096.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002097.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002100.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002102.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002104.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002106.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002107.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002113.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002117.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002118.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002121.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002124.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002127.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002128.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002129.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002130.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002132.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002136.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002137.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002138.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002139.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002141.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002142.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002143.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002146.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002149.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002150.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002152.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002154.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002161.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002166.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002167.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002168.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002172.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002175.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002176.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002177.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002179.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002180.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002181.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002182.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002183.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002187.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002191.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002192.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002193.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002194.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002195.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002199.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002200.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002203.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002204.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002207.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002208.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002211.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002213.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002215.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002216.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002218.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002219.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002220.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002221.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002223.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002224.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002226.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002227.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002228.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002232.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002236.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002242.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002243.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002244.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002245.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002247.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002248.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002251.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002254.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002255.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002261.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002263.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002267.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002269.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002271.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002274.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002276.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002278.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002279.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002283.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002286.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002287.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002289.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002294.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002295.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002299.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002301.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002303.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002305.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002307.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002309.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002310.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002312.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002313.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002315.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002316.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002318.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002319.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002320.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002321.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002326.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002327.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002332.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002333.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002336.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002337.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002338.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002340.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002346.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002348.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002349.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002353.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002354.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002356.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002357.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002363.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002364.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002365.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002366.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002368.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002369.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002370.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002371.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002372.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002373.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002374.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002378.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002379.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002382.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002383.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002387.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002388.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002390.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002391.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002392.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002393.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002396.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002398.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002399.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002400.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002402.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002405.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002408.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002409.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002410.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002413.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002418.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002420.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002422.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002424.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002425.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002427.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002429.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002431.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002435.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002436.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002438.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002439.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002440.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002445.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002446.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002448.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002449.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002450.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002452.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002455.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002456.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002457.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002458.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002459.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002460.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002461.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002462.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002468.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002469.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002472.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002475.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002479.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002480.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002482.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002484.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002485.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002487.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002492.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002496.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002497.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002498.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002499.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002501.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002504.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002507.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002509.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002510.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002512.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002513.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002516.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002518.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002520.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002526.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002527.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002529.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002531.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002532.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002533.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002534.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002537.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002538.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002539.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002542.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002543.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002546.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002547.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002551.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002552.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002553.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002556.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002561.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002562.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002565.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002569.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002570.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002573.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002575.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002577.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002578.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002579.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002580.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002582.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002583.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002586.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002587.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002589.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002592.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002594.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002597.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002598.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002601.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002602.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002603.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002605.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002614.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002615.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002616.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002618.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002620.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002621.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002623.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002624.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002625.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002626.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002628.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002631.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002632.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002638.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002639.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002642.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002644.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002645.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002647.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002652.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002653.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002654.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002656.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002659.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002660.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002661.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002662.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002665.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002666.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002667.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002668.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002674.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002675.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002676.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002678.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002679.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002682.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002684.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002686.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002688.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002691.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002692.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002693.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002695.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002696.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002697.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002701.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002702.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002704.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002705.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002708.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002710.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002713.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002714.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002716.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002720.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002721.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002722.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002723.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002725.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002728.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002729.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002733.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002734.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002736.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002737.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002740.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002741.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002742.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002746.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002747.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002750.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002752.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002754.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002759.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002760.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002763.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002767.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002771.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002772.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002774.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002775.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002778.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002779.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002780.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002781.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002783.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002786.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002789.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002790.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002791.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002792.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002793.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002794.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002797.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002801.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002803.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002807.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002808.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002811.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002813.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002814.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002815.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002816.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002817.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002820.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002821.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002822.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002824.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002827.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002830.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002831.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002834.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002838.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002839.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002840.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002841.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002842.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002843.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002844.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002845.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002851.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002853.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002854.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002855.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002856.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002857.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002858.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002860.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002864.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002865.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002868.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002870.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002871.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002873.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002876.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002877.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002879.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002880.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002881.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002884.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002887.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002891.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002892.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002896.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002899.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002900.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002901.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002902.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002903.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002905.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002907.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002909.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002914.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002915.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002917.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002921.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002924.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002927.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002929.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002930.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002931.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002935.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002937.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002938.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002939.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002940.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002941.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002946.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002947.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002948.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002954.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002955.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002956.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002958.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002960.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002962.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002963.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002965.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002972.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002973.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002976.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002978.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002979.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002980.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002982.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002985.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002987.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002988.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002990.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002991.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002993.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_002995.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003003.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003007.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003010.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003011.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003013.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003014.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003015.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003016.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003017.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003019.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003024.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003025.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003027.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003028.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003032.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003034.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003035.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003040.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003043.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003044.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003047.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003050.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003051.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003053.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003056.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003057.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003060.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003062.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003067.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003071.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003072.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003074.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003077.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003078.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003081.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003086.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003088.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003091.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003092.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003093.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003094.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003097.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003101.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003102.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003103.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003106.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003107.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003108.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003112.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003114.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003115.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003117.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003119.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003120.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003122.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003123.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003127.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003129.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003132.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003135.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003137.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003138.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003139.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003143.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003146.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003148.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003149.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003151.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003153.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003154.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003156.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003157.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003159.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003160.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003162.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003168.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003169.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003170.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003173.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003174.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003176.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003179.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003183.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003186.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003187.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003190.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003191.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003192.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003197.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003199.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003200.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003201.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003203.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003204.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003206.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003207.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003212.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003214.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003218.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003219.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003220.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003222.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003223.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003227.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003230.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003231.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003232.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003233.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003236.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003238.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003239.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003240.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003241.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003244.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003248.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003249.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003250.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003251.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003252.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003253.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003255.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003256.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003259.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003260.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003263.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003264.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003269.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003270.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003274.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003275.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003276.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003278.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003279.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003280.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003283.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003285.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003287.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003290.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003291.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003293.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003297.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003299.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003300.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003301.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003302.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003303.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003304.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003305.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003309.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003314.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003316.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003321.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003325.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003326.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003329.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003331.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003332.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003333.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003335.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003337.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003341.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003342.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003343.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003344.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003345.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003351.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003353.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003355.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003358.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003362.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003365.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003366.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003367.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003368.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003370.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003371.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003372.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003374.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003375.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003376.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003379.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003380.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003381.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003383.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003384.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003385.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003390.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003391.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003395.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003397.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003398.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003400.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003401.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003402.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003405.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003409.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003411.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003415.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003418.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003419.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003421.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003427.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003429.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003432.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003435.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003436.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003437.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003439.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003446.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003450.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003451.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003453.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003458.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003461.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003465.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003467.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003468.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003469.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003470.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003473.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003474.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003477.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003478.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003479.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003481.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003482.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003483.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003488.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003490.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003491.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003493.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003495.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003496.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003497.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003503.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003506.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003507.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003508.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003509.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003512.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003513.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003514.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003520.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003522.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003526.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003527.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003529.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003531.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003532.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003534.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003535.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003537.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003538.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003539.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003540.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003541.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003546.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003547.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003549.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003551.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003554.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003556.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003559.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003560.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003561.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003562.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003563.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003568.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003569.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003573.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003574.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003576.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003579.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003582.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003585.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003588.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003592.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003594.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003597.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003598.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003599.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003601.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003603.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003604.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003605.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003608.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003609.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003610.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003612.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003613.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003618.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003625.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003628.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003630.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003632.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003634.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003635.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003640.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003641.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003643.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003644.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003645.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003648.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003649.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003651.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003653.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003655.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003656.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003659.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003664.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003665.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003667.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003670.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003671.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003672.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003673.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003674.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003675.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003677.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003679.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003680.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003686.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003687.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003688.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003689.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003690.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003695.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003696.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003701.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003703.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003708.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003709.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003714.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003716.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003717.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003721.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003723.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003724.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003725.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003728.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003729.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003730.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003731.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003734.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003735.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003736.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003737.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003742.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003743.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003744.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003745.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003746.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003747.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003752.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003754.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003755.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003757.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003761.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003762.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003764.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003768.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003771.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003772.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003773.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003774.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003779.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003781.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003784.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003788.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003789.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003791.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003792.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003798.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003799.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003800.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003801.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003804.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003806.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003807.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003811.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003813.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003815.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003816.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003818.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003820.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003821.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003822.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003823.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003825.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003826.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003828.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003837.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003844.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003845.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003847.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003848.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003852.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003854.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003855.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003856.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003857.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003859.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003860.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003861.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003863.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003864.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003865.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003871.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003874.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003875.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003877.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003878.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003879.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003884.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003887.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003890.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003891.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003892.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003893.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003894.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003897.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003898.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003899.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003900.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003906.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003910.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003911.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003912.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003914.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003915.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003919.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003920.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003925.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003928.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003929.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003931.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003933.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003936.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003937.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003938.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003939.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003942.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003943.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003944.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003945.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003947.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003949.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003950.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003954.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003955.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003956.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003957.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003958.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003961.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003966.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003970.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003971.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003974.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003976.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003980.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003981.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003982.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003983.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003987.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003988.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003994.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003995.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003996.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_003999.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004005.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004006.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004007.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004008.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004009.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004010.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004011.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004014.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004017.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004021.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004023.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004025.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004026.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004027.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004028.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004029.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004030.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004031.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004033.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004036.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004041.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004043.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004045.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004048.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004050.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004053.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004056.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004059.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004060.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004061.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004062.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004063.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004064.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004065.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004067.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004069.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004071.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004072.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004074.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004075.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004081.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004088.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004089.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004092.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004094.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004095.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004096.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004102.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004104.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004107.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004108.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004109.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004111.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004116.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004118.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004119.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004120.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004121.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004123.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004124.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004125.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004129.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004130.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004137.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004138.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004139.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004140.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004141.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004143.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004144.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004145.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004148.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004149.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004154.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004157.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004160.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004161.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004162.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004163.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004165.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004168.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004171.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004172.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004173.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004175.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004178.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004179.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004180.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004182.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004184.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004186.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004187.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004188.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004191.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004192.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004193.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004197.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004198.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004201.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004204.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004207.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004208.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004209.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004210.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004211.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004216.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004219.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004222.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004223.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004224.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004225.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004226.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004227.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004228.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004230.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004231.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004238.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004239.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004242.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004244.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004247.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004248.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004249.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004252.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004253.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004254.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004256.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004258.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004259.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004263.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004264.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004271.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004275.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004276.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004278.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004279.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004280.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004282.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004283.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004286.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004288.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004289.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004290.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004291.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004295.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004296.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004297.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004301.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004304.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004306.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004307.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004311.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004312.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004313.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004314.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004318.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004320.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004322.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004325.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004327.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004332.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004333.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004335.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004336.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004337.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004339.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004341.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004344.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004345.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004346.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004348.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004349.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004351.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004352.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004355.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004357.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004358.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004360.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004362.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004363.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004365.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004366.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004367.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004368.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004369.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004370.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004371.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004373.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004374.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004380.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004382.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004385.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004387.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004390.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004391.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004400.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004402.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004404.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004409.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004412.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004415.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004417.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004419.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004420.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004422.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004423.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004425.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004428.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004429.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004431.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004432.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004436.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004439.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004441.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004445.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004447.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004448.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004450.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004451.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004455.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004456.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004457.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004459.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004460.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004461.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004466.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004467.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004469.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004472.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004475.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004476.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004477.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004478.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004479.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004481.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004483.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004484.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004486.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004488.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004491.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004492.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004493.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004499.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004501.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004503.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004505.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004506.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004509.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004511.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004514.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004515.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004517.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004518.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004520.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004521.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004523.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004529.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004533.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004537.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004540.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004542.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004543.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004545.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004546.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004550.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004551.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004553.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004554.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004556.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004557.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004558.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004559.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004560.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004561.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004569.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004570.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004573.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004575.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004576.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004577.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004581.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004584.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004585.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004586.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004588.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004591.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004592.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004594.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004596.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004597.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004598.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004600.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004601.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004604.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004608.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004609.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004616.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004618.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004620.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004621.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004624.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004625.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004627.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004628.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004631.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004634.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004635.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004637.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004638.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004642.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004646.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004654.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004655.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004656.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004657.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004659.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004660.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004661.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004662.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004665.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004666.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004667.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004669.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004670.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004672.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004676.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004677.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004679.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004680.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004681.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004683.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004686.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004690.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004691.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004692.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004694.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004696.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004697.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004698.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004703.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004704.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004708.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004710.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004712.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004714.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004717.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004721.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004722.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004726.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004728.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004729.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004730.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004733.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004735.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004738.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004741.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004743.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004747.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004748.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004749.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004750.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004751.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004753.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004756.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004757.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004760.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004763.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004765.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004766.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004768.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004772.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004773.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004775.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004777.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004778.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004779.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004782.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004783.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004785.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004786.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004789.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004791.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004792.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004793.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004795.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004797.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004804.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004806.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004807.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004808.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004809.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004812.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004813.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004815.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004816.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004817.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004821.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004822.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004824.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004825.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004826.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004828.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004829.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004830.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004831.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004832.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004836.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004838.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004841.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004844.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004847.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004848.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004849.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004852.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004854.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004855.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004856.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004857.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004861.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004865.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004866.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004868.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004871.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004874.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004877.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004878.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004879.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004888.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004889.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004890.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004891.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004894.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004896.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004900.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004901.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004903.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004906.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004908.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004909.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004910.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004913.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004916.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004917.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004918.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004919.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004921.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004922.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004928.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004930.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004931.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004933.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004937.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004938.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004941.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004942.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004943.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004944.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004945.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004946.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004948.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004950.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004951.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004952.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004953.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004954.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004957.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004959.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004960.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004962.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004963.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004966.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004967.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004968.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004970.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004971.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004973.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004974.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004980.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004982.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004983.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004987.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004989.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004991.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004992.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004994.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004995.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004997.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_004998.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005000.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005005.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005006.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005008.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005011.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005013.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005016.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005017.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005018.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005019.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005021.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005022.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005023.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005026.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005028.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005031.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005033.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005035.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005041.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005044.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005046.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005048.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005049.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005053.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005059.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005060.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005061.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005062.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005063.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005064.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005068.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005071.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005072.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005075.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005079.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005080.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005083.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005087.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005090.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005093.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005094.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005096.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005099.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005100.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005101.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005106.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005107.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005108.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005109.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005110.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005111.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005115.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005116.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005118.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005119.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005120.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005123.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005127.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005128.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005129.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005130.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005134.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005136.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005138.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005141.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005143.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005148.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005149.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005152.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005155.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005158.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005159.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005160.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005161.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005164.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005166.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005167.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005169.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005170.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005174.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005180.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005182.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005183.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005184.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005187.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005188.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005190.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005192.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005193.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005198.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005199.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005201.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005202.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005206.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005208.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005211.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005213.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005215.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005216.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005217.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005222.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005223.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005224.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005226.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005230.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005232.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005236.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005238.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005239.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005241.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005242.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005243.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005245.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005246.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005250.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005252.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005253.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005258.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005260.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005261.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005264.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005266.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005268.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005270.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005272.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005273.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005274.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005275.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005276.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005277.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005279.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005284.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005285.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005287.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005292.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005293.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005297.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005299.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005301.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005303.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005305.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005306.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005308.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005309.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005310.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005312.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005314.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005317.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005318.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005320.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005323.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005327.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005330.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005331.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005332.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005338.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005340.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005344.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005345.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005346.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005349.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005352.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005353.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005359.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005364.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005365.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005366.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005369.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005371.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005372.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005374.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005375.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005376.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005377.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005379.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005382.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005384.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005385.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005386.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005388.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005389.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005391.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005393.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005394.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005398.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005401.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005402.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005403.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005405.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005408.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005409.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005410.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005414.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005415.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005416.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005417.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005419.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005421.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005424.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005425.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005426.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005428.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005429.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005432.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005433.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005434.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005437.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005441.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005442.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005448.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005450.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005452.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005455.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005456.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005457.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005458.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005462.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005463.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005466.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005467.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005468.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005471.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005472.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005474.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005475.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005480.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005482.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005483.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005484.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005489.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005491.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005492.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005493.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005494.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005496.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005497.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005498.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005500.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005501.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005502.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005505.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005506.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005508.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005511.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005512.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005513.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005514.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005515.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005516.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005518.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005522.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005527.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005531.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005532.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005534.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005535.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005538.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005540.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005542.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005543.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005546.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005548.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005551.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005556.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005557.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005559.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005561.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005562.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005565.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005566.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005570.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005571.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005572.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005573.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005575.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005576.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005578.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005582.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005584.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005585.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005586.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005587.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005588.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005591.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005592.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005593.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005594.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005595.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005596.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005597.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005601.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005603.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005604.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005606.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005608.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005610.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005612.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005614.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005615.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005616.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005619.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005620.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005625.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005626.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005627.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005628.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005632.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005635.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005636.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005637.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005640.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005643.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005644.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005646.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005647.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005651.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005652.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005654.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005657.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005658.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005663.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005664.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005665.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005666.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005668.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005669.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005670.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005671.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005672.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005676.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005678.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005681.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005683.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005684.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005688.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005692.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005696.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005697.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005700.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005705.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005706.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005709.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005712.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005715.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005716.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005718.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005721.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005723.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005725.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005727.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005731.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005732.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005733.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005734.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005735.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005736.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005738.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005740.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005744.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005746.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005747.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005748.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005750.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005752.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005753.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005754.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005755.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005756.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005761.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005762.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005763.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005764.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005767.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005768.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005775.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005776.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005777.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005780.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005782.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005784.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005785.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005788.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005791.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005794.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005796.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005800.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005804.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005806.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005807.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005810.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005815.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005816.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005817.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005820.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005821.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005823.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005824.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005825.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005826.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005827.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005830.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005833.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005835.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005836.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005837.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005838.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005840.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005841.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005843.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005845.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005847.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005848.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005849.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005853.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005854.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005855.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005860.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005865.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005867.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005868.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005870.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005871.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005874.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005875.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005876.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005877.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005882.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005883.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005884.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005885.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005886.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005888.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005891.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005892.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005894.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005896.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005897.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005898.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005899.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005901.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005903.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005904.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005906.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005907.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005909.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005914.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005919.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005921.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005922.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005927.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005928.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005929.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005930.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005932.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005934.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005935.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005936.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005937.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005938.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005942.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005943.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005948.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005949.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005951.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005952.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005953.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005954.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005957.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005958.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005959.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005960.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005967.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005968.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005972.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005973.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005974.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005975.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005976.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005978.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005980.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005981.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005982.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005984.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005985.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005986.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005987.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005991.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005992.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005993.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005995.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005996.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005997.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_005998.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006000.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006003.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006004.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006009.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006010.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006011.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006012.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006015.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006021.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006023.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006025.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006026.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006028.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006031.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006032.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006033.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006034.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006035.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006040.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006041.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006050.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006051.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006056.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006057.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006058.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006061.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006062.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006063.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006067.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006070.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006076.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006078.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006079.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2010_006086.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000003.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000006.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000007.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000009.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000010.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000012.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000016.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000017.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000022.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000025.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000027.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000028.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000030.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000034.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000036.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000037.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000038.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000041.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000043.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000044.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000045.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000048.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000051.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000053.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000057.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000058.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000060.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000061.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000065.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000068.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000069.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000070.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000071.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000072.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000076.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000077.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000083.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000086.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000087.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000090.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000094.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000095.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000096.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000102.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000103.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000108.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000109.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000112.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000114.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000116.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000122.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000124.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000128.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000129.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000130.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000137.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000138.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000142.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000145.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000146.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000149.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000152.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000161.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000162.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000163.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000165.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000166.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000173.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000176.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000178.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000180.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000181.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000182.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000192.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000194.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000195.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000196.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000197.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000202.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000206.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000208.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000210.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000213.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000214.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000216.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000219.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000220.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000221.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000222.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000224.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000226.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000228.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000232.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000233.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000234.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000238.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000239.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000241.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000243.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000246.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000248.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000249.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000250.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000252.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000253.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000258.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000267.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000268.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000269.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000273.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000276.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000277.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000278.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000282.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000283.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000285.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000286.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000288.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000290.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000291.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000293.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000297.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000299.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000304.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000305.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000307.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000309.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000310.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000312.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000314.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000315.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000317.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000319.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000320.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000321.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000322.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000324.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000329.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000332.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000338.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000342.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000343.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000344.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000345.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000346.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000347.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000359.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000361.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000362.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000364.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000369.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000370.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000374.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000375.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000376.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000379.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000382.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000383.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000385.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000386.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000388.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000391.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000392.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000396.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000397.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000398.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000399.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000400.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000404.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000408.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000412.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000413.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000416.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000418.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000419.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000420.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000426.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000427.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000428.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000430.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000432.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000434.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000435.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000436.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000438.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000442.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000444.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000445.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000449.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000450.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000453.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000454.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000455.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000456.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000457.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000461.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000465.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000468.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000469.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000471.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000472.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000474.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000475.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000477.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000479.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000481.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000482.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000485.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000487.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000491.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000492.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000494.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000496.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000498.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000499.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000502.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000503.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000505.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000509.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000511.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000512.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000513.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000514.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000518.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000520.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000521.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000526.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000530.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000531.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000532.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000534.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000538.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000541.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000542.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000548.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000550.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000551.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000554.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000556.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000557.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000558.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000559.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000560.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000565.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000566.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000569.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000572.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000573.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000575.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000577.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000578.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000579.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000585.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000586.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000589.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000592.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000594.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000596.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000598.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000600.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000607.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000608.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000609.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000612.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000618.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000621.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000622.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000627.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000628.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000630.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000631.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000634.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000637.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000638.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000641.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000642.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000646.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000651.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000652.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000655.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000656.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000657.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000658.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000661.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000666.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000669.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000673.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000675.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000679.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000682.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000683.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000684.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000685.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000688.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000689.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000690.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000692.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000698.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000701.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000703.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000704.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000709.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000711.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000713.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000718.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000724.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000725.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000730.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000731.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000734.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000743.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000744.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000745.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000747.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000748.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000749.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000753.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000755.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000757.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000758.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000759.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000763.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000765.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000767.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000768.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000769.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000771.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000772.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000774.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000778.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000780.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000784.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000785.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000788.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000789.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000790.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000791.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000793.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000800.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000804.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000806.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000807.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000809.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000813.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000815.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000819.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000820.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000823.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000824.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000827.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000828.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000829.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000830.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000831.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000834.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000837.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000839.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000840.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000843.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000845.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000847.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000848.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000850.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000851.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000853.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000855.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000858.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000859.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000872.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000874.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000875.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000882.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000885.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000887.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000888.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000893.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000895.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000897.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000898.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000899.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000900.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000901.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000908.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000909.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000912.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000917.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000919.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000920.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000922.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000927.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000930.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000932.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000933.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000934.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000940.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000944.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000947.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000950.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000951.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000953.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000954.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000957.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000961.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000965.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000969.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000971.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000973.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000975.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000977.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000979.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000981.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000982.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000983.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000986.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000987.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000990.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000991.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000996.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000997.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_000999.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001001.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001004.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001005.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001008.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001009.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001010.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001011.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001014.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001015.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001016.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001019.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001020.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001022.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001023.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001025.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001027.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001028.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001029.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001030.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001031.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001032.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001033.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001034.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001036.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001040.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001044.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001047.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001052.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001056.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001058.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001060.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001062.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001064.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001069.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001071.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001079.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001080.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001081.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001082.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001084.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001086.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001091.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001093.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001097.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001100.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001106.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001107.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001110.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001111.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001114.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001116.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001117.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001123.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001124.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001126.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001127.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001128.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001133.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001134.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001135.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001136.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001137.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001138.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001139.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001144.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001146.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001149.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001150.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001152.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001153.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001158.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001159.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001160.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001161.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001163.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001166.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001167.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001168.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001169.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001173.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001175.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001176.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001188.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001189.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001190.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001192.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001193.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001198.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001201.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001203.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001208.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001211.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001213.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001215.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001216.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001217.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001220.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001221.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001223.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001226.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001227.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001229.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001232.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001238.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001240.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001245.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001246.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001251.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001252.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001253.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001254.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001255.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001257.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001259.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001260.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001261.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001263.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001264.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001266.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001270.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001271.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001272.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001276.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001277.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001281.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001282.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001283.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001284.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001285.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001286.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001287.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001288.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001290.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001292.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001295.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001302.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001304.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001305.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001310.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001311.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001313.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001315.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001318.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001319.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001320.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001323.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001326.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001327.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001329.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001330.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001333.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001335.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001336.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001337.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001341.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001344.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001346.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001354.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001355.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001357.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001360.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001366.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001369.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001370.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001373.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001375.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001381.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001382.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001384.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001387.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001388.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001389.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001390.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001394.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001399.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001400.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001402.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001404.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001407.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001411.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001412.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001414.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001416.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001421.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001422.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001424.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001432.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001434.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001440.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001441.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001447.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001449.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001451.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001455.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001456.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001463.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001464.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001466.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001467.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001471.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001475.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001476.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001479.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001480.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001489.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001498.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001501.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001503.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001505.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001507.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001508.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001510.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001514.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001518.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001521.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001524.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001525.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001526.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001529.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001530.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001531.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001532.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001534.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001535.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001537.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001538.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001541.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001542.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001543.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001544.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001546.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001547.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001549.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001557.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001558.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001560.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001566.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001568.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001571.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001572.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001573.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001582.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001586.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001589.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001591.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001592.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001596.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001597.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001599.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001600.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001601.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001602.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001605.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001606.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001607.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001608.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001611.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001612.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001613.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001614.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001616.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001618.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001619.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001620.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001621.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001622.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001624.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001625.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001628.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001632.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001641.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001642.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001643.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001647.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001649.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001650.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001652.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001653.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001655.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001656.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001662.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001663.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001665.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001666.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001669.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001671.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001673.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001674.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001678.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001679.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001689.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001691.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001693.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001694.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001695.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001698.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001699.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001700.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001705.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001707.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001708.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001710.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001712.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001713.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001714.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001715.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001716.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001720.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001722.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001726.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001727.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001730.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001732.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001733.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001739.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001740.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001741.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001745.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001747.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001748.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001751.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001753.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001754.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001755.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001757.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001764.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001765.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001766.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001769.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001771.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001775.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001776.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001779.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001782.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001785.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001789.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001790.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001791.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001793.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001794.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001796.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001799.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001800.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001801.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001806.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001810.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001811.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001812.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001815.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001819.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001820.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001822.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001824.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001825.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001826.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001827.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001833.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001834.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001837.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001840.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001841.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001842.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001845.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001847.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001854.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001855.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001856.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001858.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001862.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001863.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001866.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001868.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001870.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001871.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001872.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001873.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001875.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001876.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001877.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001880.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001884.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001885.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001886.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001889.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001891.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001893.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001895.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001896.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001900.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001901.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001902.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001904.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001906.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001910.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001911.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001914.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001919.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001920.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001922.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001924.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001926.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001927.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001928.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001929.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001930.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001932.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001937.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001938.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001941.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001942.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001944.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001945.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001946.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001949.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001950.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001951.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001952.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001956.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001959.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001961.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001962.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001964.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001966.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001967.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001971.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001972.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001974.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001975.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001977.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001980.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001982.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001984.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001986.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001987.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001988.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001989.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_001991.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002003.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002004.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002005.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002006.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002012.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002016.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002018.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002019.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002021.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002022.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002027.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002031.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002033.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002034.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002036.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002038.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002039.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002040.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002041.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002042.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002044.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002045.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002046.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002047.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002049.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002050.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002053.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002062.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002063.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002064.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002074.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002075.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002079.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002085.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002088.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002091.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002093.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002096.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002097.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002100.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002102.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002105.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002106.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002107.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002108.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002109.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002110.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002111.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002113.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002114.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002116.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002119.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002121.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002124.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002128.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002131.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002132.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002134.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002135.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002137.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002142.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002143.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002144.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002147.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002148.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002149.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002150.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002154.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002156.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002158.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002159.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002160.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002163.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002167.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002169.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002173.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002174.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002177.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002178.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002179.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002184.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002186.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002189.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002192.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002193.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002200.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002211.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002215.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002218.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002221.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002222.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002223.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002224.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002227.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002228.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002230.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002234.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002236.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002237.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002239.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002241.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002244.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002245.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002246.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002247.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002248.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002251.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002252.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002253.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002260.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002265.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002268.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002269.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002270.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002272.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002273.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002276.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002278.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002279.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002280.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002281.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002284.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002291.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002292.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002294.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002295.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002298.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002300.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002301.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002303.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002308.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002312.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002317.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002318.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002322.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002324.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002325.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002327.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002330.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002335.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002341.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002343.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002346.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002347.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002348.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002350.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002357.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002358.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002359.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002362.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002365.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002366.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002371.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002379.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002380.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002381.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002384.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002385.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002386.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002387.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002388.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002389.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002391.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002393.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002394.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002395.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002396.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002397.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002398.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002402.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002406.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002407.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002409.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002410.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002413.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002414.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002418.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002419.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002420.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002421.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002422.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002429.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002433.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002435.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002436.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002443.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002447.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002448.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002453.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002455.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002457.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002458.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002459.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002460.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002461.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002462.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002463.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002464.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002470.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002474.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002476.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002479.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002482.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002484.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002488.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002490.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002491.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002492.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002494.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002495.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002498.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002503.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002504.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002505.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002507.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002509.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002511.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002514.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002515.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002516.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002519.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002520.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002526.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002528.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002531.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002532.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002533.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002535.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002536.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002542.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002543.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002548.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002551.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002552.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002553.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002554.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002555.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002556.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002558.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002559.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002560.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002561.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002566.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002567.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002568.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002571.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002575.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002578.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002579.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002582.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002583.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002584.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002585.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002588.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002589.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002590.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002592.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002594.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002598.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002601.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002605.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002606.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002609.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002610.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002612.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002614.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002616.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002617.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002618.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002620.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002623.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002624.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002629.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002631.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002636.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002638.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002639.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002640.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002641.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002644.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002649.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002650.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002652.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002656.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002657.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002658.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002661.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002662.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002664.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002673.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002674.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002675.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002676.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002677.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002678.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002685.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002687.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002694.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002697.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002699.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002706.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002709.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002713.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002714.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002715.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002717.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002719.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002724.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002725.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002726.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002730.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002738.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002740.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002742.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002746.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002748.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002750.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002751.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002752.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002754.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002756.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002760.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002765.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002766.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002767.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002770.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002772.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002775.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002776.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002779.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002780.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002782.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002784.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002786.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002790.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002795.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002796.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002798.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002802.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002803.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002805.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002808.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002810.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002811.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002812.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002814.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002817.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002818.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002821.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002823.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002826.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002830.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002831.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002833.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002834.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002838.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002841.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002842.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002851.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002852.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002854.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002863.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002864.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002867.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002868.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002870.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002871.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002872.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002873.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002879.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002880.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002881.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002883.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002884.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002885.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002887.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002889.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002890.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002897.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002900.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002908.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002911.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002912.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002913.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002916.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002917.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002920.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002921.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002924.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002925.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002927.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002929.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002930.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002932.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002933.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002935.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002937.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002938.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002940.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002942.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002943.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002944.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002947.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002949.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002951.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002953.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002956.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002958.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002962.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002965.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002966.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002967.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002969.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002970.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002971.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002974.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002975.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002978.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002979.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002983.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002985.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002987.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002988.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002992.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002993.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002994.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002997.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_002999.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003002.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003003.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003005.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003010.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003011.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003012.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003013.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003016.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003019.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003020.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003023.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003025.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003027.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003028.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003029.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003030.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003034.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003038.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003039.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003041.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003043.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003044.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003047.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003048.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003049.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003050.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003054.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003055.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003057.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003059.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003063.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003065.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003066.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003073.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003074.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003076.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003078.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003079.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003081.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003085.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003086.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003089.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003091.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003097.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003098.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003103.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003109.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003111.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003114.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003115.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003121.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003124.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003132.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003134.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003138.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003141.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003145.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003146.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003148.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003149.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003150.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003151.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003152.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003154.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003158.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003159.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003162.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003163.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003166.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003167.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003168.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003169.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003171.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003176.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003177.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003182.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003183.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003184.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003185.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003187.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003188.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003192.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003194.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003197.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003201.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003205.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003207.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003211.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003212.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003213.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003216.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003220.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003223.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003228.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003230.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003232.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003236.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003238.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003240.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003242.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003244.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003246.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003247.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003253.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003254.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003255.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003256.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003259.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003260.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003261.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003262.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003269.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003271.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003274.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003275.jpg -./VOC/train/VOCdevkit/VOC2012/images/2011_003276.jpg diff --git a/cv/detection/yolov3/pytorch/data/voc/valid.txt b/cv/detection/yolov3/pytorch/data/voc/valid.txt deleted file mode 100755 index a541dac5c..000000000 --- a/cv/detection/yolov3/pytorch/data/voc/valid.txt +++ /dev/null @@ -1,4952 +0,0 @@ -./VOC/test/VOCdevkit/VOC2007/images/000001.jpg -./VOC/test/VOCdevkit/VOC2007/images/000002.jpg -./VOC/test/VOCdevkit/VOC2007/images/000003.jpg -./VOC/test/VOCdevkit/VOC2007/images/000004.jpg -./VOC/test/VOCdevkit/VOC2007/images/000006.jpg -./VOC/test/VOCdevkit/VOC2007/images/000008.jpg -./VOC/test/VOCdevkit/VOC2007/images/000010.jpg -./VOC/test/VOCdevkit/VOC2007/images/000011.jpg -./VOC/test/VOCdevkit/VOC2007/images/000013.jpg -./VOC/test/VOCdevkit/VOC2007/images/000014.jpg -./VOC/test/VOCdevkit/VOC2007/images/000015.jpg -./VOC/test/VOCdevkit/VOC2007/images/000018.jpg -./VOC/test/VOCdevkit/VOC2007/images/000022.jpg -./VOC/test/VOCdevkit/VOC2007/images/000025.jpg -./VOC/test/VOCdevkit/VOC2007/images/000027.jpg -./VOC/test/VOCdevkit/VOC2007/images/000028.jpg -./VOC/test/VOCdevkit/VOC2007/images/000029.jpg -./VOC/test/VOCdevkit/VOC2007/images/000031.jpg -./VOC/test/VOCdevkit/VOC2007/images/000037.jpg -./VOC/test/VOCdevkit/VOC2007/images/000038.jpg -./VOC/test/VOCdevkit/VOC2007/images/000040.jpg -./VOC/test/VOCdevkit/VOC2007/images/000043.jpg -./VOC/test/VOCdevkit/VOC2007/images/000045.jpg -./VOC/test/VOCdevkit/VOC2007/images/000049.jpg -./VOC/test/VOCdevkit/VOC2007/images/000053.jpg -./VOC/test/VOCdevkit/VOC2007/images/000054.jpg -./VOC/test/VOCdevkit/VOC2007/images/000055.jpg -./VOC/test/VOCdevkit/VOC2007/images/000056.jpg -./VOC/test/VOCdevkit/VOC2007/images/000057.jpg -./VOC/test/VOCdevkit/VOC2007/images/000058.jpg -./VOC/test/VOCdevkit/VOC2007/images/000059.jpg -./VOC/test/VOCdevkit/VOC2007/images/000062.jpg -./VOC/test/VOCdevkit/VOC2007/images/000067.jpg -./VOC/test/VOCdevkit/VOC2007/images/000068.jpg -./VOC/test/VOCdevkit/VOC2007/images/000069.jpg -./VOC/test/VOCdevkit/VOC2007/images/000070.jpg -./VOC/test/VOCdevkit/VOC2007/images/000071.jpg -./VOC/test/VOCdevkit/VOC2007/images/000074.jpg -./VOC/test/VOCdevkit/VOC2007/images/000075.jpg -./VOC/test/VOCdevkit/VOC2007/images/000076.jpg -./VOC/test/VOCdevkit/VOC2007/images/000079.jpg -./VOC/test/VOCdevkit/VOC2007/images/000080.jpg -./VOC/test/VOCdevkit/VOC2007/images/000082.jpg -./VOC/test/VOCdevkit/VOC2007/images/000084.jpg -./VOC/test/VOCdevkit/VOC2007/images/000085.jpg -./VOC/test/VOCdevkit/VOC2007/images/000086.jpg -./VOC/test/VOCdevkit/VOC2007/images/000087.jpg -./VOC/test/VOCdevkit/VOC2007/images/000088.jpg -./VOC/test/VOCdevkit/VOC2007/images/000090.jpg -./VOC/test/VOCdevkit/VOC2007/images/000092.jpg -./VOC/test/VOCdevkit/VOC2007/images/000094.jpg -./VOC/test/VOCdevkit/VOC2007/images/000096.jpg -./VOC/test/VOCdevkit/VOC2007/images/000097.jpg -./VOC/test/VOCdevkit/VOC2007/images/000098.jpg -./VOC/test/VOCdevkit/VOC2007/images/000100.jpg -./VOC/test/VOCdevkit/VOC2007/images/000103.jpg -./VOC/test/VOCdevkit/VOC2007/images/000105.jpg -./VOC/test/VOCdevkit/VOC2007/images/000106.jpg -./VOC/test/VOCdevkit/VOC2007/images/000108.jpg -./VOC/test/VOCdevkit/VOC2007/images/000111.jpg -./VOC/test/VOCdevkit/VOC2007/images/000114.jpg -./VOC/test/VOCdevkit/VOC2007/images/000115.jpg -./VOC/test/VOCdevkit/VOC2007/images/000116.jpg -./VOC/test/VOCdevkit/VOC2007/images/000119.jpg -./VOC/test/VOCdevkit/VOC2007/images/000124.jpg -./VOC/test/VOCdevkit/VOC2007/images/000126.jpg -./VOC/test/VOCdevkit/VOC2007/images/000127.jpg -./VOC/test/VOCdevkit/VOC2007/images/000128.jpg -./VOC/test/VOCdevkit/VOC2007/images/000135.jpg -./VOC/test/VOCdevkit/VOC2007/images/000136.jpg -./VOC/test/VOCdevkit/VOC2007/images/000137.jpg -./VOC/test/VOCdevkit/VOC2007/images/000139.jpg -./VOC/test/VOCdevkit/VOC2007/images/000144.jpg -./VOC/test/VOCdevkit/VOC2007/images/000145.jpg -./VOC/test/VOCdevkit/VOC2007/images/000148.jpg -./VOC/test/VOCdevkit/VOC2007/images/000149.jpg -./VOC/test/VOCdevkit/VOC2007/images/000151.jpg -./VOC/test/VOCdevkit/VOC2007/images/000152.jpg -./VOC/test/VOCdevkit/VOC2007/images/000155.jpg -./VOC/test/VOCdevkit/VOC2007/images/000157.jpg -./VOC/test/VOCdevkit/VOC2007/images/000160.jpg -./VOC/test/VOCdevkit/VOC2007/images/000166.jpg -./VOC/test/VOCdevkit/VOC2007/images/000167.jpg -./VOC/test/VOCdevkit/VOC2007/images/000168.jpg -./VOC/test/VOCdevkit/VOC2007/images/000172.jpg -./VOC/test/VOCdevkit/VOC2007/images/000175.jpg -./VOC/test/VOCdevkit/VOC2007/images/000176.jpg -./VOC/test/VOCdevkit/VOC2007/images/000178.jpg -./VOC/test/VOCdevkit/VOC2007/images/000179.jpg -./VOC/test/VOCdevkit/VOC2007/images/000181.jpg -./VOC/test/VOCdevkit/VOC2007/images/000182.jpg -./VOC/test/VOCdevkit/VOC2007/images/000183.jpg -./VOC/test/VOCdevkit/VOC2007/images/000185.jpg -./VOC/test/VOCdevkit/VOC2007/images/000186.jpg -./VOC/test/VOCdevkit/VOC2007/images/000188.jpg -./VOC/test/VOCdevkit/VOC2007/images/000191.jpg -./VOC/test/VOCdevkit/VOC2007/images/000195.jpg -./VOC/test/VOCdevkit/VOC2007/images/000196.jpg -./VOC/test/VOCdevkit/VOC2007/images/000197.jpg -./VOC/test/VOCdevkit/VOC2007/images/000199.jpg -./VOC/test/VOCdevkit/VOC2007/images/000201.jpg -./VOC/test/VOCdevkit/VOC2007/images/000202.jpg -./VOC/test/VOCdevkit/VOC2007/images/000204.jpg -./VOC/test/VOCdevkit/VOC2007/images/000205.jpg -./VOC/test/VOCdevkit/VOC2007/images/000206.jpg -./VOC/test/VOCdevkit/VOC2007/images/000212.jpg -./VOC/test/VOCdevkit/VOC2007/images/000213.jpg -./VOC/test/VOCdevkit/VOC2007/images/000216.jpg -./VOC/test/VOCdevkit/VOC2007/images/000217.jpg -./VOC/test/VOCdevkit/VOC2007/images/000223.jpg -./VOC/test/VOCdevkit/VOC2007/images/000226.jpg -./VOC/test/VOCdevkit/VOC2007/images/000227.jpg -./VOC/test/VOCdevkit/VOC2007/images/000230.jpg -./VOC/test/VOCdevkit/VOC2007/images/000231.jpg -./VOC/test/VOCdevkit/VOC2007/images/000234.jpg -./VOC/test/VOCdevkit/VOC2007/images/000237.jpg -./VOC/test/VOCdevkit/VOC2007/images/000238.jpg -./VOC/test/VOCdevkit/VOC2007/images/000239.jpg -./VOC/test/VOCdevkit/VOC2007/images/000240.jpg -./VOC/test/VOCdevkit/VOC2007/images/000243.jpg -./VOC/test/VOCdevkit/VOC2007/images/000247.jpg -./VOC/test/VOCdevkit/VOC2007/images/000248.jpg -./VOC/test/VOCdevkit/VOC2007/images/000252.jpg -./VOC/test/VOCdevkit/VOC2007/images/000253.jpg -./VOC/test/VOCdevkit/VOC2007/images/000254.jpg -./VOC/test/VOCdevkit/VOC2007/images/000255.jpg -./VOC/test/VOCdevkit/VOC2007/images/000258.jpg -./VOC/test/VOCdevkit/VOC2007/images/000260.jpg -./VOC/test/VOCdevkit/VOC2007/images/000261.jpg -./VOC/test/VOCdevkit/VOC2007/images/000264.jpg -./VOC/test/VOCdevkit/VOC2007/images/000265.jpg -./VOC/test/VOCdevkit/VOC2007/images/000267.jpg -./VOC/test/VOCdevkit/VOC2007/images/000271.jpg -./VOC/test/VOCdevkit/VOC2007/images/000272.jpg -./VOC/test/VOCdevkit/VOC2007/images/000273.jpg -./VOC/test/VOCdevkit/VOC2007/images/000274.jpg -./VOC/test/VOCdevkit/VOC2007/images/000277.jpg -./VOC/test/VOCdevkit/VOC2007/images/000279.jpg -./VOC/test/VOCdevkit/VOC2007/images/000280.jpg -./VOC/test/VOCdevkit/VOC2007/images/000281.jpg -./VOC/test/VOCdevkit/VOC2007/images/000283.jpg -./VOC/test/VOCdevkit/VOC2007/images/000284.jpg -./VOC/test/VOCdevkit/VOC2007/images/000286.jpg -./VOC/test/VOCdevkit/VOC2007/images/000287.jpg -./VOC/test/VOCdevkit/VOC2007/images/000290.jpg -./VOC/test/VOCdevkit/VOC2007/images/000291.jpg -./VOC/test/VOCdevkit/VOC2007/images/000292.jpg -./VOC/test/VOCdevkit/VOC2007/images/000293.jpg -./VOC/test/VOCdevkit/VOC2007/images/000295.jpg -./VOC/test/VOCdevkit/VOC2007/images/000297.jpg -./VOC/test/VOCdevkit/VOC2007/images/000299.jpg -./VOC/test/VOCdevkit/VOC2007/images/000300.jpg -./VOC/test/VOCdevkit/VOC2007/images/000301.jpg -./VOC/test/VOCdevkit/VOC2007/images/000309.jpg -./VOC/test/VOCdevkit/VOC2007/images/000310.jpg -./VOC/test/VOCdevkit/VOC2007/images/000313.jpg -./VOC/test/VOCdevkit/VOC2007/images/000314.jpg -./VOC/test/VOCdevkit/VOC2007/images/000315.jpg -./VOC/test/VOCdevkit/VOC2007/images/000316.jpg -./VOC/test/VOCdevkit/VOC2007/images/000319.jpg -./VOC/test/VOCdevkit/VOC2007/images/000324.jpg -./VOC/test/VOCdevkit/VOC2007/images/000326.jpg -./VOC/test/VOCdevkit/VOC2007/images/000327.jpg -./VOC/test/VOCdevkit/VOC2007/images/000330.jpg -./VOC/test/VOCdevkit/VOC2007/images/000333.jpg -./VOC/test/VOCdevkit/VOC2007/images/000335.jpg -./VOC/test/VOCdevkit/VOC2007/images/000339.jpg -./VOC/test/VOCdevkit/VOC2007/images/000341.jpg -./VOC/test/VOCdevkit/VOC2007/images/000342.jpg -./VOC/test/VOCdevkit/VOC2007/images/000345.jpg -./VOC/test/VOCdevkit/VOC2007/images/000346.jpg -./VOC/test/VOCdevkit/VOC2007/images/000348.jpg -./VOC/test/VOCdevkit/VOC2007/images/000350.jpg -./VOC/test/VOCdevkit/VOC2007/images/000351.jpg -./VOC/test/VOCdevkit/VOC2007/images/000353.jpg -./VOC/test/VOCdevkit/VOC2007/images/000356.jpg -./VOC/test/VOCdevkit/VOC2007/images/000357.jpg -./VOC/test/VOCdevkit/VOC2007/images/000358.jpg -./VOC/test/VOCdevkit/VOC2007/images/000360.jpg -./VOC/test/VOCdevkit/VOC2007/images/000361.jpg -./VOC/test/VOCdevkit/VOC2007/images/000362.jpg -./VOC/test/VOCdevkit/VOC2007/images/000364.jpg -./VOC/test/VOCdevkit/VOC2007/images/000365.jpg -./VOC/test/VOCdevkit/VOC2007/images/000366.jpg -./VOC/test/VOCdevkit/VOC2007/images/000368.jpg -./VOC/test/VOCdevkit/VOC2007/images/000369.jpg -./VOC/test/VOCdevkit/VOC2007/images/000371.jpg -./VOC/test/VOCdevkit/VOC2007/images/000375.jpg -./VOC/test/VOCdevkit/VOC2007/images/000376.jpg -./VOC/test/VOCdevkit/VOC2007/images/000377.jpg -./VOC/test/VOCdevkit/VOC2007/images/000378.jpg -./VOC/test/VOCdevkit/VOC2007/images/000383.jpg -./VOC/test/VOCdevkit/VOC2007/images/000384.jpg -./VOC/test/VOCdevkit/VOC2007/images/000385.jpg -./VOC/test/VOCdevkit/VOC2007/images/000386.jpg -./VOC/test/VOCdevkit/VOC2007/images/000388.jpg -./VOC/test/VOCdevkit/VOC2007/images/000389.jpg -./VOC/test/VOCdevkit/VOC2007/images/000390.jpg -./VOC/test/VOCdevkit/VOC2007/images/000392.jpg -./VOC/test/VOCdevkit/VOC2007/images/000393.jpg -./VOC/test/VOCdevkit/VOC2007/images/000397.jpg -./VOC/test/VOCdevkit/VOC2007/images/000398.jpg -./VOC/test/VOCdevkit/VOC2007/images/000399.jpg -./VOC/test/VOCdevkit/VOC2007/images/000401.jpg -./VOC/test/VOCdevkit/VOC2007/images/000402.jpg -./VOC/test/VOCdevkit/VOC2007/images/000405.jpg -./VOC/test/VOCdevkit/VOC2007/images/000409.jpg -./VOC/test/VOCdevkit/VOC2007/images/000410.jpg -./VOC/test/VOCdevkit/VOC2007/images/000412.jpg -./VOC/test/VOCdevkit/VOC2007/images/000413.jpg -./VOC/test/VOCdevkit/VOC2007/images/000414.jpg -./VOC/test/VOCdevkit/VOC2007/images/000415.jpg -./VOC/test/VOCdevkit/VOC2007/images/000418.jpg -./VOC/test/VOCdevkit/VOC2007/images/000421.jpg -./VOC/test/VOCdevkit/VOC2007/images/000422.jpg -./VOC/test/VOCdevkit/VOC2007/images/000423.jpg -./VOC/test/VOCdevkit/VOC2007/images/000425.jpg -./VOC/test/VOCdevkit/VOC2007/images/000426.jpg -./VOC/test/VOCdevkit/VOC2007/images/000429.jpg -./VOC/test/VOCdevkit/VOC2007/images/000432.jpg -./VOC/test/VOCdevkit/VOC2007/images/000434.jpg -./VOC/test/VOCdevkit/VOC2007/images/000436.jpg -./VOC/test/VOCdevkit/VOC2007/images/000437.jpg -./VOC/test/VOCdevkit/VOC2007/images/000440.jpg -./VOC/test/VOCdevkit/VOC2007/images/000441.jpg -./VOC/test/VOCdevkit/VOC2007/images/000442.jpg -./VOC/test/VOCdevkit/VOC2007/images/000444.jpg -./VOC/test/VOCdevkit/VOC2007/images/000445.jpg -./VOC/test/VOCdevkit/VOC2007/images/000447.jpg -./VOC/test/VOCdevkit/VOC2007/images/000449.jpg -./VOC/test/VOCdevkit/VOC2007/images/000451.jpg -./VOC/test/VOCdevkit/VOC2007/images/000452.jpg -./VOC/test/VOCdevkit/VOC2007/images/000453.jpg -./VOC/test/VOCdevkit/VOC2007/images/000455.jpg -./VOC/test/VOCdevkit/VOC2007/images/000456.jpg -./VOC/test/VOCdevkit/VOC2007/images/000457.jpg -./VOC/test/VOCdevkit/VOC2007/images/000458.jpg -./VOC/test/VOCdevkit/VOC2007/images/000465.jpg -./VOC/test/VOCdevkit/VOC2007/images/000466.jpg -./VOC/test/VOCdevkit/VOC2007/images/000467.jpg -./VOC/test/VOCdevkit/VOC2007/images/000471.jpg -./VOC/test/VOCdevkit/VOC2007/images/000472.jpg -./VOC/test/VOCdevkit/VOC2007/images/000473.jpg -./VOC/test/VOCdevkit/VOC2007/images/000475.jpg -./VOC/test/VOCdevkit/VOC2007/images/000478.jpg -./VOC/test/VOCdevkit/VOC2007/images/000479.jpg -./VOC/test/VOCdevkit/VOC2007/images/000481.jpg -./VOC/test/VOCdevkit/VOC2007/images/000485.jpg -./VOC/test/VOCdevkit/VOC2007/images/000487.jpg -./VOC/test/VOCdevkit/VOC2007/images/000488.jpg -./VOC/test/VOCdevkit/VOC2007/images/000490.jpg -./VOC/test/VOCdevkit/VOC2007/images/000493.jpg -./VOC/test/VOCdevkit/VOC2007/images/000495.jpg -./VOC/test/VOCdevkit/VOC2007/images/000497.jpg -./VOC/test/VOCdevkit/VOC2007/images/000502.jpg -./VOC/test/VOCdevkit/VOC2007/images/000504.jpg -./VOC/test/VOCdevkit/VOC2007/images/000505.jpg -./VOC/test/VOCdevkit/VOC2007/images/000506.jpg -./VOC/test/VOCdevkit/VOC2007/images/000507.jpg -./VOC/test/VOCdevkit/VOC2007/images/000510.jpg -./VOC/test/VOCdevkit/VOC2007/images/000511.jpg -./VOC/test/VOCdevkit/VOC2007/images/000512.jpg -./VOC/test/VOCdevkit/VOC2007/images/000517.jpg -./VOC/test/VOCdevkit/VOC2007/images/000521.jpg -./VOC/test/VOCdevkit/VOC2007/images/000527.jpg -./VOC/test/VOCdevkit/VOC2007/images/000529.jpg -./VOC/test/VOCdevkit/VOC2007/images/000532.jpg -./VOC/test/VOCdevkit/VOC2007/images/000533.jpg -./VOC/test/VOCdevkit/VOC2007/images/000534.jpg -./VOC/test/VOCdevkit/VOC2007/images/000536.jpg -./VOC/test/VOCdevkit/VOC2007/images/000538.jpg -./VOC/test/VOCdevkit/VOC2007/images/000539.jpg -./VOC/test/VOCdevkit/VOC2007/images/000542.jpg -./VOC/test/VOCdevkit/VOC2007/images/000546.jpg -./VOC/test/VOCdevkit/VOC2007/images/000547.jpg -./VOC/test/VOCdevkit/VOC2007/images/000548.jpg -./VOC/test/VOCdevkit/VOC2007/images/000551.jpg -./VOC/test/VOCdevkit/VOC2007/images/000553.jpg -./VOC/test/VOCdevkit/VOC2007/images/000556.jpg -./VOC/test/VOCdevkit/VOC2007/images/000557.jpg -./VOC/test/VOCdevkit/VOC2007/images/000558.jpg -./VOC/test/VOCdevkit/VOC2007/images/000560.jpg -./VOC/test/VOCdevkit/VOC2007/images/000561.jpg -./VOC/test/VOCdevkit/VOC2007/images/000562.jpg -./VOC/test/VOCdevkit/VOC2007/images/000566.jpg -./VOC/test/VOCdevkit/VOC2007/images/000567.jpg -./VOC/test/VOCdevkit/VOC2007/images/000568.jpg -./VOC/test/VOCdevkit/VOC2007/images/000569.jpg -./VOC/test/VOCdevkit/VOC2007/images/000570.jpg -./VOC/test/VOCdevkit/VOC2007/images/000571.jpg -./VOC/test/VOCdevkit/VOC2007/images/000572.jpg -./VOC/test/VOCdevkit/VOC2007/images/000573.jpg -./VOC/test/VOCdevkit/VOC2007/images/000574.jpg -./VOC/test/VOCdevkit/VOC2007/images/000575.jpg -./VOC/test/VOCdevkit/VOC2007/images/000576.jpg -./VOC/test/VOCdevkit/VOC2007/images/000578.jpg -./VOC/test/VOCdevkit/VOC2007/images/000580.jpg -./VOC/test/VOCdevkit/VOC2007/images/000584.jpg -./VOC/test/VOCdevkit/VOC2007/images/000585.jpg -./VOC/test/VOCdevkit/VOC2007/images/000586.jpg -./VOC/test/VOCdevkit/VOC2007/images/000587.jpg -./VOC/test/VOCdevkit/VOC2007/images/000593.jpg -./VOC/test/VOCdevkit/VOC2007/images/000594.jpg -./VOC/test/VOCdevkit/VOC2007/images/000595.jpg -./VOC/test/VOCdevkit/VOC2007/images/000596.jpg -./VOC/test/VOCdevkit/VOC2007/images/000600.jpg -./VOC/test/VOCdevkit/VOC2007/images/000602.jpg -./VOC/test/VOCdevkit/VOC2007/images/000603.jpg -./VOC/test/VOCdevkit/VOC2007/images/000604.jpg -./VOC/test/VOCdevkit/VOC2007/images/000606.jpg -./VOC/test/VOCdevkit/VOC2007/images/000607.jpg -./VOC/test/VOCdevkit/VOC2007/images/000611.jpg -./VOC/test/VOCdevkit/VOC2007/images/000614.jpg -./VOC/test/VOCdevkit/VOC2007/images/000615.jpg -./VOC/test/VOCdevkit/VOC2007/images/000616.jpg -./VOC/test/VOCdevkit/VOC2007/images/000617.jpg -./VOC/test/VOCdevkit/VOC2007/images/000618.jpg -./VOC/test/VOCdevkit/VOC2007/images/000621.jpg -./VOC/test/VOCdevkit/VOC2007/images/000623.jpg -./VOC/test/VOCdevkit/VOC2007/images/000624.jpg -./VOC/test/VOCdevkit/VOC2007/images/000627.jpg -./VOC/test/VOCdevkit/VOC2007/images/000629.jpg -./VOC/test/VOCdevkit/VOC2007/images/000630.jpg -./VOC/test/VOCdevkit/VOC2007/images/000631.jpg -./VOC/test/VOCdevkit/VOC2007/images/000634.jpg -./VOC/test/VOCdevkit/VOC2007/images/000636.jpg -./VOC/test/VOCdevkit/VOC2007/images/000638.jpg -./VOC/test/VOCdevkit/VOC2007/images/000639.jpg -./VOC/test/VOCdevkit/VOC2007/images/000640.jpg -./VOC/test/VOCdevkit/VOC2007/images/000641.jpg -./VOC/test/VOCdevkit/VOC2007/images/000642.jpg -./VOC/test/VOCdevkit/VOC2007/images/000643.jpg -./VOC/test/VOCdevkit/VOC2007/images/000644.jpg -./VOC/test/VOCdevkit/VOC2007/images/000646.jpg -./VOC/test/VOCdevkit/VOC2007/images/000649.jpg -./VOC/test/VOCdevkit/VOC2007/images/000650.jpg -./VOC/test/VOCdevkit/VOC2007/images/000651.jpg -./VOC/test/VOCdevkit/VOC2007/images/000652.jpg -./VOC/test/VOCdevkit/VOC2007/images/000655.jpg -./VOC/test/VOCdevkit/VOC2007/images/000658.jpg -./VOC/test/VOCdevkit/VOC2007/images/000659.jpg -./VOC/test/VOCdevkit/VOC2007/images/000662.jpg -./VOC/test/VOCdevkit/VOC2007/images/000664.jpg -./VOC/test/VOCdevkit/VOC2007/images/000665.jpg -./VOC/test/VOCdevkit/VOC2007/images/000666.jpg -./VOC/test/VOCdevkit/VOC2007/images/000668.jpg -./VOC/test/VOCdevkit/VOC2007/images/000669.jpg -./VOC/test/VOCdevkit/VOC2007/images/000670.jpg -./VOC/test/VOCdevkit/VOC2007/images/000673.jpg -./VOC/test/VOCdevkit/VOC2007/images/000674.jpg -./VOC/test/VOCdevkit/VOC2007/images/000678.jpg -./VOC/test/VOCdevkit/VOC2007/images/000679.jpg -./VOC/test/VOCdevkit/VOC2007/images/000681.jpg -./VOC/test/VOCdevkit/VOC2007/images/000683.jpg -./VOC/test/VOCdevkit/VOC2007/images/000687.jpg -./VOC/test/VOCdevkit/VOC2007/images/000691.jpg -./VOC/test/VOCdevkit/VOC2007/images/000692.jpg -./VOC/test/VOCdevkit/VOC2007/images/000693.jpg -./VOC/test/VOCdevkit/VOC2007/images/000696.jpg -./VOC/test/VOCdevkit/VOC2007/images/000697.jpg -./VOC/test/VOCdevkit/VOC2007/images/000698.jpg -./VOC/test/VOCdevkit/VOC2007/images/000701.jpg -./VOC/test/VOCdevkit/VOC2007/images/000703.jpg -./VOC/test/VOCdevkit/VOC2007/images/000704.jpg -./VOC/test/VOCdevkit/VOC2007/images/000706.jpg -./VOC/test/VOCdevkit/VOC2007/images/000708.jpg -./VOC/test/VOCdevkit/VOC2007/images/000715.jpg -./VOC/test/VOCdevkit/VOC2007/images/000716.jpg -./VOC/test/VOCdevkit/VOC2007/images/000718.jpg -./VOC/test/VOCdevkit/VOC2007/images/000719.jpg -./VOC/test/VOCdevkit/VOC2007/images/000721.jpg -./VOC/test/VOCdevkit/VOC2007/images/000722.jpg -./VOC/test/VOCdevkit/VOC2007/images/000723.jpg -./VOC/test/VOCdevkit/VOC2007/images/000724.jpg -./VOC/test/VOCdevkit/VOC2007/images/000725.jpg -./VOC/test/VOCdevkit/VOC2007/images/000727.jpg -./VOC/test/VOCdevkit/VOC2007/images/000732.jpg -./VOC/test/VOCdevkit/VOC2007/images/000734.jpg -./VOC/test/VOCdevkit/VOC2007/images/000735.jpg -./VOC/test/VOCdevkit/VOC2007/images/000736.jpg -./VOC/test/VOCdevkit/VOC2007/images/000737.jpg -./VOC/test/VOCdevkit/VOC2007/images/000741.jpg -./VOC/test/VOCdevkit/VOC2007/images/000743.jpg -./VOC/test/VOCdevkit/VOC2007/images/000744.jpg -./VOC/test/VOCdevkit/VOC2007/images/000745.jpg -./VOC/test/VOCdevkit/VOC2007/images/000747.jpg -./VOC/test/VOCdevkit/VOC2007/images/000749.jpg -./VOC/test/VOCdevkit/VOC2007/images/000751.jpg -./VOC/test/VOCdevkit/VOC2007/images/000757.jpg -./VOC/test/VOCdevkit/VOC2007/images/000758.jpg -./VOC/test/VOCdevkit/VOC2007/images/000759.jpg -./VOC/test/VOCdevkit/VOC2007/images/000762.jpg -./VOC/test/VOCdevkit/VOC2007/images/000765.jpg -./VOC/test/VOCdevkit/VOC2007/images/000766.jpg -./VOC/test/VOCdevkit/VOC2007/images/000769.jpg -./VOC/test/VOCdevkit/VOC2007/images/000773.jpg -./VOC/test/VOCdevkit/VOC2007/images/000775.jpg -./VOC/test/VOCdevkit/VOC2007/images/000778.jpg -./VOC/test/VOCdevkit/VOC2007/images/000779.jpg -./VOC/test/VOCdevkit/VOC2007/images/000781.jpg -./VOC/test/VOCdevkit/VOC2007/images/000783.jpg -./VOC/test/VOCdevkit/VOC2007/images/000784.jpg -./VOC/test/VOCdevkit/VOC2007/images/000785.jpg -./VOC/test/VOCdevkit/VOC2007/images/000788.jpg -./VOC/test/VOCdevkit/VOC2007/images/000789.jpg -./VOC/test/VOCdevkit/VOC2007/images/000790.jpg -./VOC/test/VOCdevkit/VOC2007/images/000792.jpg -./VOC/test/VOCdevkit/VOC2007/images/000795.jpg -./VOC/test/VOCdevkit/VOC2007/images/000798.jpg -./VOC/test/VOCdevkit/VOC2007/images/000801.jpg -./VOC/test/VOCdevkit/VOC2007/images/000803.jpg -./VOC/test/VOCdevkit/VOC2007/images/000807.jpg -./VOC/test/VOCdevkit/VOC2007/images/000809.jpg -./VOC/test/VOCdevkit/VOC2007/images/000811.jpg -./VOC/test/VOCdevkit/VOC2007/images/000813.jpg -./VOC/test/VOCdevkit/VOC2007/images/000817.jpg -./VOC/test/VOCdevkit/VOC2007/images/000819.jpg -./VOC/test/VOCdevkit/VOC2007/images/000821.jpg -./VOC/test/VOCdevkit/VOC2007/images/000824.jpg -./VOC/test/VOCdevkit/VOC2007/images/000825.jpg -./VOC/test/VOCdevkit/VOC2007/images/000833.jpg -./VOC/test/VOCdevkit/VOC2007/images/000835.jpg -./VOC/test/VOCdevkit/VOC2007/images/000836.jpg -./VOC/test/VOCdevkit/VOC2007/images/000837.jpg -./VOC/test/VOCdevkit/VOC2007/images/000838.jpg -./VOC/test/VOCdevkit/VOC2007/images/000839.jpg -./VOC/test/VOCdevkit/VOC2007/images/000840.jpg -./VOC/test/VOCdevkit/VOC2007/images/000841.jpg -./VOC/test/VOCdevkit/VOC2007/images/000844.jpg -./VOC/test/VOCdevkit/VOC2007/images/000846.jpg -./VOC/test/VOCdevkit/VOC2007/images/000852.jpg -./VOC/test/VOCdevkit/VOC2007/images/000853.jpg -./VOC/test/VOCdevkit/VOC2007/images/000856.jpg -./VOC/test/VOCdevkit/VOC2007/images/000858.jpg -./VOC/test/VOCdevkit/VOC2007/images/000861.jpg -./VOC/test/VOCdevkit/VOC2007/images/000864.jpg -./VOC/test/VOCdevkit/VOC2007/images/000866.jpg -./VOC/test/VOCdevkit/VOC2007/images/000869.jpg -./VOC/test/VOCdevkit/VOC2007/images/000870.jpg -./VOC/test/VOCdevkit/VOC2007/images/000873.jpg -./VOC/test/VOCdevkit/VOC2007/images/000875.jpg -./VOC/test/VOCdevkit/VOC2007/images/000877.jpg -./VOC/test/VOCdevkit/VOC2007/images/000881.jpg -./VOC/test/VOCdevkit/VOC2007/images/000883.jpg -./VOC/test/VOCdevkit/VOC2007/images/000884.jpg -./VOC/test/VOCdevkit/VOC2007/images/000886.jpg -./VOC/test/VOCdevkit/VOC2007/images/000890.jpg -./VOC/test/VOCdevkit/VOC2007/images/000891.jpg -./VOC/test/VOCdevkit/VOC2007/images/000893.jpg -./VOC/test/VOCdevkit/VOC2007/images/000894.jpg -./VOC/test/VOCdevkit/VOC2007/images/000897.jpg -./VOC/test/VOCdevkit/VOC2007/images/000901.jpg -./VOC/test/VOCdevkit/VOC2007/images/000905.jpg -./VOC/test/VOCdevkit/VOC2007/images/000907.jpg -./VOC/test/VOCdevkit/VOC2007/images/000909.jpg -./VOC/test/VOCdevkit/VOC2007/images/000910.jpg -./VOC/test/VOCdevkit/VOC2007/images/000913.jpg -./VOC/test/VOCdevkit/VOC2007/images/000914.jpg -./VOC/test/VOCdevkit/VOC2007/images/000916.jpg -./VOC/test/VOCdevkit/VOC2007/images/000922.jpg -./VOC/test/VOCdevkit/VOC2007/images/000924.jpg -./VOC/test/VOCdevkit/VOC2007/images/000925.jpg -./VOC/test/VOCdevkit/VOC2007/images/000927.jpg -./VOC/test/VOCdevkit/VOC2007/images/000928.jpg -./VOC/test/VOCdevkit/VOC2007/images/000930.jpg -./VOC/test/VOCdevkit/VOC2007/images/000932.jpg -./VOC/test/VOCdevkit/VOC2007/images/000933.jpg -./VOC/test/VOCdevkit/VOC2007/images/000938.jpg -./VOC/test/VOCdevkit/VOC2007/images/000939.jpg -./VOC/test/VOCdevkit/VOC2007/images/000940.jpg -./VOC/test/VOCdevkit/VOC2007/images/000941.jpg -./VOC/test/VOCdevkit/VOC2007/images/000942.jpg -./VOC/test/VOCdevkit/VOC2007/images/000944.jpg -./VOC/test/VOCdevkit/VOC2007/images/000945.jpg -./VOC/test/VOCdevkit/VOC2007/images/000952.jpg -./VOC/test/VOCdevkit/VOC2007/images/000953.jpg -./VOC/test/VOCdevkit/VOC2007/images/000955.jpg -./VOC/test/VOCdevkit/VOC2007/images/000956.jpg -./VOC/test/VOCdevkit/VOC2007/images/000957.jpg -./VOC/test/VOCdevkit/VOC2007/images/000959.jpg -./VOC/test/VOCdevkit/VOC2007/images/000960.jpg -./VOC/test/VOCdevkit/VOC2007/images/000961.jpg -./VOC/test/VOCdevkit/VOC2007/images/000963.jpg -./VOC/test/VOCdevkit/VOC2007/images/000968.jpg -./VOC/test/VOCdevkit/VOC2007/images/000969.jpg -./VOC/test/VOCdevkit/VOC2007/images/000970.jpg -./VOC/test/VOCdevkit/VOC2007/images/000974.jpg -./VOC/test/VOCdevkit/VOC2007/images/000975.jpg -./VOC/test/VOCdevkit/VOC2007/images/000976.jpg -./VOC/test/VOCdevkit/VOC2007/images/000978.jpg -./VOC/test/VOCdevkit/VOC2007/images/000979.jpg -./VOC/test/VOCdevkit/VOC2007/images/000981.jpg -./VOC/test/VOCdevkit/VOC2007/images/000983.jpg -./VOC/test/VOCdevkit/VOC2007/images/000984.jpg -./VOC/test/VOCdevkit/VOC2007/images/000985.jpg -./VOC/test/VOCdevkit/VOC2007/images/000986.jpg -./VOC/test/VOCdevkit/VOC2007/images/000988.jpg -./VOC/test/VOCdevkit/VOC2007/images/000990.jpg -./VOC/test/VOCdevkit/VOC2007/images/000992.jpg -./VOC/test/VOCdevkit/VOC2007/images/000994.jpg -./VOC/test/VOCdevkit/VOC2007/images/000995.jpg -./VOC/test/VOCdevkit/VOC2007/images/000998.jpg -./VOC/test/VOCdevkit/VOC2007/images/001000.jpg -./VOC/test/VOCdevkit/VOC2007/images/001003.jpg -./VOC/test/VOCdevkit/VOC2007/images/001005.jpg -./VOC/test/VOCdevkit/VOC2007/images/001006.jpg -./VOC/test/VOCdevkit/VOC2007/images/001007.jpg -./VOC/test/VOCdevkit/VOC2007/images/001013.jpg -./VOC/test/VOCdevkit/VOC2007/images/001016.jpg -./VOC/test/VOCdevkit/VOC2007/images/001019.jpg -./VOC/test/VOCdevkit/VOC2007/images/001020.jpg -./VOC/test/VOCdevkit/VOC2007/images/001021.jpg -./VOC/test/VOCdevkit/VOC2007/images/001022.jpg -./VOC/test/VOCdevkit/VOC2007/images/001023.jpg -./VOC/test/VOCdevkit/VOC2007/images/001025.jpg -./VOC/test/VOCdevkit/VOC2007/images/001026.jpg -./VOC/test/VOCdevkit/VOC2007/images/001029.jpg -./VOC/test/VOCdevkit/VOC2007/images/001030.jpg -./VOC/test/VOCdevkit/VOC2007/images/001031.jpg -./VOC/test/VOCdevkit/VOC2007/images/001032.jpg -./VOC/test/VOCdevkit/VOC2007/images/001033.jpg -./VOC/test/VOCdevkit/VOC2007/images/001034.jpg -./VOC/test/VOCdevkit/VOC2007/images/001035.jpg -./VOC/test/VOCdevkit/VOC2007/images/001037.jpg -./VOC/test/VOCdevkit/VOC2007/images/001038.jpg -./VOC/test/VOCdevkit/VOC2007/images/001039.jpg -./VOC/test/VOCdevkit/VOC2007/images/001040.jpg -./VOC/test/VOCdevkit/VOC2007/images/001044.jpg -./VOC/test/VOCdevkit/VOC2007/images/001046.jpg -./VOC/test/VOCdevkit/VOC2007/images/001047.jpg -./VOC/test/VOCdevkit/VOC2007/images/001048.jpg -./VOC/test/VOCdevkit/VOC2007/images/001049.jpg -./VOC/test/VOCdevkit/VOC2007/images/001051.jpg -./VOC/test/VOCdevkit/VOC2007/images/001054.jpg -./VOC/test/VOCdevkit/VOC2007/images/001055.jpg -./VOC/test/VOCdevkit/VOC2007/images/001058.jpg -./VOC/test/VOCdevkit/VOC2007/images/001059.jpg -./VOC/test/VOCdevkit/VOC2007/images/001063.jpg -./VOC/test/VOCdevkit/VOC2007/images/001065.jpg -./VOC/test/VOCdevkit/VOC2007/images/001067.jpg -./VOC/test/VOCdevkit/VOC2007/images/001070.jpg -./VOC/test/VOCdevkit/VOC2007/images/001075.jpg -./VOC/test/VOCdevkit/VOC2007/images/001076.jpg -./VOC/test/VOCdevkit/VOC2007/images/001080.jpg -./VOC/test/VOCdevkit/VOC2007/images/001081.jpg -./VOC/test/VOCdevkit/VOC2007/images/001085.jpg -./VOC/test/VOCdevkit/VOC2007/images/001086.jpg -./VOC/test/VOCdevkit/VOC2007/images/001087.jpg -./VOC/test/VOCdevkit/VOC2007/images/001088.jpg -./VOC/test/VOCdevkit/VOC2007/images/001089.jpg -./VOC/test/VOCdevkit/VOC2007/images/001090.jpg -./VOC/test/VOCdevkit/VOC2007/images/001094.jpg -./VOC/test/VOCdevkit/VOC2007/images/001095.jpg -./VOC/test/VOCdevkit/VOC2007/images/001096.jpg -./VOC/test/VOCdevkit/VOC2007/images/001098.jpg -./VOC/test/VOCdevkit/VOC2007/images/001099.jpg -./VOC/test/VOCdevkit/VOC2007/images/001100.jpg -./VOC/test/VOCdevkit/VOC2007/images/001103.jpg -./VOC/test/VOCdevkit/VOC2007/images/001105.jpg -./VOC/test/VOCdevkit/VOC2007/images/001108.jpg -./VOC/test/VOCdevkit/VOC2007/images/001111.jpg -./VOC/test/VOCdevkit/VOC2007/images/001114.jpg -./VOC/test/VOCdevkit/VOC2007/images/001115.jpg -./VOC/test/VOCdevkit/VOC2007/images/001116.jpg -./VOC/test/VOCdevkit/VOC2007/images/001117.jpg -./VOC/test/VOCdevkit/VOC2007/images/001118.jpg -./VOC/test/VOCdevkit/VOC2007/images/001120.jpg -./VOC/test/VOCdevkit/VOC2007/images/001122.jpg -./VOC/test/VOCdevkit/VOC2007/images/001123.jpg -./VOC/test/VOCdevkit/VOC2007/images/001126.jpg -./VOC/test/VOCdevkit/VOC2007/images/001128.jpg -./VOC/test/VOCdevkit/VOC2007/images/001131.jpg -./VOC/test/VOCdevkit/VOC2007/images/001132.jpg -./VOC/test/VOCdevkit/VOC2007/images/001133.jpg -./VOC/test/VOCdevkit/VOC2007/images/001134.jpg -./VOC/test/VOCdevkit/VOC2007/images/001135.jpg -./VOC/test/VOCdevkit/VOC2007/images/001138.jpg -./VOC/test/VOCdevkit/VOC2007/images/001139.jpg -./VOC/test/VOCdevkit/VOC2007/images/001141.jpg -./VOC/test/VOCdevkit/VOC2007/images/001146.jpg -./VOC/test/VOCdevkit/VOC2007/images/001150.jpg -./VOC/test/VOCdevkit/VOC2007/images/001153.jpg -./VOC/test/VOCdevkit/VOC2007/images/001155.jpg -./VOC/test/VOCdevkit/VOC2007/images/001157.jpg -./VOC/test/VOCdevkit/VOC2007/images/001159.jpg -./VOC/test/VOCdevkit/VOC2007/images/001162.jpg -./VOC/test/VOCdevkit/VOC2007/images/001163.jpg -./VOC/test/VOCdevkit/VOC2007/images/001165.jpg -./VOC/test/VOCdevkit/VOC2007/images/001167.jpg -./VOC/test/VOCdevkit/VOC2007/images/001169.jpg -./VOC/test/VOCdevkit/VOC2007/images/001173.jpg -./VOC/test/VOCdevkit/VOC2007/images/001177.jpg -./VOC/test/VOCdevkit/VOC2007/images/001178.jpg -./VOC/test/VOCdevkit/VOC2007/images/001179.jpg -./VOC/test/VOCdevkit/VOC2007/images/001180.jpg -./VOC/test/VOCdevkit/VOC2007/images/001181.jpg -./VOC/test/VOCdevkit/VOC2007/images/001183.jpg -./VOC/test/VOCdevkit/VOC2007/images/001188.jpg -./VOC/test/VOCdevkit/VOC2007/images/001189.jpg -./VOC/test/VOCdevkit/VOC2007/images/001190.jpg -./VOC/test/VOCdevkit/VOC2007/images/001193.jpg -./VOC/test/VOCdevkit/VOC2007/images/001195.jpg -./VOC/test/VOCdevkit/VOC2007/images/001196.jpg -./VOC/test/VOCdevkit/VOC2007/images/001197.jpg -./VOC/test/VOCdevkit/VOC2007/images/001198.jpg -./VOC/test/VOCdevkit/VOC2007/images/001202.jpg -./VOC/test/VOCdevkit/VOC2007/images/001208.jpg -./VOC/test/VOCdevkit/VOC2007/images/001210.jpg -./VOC/test/VOCdevkit/VOC2007/images/001213.jpg -./VOC/test/VOCdevkit/VOC2007/images/001216.jpg -./VOC/test/VOCdevkit/VOC2007/images/001217.jpg -./VOC/test/VOCdevkit/VOC2007/images/001218.jpg -./VOC/test/VOCdevkit/VOC2007/images/001219.jpg -./VOC/test/VOCdevkit/VOC2007/images/001220.jpg -./VOC/test/VOCdevkit/VOC2007/images/001222.jpg -./VOC/test/VOCdevkit/VOC2007/images/001223.jpg -./VOC/test/VOCdevkit/VOC2007/images/001227.jpg -./VOC/test/VOCdevkit/VOC2007/images/001228.jpg -./VOC/test/VOCdevkit/VOC2007/images/001232.jpg -./VOC/test/VOCdevkit/VOC2007/images/001235.jpg -./VOC/test/VOCdevkit/VOC2007/images/001238.jpg -./VOC/test/VOCdevkit/VOC2007/images/001242.jpg -./VOC/test/VOCdevkit/VOC2007/images/001243.jpg -./VOC/test/VOCdevkit/VOC2007/images/001244.jpg -./VOC/test/VOCdevkit/VOC2007/images/001245.jpg -./VOC/test/VOCdevkit/VOC2007/images/001246.jpg -./VOC/test/VOCdevkit/VOC2007/images/001249.jpg -./VOC/test/VOCdevkit/VOC2007/images/001251.jpg -./VOC/test/VOCdevkit/VOC2007/images/001252.jpg -./VOC/test/VOCdevkit/VOC2007/images/001253.jpg -./VOC/test/VOCdevkit/VOC2007/images/001255.jpg -./VOC/test/VOCdevkit/VOC2007/images/001256.jpg -./VOC/test/VOCdevkit/VOC2007/images/001257.jpg -./VOC/test/VOCdevkit/VOC2007/images/001261.jpg -./VOC/test/VOCdevkit/VOC2007/images/001262.jpg -./VOC/test/VOCdevkit/VOC2007/images/001264.jpg -./VOC/test/VOCdevkit/VOC2007/images/001267.jpg -./VOC/test/VOCdevkit/VOC2007/images/001271.jpg -./VOC/test/VOCdevkit/VOC2007/images/001275.jpg -./VOC/test/VOCdevkit/VOC2007/images/001276.jpg -./VOC/test/VOCdevkit/VOC2007/images/001278.jpg -./VOC/test/VOCdevkit/VOC2007/images/001280.jpg -./VOC/test/VOCdevkit/VOC2007/images/001282.jpg -./VOC/test/VOCdevkit/VOC2007/images/001283.jpg -./VOC/test/VOCdevkit/VOC2007/images/001285.jpg -./VOC/test/VOCdevkit/VOC2007/images/001291.jpg -./VOC/test/VOCdevkit/VOC2007/images/001295.jpg -./VOC/test/VOCdevkit/VOC2007/images/001296.jpg -./VOC/test/VOCdevkit/VOC2007/images/001297.jpg -./VOC/test/VOCdevkit/VOC2007/images/001300.jpg -./VOC/test/VOCdevkit/VOC2007/images/001301.jpg -./VOC/test/VOCdevkit/VOC2007/images/001302.jpg -./VOC/test/VOCdevkit/VOC2007/images/001303.jpg -./VOC/test/VOCdevkit/VOC2007/images/001305.jpg -./VOC/test/VOCdevkit/VOC2007/images/001306.jpg -./VOC/test/VOCdevkit/VOC2007/images/001307.jpg -./VOC/test/VOCdevkit/VOC2007/images/001308.jpg -./VOC/test/VOCdevkit/VOC2007/images/001313.jpg -./VOC/test/VOCdevkit/VOC2007/images/001317.jpg -./VOC/test/VOCdevkit/VOC2007/images/001318.jpg -./VOC/test/VOCdevkit/VOC2007/images/001319.jpg -./VOC/test/VOCdevkit/VOC2007/images/001320.jpg -./VOC/test/VOCdevkit/VOC2007/images/001321.jpg -./VOC/test/VOCdevkit/VOC2007/images/001322.jpg -./VOC/test/VOCdevkit/VOC2007/images/001328.jpg -./VOC/test/VOCdevkit/VOC2007/images/001329.jpg -./VOC/test/VOCdevkit/VOC2007/images/001331.jpg -./VOC/test/VOCdevkit/VOC2007/images/001335.jpg -./VOC/test/VOCdevkit/VOC2007/images/001336.jpg -./VOC/test/VOCdevkit/VOC2007/images/001338.jpg -./VOC/test/VOCdevkit/VOC2007/images/001339.jpg -./VOC/test/VOCdevkit/VOC2007/images/001340.jpg -./VOC/test/VOCdevkit/VOC2007/images/001342.jpg -./VOC/test/VOCdevkit/VOC2007/images/001344.jpg -./VOC/test/VOCdevkit/VOC2007/images/001347.jpg -./VOC/test/VOCdevkit/VOC2007/images/001349.jpg -./VOC/test/VOCdevkit/VOC2007/images/001351.jpg -./VOC/test/VOCdevkit/VOC2007/images/001353.jpg -./VOC/test/VOCdevkit/VOC2007/images/001354.jpg -./VOC/test/VOCdevkit/VOC2007/images/001355.jpg -./VOC/test/VOCdevkit/VOC2007/images/001356.jpg -./VOC/test/VOCdevkit/VOC2007/images/001357.jpg -./VOC/test/VOCdevkit/VOC2007/images/001358.jpg -./VOC/test/VOCdevkit/VOC2007/images/001359.jpg -./VOC/test/VOCdevkit/VOC2007/images/001363.jpg -./VOC/test/VOCdevkit/VOC2007/images/001366.jpg -./VOC/test/VOCdevkit/VOC2007/images/001367.jpg -./VOC/test/VOCdevkit/VOC2007/images/001368.jpg -./VOC/test/VOCdevkit/VOC2007/images/001369.jpg -./VOC/test/VOCdevkit/VOC2007/images/001370.jpg -./VOC/test/VOCdevkit/VOC2007/images/001372.jpg -./VOC/test/VOCdevkit/VOC2007/images/001373.jpg -./VOC/test/VOCdevkit/VOC2007/images/001374.jpg -./VOC/test/VOCdevkit/VOC2007/images/001376.jpg -./VOC/test/VOCdevkit/VOC2007/images/001377.jpg -./VOC/test/VOCdevkit/VOC2007/images/001379.jpg -./VOC/test/VOCdevkit/VOC2007/images/001380.jpg -./VOC/test/VOCdevkit/VOC2007/images/001381.jpg -./VOC/test/VOCdevkit/VOC2007/images/001382.jpg -./VOC/test/VOCdevkit/VOC2007/images/001389.jpg -./VOC/test/VOCdevkit/VOC2007/images/001391.jpg -./VOC/test/VOCdevkit/VOC2007/images/001392.jpg -./VOC/test/VOCdevkit/VOC2007/images/001394.jpg -./VOC/test/VOCdevkit/VOC2007/images/001396.jpg -./VOC/test/VOCdevkit/VOC2007/images/001398.jpg -./VOC/test/VOCdevkit/VOC2007/images/001399.jpg -./VOC/test/VOCdevkit/VOC2007/images/001401.jpg -./VOC/test/VOCdevkit/VOC2007/images/001403.jpg -./VOC/test/VOCdevkit/VOC2007/images/001407.jpg -./VOC/test/VOCdevkit/VOC2007/images/001410.jpg -./VOC/test/VOCdevkit/VOC2007/images/001411.jpg -./VOC/test/VOCdevkit/VOC2007/images/001412.jpg -./VOC/test/VOCdevkit/VOC2007/images/001415.jpg -./VOC/test/VOCdevkit/VOC2007/images/001416.jpg -./VOC/test/VOCdevkit/VOC2007/images/001417.jpg -./VOC/test/VOCdevkit/VOC2007/images/001419.jpg -./VOC/test/VOCdevkit/VOC2007/images/001422.jpg -./VOC/test/VOCdevkit/VOC2007/images/001423.jpg -./VOC/test/VOCdevkit/VOC2007/images/001424.jpg -./VOC/test/VOCdevkit/VOC2007/images/001425.jpg -./VOC/test/VOCdevkit/VOC2007/images/001428.jpg -./VOC/test/VOCdevkit/VOC2007/images/001429.jpg -./VOC/test/VOCdevkit/VOC2007/images/001431.jpg -./VOC/test/VOCdevkit/VOC2007/images/001433.jpg -./VOC/test/VOCdevkit/VOC2007/images/001435.jpg -./VOC/test/VOCdevkit/VOC2007/images/001437.jpg -./VOC/test/VOCdevkit/VOC2007/images/001438.jpg -./VOC/test/VOCdevkit/VOC2007/images/001440.jpg -./VOC/test/VOCdevkit/VOC2007/images/001446.jpg -./VOC/test/VOCdevkit/VOC2007/images/001447.jpg -./VOC/test/VOCdevkit/VOC2007/images/001448.jpg -./VOC/test/VOCdevkit/VOC2007/images/001449.jpg -./VOC/test/VOCdevkit/VOC2007/images/001452.jpg -./VOC/test/VOCdevkit/VOC2007/images/001454.jpg -./VOC/test/VOCdevkit/VOC2007/images/001456.jpg -./VOC/test/VOCdevkit/VOC2007/images/001458.jpg -./VOC/test/VOCdevkit/VOC2007/images/001459.jpg -./VOC/test/VOCdevkit/VOC2007/images/001461.jpg -./VOC/test/VOCdevkit/VOC2007/images/001462.jpg -./VOC/test/VOCdevkit/VOC2007/images/001469.jpg -./VOC/test/VOCdevkit/VOC2007/images/001471.jpg -./VOC/test/VOCdevkit/VOC2007/images/001473.jpg -./VOC/test/VOCdevkit/VOC2007/images/001474.jpg -./VOC/test/VOCdevkit/VOC2007/images/001476.jpg -./VOC/test/VOCdevkit/VOC2007/images/001477.jpg -./VOC/test/VOCdevkit/VOC2007/images/001478.jpg -./VOC/test/VOCdevkit/VOC2007/images/001482.jpg -./VOC/test/VOCdevkit/VOC2007/images/001487.jpg -./VOC/test/VOCdevkit/VOC2007/images/001489.jpg -./VOC/test/VOCdevkit/VOC2007/images/001491.jpg -./VOC/test/VOCdevkit/VOC2007/images/001495.jpg -./VOC/test/VOCdevkit/VOC2007/images/001496.jpg -./VOC/test/VOCdevkit/VOC2007/images/001500.jpg -./VOC/test/VOCdevkit/VOC2007/images/001502.jpg -./VOC/test/VOCdevkit/VOC2007/images/001503.jpg -./VOC/test/VOCdevkit/VOC2007/images/001505.jpg -./VOC/test/VOCdevkit/VOC2007/images/001506.jpg -./VOC/test/VOCdevkit/VOC2007/images/001507.jpg -./VOC/test/VOCdevkit/VOC2007/images/001508.jpg -./VOC/test/VOCdevkit/VOC2007/images/001511.jpg -./VOC/test/VOCdevkit/VOC2007/images/001513.jpg -./VOC/test/VOCdevkit/VOC2007/images/001516.jpg -./VOC/test/VOCdevkit/VOC2007/images/001518.jpg -./VOC/test/VOCdevkit/VOC2007/images/001519.jpg -./VOC/test/VOCdevkit/VOC2007/images/001520.jpg -./VOC/test/VOCdevkit/VOC2007/images/001525.jpg -./VOC/test/VOCdevkit/VOC2007/images/001527.jpg -./VOC/test/VOCdevkit/VOC2007/images/001530.jpg -./VOC/test/VOCdevkit/VOC2007/images/001533.jpg -./VOC/test/VOCdevkit/VOC2007/images/001534.jpg -./VOC/test/VOCdevkit/VOC2007/images/001535.jpg -./VOC/test/VOCdevkit/VOC2007/images/001538.jpg -./VOC/test/VOCdevkit/VOC2007/images/001540.jpg -./VOC/test/VOCdevkit/VOC2007/images/001542.jpg -./VOC/test/VOCdevkit/VOC2007/images/001546.jpg -./VOC/test/VOCdevkit/VOC2007/images/001547.jpg -./VOC/test/VOCdevkit/VOC2007/images/001549.jpg -./VOC/test/VOCdevkit/VOC2007/images/001550.jpg -./VOC/test/VOCdevkit/VOC2007/images/001551.jpg -./VOC/test/VOCdevkit/VOC2007/images/001552.jpg -./VOC/test/VOCdevkit/VOC2007/images/001558.jpg -./VOC/test/VOCdevkit/VOC2007/images/001560.jpg -./VOC/test/VOCdevkit/VOC2007/images/001562.jpg -./VOC/test/VOCdevkit/VOC2007/images/001564.jpg -./VOC/test/VOCdevkit/VOC2007/images/001566.jpg -./VOC/test/VOCdevkit/VOC2007/images/001567.jpg -./VOC/test/VOCdevkit/VOC2007/images/001568.jpg -./VOC/test/VOCdevkit/VOC2007/images/001569.jpg -./VOC/test/VOCdevkit/VOC2007/images/001570.jpg -./VOC/test/VOCdevkit/VOC2007/images/001572.jpg -./VOC/test/VOCdevkit/VOC2007/images/001573.jpg -./VOC/test/VOCdevkit/VOC2007/images/001574.jpg -./VOC/test/VOCdevkit/VOC2007/images/001575.jpg -./VOC/test/VOCdevkit/VOC2007/images/001578.jpg -./VOC/test/VOCdevkit/VOC2007/images/001581.jpg -./VOC/test/VOCdevkit/VOC2007/images/001583.jpg -./VOC/test/VOCdevkit/VOC2007/images/001584.jpg -./VOC/test/VOCdevkit/VOC2007/images/001585.jpg -./VOC/test/VOCdevkit/VOC2007/images/001587.jpg -./VOC/test/VOCdevkit/VOC2007/images/001589.jpg -./VOC/test/VOCdevkit/VOC2007/images/001591.jpg -./VOC/test/VOCdevkit/VOC2007/images/001592.jpg -./VOC/test/VOCdevkit/VOC2007/images/001596.jpg -./VOC/test/VOCdevkit/VOC2007/images/001599.jpg -./VOC/test/VOCdevkit/VOC2007/images/001600.jpg -./VOC/test/VOCdevkit/VOC2007/images/001601.jpg -./VOC/test/VOCdevkit/VOC2007/images/001602.jpg -./VOC/test/VOCdevkit/VOC2007/images/001605.jpg -./VOC/test/VOCdevkit/VOC2007/images/001606.jpg -./VOC/test/VOCdevkit/VOC2007/images/001609.jpg -./VOC/test/VOCdevkit/VOC2007/images/001613.jpg -./VOC/test/VOCdevkit/VOC2007/images/001615.jpg -./VOC/test/VOCdevkit/VOC2007/images/001616.jpg -./VOC/test/VOCdevkit/VOC2007/images/001619.jpg -./VOC/test/VOCdevkit/VOC2007/images/001620.jpg -./VOC/test/VOCdevkit/VOC2007/images/001621.jpg -./VOC/test/VOCdevkit/VOC2007/images/001623.jpg -./VOC/test/VOCdevkit/VOC2007/images/001624.jpg -./VOC/test/VOCdevkit/VOC2007/images/001625.jpg -./VOC/test/VOCdevkit/VOC2007/images/001626.jpg -./VOC/test/VOCdevkit/VOC2007/images/001629.jpg -./VOC/test/VOCdevkit/VOC2007/images/001631.jpg -./VOC/test/VOCdevkit/VOC2007/images/001634.jpg -./VOC/test/VOCdevkit/VOC2007/images/001635.jpg -./VOC/test/VOCdevkit/VOC2007/images/001637.jpg -./VOC/test/VOCdevkit/VOC2007/images/001639.jpg -./VOC/test/VOCdevkit/VOC2007/images/001641.jpg -./VOC/test/VOCdevkit/VOC2007/images/001644.jpg -./VOC/test/VOCdevkit/VOC2007/images/001645.jpg -./VOC/test/VOCdevkit/VOC2007/images/001646.jpg -./VOC/test/VOCdevkit/VOC2007/images/001648.jpg -./VOC/test/VOCdevkit/VOC2007/images/001652.jpg -./VOC/test/VOCdevkit/VOC2007/images/001655.jpg -./VOC/test/VOCdevkit/VOC2007/images/001656.jpg -./VOC/test/VOCdevkit/VOC2007/images/001657.jpg -./VOC/test/VOCdevkit/VOC2007/images/001658.jpg -./VOC/test/VOCdevkit/VOC2007/images/001659.jpg -./VOC/test/VOCdevkit/VOC2007/images/001660.jpg -./VOC/test/VOCdevkit/VOC2007/images/001663.jpg -./VOC/test/VOCdevkit/VOC2007/images/001664.jpg -./VOC/test/VOCdevkit/VOC2007/images/001665.jpg -./VOC/test/VOCdevkit/VOC2007/images/001666.jpg -./VOC/test/VOCdevkit/VOC2007/images/001667.jpg -./VOC/test/VOCdevkit/VOC2007/images/001668.jpg -./VOC/test/VOCdevkit/VOC2007/images/001670.jpg -./VOC/test/VOCdevkit/VOC2007/images/001671.jpg -./VOC/test/VOCdevkit/VOC2007/images/001672.jpg -./VOC/test/VOCdevkit/VOC2007/images/001674.jpg -./VOC/test/VOCdevkit/VOC2007/images/001679.jpg -./VOC/test/VOCdevkit/VOC2007/images/001681.jpg -./VOC/test/VOCdevkit/VOC2007/images/001687.jpg -./VOC/test/VOCdevkit/VOC2007/images/001692.jpg -./VOC/test/VOCdevkit/VOC2007/images/001694.jpg -./VOC/test/VOCdevkit/VOC2007/images/001695.jpg -./VOC/test/VOCdevkit/VOC2007/images/001696.jpg -./VOC/test/VOCdevkit/VOC2007/images/001697.jpg -./VOC/test/VOCdevkit/VOC2007/images/001698.jpg -./VOC/test/VOCdevkit/VOC2007/images/001700.jpg -./VOC/test/VOCdevkit/VOC2007/images/001701.jpg -./VOC/test/VOCdevkit/VOC2007/images/001702.jpg -./VOC/test/VOCdevkit/VOC2007/images/001703.jpg -./VOC/test/VOCdevkit/VOC2007/images/001704.jpg -./VOC/test/VOCdevkit/VOC2007/images/001705.jpg -./VOC/test/VOCdevkit/VOC2007/images/001706.jpg -./VOC/test/VOCdevkit/VOC2007/images/001709.jpg -./VOC/test/VOCdevkit/VOC2007/images/001710.jpg -./VOC/test/VOCdevkit/VOC2007/images/001712.jpg -./VOC/test/VOCdevkit/VOC2007/images/001715.jpg -./VOC/test/VOCdevkit/VOC2007/images/001716.jpg -./VOC/test/VOCdevkit/VOC2007/images/001719.jpg -./VOC/test/VOCdevkit/VOC2007/images/001720.jpg -./VOC/test/VOCdevkit/VOC2007/images/001722.jpg -./VOC/test/VOCdevkit/VOC2007/images/001728.jpg -./VOC/test/VOCdevkit/VOC2007/images/001731.jpg -./VOC/test/VOCdevkit/VOC2007/images/001735.jpg -./VOC/test/VOCdevkit/VOC2007/images/001736.jpg -./VOC/test/VOCdevkit/VOC2007/images/001737.jpg -./VOC/test/VOCdevkit/VOC2007/images/001740.jpg -./VOC/test/VOCdevkit/VOC2007/images/001742.jpg -./VOC/test/VOCdevkit/VOC2007/images/001743.jpg -./VOC/test/VOCdevkit/VOC2007/images/001744.jpg -./VOC/test/VOCdevkit/VOC2007/images/001745.jpg -./VOC/test/VOCdevkit/VOC2007/images/001748.jpg -./VOC/test/VOCdevkit/VOC2007/images/001751.jpg -./VOC/test/VOCdevkit/VOC2007/images/001753.jpg -./VOC/test/VOCdevkit/VOC2007/images/001757.jpg -./VOC/test/VOCdevkit/VOC2007/images/001760.jpg -./VOC/test/VOCdevkit/VOC2007/images/001762.jpg -./VOC/test/VOCdevkit/VOC2007/images/001763.jpg -./VOC/test/VOCdevkit/VOC2007/images/001764.jpg -./VOC/test/VOCdevkit/VOC2007/images/001767.jpg -./VOC/test/VOCdevkit/VOC2007/images/001769.jpg -./VOC/test/VOCdevkit/VOC2007/images/001770.jpg -./VOC/test/VOCdevkit/VOC2007/images/001773.jpg -./VOC/test/VOCdevkit/VOC2007/images/001774.jpg -./VOC/test/VOCdevkit/VOC2007/images/001776.jpg -./VOC/test/VOCdevkit/VOC2007/images/001779.jpg -./VOC/test/VOCdevkit/VOC2007/images/001781.jpg -./VOC/test/VOCdevkit/VOC2007/images/001783.jpg -./VOC/test/VOCdevkit/VOC2007/images/001786.jpg -./VOC/test/VOCdevkit/VOC2007/images/001788.jpg -./VOC/test/VOCdevkit/VOC2007/images/001790.jpg -./VOC/test/VOCdevkit/VOC2007/images/001791.jpg -./VOC/test/VOCdevkit/VOC2007/images/001792.jpg -./VOC/test/VOCdevkit/VOC2007/images/001794.jpg -./VOC/test/VOCdevkit/VOC2007/images/001796.jpg -./VOC/test/VOCdevkit/VOC2007/images/001798.jpg -./VOC/test/VOCdevkit/VOC2007/images/001802.jpg -./VOC/test/VOCdevkit/VOC2007/images/001803.jpg -./VOC/test/VOCdevkit/VOC2007/images/001804.jpg -./VOC/test/VOCdevkit/VOC2007/images/001805.jpg -./VOC/test/VOCdevkit/VOC2007/images/001808.jpg -./VOC/test/VOCdevkit/VOC2007/images/001811.jpg -./VOC/test/VOCdevkit/VOC2007/images/001812.jpg -./VOC/test/VOCdevkit/VOC2007/images/001813.jpg -./VOC/test/VOCdevkit/VOC2007/images/001814.jpg -./VOC/test/VOCdevkit/VOC2007/images/001815.jpg -./VOC/test/VOCdevkit/VOC2007/images/001817.jpg -./VOC/test/VOCdevkit/VOC2007/images/001819.jpg -./VOC/test/VOCdevkit/VOC2007/images/001820.jpg -./VOC/test/VOCdevkit/VOC2007/images/001822.jpg -./VOC/test/VOCdevkit/VOC2007/images/001823.jpg -./VOC/test/VOCdevkit/VOC2007/images/001824.jpg -./VOC/test/VOCdevkit/VOC2007/images/001826.jpg -./VOC/test/VOCdevkit/VOC2007/images/001829.jpg -./VOC/test/VOCdevkit/VOC2007/images/001831.jpg -./VOC/test/VOCdevkit/VOC2007/images/001835.jpg -./VOC/test/VOCdevkit/VOC2007/images/001838.jpg -./VOC/test/VOCdevkit/VOC2007/images/001839.jpg -./VOC/test/VOCdevkit/VOC2007/images/001844.jpg -./VOC/test/VOCdevkit/VOC2007/images/001846.jpg -./VOC/test/VOCdevkit/VOC2007/images/001848.jpg -./VOC/test/VOCdevkit/VOC2007/images/001850.jpg -./VOC/test/VOCdevkit/VOC2007/images/001851.jpg -./VOC/test/VOCdevkit/VOC2007/images/001852.jpg -./VOC/test/VOCdevkit/VOC2007/images/001856.jpg -./VOC/test/VOCdevkit/VOC2007/images/001857.jpg -./VOC/test/VOCdevkit/VOC2007/images/001859.jpg -./VOC/test/VOCdevkit/VOC2007/images/001863.jpg -./VOC/test/VOCdevkit/VOC2007/images/001865.jpg -./VOC/test/VOCdevkit/VOC2007/images/001866.jpg -./VOC/test/VOCdevkit/VOC2007/images/001867.jpg -./VOC/test/VOCdevkit/VOC2007/images/001868.jpg -./VOC/test/VOCdevkit/VOC2007/images/001869.jpg -./VOC/test/VOCdevkit/VOC2007/images/001871.jpg -./VOC/test/VOCdevkit/VOC2007/images/001873.jpg -./VOC/test/VOCdevkit/VOC2007/images/001874.jpg -./VOC/test/VOCdevkit/VOC2007/images/001876.jpg -./VOC/test/VOCdevkit/VOC2007/images/001879.jpg -./VOC/test/VOCdevkit/VOC2007/images/001880.jpg -./VOC/test/VOCdevkit/VOC2007/images/001883.jpg -./VOC/test/VOCdevkit/VOC2007/images/001884.jpg -./VOC/test/VOCdevkit/VOC2007/images/001885.jpg -./VOC/test/VOCdevkit/VOC2007/images/001886.jpg -./VOC/test/VOCdevkit/VOC2007/images/001889.jpg -./VOC/test/VOCdevkit/VOC2007/images/001890.jpg -./VOC/test/VOCdevkit/VOC2007/images/001891.jpg -./VOC/test/VOCdevkit/VOC2007/images/001893.jpg -./VOC/test/VOCdevkit/VOC2007/images/001895.jpg -./VOC/test/VOCdevkit/VOC2007/images/001897.jpg -./VOC/test/VOCdevkit/VOC2007/images/001900.jpg -./VOC/test/VOCdevkit/VOC2007/images/001905.jpg -./VOC/test/VOCdevkit/VOC2007/images/001908.jpg -./VOC/test/VOCdevkit/VOC2007/images/001909.jpg -./VOC/test/VOCdevkit/VOC2007/images/001910.jpg -./VOC/test/VOCdevkit/VOC2007/images/001912.jpg -./VOC/test/VOCdevkit/VOC2007/images/001913.jpg -./VOC/test/VOCdevkit/VOC2007/images/001914.jpg -./VOC/test/VOCdevkit/VOC2007/images/001916.jpg -./VOC/test/VOCdevkit/VOC2007/images/001917.jpg -./VOC/test/VOCdevkit/VOC2007/images/001919.jpg -./VOC/test/VOCdevkit/VOC2007/images/001921.jpg -./VOC/test/VOCdevkit/VOC2007/images/001923.jpg -./VOC/test/VOCdevkit/VOC2007/images/001924.jpg -./VOC/test/VOCdevkit/VOC2007/images/001925.jpg -./VOC/test/VOCdevkit/VOC2007/images/001926.jpg -./VOC/test/VOCdevkit/VOC2007/images/001929.jpg -./VOC/test/VOCdevkit/VOC2007/images/001935.jpg -./VOC/test/VOCdevkit/VOC2007/images/001939.jpg -./VOC/test/VOCdevkit/VOC2007/images/001942.jpg -./VOC/test/VOCdevkit/VOC2007/images/001943.jpg -./VOC/test/VOCdevkit/VOC2007/images/001946.jpg -./VOC/test/VOCdevkit/VOC2007/images/001947.jpg -./VOC/test/VOCdevkit/VOC2007/images/001949.jpg -./VOC/test/VOCdevkit/VOC2007/images/001951.jpg -./VOC/test/VOCdevkit/VOC2007/images/001953.jpg -./VOC/test/VOCdevkit/VOC2007/images/001955.jpg -./VOC/test/VOCdevkit/VOC2007/images/001956.jpg -./VOC/test/VOCdevkit/VOC2007/images/001957.jpg -./VOC/test/VOCdevkit/VOC2007/images/001959.jpg -./VOC/test/VOCdevkit/VOC2007/images/001961.jpg -./VOC/test/VOCdevkit/VOC2007/images/001965.jpg -./VOC/test/VOCdevkit/VOC2007/images/001966.jpg -./VOC/test/VOCdevkit/VOC2007/images/001967.jpg -./VOC/test/VOCdevkit/VOC2007/images/001968.jpg -./VOC/test/VOCdevkit/VOC2007/images/001969.jpg -./VOC/test/VOCdevkit/VOC2007/images/001973.jpg -./VOC/test/VOCdevkit/VOC2007/images/001974.jpg -./VOC/test/VOCdevkit/VOC2007/images/001975.jpg -./VOC/test/VOCdevkit/VOC2007/images/001979.jpg -./VOC/test/VOCdevkit/VOC2007/images/001983.jpg -./VOC/test/VOCdevkit/VOC2007/images/001984.jpg -./VOC/test/VOCdevkit/VOC2007/images/001986.jpg -./VOC/test/VOCdevkit/VOC2007/images/001987.jpg -./VOC/test/VOCdevkit/VOC2007/images/001988.jpg -./VOC/test/VOCdevkit/VOC2007/images/001990.jpg -./VOC/test/VOCdevkit/VOC2007/images/001991.jpg -./VOC/test/VOCdevkit/VOC2007/images/001992.jpg -./VOC/test/VOCdevkit/VOC2007/images/001993.jpg -./VOC/test/VOCdevkit/VOC2007/images/001994.jpg -./VOC/test/VOCdevkit/VOC2007/images/001996.jpg -./VOC/test/VOCdevkit/VOC2007/images/001997.jpg -./VOC/test/VOCdevkit/VOC2007/images/001998.jpg -./VOC/test/VOCdevkit/VOC2007/images/002003.jpg -./VOC/test/VOCdevkit/VOC2007/images/002005.jpg -./VOC/test/VOCdevkit/VOC2007/images/002007.jpg -./VOC/test/VOCdevkit/VOC2007/images/002008.jpg -./VOC/test/VOCdevkit/VOC2007/images/002009.jpg -./VOC/test/VOCdevkit/VOC2007/images/002010.jpg -./VOC/test/VOCdevkit/VOC2007/images/002013.jpg -./VOC/test/VOCdevkit/VOC2007/images/002014.jpg -./VOC/test/VOCdevkit/VOC2007/images/002016.jpg -./VOC/test/VOCdevkit/VOC2007/images/002017.jpg -./VOC/test/VOCdevkit/VOC2007/images/002018.jpg -./VOC/test/VOCdevkit/VOC2007/images/002026.jpg -./VOC/test/VOCdevkit/VOC2007/images/002028.jpg -./VOC/test/VOCdevkit/VOC2007/images/002029.jpg -./VOC/test/VOCdevkit/VOC2007/images/002031.jpg -./VOC/test/VOCdevkit/VOC2007/images/002032.jpg -./VOC/test/VOCdevkit/VOC2007/images/002033.jpg -./VOC/test/VOCdevkit/VOC2007/images/002035.jpg -./VOC/test/VOCdevkit/VOC2007/images/002038.jpg -./VOC/test/VOCdevkit/VOC2007/images/002040.jpg -./VOC/test/VOCdevkit/VOC2007/images/002041.jpg -./VOC/test/VOCdevkit/VOC2007/images/002044.jpg -./VOC/test/VOCdevkit/VOC2007/images/002046.jpg -./VOC/test/VOCdevkit/VOC2007/images/002048.jpg -./VOC/test/VOCdevkit/VOC2007/images/002050.jpg -./VOC/test/VOCdevkit/VOC2007/images/002052.jpg -./VOC/test/VOCdevkit/VOC2007/images/002053.jpg -./VOC/test/VOCdevkit/VOC2007/images/002057.jpg -./VOC/test/VOCdevkit/VOC2007/images/002059.jpg -./VOC/test/VOCdevkit/VOC2007/images/002060.jpg -./VOC/test/VOCdevkit/VOC2007/images/002062.jpg -./VOC/test/VOCdevkit/VOC2007/images/002065.jpg -./VOC/test/VOCdevkit/VOC2007/images/002066.jpg -./VOC/test/VOCdevkit/VOC2007/images/002071.jpg -./VOC/test/VOCdevkit/VOC2007/images/002072.jpg -./VOC/test/VOCdevkit/VOC2007/images/002073.jpg -./VOC/test/VOCdevkit/VOC2007/images/002074.jpg -./VOC/test/VOCdevkit/VOC2007/images/002075.jpg -./VOC/test/VOCdevkit/VOC2007/images/002076.jpg -./VOC/test/VOCdevkit/VOC2007/images/002077.jpg -./VOC/test/VOCdevkit/VOC2007/images/002078.jpg -./VOC/test/VOCdevkit/VOC2007/images/002079.jpg -./VOC/test/VOCdevkit/VOC2007/images/002080.jpg -./VOC/test/VOCdevkit/VOC2007/images/002081.jpg -./VOC/test/VOCdevkit/VOC2007/images/002084.jpg -./VOC/test/VOCdevkit/VOC2007/images/002085.jpg -./VOC/test/VOCdevkit/VOC2007/images/002087.jpg -./VOC/test/VOCdevkit/VOC2007/images/002089.jpg -./VOC/test/VOCdevkit/VOC2007/images/002092.jpg -./VOC/test/VOCdevkit/VOC2007/images/002093.jpg -./VOC/test/VOCdevkit/VOC2007/images/002097.jpg -./VOC/test/VOCdevkit/VOC2007/images/002100.jpg -./VOC/test/VOCdevkit/VOC2007/images/002103.jpg -./VOC/test/VOCdevkit/VOC2007/images/002105.jpg -./VOC/test/VOCdevkit/VOC2007/images/002106.jpg -./VOC/test/VOCdevkit/VOC2007/images/002107.jpg -./VOC/test/VOCdevkit/VOC2007/images/002110.jpg -./VOC/test/VOCdevkit/VOC2007/images/002111.jpg -./VOC/test/VOCdevkit/VOC2007/images/002113.jpg -./VOC/test/VOCdevkit/VOC2007/images/002115.jpg -./VOC/test/VOCdevkit/VOC2007/images/002118.jpg -./VOC/test/VOCdevkit/VOC2007/images/002119.jpg -./VOC/test/VOCdevkit/VOC2007/images/002121.jpg -./VOC/test/VOCdevkit/VOC2007/images/002122.jpg -./VOC/test/VOCdevkit/VOC2007/images/002123.jpg -./VOC/test/VOCdevkit/VOC2007/images/002127.jpg -./VOC/test/VOCdevkit/VOC2007/images/002128.jpg -./VOC/test/VOCdevkit/VOC2007/images/002130.jpg -./VOC/test/VOCdevkit/VOC2007/images/002131.jpg -./VOC/test/VOCdevkit/VOC2007/images/002133.jpg -./VOC/test/VOCdevkit/VOC2007/images/002137.jpg -./VOC/test/VOCdevkit/VOC2007/images/002138.jpg -./VOC/test/VOCdevkit/VOC2007/images/002141.jpg -./VOC/test/VOCdevkit/VOC2007/images/002143.jpg -./VOC/test/VOCdevkit/VOC2007/images/002144.jpg -./VOC/test/VOCdevkit/VOC2007/images/002147.jpg -./VOC/test/VOCdevkit/VOC2007/images/002148.jpg -./VOC/test/VOCdevkit/VOC2007/images/002149.jpg -./VOC/test/VOCdevkit/VOC2007/images/002150.jpg -./VOC/test/VOCdevkit/VOC2007/images/002154.jpg -./VOC/test/VOCdevkit/VOC2007/images/002157.jpg -./VOC/test/VOCdevkit/VOC2007/images/002159.jpg -./VOC/test/VOCdevkit/VOC2007/images/002160.jpg -./VOC/test/VOCdevkit/VOC2007/images/002161.jpg -./VOC/test/VOCdevkit/VOC2007/images/002162.jpg -./VOC/test/VOCdevkit/VOC2007/images/002164.jpg -./VOC/test/VOCdevkit/VOC2007/images/002167.jpg -./VOC/test/VOCdevkit/VOC2007/images/002168.jpg -./VOC/test/VOCdevkit/VOC2007/images/002173.jpg -./VOC/test/VOCdevkit/VOC2007/images/002175.jpg -./VOC/test/VOCdevkit/VOC2007/images/002177.jpg -./VOC/test/VOCdevkit/VOC2007/images/002185.jpg -./VOC/test/VOCdevkit/VOC2007/images/002188.jpg -./VOC/test/VOCdevkit/VOC2007/images/002189.jpg -./VOC/test/VOCdevkit/VOC2007/images/002195.jpg -./VOC/test/VOCdevkit/VOC2007/images/002198.jpg -./VOC/test/VOCdevkit/VOC2007/images/002200.jpg -./VOC/test/VOCdevkit/VOC2007/images/002203.jpg -./VOC/test/VOCdevkit/VOC2007/images/002204.jpg -./VOC/test/VOCdevkit/VOC2007/images/002205.jpg -./VOC/test/VOCdevkit/VOC2007/images/002206.jpg -./VOC/test/VOCdevkit/VOC2007/images/002207.jpg -./VOC/test/VOCdevkit/VOC2007/images/002210.jpg -./VOC/test/VOCdevkit/VOC2007/images/002211.jpg -./VOC/test/VOCdevkit/VOC2007/images/002216.jpg -./VOC/test/VOCdevkit/VOC2007/images/002217.jpg -./VOC/test/VOCdevkit/VOC2007/images/002222.jpg -./VOC/test/VOCdevkit/VOC2007/images/002223.jpg -./VOC/test/VOCdevkit/VOC2007/images/002225.jpg -./VOC/test/VOCdevkit/VOC2007/images/002227.jpg -./VOC/test/VOCdevkit/VOC2007/images/002229.jpg -./VOC/test/VOCdevkit/VOC2007/images/002230.jpg -./VOC/test/VOCdevkit/VOC2007/images/002231.jpg -./VOC/test/VOCdevkit/VOC2007/images/002232.jpg -./VOC/test/VOCdevkit/VOC2007/images/002235.jpg -./VOC/test/VOCdevkit/VOC2007/images/002236.jpg -./VOC/test/VOCdevkit/VOC2007/images/002239.jpg -./VOC/test/VOCdevkit/VOC2007/images/002240.jpg -./VOC/test/VOCdevkit/VOC2007/images/002242.jpg -./VOC/test/VOCdevkit/VOC2007/images/002243.jpg -./VOC/test/VOCdevkit/VOC2007/images/002245.jpg -./VOC/test/VOCdevkit/VOC2007/images/002246.jpg -./VOC/test/VOCdevkit/VOC2007/images/002250.jpg -./VOC/test/VOCdevkit/VOC2007/images/002252.jpg -./VOC/test/VOCdevkit/VOC2007/images/002254.jpg -./VOC/test/VOCdevkit/VOC2007/images/002258.jpg -./VOC/test/VOCdevkit/VOC2007/images/002262.jpg -./VOC/test/VOCdevkit/VOC2007/images/002264.jpg -./VOC/test/VOCdevkit/VOC2007/images/002269.jpg -./VOC/test/VOCdevkit/VOC2007/images/002271.jpg -./VOC/test/VOCdevkit/VOC2007/images/002274.jpg -./VOC/test/VOCdevkit/VOC2007/images/002275.jpg -./VOC/test/VOCdevkit/VOC2007/images/002282.jpg -./VOC/test/VOCdevkit/VOC2007/images/002283.jpg -./VOC/test/VOCdevkit/VOC2007/images/002286.jpg -./VOC/test/VOCdevkit/VOC2007/images/002289.jpg -./VOC/test/VOCdevkit/VOC2007/images/002292.jpg -./VOC/test/VOCdevkit/VOC2007/images/002294.jpg -./VOC/test/VOCdevkit/VOC2007/images/002295.jpg -./VOC/test/VOCdevkit/VOC2007/images/002296.jpg -./VOC/test/VOCdevkit/VOC2007/images/002297.jpg -./VOC/test/VOCdevkit/VOC2007/images/002298.jpg -./VOC/test/VOCdevkit/VOC2007/images/002299.jpg -./VOC/test/VOCdevkit/VOC2007/images/002301.jpg -./VOC/test/VOCdevkit/VOC2007/images/002303.jpg -./VOC/test/VOCdevkit/VOC2007/images/002304.jpg -./VOC/test/VOCdevkit/VOC2007/images/002309.jpg -./VOC/test/VOCdevkit/VOC2007/images/002312.jpg -./VOC/test/VOCdevkit/VOC2007/images/002313.jpg -./VOC/test/VOCdevkit/VOC2007/images/002314.jpg -./VOC/test/VOCdevkit/VOC2007/images/002316.jpg -./VOC/test/VOCdevkit/VOC2007/images/002317.jpg -./VOC/test/VOCdevkit/VOC2007/images/002319.jpg -./VOC/test/VOCdevkit/VOC2007/images/002322.jpg -./VOC/test/VOCdevkit/VOC2007/images/002325.jpg -./VOC/test/VOCdevkit/VOC2007/images/002326.jpg -./VOC/test/VOCdevkit/VOC2007/images/002327.jpg -./VOC/test/VOCdevkit/VOC2007/images/002331.jpg -./VOC/test/VOCdevkit/VOC2007/images/002336.jpg -./VOC/test/VOCdevkit/VOC2007/images/002338.jpg -./VOC/test/VOCdevkit/VOC2007/images/002339.jpg -./VOC/test/VOCdevkit/VOC2007/images/002341.jpg -./VOC/test/VOCdevkit/VOC2007/images/002344.jpg -./VOC/test/VOCdevkit/VOC2007/images/002346.jpg -./VOC/test/VOCdevkit/VOC2007/images/002349.jpg -./VOC/test/VOCdevkit/VOC2007/images/002351.jpg -./VOC/test/VOCdevkit/VOC2007/images/002353.jpg -./VOC/test/VOCdevkit/VOC2007/images/002356.jpg -./VOC/test/VOCdevkit/VOC2007/images/002357.jpg -./VOC/test/VOCdevkit/VOC2007/images/002358.jpg -./VOC/test/VOCdevkit/VOC2007/images/002360.jpg -./VOC/test/VOCdevkit/VOC2007/images/002363.jpg -./VOC/test/VOCdevkit/VOC2007/images/002365.jpg -./VOC/test/VOCdevkit/VOC2007/images/002370.jpg -./VOC/test/VOCdevkit/VOC2007/images/002379.jpg -./VOC/test/VOCdevkit/VOC2007/images/002380.jpg -./VOC/test/VOCdevkit/VOC2007/images/002381.jpg -./VOC/test/VOCdevkit/VOC2007/images/002383.jpg -./VOC/test/VOCdevkit/VOC2007/images/002386.jpg -./VOC/test/VOCdevkit/VOC2007/images/002388.jpg -./VOC/test/VOCdevkit/VOC2007/images/002389.jpg -./VOC/test/VOCdevkit/VOC2007/images/002390.jpg -./VOC/test/VOCdevkit/VOC2007/images/002394.jpg -./VOC/test/VOCdevkit/VOC2007/images/002395.jpg -./VOC/test/VOCdevkit/VOC2007/images/002396.jpg -./VOC/test/VOCdevkit/VOC2007/images/002397.jpg -./VOC/test/VOCdevkit/VOC2007/images/002398.jpg -./VOC/test/VOCdevkit/VOC2007/images/002399.jpg -./VOC/test/VOCdevkit/VOC2007/images/002400.jpg -./VOC/test/VOCdevkit/VOC2007/images/002402.jpg -./VOC/test/VOCdevkit/VOC2007/images/002406.jpg -./VOC/test/VOCdevkit/VOC2007/images/002408.jpg -./VOC/test/VOCdevkit/VOC2007/images/002409.jpg -./VOC/test/VOCdevkit/VOC2007/images/002412.jpg -./VOC/test/VOCdevkit/VOC2007/images/002414.jpg -./VOC/test/VOCdevkit/VOC2007/images/002416.jpg -./VOC/test/VOCdevkit/VOC2007/images/002418.jpg -./VOC/test/VOCdevkit/VOC2007/images/002421.jpg -./VOC/test/VOCdevkit/VOC2007/images/002422.jpg -./VOC/test/VOCdevkit/VOC2007/images/002424.jpg -./VOC/test/VOCdevkit/VOC2007/images/002426.jpg -./VOC/test/VOCdevkit/VOC2007/images/002428.jpg -./VOC/test/VOCdevkit/VOC2007/images/002429.jpg -./VOC/test/VOCdevkit/VOC2007/images/002430.jpg -./VOC/test/VOCdevkit/VOC2007/images/002431.jpg -./VOC/test/VOCdevkit/VOC2007/images/002432.jpg -./VOC/test/VOCdevkit/VOC2007/images/002434.jpg -./VOC/test/VOCdevkit/VOC2007/images/002438.jpg -./VOC/test/VOCdevkit/VOC2007/images/002440.jpg -./VOC/test/VOCdevkit/VOC2007/images/002446.jpg -./VOC/test/VOCdevkit/VOC2007/images/002447.jpg -./VOC/test/VOCdevkit/VOC2007/images/002449.jpg -./VOC/test/VOCdevkit/VOC2007/images/002451.jpg -./VOC/test/VOCdevkit/VOC2007/images/002453.jpg -./VOC/test/VOCdevkit/VOC2007/images/002455.jpg -./VOC/test/VOCdevkit/VOC2007/images/002457.jpg -./VOC/test/VOCdevkit/VOC2007/images/002463.jpg -./VOC/test/VOCdevkit/VOC2007/images/002464.jpg -./VOC/test/VOCdevkit/VOC2007/images/002467.jpg -./VOC/test/VOCdevkit/VOC2007/images/002469.jpg -./VOC/test/VOCdevkit/VOC2007/images/002473.jpg -./VOC/test/VOCdevkit/VOC2007/images/002474.jpg -./VOC/test/VOCdevkit/VOC2007/images/002475.jpg -./VOC/test/VOCdevkit/VOC2007/images/002482.jpg -./VOC/test/VOCdevkit/VOC2007/images/002484.jpg -./VOC/test/VOCdevkit/VOC2007/images/002485.jpg -./VOC/test/VOCdevkit/VOC2007/images/002486.jpg -./VOC/test/VOCdevkit/VOC2007/images/002487.jpg -./VOC/test/VOCdevkit/VOC2007/images/002488.jpg -./VOC/test/VOCdevkit/VOC2007/images/002489.jpg -./VOC/test/VOCdevkit/VOC2007/images/002495.jpg -./VOC/test/VOCdevkit/VOC2007/images/002498.jpg -./VOC/test/VOCdevkit/VOC2007/images/002499.jpg -./VOC/test/VOCdevkit/VOC2007/images/002503.jpg -./VOC/test/VOCdevkit/VOC2007/images/002506.jpg -./VOC/test/VOCdevkit/VOC2007/images/002507.jpg -./VOC/test/VOCdevkit/VOC2007/images/002509.jpg -./VOC/test/VOCdevkit/VOC2007/images/002510.jpg -./VOC/test/VOCdevkit/VOC2007/images/002511.jpg -./VOC/test/VOCdevkit/VOC2007/images/002515.jpg -./VOC/test/VOCdevkit/VOC2007/images/002516.jpg -./VOC/test/VOCdevkit/VOC2007/images/002517.jpg -./VOC/test/VOCdevkit/VOC2007/images/002521.jpg -./VOC/test/VOCdevkit/VOC2007/images/002522.jpg -./VOC/test/VOCdevkit/VOC2007/images/002526.jpg -./VOC/test/VOCdevkit/VOC2007/images/002527.jpg -./VOC/test/VOCdevkit/VOC2007/images/002528.jpg -./VOC/test/VOCdevkit/VOC2007/images/002530.jpg -./VOC/test/VOCdevkit/VOC2007/images/002531.jpg -./VOC/test/VOCdevkit/VOC2007/images/002532.jpg -./VOC/test/VOCdevkit/VOC2007/images/002535.jpg -./VOC/test/VOCdevkit/VOC2007/images/002536.jpg -./VOC/test/VOCdevkit/VOC2007/images/002538.jpg -./VOC/test/VOCdevkit/VOC2007/images/002541.jpg -./VOC/test/VOCdevkit/VOC2007/images/002543.jpg -./VOC/test/VOCdevkit/VOC2007/images/002548.jpg -./VOC/test/VOCdevkit/VOC2007/images/002550.jpg -./VOC/test/VOCdevkit/VOC2007/images/002551.jpg -./VOC/test/VOCdevkit/VOC2007/images/002552.jpg -./VOC/test/VOCdevkit/VOC2007/images/002553.jpg -./VOC/test/VOCdevkit/VOC2007/images/002556.jpg -./VOC/test/VOCdevkit/VOC2007/images/002557.jpg -./VOC/test/VOCdevkit/VOC2007/images/002560.jpg -./VOC/test/VOCdevkit/VOC2007/images/002562.jpg -./VOC/test/VOCdevkit/VOC2007/images/002568.jpg -./VOC/test/VOCdevkit/VOC2007/images/002570.jpg -./VOC/test/VOCdevkit/VOC2007/images/002573.jpg -./VOC/test/VOCdevkit/VOC2007/images/002574.jpg -./VOC/test/VOCdevkit/VOC2007/images/002575.jpg -./VOC/test/VOCdevkit/VOC2007/images/002576.jpg -./VOC/test/VOCdevkit/VOC2007/images/002577.jpg -./VOC/test/VOCdevkit/VOC2007/images/002580.jpg -./VOC/test/VOCdevkit/VOC2007/images/002581.jpg -./VOC/test/VOCdevkit/VOC2007/images/002582.jpg -./VOC/test/VOCdevkit/VOC2007/images/002583.jpg -./VOC/test/VOCdevkit/VOC2007/images/002587.jpg -./VOC/test/VOCdevkit/VOC2007/images/002588.jpg -./VOC/test/VOCdevkit/VOC2007/images/002591.jpg -./VOC/test/VOCdevkit/VOC2007/images/002592.jpg -./VOC/test/VOCdevkit/VOC2007/images/002596.jpg -./VOC/test/VOCdevkit/VOC2007/images/002597.jpg -./VOC/test/VOCdevkit/VOC2007/images/002601.jpg -./VOC/test/VOCdevkit/VOC2007/images/002602.jpg -./VOC/test/VOCdevkit/VOC2007/images/002604.jpg -./VOC/test/VOCdevkit/VOC2007/images/002607.jpg -./VOC/test/VOCdevkit/VOC2007/images/002608.jpg -./VOC/test/VOCdevkit/VOC2007/images/002610.jpg -./VOC/test/VOCdevkit/VOC2007/images/002612.jpg -./VOC/test/VOCdevkit/VOC2007/images/002614.jpg -./VOC/test/VOCdevkit/VOC2007/images/002616.jpg -./VOC/test/VOCdevkit/VOC2007/images/002617.jpg -./VOC/test/VOCdevkit/VOC2007/images/002619.jpg -./VOC/test/VOCdevkit/VOC2007/images/002620.jpg -./VOC/test/VOCdevkit/VOC2007/images/002622.jpg -./VOC/test/VOCdevkit/VOC2007/images/002623.jpg -./VOC/test/VOCdevkit/VOC2007/images/002624.jpg -./VOC/test/VOCdevkit/VOC2007/images/002626.jpg -./VOC/test/VOCdevkit/VOC2007/images/002628.jpg -./VOC/test/VOCdevkit/VOC2007/images/002629.jpg -./VOC/test/VOCdevkit/VOC2007/images/002630.jpg -./VOC/test/VOCdevkit/VOC2007/images/002631.jpg -./VOC/test/VOCdevkit/VOC2007/images/002638.jpg -./VOC/test/VOCdevkit/VOC2007/images/002639.jpg -./VOC/test/VOCdevkit/VOC2007/images/002640.jpg -./VOC/test/VOCdevkit/VOC2007/images/002642.jpg -./VOC/test/VOCdevkit/VOC2007/images/002644.jpg -./VOC/test/VOCdevkit/VOC2007/images/002650.jpg -./VOC/test/VOCdevkit/VOC2007/images/002651.jpg -./VOC/test/VOCdevkit/VOC2007/images/002652.jpg -./VOC/test/VOCdevkit/VOC2007/images/002654.jpg -./VOC/test/VOCdevkit/VOC2007/images/002655.jpg -./VOC/test/VOCdevkit/VOC2007/images/002656.jpg -./VOC/test/VOCdevkit/VOC2007/images/002660.jpg -./VOC/test/VOCdevkit/VOC2007/images/002661.jpg -./VOC/test/VOCdevkit/VOC2007/images/002663.jpg -./VOC/test/VOCdevkit/VOC2007/images/002665.jpg -./VOC/test/VOCdevkit/VOC2007/images/002671.jpg -./VOC/test/VOCdevkit/VOC2007/images/002672.jpg -./VOC/test/VOCdevkit/VOC2007/images/002673.jpg -./VOC/test/VOCdevkit/VOC2007/images/002674.jpg -./VOC/test/VOCdevkit/VOC2007/images/002676.jpg -./VOC/test/VOCdevkit/VOC2007/images/002679.jpg -./VOC/test/VOCdevkit/VOC2007/images/002681.jpg -./VOC/test/VOCdevkit/VOC2007/images/002685.jpg -./VOC/test/VOCdevkit/VOC2007/images/002686.jpg -./VOC/test/VOCdevkit/VOC2007/images/002687.jpg -./VOC/test/VOCdevkit/VOC2007/images/002688.jpg -./VOC/test/VOCdevkit/VOC2007/images/002692.jpg -./VOC/test/VOCdevkit/VOC2007/images/002694.jpg -./VOC/test/VOCdevkit/VOC2007/images/002698.jpg -./VOC/test/VOCdevkit/VOC2007/images/002700.jpg -./VOC/test/VOCdevkit/VOC2007/images/002701.jpg -./VOC/test/VOCdevkit/VOC2007/images/002703.jpg -./VOC/test/VOCdevkit/VOC2007/images/002705.jpg -./VOC/test/VOCdevkit/VOC2007/images/002707.jpg -./VOC/test/VOCdevkit/VOC2007/images/002708.jpg -./VOC/test/VOCdevkit/VOC2007/images/002711.jpg -./VOC/test/VOCdevkit/VOC2007/images/002712.jpg -./VOC/test/VOCdevkit/VOC2007/images/002716.jpg -./VOC/test/VOCdevkit/VOC2007/images/002719.jpg -./VOC/test/VOCdevkit/VOC2007/images/002720.jpg -./VOC/test/VOCdevkit/VOC2007/images/002724.jpg -./VOC/test/VOCdevkit/VOC2007/images/002725.jpg -./VOC/test/VOCdevkit/VOC2007/images/002726.jpg -./VOC/test/VOCdevkit/VOC2007/images/002728.jpg -./VOC/test/VOCdevkit/VOC2007/images/002729.jpg -./VOC/test/VOCdevkit/VOC2007/images/002731.jpg -./VOC/test/VOCdevkit/VOC2007/images/002733.jpg -./VOC/test/VOCdevkit/VOC2007/images/002736.jpg -./VOC/test/VOCdevkit/VOC2007/images/002739.jpg -./VOC/test/VOCdevkit/VOC2007/images/002740.jpg -./VOC/test/VOCdevkit/VOC2007/images/002742.jpg -./VOC/test/VOCdevkit/VOC2007/images/002743.jpg -./VOC/test/VOCdevkit/VOC2007/images/002746.jpg -./VOC/test/VOCdevkit/VOC2007/images/002748.jpg -./VOC/test/VOCdevkit/VOC2007/images/002750.jpg -./VOC/test/VOCdevkit/VOC2007/images/002752.jpg -./VOC/test/VOCdevkit/VOC2007/images/002753.jpg -./VOC/test/VOCdevkit/VOC2007/images/002754.jpg -./VOC/test/VOCdevkit/VOC2007/images/002756.jpg -./VOC/test/VOCdevkit/VOC2007/images/002758.jpg -./VOC/test/VOCdevkit/VOC2007/images/002761.jpg -./VOC/test/VOCdevkit/VOC2007/images/002764.jpg -./VOC/test/VOCdevkit/VOC2007/images/002768.jpg -./VOC/test/VOCdevkit/VOC2007/images/002769.jpg -./VOC/test/VOCdevkit/VOC2007/images/002770.jpg -./VOC/test/VOCdevkit/VOC2007/images/002771.jpg -./VOC/test/VOCdevkit/VOC2007/images/002773.jpg -./VOC/test/VOCdevkit/VOC2007/images/002777.jpg -./VOC/test/VOCdevkit/VOC2007/images/002780.jpg -./VOC/test/VOCdevkit/VOC2007/images/002781.jpg -./VOC/test/VOCdevkit/VOC2007/images/002787.jpg -./VOC/test/VOCdevkit/VOC2007/images/002788.jpg -./VOC/test/VOCdevkit/VOC2007/images/002789.jpg -./VOC/test/VOCdevkit/VOC2007/images/002790.jpg -./VOC/test/VOCdevkit/VOC2007/images/002792.jpg -./VOC/test/VOCdevkit/VOC2007/images/002793.jpg -./VOC/test/VOCdevkit/VOC2007/images/002797.jpg -./VOC/test/VOCdevkit/VOC2007/images/002799.jpg -./VOC/test/VOCdevkit/VOC2007/images/002802.jpg -./VOC/test/VOCdevkit/VOC2007/images/002805.jpg -./VOC/test/VOCdevkit/VOC2007/images/002806.jpg -./VOC/test/VOCdevkit/VOC2007/images/002808.jpg -./VOC/test/VOCdevkit/VOC2007/images/002809.jpg -./VOC/test/VOCdevkit/VOC2007/images/002811.jpg -./VOC/test/VOCdevkit/VOC2007/images/002813.jpg -./VOC/test/VOCdevkit/VOC2007/images/002814.jpg -./VOC/test/VOCdevkit/VOC2007/images/002818.jpg -./VOC/test/VOCdevkit/VOC2007/images/002819.jpg -./VOC/test/VOCdevkit/VOC2007/images/002821.jpg -./VOC/test/VOCdevkit/VOC2007/images/002822.jpg -./VOC/test/VOCdevkit/VOC2007/images/002823.jpg -./VOC/test/VOCdevkit/VOC2007/images/002824.jpg -./VOC/test/VOCdevkit/VOC2007/images/002825.jpg -./VOC/test/VOCdevkit/VOC2007/images/002828.jpg -./VOC/test/VOCdevkit/VOC2007/images/002829.jpg -./VOC/test/VOCdevkit/VOC2007/images/002830.jpg -./VOC/test/VOCdevkit/VOC2007/images/002831.jpg -./VOC/test/VOCdevkit/VOC2007/images/002832.jpg -./VOC/test/VOCdevkit/VOC2007/images/002837.jpg -./VOC/test/VOCdevkit/VOC2007/images/002839.jpg -./VOC/test/VOCdevkit/VOC2007/images/002840.jpg -./VOC/test/VOCdevkit/VOC2007/images/002843.jpg -./VOC/test/VOCdevkit/VOC2007/images/002846.jpg -./VOC/test/VOCdevkit/VOC2007/images/002849.jpg -./VOC/test/VOCdevkit/VOC2007/images/002850.jpg -./VOC/test/VOCdevkit/VOC2007/images/002851.jpg -./VOC/test/VOCdevkit/VOC2007/images/002852.jpg -./VOC/test/VOCdevkit/VOC2007/images/002853.jpg -./VOC/test/VOCdevkit/VOC2007/images/002856.jpg -./VOC/test/VOCdevkit/VOC2007/images/002857.jpg -./VOC/test/VOCdevkit/VOC2007/images/002860.jpg -./VOC/test/VOCdevkit/VOC2007/images/002861.jpg -./VOC/test/VOCdevkit/VOC2007/images/002862.jpg -./VOC/test/VOCdevkit/VOC2007/images/002863.jpg -./VOC/test/VOCdevkit/VOC2007/images/002865.jpg -./VOC/test/VOCdevkit/VOC2007/images/002871.jpg -./VOC/test/VOCdevkit/VOC2007/images/002872.jpg -./VOC/test/VOCdevkit/VOC2007/images/002874.jpg -./VOC/test/VOCdevkit/VOC2007/images/002876.jpg -./VOC/test/VOCdevkit/VOC2007/images/002877.jpg -./VOC/test/VOCdevkit/VOC2007/images/002878.jpg -./VOC/test/VOCdevkit/VOC2007/images/002882.jpg -./VOC/test/VOCdevkit/VOC2007/images/002883.jpg -./VOC/test/VOCdevkit/VOC2007/images/002885.jpg -./VOC/test/VOCdevkit/VOC2007/images/002887.jpg -./VOC/test/VOCdevkit/VOC2007/images/002888.jpg -./VOC/test/VOCdevkit/VOC2007/images/002890.jpg -./VOC/test/VOCdevkit/VOC2007/images/002892.jpg -./VOC/test/VOCdevkit/VOC2007/images/002894.jpg -./VOC/test/VOCdevkit/VOC2007/images/002895.jpg -./VOC/test/VOCdevkit/VOC2007/images/002897.jpg -./VOC/test/VOCdevkit/VOC2007/images/002898.jpg -./VOC/test/VOCdevkit/VOC2007/images/002900.jpg -./VOC/test/VOCdevkit/VOC2007/images/002902.jpg -./VOC/test/VOCdevkit/VOC2007/images/002903.jpg -./VOC/test/VOCdevkit/VOC2007/images/002904.jpg -./VOC/test/VOCdevkit/VOC2007/images/002905.jpg -./VOC/test/VOCdevkit/VOC2007/images/002907.jpg -./VOC/test/VOCdevkit/VOC2007/images/002908.jpg -./VOC/test/VOCdevkit/VOC2007/images/002909.jpg -./VOC/test/VOCdevkit/VOC2007/images/002911.jpg -./VOC/test/VOCdevkit/VOC2007/images/002918.jpg -./VOC/test/VOCdevkit/VOC2007/images/002920.jpg -./VOC/test/VOCdevkit/VOC2007/images/002921.jpg -./VOC/test/VOCdevkit/VOC2007/images/002922.jpg -./VOC/test/VOCdevkit/VOC2007/images/002923.jpg -./VOC/test/VOCdevkit/VOC2007/images/002925.jpg -./VOC/test/VOCdevkit/VOC2007/images/002926.jpg -./VOC/test/VOCdevkit/VOC2007/images/002927.jpg -./VOC/test/VOCdevkit/VOC2007/images/002928.jpg -./VOC/test/VOCdevkit/VOC2007/images/002929.jpg -./VOC/test/VOCdevkit/VOC2007/images/002930.jpg -./VOC/test/VOCdevkit/VOC2007/images/002936.jpg -./VOC/test/VOCdevkit/VOC2007/images/002945.jpg -./VOC/test/VOCdevkit/VOC2007/images/002948.jpg -./VOC/test/VOCdevkit/VOC2007/images/002949.jpg -./VOC/test/VOCdevkit/VOC2007/images/002950.jpg -./VOC/test/VOCdevkit/VOC2007/images/002951.jpg -./VOC/test/VOCdevkit/VOC2007/images/002955.jpg -./VOC/test/VOCdevkit/VOC2007/images/002959.jpg -./VOC/test/VOCdevkit/VOC2007/images/002961.jpg -./VOC/test/VOCdevkit/VOC2007/images/002964.jpg -./VOC/test/VOCdevkit/VOC2007/images/002968.jpg -./VOC/test/VOCdevkit/VOC2007/images/002970.jpg -./VOC/test/VOCdevkit/VOC2007/images/002971.jpg -./VOC/test/VOCdevkit/VOC2007/images/002972.jpg -./VOC/test/VOCdevkit/VOC2007/images/002973.jpg -./VOC/test/VOCdevkit/VOC2007/images/002974.jpg -./VOC/test/VOCdevkit/VOC2007/images/002979.jpg -./VOC/test/VOCdevkit/VOC2007/images/002980.jpg -./VOC/test/VOCdevkit/VOC2007/images/002981.jpg -./VOC/test/VOCdevkit/VOC2007/images/002982.jpg -./VOC/test/VOCdevkit/VOC2007/images/002983.jpg -./VOC/test/VOCdevkit/VOC2007/images/002985.jpg -./VOC/test/VOCdevkit/VOC2007/images/002991.jpg -./VOC/test/VOCdevkit/VOC2007/images/002993.jpg -./VOC/test/VOCdevkit/VOC2007/images/002996.jpg -./VOC/test/VOCdevkit/VOC2007/images/002997.jpg -./VOC/test/VOCdevkit/VOC2007/images/002998.jpg -./VOC/test/VOCdevkit/VOC2007/images/002999.jpg -./VOC/test/VOCdevkit/VOC2007/images/003001.jpg -./VOC/test/VOCdevkit/VOC2007/images/003006.jpg -./VOC/test/VOCdevkit/VOC2007/images/003010.jpg -./VOC/test/VOCdevkit/VOC2007/images/003012.jpg -./VOC/test/VOCdevkit/VOC2007/images/003014.jpg -./VOC/test/VOCdevkit/VOC2007/images/003016.jpg -./VOC/test/VOCdevkit/VOC2007/images/003018.jpg -./VOC/test/VOCdevkit/VOC2007/images/003019.jpg -./VOC/test/VOCdevkit/VOC2007/images/003020.jpg -./VOC/test/VOCdevkit/VOC2007/images/003022.jpg -./VOC/test/VOCdevkit/VOC2007/images/003025.jpg -./VOC/test/VOCdevkit/VOC2007/images/003026.jpg -./VOC/test/VOCdevkit/VOC2007/images/003029.jpg -./VOC/test/VOCdevkit/VOC2007/images/003030.jpg -./VOC/test/VOCdevkit/VOC2007/images/003033.jpg -./VOC/test/VOCdevkit/VOC2007/images/003035.jpg -./VOC/test/VOCdevkit/VOC2007/images/003036.jpg -./VOC/test/VOCdevkit/VOC2007/images/003037.jpg -./VOC/test/VOCdevkit/VOC2007/images/003040.jpg -./VOC/test/VOCdevkit/VOC2007/images/003041.jpg -./VOC/test/VOCdevkit/VOC2007/images/003043.jpg -./VOC/test/VOCdevkit/VOC2007/images/003046.jpg -./VOC/test/VOCdevkit/VOC2007/images/003048.jpg -./VOC/test/VOCdevkit/VOC2007/images/003049.jpg -./VOC/test/VOCdevkit/VOC2007/images/003050.jpg -./VOC/test/VOCdevkit/VOC2007/images/003052.jpg -./VOC/test/VOCdevkit/VOC2007/images/003055.jpg -./VOC/test/VOCdevkit/VOC2007/images/003059.jpg -./VOC/test/VOCdevkit/VOC2007/images/003060.jpg -./VOC/test/VOCdevkit/VOC2007/images/003062.jpg -./VOC/test/VOCdevkit/VOC2007/images/003067.jpg -./VOC/test/VOCdevkit/VOC2007/images/003068.jpg -./VOC/test/VOCdevkit/VOC2007/images/003069.jpg -./VOC/test/VOCdevkit/VOC2007/images/003070.jpg -./VOC/test/VOCdevkit/VOC2007/images/003071.jpg -./VOC/test/VOCdevkit/VOC2007/images/003073.jpg -./VOC/test/VOCdevkit/VOC2007/images/003075.jpg -./VOC/test/VOCdevkit/VOC2007/images/003076.jpg -./VOC/test/VOCdevkit/VOC2007/images/003079.jpg -./VOC/test/VOCdevkit/VOC2007/images/003080.jpg -./VOC/test/VOCdevkit/VOC2007/images/003081.jpg -./VOC/test/VOCdevkit/VOC2007/images/003084.jpg -./VOC/test/VOCdevkit/VOC2007/images/003087.jpg -./VOC/test/VOCdevkit/VOC2007/images/003091.jpg -./VOC/test/VOCdevkit/VOC2007/images/003095.jpg -./VOC/test/VOCdevkit/VOC2007/images/003096.jpg -./VOC/test/VOCdevkit/VOC2007/images/003097.jpg -./VOC/test/VOCdevkit/VOC2007/images/003099.jpg -./VOC/test/VOCdevkit/VOC2007/images/003101.jpg -./VOC/test/VOCdevkit/VOC2007/images/003104.jpg -./VOC/test/VOCdevkit/VOC2007/images/003109.jpg -./VOC/test/VOCdevkit/VOC2007/images/003111.jpg -./VOC/test/VOCdevkit/VOC2007/images/003113.jpg -./VOC/test/VOCdevkit/VOC2007/images/003114.jpg -./VOC/test/VOCdevkit/VOC2007/images/003115.jpg -./VOC/test/VOCdevkit/VOC2007/images/003119.jpg -./VOC/test/VOCdevkit/VOC2007/images/003123.jpg -./VOC/test/VOCdevkit/VOC2007/images/003125.jpg -./VOC/test/VOCdevkit/VOC2007/images/003128.jpg -./VOC/test/VOCdevkit/VOC2007/images/003130.jpg -./VOC/test/VOCdevkit/VOC2007/images/003131.jpg -./VOC/test/VOCdevkit/VOC2007/images/003132.jpg -./VOC/test/VOCdevkit/VOC2007/images/003136.jpg -./VOC/test/VOCdevkit/VOC2007/images/003139.jpg -./VOC/test/VOCdevkit/VOC2007/images/003141.jpg -./VOC/test/VOCdevkit/VOC2007/images/003143.jpg -./VOC/test/VOCdevkit/VOC2007/images/003144.jpg -./VOC/test/VOCdevkit/VOC2007/images/003148.jpg -./VOC/test/VOCdevkit/VOC2007/images/003151.jpg -./VOC/test/VOCdevkit/VOC2007/images/003152.jpg -./VOC/test/VOCdevkit/VOC2007/images/003153.jpg -./VOC/test/VOCdevkit/VOC2007/images/003156.jpg -./VOC/test/VOCdevkit/VOC2007/images/003158.jpg -./VOC/test/VOCdevkit/VOC2007/images/003160.jpg -./VOC/test/VOCdevkit/VOC2007/images/003166.jpg -./VOC/test/VOCdevkit/VOC2007/images/003167.jpg -./VOC/test/VOCdevkit/VOC2007/images/003168.jpg -./VOC/test/VOCdevkit/VOC2007/images/003171.jpg -./VOC/test/VOCdevkit/VOC2007/images/003172.jpg -./VOC/test/VOCdevkit/VOC2007/images/003173.jpg -./VOC/test/VOCdevkit/VOC2007/images/003174.jpg -./VOC/test/VOCdevkit/VOC2007/images/003179.jpg -./VOC/test/VOCdevkit/VOC2007/images/003180.jpg -./VOC/test/VOCdevkit/VOC2007/images/003182.jpg -./VOC/test/VOCdevkit/VOC2007/images/003187.jpg -./VOC/test/VOCdevkit/VOC2007/images/003190.jpg -./VOC/test/VOCdevkit/VOC2007/images/003191.jpg -./VOC/test/VOCdevkit/VOC2007/images/003192.jpg -./VOC/test/VOCdevkit/VOC2007/images/003193.jpg -./VOC/test/VOCdevkit/VOC2007/images/003196.jpg -./VOC/test/VOCdevkit/VOC2007/images/003197.jpg -./VOC/test/VOCdevkit/VOC2007/images/003198.jpg -./VOC/test/VOCdevkit/VOC2007/images/003201.jpg -./VOC/test/VOCdevkit/VOC2007/images/003203.jpg -./VOC/test/VOCdevkit/VOC2007/images/003206.jpg -./VOC/test/VOCdevkit/VOC2007/images/003208.jpg -./VOC/test/VOCdevkit/VOC2007/images/003209.jpg -./VOC/test/VOCdevkit/VOC2007/images/003212.jpg -./VOC/test/VOCdevkit/VOC2007/images/003215.jpg -./VOC/test/VOCdevkit/VOC2007/images/003217.jpg -./VOC/test/VOCdevkit/VOC2007/images/003220.jpg -./VOC/test/VOCdevkit/VOC2007/images/003221.jpg -./VOC/test/VOCdevkit/VOC2007/images/003222.jpg -./VOC/test/VOCdevkit/VOC2007/images/003224.jpg -./VOC/test/VOCdevkit/VOC2007/images/003225.jpg -./VOC/test/VOCdevkit/VOC2007/images/003226.jpg -./VOC/test/VOCdevkit/VOC2007/images/003227.jpg -./VOC/test/VOCdevkit/VOC2007/images/003230.jpg -./VOC/test/VOCdevkit/VOC2007/images/003232.jpg -./VOC/test/VOCdevkit/VOC2007/images/003234.jpg -./VOC/test/VOCdevkit/VOC2007/images/003235.jpg -./VOC/test/VOCdevkit/VOC2007/images/003237.jpg -./VOC/test/VOCdevkit/VOC2007/images/003238.jpg -./VOC/test/VOCdevkit/VOC2007/images/003241.jpg -./VOC/test/VOCdevkit/VOC2007/images/003245.jpg -./VOC/test/VOCdevkit/VOC2007/images/003246.jpg -./VOC/test/VOCdevkit/VOC2007/images/003248.jpg -./VOC/test/VOCdevkit/VOC2007/images/003249.jpg -./VOC/test/VOCdevkit/VOC2007/images/003251.jpg -./VOC/test/VOCdevkit/VOC2007/images/003252.jpg -./VOC/test/VOCdevkit/VOC2007/images/003257.jpg -./VOC/test/VOCdevkit/VOC2007/images/003263.jpg -./VOC/test/VOCdevkit/VOC2007/images/003264.jpg -./VOC/test/VOCdevkit/VOC2007/images/003265.jpg -./VOC/test/VOCdevkit/VOC2007/images/003266.jpg -./VOC/test/VOCdevkit/VOC2007/images/003267.jpg -./VOC/test/VOCdevkit/VOC2007/images/003268.jpg -./VOC/test/VOCdevkit/VOC2007/images/003275.jpg -./VOC/test/VOCdevkit/VOC2007/images/003276.jpg -./VOC/test/VOCdevkit/VOC2007/images/003277.jpg -./VOC/test/VOCdevkit/VOC2007/images/003278.jpg -./VOC/test/VOCdevkit/VOC2007/images/003281.jpg -./VOC/test/VOCdevkit/VOC2007/images/003283.jpg -./VOC/test/VOCdevkit/VOC2007/images/003286.jpg -./VOC/test/VOCdevkit/VOC2007/images/003287.jpg -./VOC/test/VOCdevkit/VOC2007/images/003288.jpg -./VOC/test/VOCdevkit/VOC2007/images/003289.jpg -./VOC/test/VOCdevkit/VOC2007/images/003291.jpg -./VOC/test/VOCdevkit/VOC2007/images/003295.jpg -./VOC/test/VOCdevkit/VOC2007/images/003297.jpg -./VOC/test/VOCdevkit/VOC2007/images/003298.jpg -./VOC/test/VOCdevkit/VOC2007/images/003302.jpg -./VOC/test/VOCdevkit/VOC2007/images/003304.jpg -./VOC/test/VOCdevkit/VOC2007/images/003305.jpg -./VOC/test/VOCdevkit/VOC2007/images/003306.jpg -./VOC/test/VOCdevkit/VOC2007/images/003309.jpg -./VOC/test/VOCdevkit/VOC2007/images/003310.jpg -./VOC/test/VOCdevkit/VOC2007/images/003312.jpg -./VOC/test/VOCdevkit/VOC2007/images/003314.jpg -./VOC/test/VOCdevkit/VOC2007/images/003315.jpg -./VOC/test/VOCdevkit/VOC2007/images/003317.jpg -./VOC/test/VOCdevkit/VOC2007/images/003318.jpg -./VOC/test/VOCdevkit/VOC2007/images/003319.jpg -./VOC/test/VOCdevkit/VOC2007/images/003321.jpg -./VOC/test/VOCdevkit/VOC2007/images/003322.jpg -./VOC/test/VOCdevkit/VOC2007/images/003323.jpg -./VOC/test/VOCdevkit/VOC2007/images/003324.jpg -./VOC/test/VOCdevkit/VOC2007/images/003326.jpg -./VOC/test/VOCdevkit/VOC2007/images/003328.jpg -./VOC/test/VOCdevkit/VOC2007/images/003329.jpg -./VOC/test/VOCdevkit/VOC2007/images/003332.jpg -./VOC/test/VOCdevkit/VOC2007/images/003333.jpg -./VOC/test/VOCdevkit/VOC2007/images/003334.jpg -./VOC/test/VOCdevkit/VOC2007/images/003340.jpg -./VOC/test/VOCdevkit/VOC2007/images/003341.jpg -./VOC/test/VOCdevkit/VOC2007/images/003342.jpg -./VOC/test/VOCdevkit/VOC2007/images/003345.jpg -./VOC/test/VOCdevkit/VOC2007/images/003346.jpg -./VOC/test/VOCdevkit/VOC2007/images/003347.jpg -./VOC/test/VOCdevkit/VOC2007/images/003348.jpg -./VOC/test/VOCdevkit/VOC2007/images/003352.jpg -./VOC/test/VOCdevkit/VOC2007/images/003353.jpg -./VOC/test/VOCdevkit/VOC2007/images/003357.jpg -./VOC/test/VOCdevkit/VOC2007/images/003358.jpg -./VOC/test/VOCdevkit/VOC2007/images/003361.jpg -./VOC/test/VOCdevkit/VOC2007/images/003364.jpg -./VOC/test/VOCdevkit/VOC2007/images/003366.jpg -./VOC/test/VOCdevkit/VOC2007/images/003368.jpg -./VOC/test/VOCdevkit/VOC2007/images/003371.jpg -./VOC/test/VOCdevkit/VOC2007/images/003372.jpg -./VOC/test/VOCdevkit/VOC2007/images/003375.jpg -./VOC/test/VOCdevkit/VOC2007/images/003378.jpg -./VOC/test/VOCdevkit/VOC2007/images/003381.jpg -./VOC/test/VOCdevkit/VOC2007/images/003383.jpg -./VOC/test/VOCdevkit/VOC2007/images/003384.jpg -./VOC/test/VOCdevkit/VOC2007/images/003385.jpg -./VOC/test/VOCdevkit/VOC2007/images/003387.jpg -./VOC/test/VOCdevkit/VOC2007/images/003388.jpg -./VOC/test/VOCdevkit/VOC2007/images/003389.jpg -./VOC/test/VOCdevkit/VOC2007/images/003393.jpg -./VOC/test/VOCdevkit/VOC2007/images/003394.jpg -./VOC/test/VOCdevkit/VOC2007/images/003399.jpg -./VOC/test/VOCdevkit/VOC2007/images/003400.jpg -./VOC/test/VOCdevkit/VOC2007/images/003402.jpg -./VOC/test/VOCdevkit/VOC2007/images/003405.jpg -./VOC/test/VOCdevkit/VOC2007/images/003409.jpg -./VOC/test/VOCdevkit/VOC2007/images/003411.jpg -./VOC/test/VOCdevkit/VOC2007/images/003414.jpg -./VOC/test/VOCdevkit/VOC2007/images/003418.jpg -./VOC/test/VOCdevkit/VOC2007/images/003423.jpg -./VOC/test/VOCdevkit/VOC2007/images/003426.jpg -./VOC/test/VOCdevkit/VOC2007/images/003427.jpg -./VOC/test/VOCdevkit/VOC2007/images/003428.jpg -./VOC/test/VOCdevkit/VOC2007/images/003431.jpg -./VOC/test/VOCdevkit/VOC2007/images/003432.jpg -./VOC/test/VOCdevkit/VOC2007/images/003434.jpg -./VOC/test/VOCdevkit/VOC2007/images/003437.jpg -./VOC/test/VOCdevkit/VOC2007/images/003438.jpg -./VOC/test/VOCdevkit/VOC2007/images/003440.jpg -./VOC/test/VOCdevkit/VOC2007/images/003442.jpg -./VOC/test/VOCdevkit/VOC2007/images/003445.jpg -./VOC/test/VOCdevkit/VOC2007/images/003446.jpg -./VOC/test/VOCdevkit/VOC2007/images/003447.jpg -./VOC/test/VOCdevkit/VOC2007/images/003448.jpg -./VOC/test/VOCdevkit/VOC2007/images/003454.jpg -./VOC/test/VOCdevkit/VOC2007/images/003456.jpg -./VOC/test/VOCdevkit/VOC2007/images/003457.jpg -./VOC/test/VOCdevkit/VOC2007/images/003459.jpg -./VOC/test/VOCdevkit/VOC2007/images/003460.jpg -./VOC/test/VOCdevkit/VOC2007/images/003463.jpg -./VOC/test/VOCdevkit/VOC2007/images/003467.jpg -./VOC/test/VOCdevkit/VOC2007/images/003471.jpg -./VOC/test/VOCdevkit/VOC2007/images/003472.jpg -./VOC/test/VOCdevkit/VOC2007/images/003473.jpg -./VOC/test/VOCdevkit/VOC2007/images/003474.jpg -./VOC/test/VOCdevkit/VOC2007/images/003475.jpg -./VOC/test/VOCdevkit/VOC2007/images/003476.jpg -./VOC/test/VOCdevkit/VOC2007/images/003478.jpg -./VOC/test/VOCdevkit/VOC2007/images/003479.jpg -./VOC/test/VOCdevkit/VOC2007/images/003480.jpg -./VOC/test/VOCdevkit/VOC2007/images/003481.jpg -./VOC/test/VOCdevkit/VOC2007/images/003482.jpg -./VOC/test/VOCdevkit/VOC2007/images/003483.jpg -./VOC/test/VOCdevkit/VOC2007/images/003485.jpg -./VOC/test/VOCdevkit/VOC2007/images/003486.jpg -./VOC/test/VOCdevkit/VOC2007/images/003488.jpg -./VOC/test/VOCdevkit/VOC2007/images/003490.jpg -./VOC/test/VOCdevkit/VOC2007/images/003494.jpg -./VOC/test/VOCdevkit/VOC2007/images/003495.jpg -./VOC/test/VOCdevkit/VOC2007/images/003498.jpg -./VOC/test/VOCdevkit/VOC2007/images/003501.jpg -./VOC/test/VOCdevkit/VOC2007/images/003502.jpg -./VOC/test/VOCdevkit/VOC2007/images/003503.jpg -./VOC/test/VOCdevkit/VOC2007/images/003504.jpg -./VOC/test/VOCdevkit/VOC2007/images/003505.jpg -./VOC/test/VOCdevkit/VOC2007/images/003507.jpg -./VOC/test/VOCdevkit/VOC2007/images/003512.jpg -./VOC/test/VOCdevkit/VOC2007/images/003513.jpg -./VOC/test/VOCdevkit/VOC2007/images/003514.jpg -./VOC/test/VOCdevkit/VOC2007/images/003515.jpg -./VOC/test/VOCdevkit/VOC2007/images/003517.jpg -./VOC/test/VOCdevkit/VOC2007/images/003520.jpg -./VOC/test/VOCdevkit/VOC2007/images/003523.jpg -./VOC/test/VOCdevkit/VOC2007/images/003526.jpg -./VOC/test/VOCdevkit/VOC2007/images/003527.jpg -./VOC/test/VOCdevkit/VOC2007/images/003531.jpg -./VOC/test/VOCdevkit/VOC2007/images/003532.jpg -./VOC/test/VOCdevkit/VOC2007/images/003533.jpg -./VOC/test/VOCdevkit/VOC2007/images/003534.jpg -./VOC/test/VOCdevkit/VOC2007/images/003535.jpg -./VOC/test/VOCdevkit/VOC2007/images/003538.jpg -./VOC/test/VOCdevkit/VOC2007/images/003540.jpg -./VOC/test/VOCdevkit/VOC2007/images/003541.jpg -./VOC/test/VOCdevkit/VOC2007/images/003542.jpg -./VOC/test/VOCdevkit/VOC2007/images/003543.jpg -./VOC/test/VOCdevkit/VOC2007/images/003544.jpg -./VOC/test/VOCdevkit/VOC2007/images/003545.jpg -./VOC/test/VOCdevkit/VOC2007/images/003547.jpg -./VOC/test/VOCdevkit/VOC2007/images/003552.jpg -./VOC/test/VOCdevkit/VOC2007/images/003553.jpg -./VOC/test/VOCdevkit/VOC2007/images/003557.jpg -./VOC/test/VOCdevkit/VOC2007/images/003558.jpg -./VOC/test/VOCdevkit/VOC2007/images/003559.jpg -./VOC/test/VOCdevkit/VOC2007/images/003560.jpg -./VOC/test/VOCdevkit/VOC2007/images/003561.jpg -./VOC/test/VOCdevkit/VOC2007/images/003562.jpg -./VOC/test/VOCdevkit/VOC2007/images/003563.jpg -./VOC/test/VOCdevkit/VOC2007/images/003568.jpg -./VOC/test/VOCdevkit/VOC2007/images/003569.jpg -./VOC/test/VOCdevkit/VOC2007/images/003570.jpg -./VOC/test/VOCdevkit/VOC2007/images/003571.jpg -./VOC/test/VOCdevkit/VOC2007/images/003572.jpg -./VOC/test/VOCdevkit/VOC2007/images/003573.jpg -./VOC/test/VOCdevkit/VOC2007/images/003574.jpg -./VOC/test/VOCdevkit/VOC2007/images/003578.jpg -./VOC/test/VOCdevkit/VOC2007/images/003579.jpg -./VOC/test/VOCdevkit/VOC2007/images/003581.jpg -./VOC/test/VOCdevkit/VOC2007/images/003582.jpg -./VOC/test/VOCdevkit/VOC2007/images/003583.jpg -./VOC/test/VOCdevkit/VOC2007/images/003584.jpg -./VOC/test/VOCdevkit/VOC2007/images/003590.jpg -./VOC/test/VOCdevkit/VOC2007/images/003591.jpg -./VOC/test/VOCdevkit/VOC2007/images/003592.jpg -./VOC/test/VOCdevkit/VOC2007/images/003595.jpg -./VOC/test/VOCdevkit/VOC2007/images/003598.jpg -./VOC/test/VOCdevkit/VOC2007/images/003600.jpg -./VOC/test/VOCdevkit/VOC2007/images/003601.jpg -./VOC/test/VOCdevkit/VOC2007/images/003602.jpg -./VOC/test/VOCdevkit/VOC2007/images/003607.jpg -./VOC/test/VOCdevkit/VOC2007/images/003610.jpg -./VOC/test/VOCdevkit/VOC2007/images/003612.jpg -./VOC/test/VOCdevkit/VOC2007/images/003613.jpg -./VOC/test/VOCdevkit/VOC2007/images/003615.jpg -./VOC/test/VOCdevkit/VOC2007/images/003616.jpg -./VOC/test/VOCdevkit/VOC2007/images/003617.jpg -./VOC/test/VOCdevkit/VOC2007/images/003619.jpg -./VOC/test/VOCdevkit/VOC2007/images/003624.jpg -./VOC/test/VOCdevkit/VOC2007/images/003626.jpg -./VOC/test/VOCdevkit/VOC2007/images/003630.jpg -./VOC/test/VOCdevkit/VOC2007/images/003631.jpg -./VOC/test/VOCdevkit/VOC2007/images/003633.jpg -./VOC/test/VOCdevkit/VOC2007/images/003637.jpg -./VOC/test/VOCdevkit/VOC2007/images/003641.jpg -./VOC/test/VOCdevkit/VOC2007/images/003643.jpg -./VOC/test/VOCdevkit/VOC2007/images/003647.jpg -./VOC/test/VOCdevkit/VOC2007/images/003649.jpg -./VOC/test/VOCdevkit/VOC2007/images/003650.jpg -./VOC/test/VOCdevkit/VOC2007/images/003652.jpg -./VOC/test/VOCdevkit/VOC2007/images/003653.jpg -./VOC/test/VOCdevkit/VOC2007/images/003659.jpg -./VOC/test/VOCdevkit/VOC2007/images/003661.jpg -./VOC/test/VOCdevkit/VOC2007/images/003665.jpg -./VOC/test/VOCdevkit/VOC2007/images/003666.jpg -./VOC/test/VOCdevkit/VOC2007/images/003668.jpg -./VOC/test/VOCdevkit/VOC2007/images/003670.jpg -./VOC/test/VOCdevkit/VOC2007/images/003672.jpg -./VOC/test/VOCdevkit/VOC2007/images/003676.jpg -./VOC/test/VOCdevkit/VOC2007/images/003677.jpg -./VOC/test/VOCdevkit/VOC2007/images/003680.jpg -./VOC/test/VOCdevkit/VOC2007/images/003682.jpg -./VOC/test/VOCdevkit/VOC2007/images/003683.jpg -./VOC/test/VOCdevkit/VOC2007/images/003686.jpg -./VOC/test/VOCdevkit/VOC2007/images/003687.jpg -./VOC/test/VOCdevkit/VOC2007/images/003689.jpg -./VOC/test/VOCdevkit/VOC2007/images/003692.jpg -./VOC/test/VOCdevkit/VOC2007/images/003693.jpg -./VOC/test/VOCdevkit/VOC2007/images/003697.jpg -./VOC/test/VOCdevkit/VOC2007/images/003701.jpg -./VOC/test/VOCdevkit/VOC2007/images/003702.jpg -./VOC/test/VOCdevkit/VOC2007/images/003707.jpg -./VOC/test/VOCdevkit/VOC2007/images/003710.jpg -./VOC/test/VOCdevkit/VOC2007/images/003712.jpg -./VOC/test/VOCdevkit/VOC2007/images/003715.jpg -./VOC/test/VOCdevkit/VOC2007/images/003716.jpg -./VOC/test/VOCdevkit/VOC2007/images/003718.jpg -./VOC/test/VOCdevkit/VOC2007/images/003719.jpg -./VOC/test/VOCdevkit/VOC2007/images/003720.jpg -./VOC/test/VOCdevkit/VOC2007/images/003723.jpg -./VOC/test/VOCdevkit/VOC2007/images/003724.jpg -./VOC/test/VOCdevkit/VOC2007/images/003725.jpg -./VOC/test/VOCdevkit/VOC2007/images/003726.jpg -./VOC/test/VOCdevkit/VOC2007/images/003728.jpg -./VOC/test/VOCdevkit/VOC2007/images/003730.jpg -./VOC/test/VOCdevkit/VOC2007/images/003731.jpg -./VOC/test/VOCdevkit/VOC2007/images/003733.jpg -./VOC/test/VOCdevkit/VOC2007/images/003734.jpg -./VOC/test/VOCdevkit/VOC2007/images/003736.jpg -./VOC/test/VOCdevkit/VOC2007/images/003737.jpg -./VOC/test/VOCdevkit/VOC2007/images/003738.jpg -./VOC/test/VOCdevkit/VOC2007/images/003739.jpg -./VOC/test/VOCdevkit/VOC2007/images/003741.jpg -./VOC/test/VOCdevkit/VOC2007/images/003742.jpg -./VOC/test/VOCdevkit/VOC2007/images/003744.jpg -./VOC/test/VOCdevkit/VOC2007/images/003745.jpg -./VOC/test/VOCdevkit/VOC2007/images/003746.jpg -./VOC/test/VOCdevkit/VOC2007/images/003747.jpg -./VOC/test/VOCdevkit/VOC2007/images/003755.jpg -./VOC/test/VOCdevkit/VOC2007/images/003756.jpg -./VOC/test/VOCdevkit/VOC2007/images/003757.jpg -./VOC/test/VOCdevkit/VOC2007/images/003761.jpg -./VOC/test/VOCdevkit/VOC2007/images/003762.jpg -./VOC/test/VOCdevkit/VOC2007/images/003764.jpg -./VOC/test/VOCdevkit/VOC2007/images/003765.jpg -./VOC/test/VOCdevkit/VOC2007/images/003766.jpg -./VOC/test/VOCdevkit/VOC2007/images/003768.jpg -./VOC/test/VOCdevkit/VOC2007/images/003769.jpg -./VOC/test/VOCdevkit/VOC2007/images/003770.jpg -./VOC/test/VOCdevkit/VOC2007/images/003771.jpg -./VOC/test/VOCdevkit/VOC2007/images/003775.jpg -./VOC/test/VOCdevkit/VOC2007/images/003776.jpg -./VOC/test/VOCdevkit/VOC2007/images/003777.jpg -./VOC/test/VOCdevkit/VOC2007/images/003778.jpg -./VOC/test/VOCdevkit/VOC2007/images/003782.jpg -./VOC/test/VOCdevkit/VOC2007/images/003785.jpg -./VOC/test/VOCdevkit/VOC2007/images/003787.jpg -./VOC/test/VOCdevkit/VOC2007/images/003789.jpg -./VOC/test/VOCdevkit/VOC2007/images/003794.jpg -./VOC/test/VOCdevkit/VOC2007/images/003795.jpg -./VOC/test/VOCdevkit/VOC2007/images/003799.jpg -./VOC/test/VOCdevkit/VOC2007/images/003800.jpg -./VOC/test/VOCdevkit/VOC2007/images/003801.jpg -./VOC/test/VOCdevkit/VOC2007/images/003802.jpg -./VOC/test/VOCdevkit/VOC2007/images/003804.jpg -./VOC/test/VOCdevkit/VOC2007/images/003805.jpg -./VOC/test/VOCdevkit/VOC2007/images/003810.jpg -./VOC/test/VOCdevkit/VOC2007/images/003812.jpg -./VOC/test/VOCdevkit/VOC2007/images/003813.jpg -./VOC/test/VOCdevkit/VOC2007/images/003815.jpg -./VOC/test/VOCdevkit/VOC2007/images/003816.jpg -./VOC/test/VOCdevkit/VOC2007/images/003819.jpg -./VOC/test/VOCdevkit/VOC2007/images/003822.jpg -./VOC/test/VOCdevkit/VOC2007/images/003823.jpg -./VOC/test/VOCdevkit/VOC2007/images/003825.jpg -./VOC/test/VOCdevkit/VOC2007/images/003829.jpg -./VOC/test/VOCdevkit/VOC2007/images/003831.jpg -./VOC/test/VOCdevkit/VOC2007/images/003832.jpg -./VOC/test/VOCdevkit/VOC2007/images/003833.jpg -./VOC/test/VOCdevkit/VOC2007/images/003836.jpg -./VOC/test/VOCdevkit/VOC2007/images/003839.jpg -./VOC/test/VOCdevkit/VOC2007/images/003840.jpg -./VOC/test/VOCdevkit/VOC2007/images/003841.jpg -./VOC/test/VOCdevkit/VOC2007/images/003842.jpg -./VOC/test/VOCdevkit/VOC2007/images/003843.jpg -./VOC/test/VOCdevkit/VOC2007/images/003850.jpg -./VOC/test/VOCdevkit/VOC2007/images/003851.jpg -./VOC/test/VOCdevkit/VOC2007/images/003852.jpg -./VOC/test/VOCdevkit/VOC2007/images/003853.jpg -./VOC/test/VOCdevkit/VOC2007/images/003854.jpg -./VOC/test/VOCdevkit/VOC2007/images/003858.jpg -./VOC/test/VOCdevkit/VOC2007/images/003862.jpg -./VOC/test/VOCdevkit/VOC2007/images/003864.jpg -./VOC/test/VOCdevkit/VOC2007/images/003867.jpg -./VOC/test/VOCdevkit/VOC2007/images/003870.jpg -./VOC/test/VOCdevkit/VOC2007/images/003873.jpg -./VOC/test/VOCdevkit/VOC2007/images/003875.jpg -./VOC/test/VOCdevkit/VOC2007/images/003878.jpg -./VOC/test/VOCdevkit/VOC2007/images/003880.jpg -./VOC/test/VOCdevkit/VOC2007/images/003881.jpg -./VOC/test/VOCdevkit/VOC2007/images/003882.jpg -./VOC/test/VOCdevkit/VOC2007/images/003883.jpg -./VOC/test/VOCdevkit/VOC2007/images/003884.jpg -./VOC/test/VOCdevkit/VOC2007/images/003888.jpg -./VOC/test/VOCdevkit/VOC2007/images/003892.jpg -./VOC/test/VOCdevkit/VOC2007/images/003893.jpg -./VOC/test/VOCdevkit/VOC2007/images/003894.jpg -./VOC/test/VOCdevkit/VOC2007/images/003896.jpg -./VOC/test/VOCdevkit/VOC2007/images/003897.jpg -./VOC/test/VOCdevkit/VOC2007/images/003900.jpg -./VOC/test/VOCdevkit/VOC2007/images/003901.jpg -./VOC/test/VOCdevkit/VOC2007/images/003902.jpg -./VOC/test/VOCdevkit/VOC2007/images/003903.jpg -./VOC/test/VOCdevkit/VOC2007/images/003904.jpg -./VOC/test/VOCdevkit/VOC2007/images/003906.jpg -./VOC/test/VOCdevkit/VOC2007/images/003908.jpg -./VOC/test/VOCdevkit/VOC2007/images/003909.jpg -./VOC/test/VOCdevkit/VOC2007/images/003910.jpg -./VOC/test/VOCdevkit/VOC2007/images/003914.jpg -./VOC/test/VOCdevkit/VOC2007/images/003916.jpg -./VOC/test/VOCdevkit/VOC2007/images/003917.jpg -./VOC/test/VOCdevkit/VOC2007/images/003920.jpg -./VOC/test/VOCdevkit/VOC2007/images/003922.jpg -./VOC/test/VOCdevkit/VOC2007/images/003925.jpg -./VOC/test/VOCdevkit/VOC2007/images/003927.jpg -./VOC/test/VOCdevkit/VOC2007/images/003928.jpg -./VOC/test/VOCdevkit/VOC2007/images/003929.jpg -./VOC/test/VOCdevkit/VOC2007/images/003930.jpg -./VOC/test/VOCdevkit/VOC2007/images/003931.jpg -./VOC/test/VOCdevkit/VOC2007/images/003933.jpg -./VOC/test/VOCdevkit/VOC2007/images/003934.jpg -./VOC/test/VOCdevkit/VOC2007/images/003938.jpg -./VOC/test/VOCdevkit/VOC2007/images/003940.jpg -./VOC/test/VOCdevkit/VOC2007/images/003942.jpg -./VOC/test/VOCdevkit/VOC2007/images/003943.jpg -./VOC/test/VOCdevkit/VOC2007/images/003944.jpg -./VOC/test/VOCdevkit/VOC2007/images/003950.jpg -./VOC/test/VOCdevkit/VOC2007/images/003951.jpg -./VOC/test/VOCdevkit/VOC2007/images/003952.jpg -./VOC/test/VOCdevkit/VOC2007/images/003955.jpg -./VOC/test/VOCdevkit/VOC2007/images/003958.jpg -./VOC/test/VOCdevkit/VOC2007/images/003959.jpg -./VOC/test/VOCdevkit/VOC2007/images/003962.jpg -./VOC/test/VOCdevkit/VOC2007/images/003964.jpg -./VOC/test/VOCdevkit/VOC2007/images/003967.jpg -./VOC/test/VOCdevkit/VOC2007/images/003968.jpg -./VOC/test/VOCdevkit/VOC2007/images/003972.jpg -./VOC/test/VOCdevkit/VOC2007/images/003975.jpg -./VOC/test/VOCdevkit/VOC2007/images/003976.jpg -./VOC/test/VOCdevkit/VOC2007/images/003977.jpg -./VOC/test/VOCdevkit/VOC2007/images/003978.jpg -./VOC/test/VOCdevkit/VOC2007/images/003980.jpg -./VOC/test/VOCdevkit/VOC2007/images/003981.jpg -./VOC/test/VOCdevkit/VOC2007/images/003982.jpg -./VOC/test/VOCdevkit/VOC2007/images/003985.jpg -./VOC/test/VOCdevkit/VOC2007/images/003989.jpg -./VOC/test/VOCdevkit/VOC2007/images/003995.jpg -./VOC/test/VOCdevkit/VOC2007/images/003999.jpg -./VOC/test/VOCdevkit/VOC2007/images/004000.jpg -./VOC/test/VOCdevkit/VOC2007/images/004001.jpg -./VOC/test/VOCdevkit/VOC2007/images/004002.jpg -./VOC/test/VOCdevkit/VOC2007/images/004004.jpg -./VOC/test/VOCdevkit/VOC2007/images/004006.jpg -./VOC/test/VOCdevkit/VOC2007/images/004007.jpg -./VOC/test/VOCdevkit/VOC2007/images/004018.jpg -./VOC/test/VOCdevkit/VOC2007/images/004021.jpg -./VOC/test/VOCdevkit/VOC2007/images/004022.jpg -./VOC/test/VOCdevkit/VOC2007/images/004024.jpg -./VOC/test/VOCdevkit/VOC2007/images/004026.jpg -./VOC/test/VOCdevkit/VOC2007/images/004027.jpg -./VOC/test/VOCdevkit/VOC2007/images/004029.jpg -./VOC/test/VOCdevkit/VOC2007/images/004030.jpg -./VOC/test/VOCdevkit/VOC2007/images/004032.jpg -./VOC/test/VOCdevkit/VOC2007/images/004036.jpg -./VOC/test/VOCdevkit/VOC2007/images/004038.jpg -./VOC/test/VOCdevkit/VOC2007/images/004040.jpg -./VOC/test/VOCdevkit/VOC2007/images/004041.jpg -./VOC/test/VOCdevkit/VOC2007/images/004042.jpg -./VOC/test/VOCdevkit/VOC2007/images/004043.jpg -./VOC/test/VOCdevkit/VOC2007/images/004044.jpg -./VOC/test/VOCdevkit/VOC2007/images/004045.jpg -./VOC/test/VOCdevkit/VOC2007/images/004048.jpg -./VOC/test/VOCdevkit/VOC2007/images/004049.jpg -./VOC/test/VOCdevkit/VOC2007/images/004050.jpg -./VOC/test/VOCdevkit/VOC2007/images/004053.jpg -./VOC/test/VOCdevkit/VOC2007/images/004054.jpg -./VOC/test/VOCdevkit/VOC2007/images/004055.jpg -./VOC/test/VOCdevkit/VOC2007/images/004056.jpg -./VOC/test/VOCdevkit/VOC2007/images/004059.jpg -./VOC/test/VOCdevkit/VOC2007/images/004061.jpg -./VOC/test/VOCdevkit/VOC2007/images/004062.jpg -./VOC/test/VOCdevkit/VOC2007/images/004063.jpg -./VOC/test/VOCdevkit/VOC2007/images/004064.jpg -./VOC/test/VOCdevkit/VOC2007/images/004065.jpg -./VOC/test/VOCdevkit/VOC2007/images/004068.jpg -./VOC/test/VOCdevkit/VOC2007/images/004070.jpg -./VOC/test/VOCdevkit/VOC2007/images/004071.jpg -./VOC/test/VOCdevkit/VOC2007/images/004072.jpg -./VOC/test/VOCdevkit/VOC2007/images/004074.jpg -./VOC/test/VOCdevkit/VOC2007/images/004078.jpg -./VOC/test/VOCdevkit/VOC2007/images/004079.jpg -./VOC/test/VOCdevkit/VOC2007/images/004080.jpg -./VOC/test/VOCdevkit/VOC2007/images/004081.jpg -./VOC/test/VOCdevkit/VOC2007/images/004083.jpg -./VOC/test/VOCdevkit/VOC2007/images/004084.jpg -./VOC/test/VOCdevkit/VOC2007/images/004086.jpg -./VOC/test/VOCdevkit/VOC2007/images/004088.jpg -./VOC/test/VOCdevkit/VOC2007/images/004090.jpg -./VOC/test/VOCdevkit/VOC2007/images/004094.jpg -./VOC/test/VOCdevkit/VOC2007/images/004096.jpg -./VOC/test/VOCdevkit/VOC2007/images/004097.jpg -./VOC/test/VOCdevkit/VOC2007/images/004098.jpg -./VOC/test/VOCdevkit/VOC2007/images/004099.jpg -./VOC/test/VOCdevkit/VOC2007/images/004101.jpg -./VOC/test/VOCdevkit/VOC2007/images/004103.jpg -./VOC/test/VOCdevkit/VOC2007/images/004104.jpg -./VOC/test/VOCdevkit/VOC2007/images/004107.jpg -./VOC/test/VOCdevkit/VOC2007/images/004109.jpg -./VOC/test/VOCdevkit/VOC2007/images/004112.jpg -./VOC/test/VOCdevkit/VOC2007/images/004114.jpg -./VOC/test/VOCdevkit/VOC2007/images/004115.jpg -./VOC/test/VOCdevkit/VOC2007/images/004116.jpg -./VOC/test/VOCdevkit/VOC2007/images/004118.jpg -./VOC/test/VOCdevkit/VOC2007/images/004119.jpg -./VOC/test/VOCdevkit/VOC2007/images/004123.jpg -./VOC/test/VOCdevkit/VOC2007/images/004124.jpg -./VOC/test/VOCdevkit/VOC2007/images/004125.jpg -./VOC/test/VOCdevkit/VOC2007/images/004126.jpg -./VOC/test/VOCdevkit/VOC2007/images/004127.jpg -./VOC/test/VOCdevkit/VOC2007/images/004128.jpg -./VOC/test/VOCdevkit/VOC2007/images/004130.jpg -./VOC/test/VOCdevkit/VOC2007/images/004132.jpg -./VOC/test/VOCdevkit/VOC2007/images/004134.jpg -./VOC/test/VOCdevkit/VOC2007/images/004139.jpg -./VOC/test/VOCdevkit/VOC2007/images/004144.jpg -./VOC/test/VOCdevkit/VOC2007/images/004147.jpg -./VOC/test/VOCdevkit/VOC2007/images/004151.jpg -./VOC/test/VOCdevkit/VOC2007/images/004153.jpg -./VOC/test/VOCdevkit/VOC2007/images/004154.jpg -./VOC/test/VOCdevkit/VOC2007/images/004155.jpg -./VOC/test/VOCdevkit/VOC2007/images/004156.jpg -./VOC/test/VOCdevkit/VOC2007/images/004157.jpg -./VOC/test/VOCdevkit/VOC2007/images/004159.jpg -./VOC/test/VOCdevkit/VOC2007/images/004160.jpg -./VOC/test/VOCdevkit/VOC2007/images/004161.jpg -./VOC/test/VOCdevkit/VOC2007/images/004162.jpg -./VOC/test/VOCdevkit/VOC2007/images/004165.jpg -./VOC/test/VOCdevkit/VOC2007/images/004166.jpg -./VOC/test/VOCdevkit/VOC2007/images/004167.jpg -./VOC/test/VOCdevkit/VOC2007/images/004172.jpg -./VOC/test/VOCdevkit/VOC2007/images/004173.jpg -./VOC/test/VOCdevkit/VOC2007/images/004175.jpg -./VOC/test/VOCdevkit/VOC2007/images/004176.jpg -./VOC/test/VOCdevkit/VOC2007/images/004177.jpg -./VOC/test/VOCdevkit/VOC2007/images/004179.jpg -./VOC/test/VOCdevkit/VOC2007/images/004180.jpg -./VOC/test/VOCdevkit/VOC2007/images/004181.jpg -./VOC/test/VOCdevkit/VOC2007/images/004182.jpg -./VOC/test/VOCdevkit/VOC2007/images/004183.jpg -./VOC/test/VOCdevkit/VOC2007/images/004184.jpg -./VOC/test/VOCdevkit/VOC2007/images/004187.jpg -./VOC/test/VOCdevkit/VOC2007/images/004188.jpg -./VOC/test/VOCdevkit/VOC2007/images/004197.jpg -./VOC/test/VOCdevkit/VOC2007/images/004198.jpg -./VOC/test/VOCdevkit/VOC2007/images/004199.jpg -./VOC/test/VOCdevkit/VOC2007/images/004202.jpg -./VOC/test/VOCdevkit/VOC2007/images/004206.jpg -./VOC/test/VOCdevkit/VOC2007/images/004207.jpg -./VOC/test/VOCdevkit/VOC2007/images/004208.jpg -./VOC/test/VOCdevkit/VOC2007/images/004210.jpg -./VOC/test/VOCdevkit/VOC2007/images/004211.jpg -./VOC/test/VOCdevkit/VOC2007/images/004213.jpg -./VOC/test/VOCdevkit/VOC2007/images/004214.jpg -./VOC/test/VOCdevkit/VOC2007/images/004216.jpg -./VOC/test/VOCdevkit/VOC2007/images/004217.jpg -./VOC/test/VOCdevkit/VOC2007/images/004218.jpg -./VOC/test/VOCdevkit/VOC2007/images/004219.jpg -./VOC/test/VOCdevkit/VOC2007/images/004222.jpg -./VOC/test/VOCdevkit/VOC2007/images/004225.jpg -./VOC/test/VOCdevkit/VOC2007/images/004226.jpg -./VOC/test/VOCdevkit/VOC2007/images/004227.jpg -./VOC/test/VOCdevkit/VOC2007/images/004233.jpg -./VOC/test/VOCdevkit/VOC2007/images/004234.jpg -./VOC/test/VOCdevkit/VOC2007/images/004235.jpg -./VOC/test/VOCdevkit/VOC2007/images/004236.jpg -./VOC/test/VOCdevkit/VOC2007/images/004238.jpg -./VOC/test/VOCdevkit/VOC2007/images/004240.jpg -./VOC/test/VOCdevkit/VOC2007/images/004243.jpg -./VOC/test/VOCdevkit/VOC2007/images/004245.jpg -./VOC/test/VOCdevkit/VOC2007/images/004248.jpg -./VOC/test/VOCdevkit/VOC2007/images/004249.jpg -./VOC/test/VOCdevkit/VOC2007/images/004250.jpg -./VOC/test/VOCdevkit/VOC2007/images/004251.jpg -./VOC/test/VOCdevkit/VOC2007/images/004252.jpg -./VOC/test/VOCdevkit/VOC2007/images/004254.jpg -./VOC/test/VOCdevkit/VOC2007/images/004260.jpg -./VOC/test/VOCdevkit/VOC2007/images/004261.jpg -./VOC/test/VOCdevkit/VOC2007/images/004262.jpg -./VOC/test/VOCdevkit/VOC2007/images/004266.jpg -./VOC/test/VOCdevkit/VOC2007/images/004267.jpg -./VOC/test/VOCdevkit/VOC2007/images/004268.jpg -./VOC/test/VOCdevkit/VOC2007/images/004276.jpg -./VOC/test/VOCdevkit/VOC2007/images/004277.jpg -./VOC/test/VOCdevkit/VOC2007/images/004278.jpg -./VOC/test/VOCdevkit/VOC2007/images/004282.jpg -./VOC/test/VOCdevkit/VOC2007/images/004285.jpg -./VOC/test/VOCdevkit/VOC2007/images/004288.jpg -./VOC/test/VOCdevkit/VOC2007/images/004289.jpg -./VOC/test/VOCdevkit/VOC2007/images/004290.jpg -./VOC/test/VOCdevkit/VOC2007/images/004294.jpg -./VOC/test/VOCdevkit/VOC2007/images/004297.jpg -./VOC/test/VOCdevkit/VOC2007/images/004299.jpg -./VOC/test/VOCdevkit/VOC2007/images/004301.jpg -./VOC/test/VOCdevkit/VOC2007/images/004302.jpg -./VOC/test/VOCdevkit/VOC2007/images/004305.jpg -./VOC/test/VOCdevkit/VOC2007/images/004306.jpg -./VOC/test/VOCdevkit/VOC2007/images/004308.jpg -./VOC/test/VOCdevkit/VOC2007/images/004309.jpg -./VOC/test/VOCdevkit/VOC2007/images/004311.jpg -./VOC/test/VOCdevkit/VOC2007/images/004313.jpg -./VOC/test/VOCdevkit/VOC2007/images/004314.jpg -./VOC/test/VOCdevkit/VOC2007/images/004316.jpg -./VOC/test/VOCdevkit/VOC2007/images/004317.jpg -./VOC/test/VOCdevkit/VOC2007/images/004319.jpg -./VOC/test/VOCdevkit/VOC2007/images/004320.jpg -./VOC/test/VOCdevkit/VOC2007/images/004324.jpg -./VOC/test/VOCdevkit/VOC2007/images/004328.jpg -./VOC/test/VOCdevkit/VOC2007/images/004330.jpg -./VOC/test/VOCdevkit/VOC2007/images/004332.jpg -./VOC/test/VOCdevkit/VOC2007/images/004334.jpg -./VOC/test/VOCdevkit/VOC2007/images/004335.jpg -./VOC/test/VOCdevkit/VOC2007/images/004336.jpg -./VOC/test/VOCdevkit/VOC2007/images/004337.jpg -./VOC/test/VOCdevkit/VOC2007/images/004340.jpg -./VOC/test/VOCdevkit/VOC2007/images/004342.jpg -./VOC/test/VOCdevkit/VOC2007/images/004343.jpg -./VOC/test/VOCdevkit/VOC2007/images/004344.jpg -./VOC/test/VOCdevkit/VOC2007/images/004348.jpg -./VOC/test/VOCdevkit/VOC2007/images/004350.jpg -./VOC/test/VOCdevkit/VOC2007/images/004353.jpg -./VOC/test/VOCdevkit/VOC2007/images/004355.jpg -./VOC/test/VOCdevkit/VOC2007/images/004357.jpg -./VOC/test/VOCdevkit/VOC2007/images/004358.jpg -./VOC/test/VOCdevkit/VOC2007/images/004362.jpg -./VOC/test/VOCdevkit/VOC2007/images/004363.jpg -./VOC/test/VOCdevkit/VOC2007/images/004366.jpg -./VOC/test/VOCdevkit/VOC2007/images/004373.jpg -./VOC/test/VOCdevkit/VOC2007/images/004374.jpg -./VOC/test/VOCdevkit/VOC2007/images/004375.jpg -./VOC/test/VOCdevkit/VOC2007/images/004377.jpg -./VOC/test/VOCdevkit/VOC2007/images/004378.jpg -./VOC/test/VOCdevkit/VOC2007/images/004381.jpg -./VOC/test/VOCdevkit/VOC2007/images/004382.jpg -./VOC/test/VOCdevkit/VOC2007/images/004383.jpg -./VOC/test/VOCdevkit/VOC2007/images/004385.jpg -./VOC/test/VOCdevkit/VOC2007/images/004388.jpg -./VOC/test/VOCdevkit/VOC2007/images/004393.jpg -./VOC/test/VOCdevkit/VOC2007/images/004394.jpg -./VOC/test/VOCdevkit/VOC2007/images/004395.jpg -./VOC/test/VOCdevkit/VOC2007/images/004398.jpg -./VOC/test/VOCdevkit/VOC2007/images/004399.jpg -./VOC/test/VOCdevkit/VOC2007/images/004400.jpg -./VOC/test/VOCdevkit/VOC2007/images/004401.jpg -./VOC/test/VOCdevkit/VOC2007/images/004402.jpg -./VOC/test/VOCdevkit/VOC2007/images/004403.jpg -./VOC/test/VOCdevkit/VOC2007/images/004406.jpg -./VOC/test/VOCdevkit/VOC2007/images/004407.jpg -./VOC/test/VOCdevkit/VOC2007/images/004408.jpg -./VOC/test/VOCdevkit/VOC2007/images/004410.jpg -./VOC/test/VOCdevkit/VOC2007/images/004412.jpg -./VOC/test/VOCdevkit/VOC2007/images/004413.jpg -./VOC/test/VOCdevkit/VOC2007/images/004414.jpg -./VOC/test/VOCdevkit/VOC2007/images/004415.jpg -./VOC/test/VOCdevkit/VOC2007/images/004416.jpg -./VOC/test/VOCdevkit/VOC2007/images/004417.jpg -./VOC/test/VOCdevkit/VOC2007/images/004418.jpg -./VOC/test/VOCdevkit/VOC2007/images/004419.jpg -./VOC/test/VOCdevkit/VOC2007/images/004420.jpg -./VOC/test/VOCdevkit/VOC2007/images/004422.jpg -./VOC/test/VOCdevkit/VOC2007/images/004425.jpg -./VOC/test/VOCdevkit/VOC2007/images/004426.jpg -./VOC/test/VOCdevkit/VOC2007/images/004427.jpg -./VOC/test/VOCdevkit/VOC2007/images/004428.jpg -./VOC/test/VOCdevkit/VOC2007/images/004431.jpg -./VOC/test/VOCdevkit/VOC2007/images/004435.jpg -./VOC/test/VOCdevkit/VOC2007/images/004440.jpg -./VOC/test/VOCdevkit/VOC2007/images/004442.jpg -./VOC/test/VOCdevkit/VOC2007/images/004443.jpg -./VOC/test/VOCdevkit/VOC2007/images/004444.jpg -./VOC/test/VOCdevkit/VOC2007/images/004445.jpg -./VOC/test/VOCdevkit/VOC2007/images/004447.jpg -./VOC/test/VOCdevkit/VOC2007/images/004448.jpg -./VOC/test/VOCdevkit/VOC2007/images/004449.jpg -./VOC/test/VOCdevkit/VOC2007/images/004451.jpg -./VOC/test/VOCdevkit/VOC2007/images/004453.jpg -./VOC/test/VOCdevkit/VOC2007/images/004454.jpg -./VOC/test/VOCdevkit/VOC2007/images/004456.jpg -./VOC/test/VOCdevkit/VOC2007/images/004458.jpg -./VOC/test/VOCdevkit/VOC2007/images/004460.jpg -./VOC/test/VOCdevkit/VOC2007/images/004461.jpg -./VOC/test/VOCdevkit/VOC2007/images/004462.jpg -./VOC/test/VOCdevkit/VOC2007/images/004465.jpg -./VOC/test/VOCdevkit/VOC2007/images/004467.jpg -./VOC/test/VOCdevkit/VOC2007/images/004469.jpg -./VOC/test/VOCdevkit/VOC2007/images/004472.jpg -./VOC/test/VOCdevkit/VOC2007/images/004473.jpg -./VOC/test/VOCdevkit/VOC2007/images/004475.jpg -./VOC/test/VOCdevkit/VOC2007/images/004476.jpg -./VOC/test/VOCdevkit/VOC2007/images/004477.jpg -./VOC/test/VOCdevkit/VOC2007/images/004478.jpg -./VOC/test/VOCdevkit/VOC2007/images/004480.jpg -./VOC/test/VOCdevkit/VOC2007/images/004482.jpg -./VOC/test/VOCdevkit/VOC2007/images/004483.jpg -./VOC/test/VOCdevkit/VOC2007/images/004485.jpg -./VOC/test/VOCdevkit/VOC2007/images/004486.jpg -./VOC/test/VOCdevkit/VOC2007/images/004489.jpg -./VOC/test/VOCdevkit/VOC2007/images/004491.jpg -./VOC/test/VOCdevkit/VOC2007/images/004492.jpg -./VOC/test/VOCdevkit/VOC2007/images/004497.jpg -./VOC/test/VOCdevkit/VOC2007/images/004501.jpg -./VOC/test/VOCdevkit/VOC2007/images/004503.jpg -./VOC/test/VOCdevkit/VOC2007/images/004504.jpg -./VOC/test/VOCdevkit/VOC2007/images/004505.jpg -./VOC/test/VOCdevkit/VOC2007/images/004506.jpg -./VOC/test/VOCdevkit/VOC2007/images/004511.jpg -./VOC/test/VOCdevkit/VOC2007/images/004513.jpg -./VOC/test/VOCdevkit/VOC2007/images/004515.jpg -./VOC/test/VOCdevkit/VOC2007/images/004516.jpg -./VOC/test/VOCdevkit/VOC2007/images/004521.jpg -./VOC/test/VOCdevkit/VOC2007/images/004522.jpg -./VOC/test/VOCdevkit/VOC2007/images/004523.jpg -./VOC/test/VOCdevkit/VOC2007/images/004525.jpg -./VOC/test/VOCdevkit/VOC2007/images/004529.jpg -./VOC/test/VOCdevkit/VOC2007/images/004531.jpg -./VOC/test/VOCdevkit/VOC2007/images/004533.jpg -./VOC/test/VOCdevkit/VOC2007/images/004534.jpg -./VOC/test/VOCdevkit/VOC2007/images/004536.jpg -./VOC/test/VOCdevkit/VOC2007/images/004538.jpg -./VOC/test/VOCdevkit/VOC2007/images/004541.jpg -./VOC/test/VOCdevkit/VOC2007/images/004543.jpg -./VOC/test/VOCdevkit/VOC2007/images/004545.jpg -./VOC/test/VOCdevkit/VOC2007/images/004546.jpg -./VOC/test/VOCdevkit/VOC2007/images/004547.jpg -./VOC/test/VOCdevkit/VOC2007/images/004550.jpg -./VOC/test/VOCdevkit/VOC2007/images/004554.jpg -./VOC/test/VOCdevkit/VOC2007/images/004556.jpg -./VOC/test/VOCdevkit/VOC2007/images/004557.jpg -./VOC/test/VOCdevkit/VOC2007/images/004559.jpg -./VOC/test/VOCdevkit/VOC2007/images/004560.jpg -./VOC/test/VOCdevkit/VOC2007/images/004561.jpg -./VOC/test/VOCdevkit/VOC2007/images/004564.jpg -./VOC/test/VOCdevkit/VOC2007/images/004567.jpg -./VOC/test/VOCdevkit/VOC2007/images/004568.jpg -./VOC/test/VOCdevkit/VOC2007/images/004569.jpg -./VOC/test/VOCdevkit/VOC2007/images/004572.jpg -./VOC/test/VOCdevkit/VOC2007/images/004573.jpg -./VOC/test/VOCdevkit/VOC2007/images/004575.jpg -./VOC/test/VOCdevkit/VOC2007/images/004577.jpg -./VOC/test/VOCdevkit/VOC2007/images/004578.jpg -./VOC/test/VOCdevkit/VOC2007/images/004580.jpg -./VOC/test/VOCdevkit/VOC2007/images/004582.jpg -./VOC/test/VOCdevkit/VOC2007/images/004583.jpg -./VOC/test/VOCdevkit/VOC2007/images/004586.jpg -./VOC/test/VOCdevkit/VOC2007/images/004589.jpg -./VOC/test/VOCdevkit/VOC2007/images/004590.jpg -./VOC/test/VOCdevkit/VOC2007/images/004593.jpg -./VOC/test/VOCdevkit/VOC2007/images/004594.jpg -./VOC/test/VOCdevkit/VOC2007/images/004596.jpg -./VOC/test/VOCdevkit/VOC2007/images/004598.jpg -./VOC/test/VOCdevkit/VOC2007/images/004599.jpg -./VOC/test/VOCdevkit/VOC2007/images/004602.jpg -./VOC/test/VOCdevkit/VOC2007/images/004603.jpg -./VOC/test/VOCdevkit/VOC2007/images/004608.jpg -./VOC/test/VOCdevkit/VOC2007/images/004610.jpg -./VOC/test/VOCdevkit/VOC2007/images/004613.jpg -./VOC/test/VOCdevkit/VOC2007/images/004614.jpg -./VOC/test/VOCdevkit/VOC2007/images/004615.jpg -./VOC/test/VOCdevkit/VOC2007/images/004616.jpg -./VOC/test/VOCdevkit/VOC2007/images/004617.jpg -./VOC/test/VOCdevkit/VOC2007/images/004619.jpg -./VOC/test/VOCdevkit/VOC2007/images/004620.jpg -./VOC/test/VOCdevkit/VOC2007/images/004621.jpg -./VOC/test/VOCdevkit/VOC2007/images/004624.jpg -./VOC/test/VOCdevkit/VOC2007/images/004629.jpg -./VOC/test/VOCdevkit/VOC2007/images/004633.jpg -./VOC/test/VOCdevkit/VOC2007/images/004635.jpg -./VOC/test/VOCdevkit/VOC2007/images/004637.jpg -./VOC/test/VOCdevkit/VOC2007/images/004638.jpg -./VOC/test/VOCdevkit/VOC2007/images/004639.jpg -./VOC/test/VOCdevkit/VOC2007/images/004640.jpg -./VOC/test/VOCdevkit/VOC2007/images/004641.jpg -./VOC/test/VOCdevkit/VOC2007/images/004642.jpg -./VOC/test/VOCdevkit/VOC2007/images/004645.jpg -./VOC/test/VOCdevkit/VOC2007/images/004646.jpg -./VOC/test/VOCdevkit/VOC2007/images/004650.jpg -./VOC/test/VOCdevkit/VOC2007/images/004657.jpg -./VOC/test/VOCdevkit/VOC2007/images/004658.jpg -./VOC/test/VOCdevkit/VOC2007/images/004659.jpg -./VOC/test/VOCdevkit/VOC2007/images/004661.jpg -./VOC/test/VOCdevkit/VOC2007/images/004663.jpg -./VOC/test/VOCdevkit/VOC2007/images/004664.jpg -./VOC/test/VOCdevkit/VOC2007/images/004665.jpg -./VOC/test/VOCdevkit/VOC2007/images/004666.jpg -./VOC/test/VOCdevkit/VOC2007/images/004667.jpg -./VOC/test/VOCdevkit/VOC2007/images/004668.jpg -./VOC/test/VOCdevkit/VOC2007/images/004669.jpg -./VOC/test/VOCdevkit/VOC2007/images/004670.jpg -./VOC/test/VOCdevkit/VOC2007/images/004677.jpg -./VOC/test/VOCdevkit/VOC2007/images/004678.jpg -./VOC/test/VOCdevkit/VOC2007/images/004680.jpg -./VOC/test/VOCdevkit/VOC2007/images/004681.jpg -./VOC/test/VOCdevkit/VOC2007/images/004684.jpg -./VOC/test/VOCdevkit/VOC2007/images/004688.jpg -./VOC/test/VOCdevkit/VOC2007/images/004690.jpg -./VOC/test/VOCdevkit/VOC2007/images/004695.jpg -./VOC/test/VOCdevkit/VOC2007/images/004696.jpg -./VOC/test/VOCdevkit/VOC2007/images/004697.jpg -./VOC/test/VOCdevkit/VOC2007/images/004698.jpg -./VOC/test/VOCdevkit/VOC2007/images/004700.jpg -./VOC/test/VOCdevkit/VOC2007/images/004703.jpg -./VOC/test/VOCdevkit/VOC2007/images/004704.jpg -./VOC/test/VOCdevkit/VOC2007/images/004709.jpg -./VOC/test/VOCdevkit/VOC2007/images/004711.jpg -./VOC/test/VOCdevkit/VOC2007/images/004712.jpg -./VOC/test/VOCdevkit/VOC2007/images/004713.jpg -./VOC/test/VOCdevkit/VOC2007/images/004716.jpg -./VOC/test/VOCdevkit/VOC2007/images/004717.jpg -./VOC/test/VOCdevkit/VOC2007/images/004720.jpg -./VOC/test/VOCdevkit/VOC2007/images/004721.jpg -./VOC/test/VOCdevkit/VOC2007/images/004724.jpg -./VOC/test/VOCdevkit/VOC2007/images/004725.jpg -./VOC/test/VOCdevkit/VOC2007/images/004726.jpg -./VOC/test/VOCdevkit/VOC2007/images/004728.jpg -./VOC/test/VOCdevkit/VOC2007/images/004729.jpg -./VOC/test/VOCdevkit/VOC2007/images/004730.jpg -./VOC/test/VOCdevkit/VOC2007/images/004731.jpg -./VOC/test/VOCdevkit/VOC2007/images/004733.jpg -./VOC/test/VOCdevkit/VOC2007/images/004734.jpg -./VOC/test/VOCdevkit/VOC2007/images/004736.jpg -./VOC/test/VOCdevkit/VOC2007/images/004738.jpg -./VOC/test/VOCdevkit/VOC2007/images/004739.jpg -./VOC/test/VOCdevkit/VOC2007/images/004740.jpg -./VOC/test/VOCdevkit/VOC2007/images/004741.jpg -./VOC/test/VOCdevkit/VOC2007/images/004744.jpg -./VOC/test/VOCdevkit/VOC2007/images/004745.jpg -./VOC/test/VOCdevkit/VOC2007/images/004749.jpg -./VOC/test/VOCdevkit/VOC2007/images/004751.jpg -./VOC/test/VOCdevkit/VOC2007/images/004752.jpg -./VOC/test/VOCdevkit/VOC2007/images/004755.jpg -./VOC/test/VOCdevkit/VOC2007/images/004756.jpg -./VOC/test/VOCdevkit/VOC2007/images/004757.jpg -./VOC/test/VOCdevkit/VOC2007/images/004758.jpg -./VOC/test/VOCdevkit/VOC2007/images/004759.jpg -./VOC/test/VOCdevkit/VOC2007/images/004762.jpg -./VOC/test/VOCdevkit/VOC2007/images/004763.jpg -./VOC/test/VOCdevkit/VOC2007/images/004764.jpg -./VOC/test/VOCdevkit/VOC2007/images/004765.jpg -./VOC/test/VOCdevkit/VOC2007/images/004766.jpg -./VOC/test/VOCdevkit/VOC2007/images/004767.jpg -./VOC/test/VOCdevkit/VOC2007/images/004769.jpg -./VOC/test/VOCdevkit/VOC2007/images/004771.jpg -./VOC/test/VOCdevkit/VOC2007/images/004772.jpg -./VOC/test/VOCdevkit/VOC2007/images/004774.jpg -./VOC/test/VOCdevkit/VOC2007/images/004775.jpg -./VOC/test/VOCdevkit/VOC2007/images/004778.jpg -./VOC/test/VOCdevkit/VOC2007/images/004780.jpg -./VOC/test/VOCdevkit/VOC2007/images/004781.jpg -./VOC/test/VOCdevkit/VOC2007/images/004784.jpg -./VOC/test/VOCdevkit/VOC2007/images/004787.jpg -./VOC/test/VOCdevkit/VOC2007/images/004791.jpg -./VOC/test/VOCdevkit/VOC2007/images/004795.jpg -./VOC/test/VOCdevkit/VOC2007/images/004798.jpg -./VOC/test/VOCdevkit/VOC2007/images/004800.jpg -./VOC/test/VOCdevkit/VOC2007/images/004802.jpg -./VOC/test/VOCdevkit/VOC2007/images/004803.jpg -./VOC/test/VOCdevkit/VOC2007/images/004804.jpg -./VOC/test/VOCdevkit/VOC2007/images/004806.jpg -./VOC/test/VOCdevkit/VOC2007/images/004807.jpg -./VOC/test/VOCdevkit/VOC2007/images/004809.jpg -./VOC/test/VOCdevkit/VOC2007/images/004810.jpg -./VOC/test/VOCdevkit/VOC2007/images/004811.jpg -./VOC/test/VOCdevkit/VOC2007/images/004813.jpg -./VOC/test/VOCdevkit/VOC2007/images/004817.jpg -./VOC/test/VOCdevkit/VOC2007/images/004819.jpg -./VOC/test/VOCdevkit/VOC2007/images/004820.jpg -./VOC/test/VOCdevkit/VOC2007/images/004821.jpg -./VOC/test/VOCdevkit/VOC2007/images/004822.jpg -./VOC/test/VOCdevkit/VOC2007/images/004824.jpg -./VOC/test/VOCdevkit/VOC2007/images/004827.jpg -./VOC/test/VOCdevkit/VOC2007/images/004829.jpg -./VOC/test/VOCdevkit/VOC2007/images/004833.jpg -./VOC/test/VOCdevkit/VOC2007/images/004835.jpg -./VOC/test/VOCdevkit/VOC2007/images/004838.jpg -./VOC/test/VOCdevkit/VOC2007/images/004843.jpg -./VOC/test/VOCdevkit/VOC2007/images/004844.jpg -./VOC/test/VOCdevkit/VOC2007/images/004845.jpg -./VOC/test/VOCdevkit/VOC2007/images/004847.jpg -./VOC/test/VOCdevkit/VOC2007/images/004851.jpg -./VOC/test/VOCdevkit/VOC2007/images/004853.jpg -./VOC/test/VOCdevkit/VOC2007/images/004854.jpg -./VOC/test/VOCdevkit/VOC2007/images/004855.jpg -./VOC/test/VOCdevkit/VOC2007/images/004858.jpg -./VOC/test/VOCdevkit/VOC2007/images/004860.jpg -./VOC/test/VOCdevkit/VOC2007/images/004861.jpg -./VOC/test/VOCdevkit/VOC2007/images/004862.jpg -./VOC/test/VOCdevkit/VOC2007/images/004864.jpg -./VOC/test/VOCdevkit/VOC2007/images/004865.jpg -./VOC/test/VOCdevkit/VOC2007/images/004870.jpg -./VOC/test/VOCdevkit/VOC2007/images/004871.jpg -./VOC/test/VOCdevkit/VOC2007/images/004874.jpg -./VOC/test/VOCdevkit/VOC2007/images/004875.jpg -./VOC/test/VOCdevkit/VOC2007/images/004877.jpg -./VOC/test/VOCdevkit/VOC2007/images/004880.jpg -./VOC/test/VOCdevkit/VOC2007/images/004881.jpg -./VOC/test/VOCdevkit/VOC2007/images/004883.jpg -./VOC/test/VOCdevkit/VOC2007/images/004884.jpg -./VOC/test/VOCdevkit/VOC2007/images/004887.jpg -./VOC/test/VOCdevkit/VOC2007/images/004888.jpg -./VOC/test/VOCdevkit/VOC2007/images/004889.jpg -./VOC/test/VOCdevkit/VOC2007/images/004891.jpg -./VOC/test/VOCdevkit/VOC2007/images/004892.jpg -./VOC/test/VOCdevkit/VOC2007/images/004893.jpg -./VOC/test/VOCdevkit/VOC2007/images/004894.jpg -./VOC/test/VOCdevkit/VOC2007/images/004899.jpg -./VOC/test/VOCdevkit/VOC2007/images/004900.jpg -./VOC/test/VOCdevkit/VOC2007/images/004901.jpg -./VOC/test/VOCdevkit/VOC2007/images/004904.jpg -./VOC/test/VOCdevkit/VOC2007/images/004906.jpg -./VOC/test/VOCdevkit/VOC2007/images/004908.jpg -./VOC/test/VOCdevkit/VOC2007/images/004909.jpg -./VOC/test/VOCdevkit/VOC2007/images/004914.jpg -./VOC/test/VOCdevkit/VOC2007/images/004915.jpg -./VOC/test/VOCdevkit/VOC2007/images/004917.jpg -./VOC/test/VOCdevkit/VOC2007/images/004918.jpg -./VOC/test/VOCdevkit/VOC2007/images/004919.jpg -./VOC/test/VOCdevkit/VOC2007/images/004920.jpg -./VOC/test/VOCdevkit/VOC2007/images/004921.jpg -./VOC/test/VOCdevkit/VOC2007/images/004922.jpg -./VOC/test/VOCdevkit/VOC2007/images/004923.jpg -./VOC/test/VOCdevkit/VOC2007/images/004924.jpg -./VOC/test/VOCdevkit/VOC2007/images/004925.jpg -./VOC/test/VOCdevkit/VOC2007/images/004927.jpg -./VOC/test/VOCdevkit/VOC2007/images/004930.jpg -./VOC/test/VOCdevkit/VOC2007/images/004932.jpg -./VOC/test/VOCdevkit/VOC2007/images/004933.jpg -./VOC/test/VOCdevkit/VOC2007/images/004934.jpg -./VOC/test/VOCdevkit/VOC2007/images/004937.jpg -./VOC/test/VOCdevkit/VOC2007/images/004940.jpg -./VOC/test/VOCdevkit/VOC2007/images/004941.jpg -./VOC/test/VOCdevkit/VOC2007/images/004942.jpg -./VOC/test/VOCdevkit/VOC2007/images/004944.jpg -./VOC/test/VOCdevkit/VOC2007/images/004945.jpg -./VOC/test/VOCdevkit/VOC2007/images/004947.jpg -./VOC/test/VOCdevkit/VOC2007/images/004949.jpg -./VOC/test/VOCdevkit/VOC2007/images/004952.jpg -./VOC/test/VOCdevkit/VOC2007/images/004957.jpg -./VOC/test/VOCdevkit/VOC2007/images/004959.jpg -./VOC/test/VOCdevkit/VOC2007/images/004964.jpg -./VOC/test/VOCdevkit/VOC2007/images/004965.jpg -./VOC/test/VOCdevkit/VOC2007/images/004969.jpg -./VOC/test/VOCdevkit/VOC2007/images/004970.jpg -./VOC/test/VOCdevkit/VOC2007/images/004971.jpg -./VOC/test/VOCdevkit/VOC2007/images/004975.jpg -./VOC/test/VOCdevkit/VOC2007/images/004978.jpg -./VOC/test/VOCdevkit/VOC2007/images/004979.jpg -./VOC/test/VOCdevkit/VOC2007/images/004980.jpg -./VOC/test/VOCdevkit/VOC2007/images/004981.jpg -./VOC/test/VOCdevkit/VOC2007/images/004988.jpg -./VOC/test/VOCdevkit/VOC2007/images/004989.jpg -./VOC/test/VOCdevkit/VOC2007/images/004993.jpg -./VOC/test/VOCdevkit/VOC2007/images/004996.jpg -./VOC/test/VOCdevkit/VOC2007/images/005000.jpg -./VOC/test/VOCdevkit/VOC2007/images/005002.jpg -./VOC/test/VOCdevkit/VOC2007/images/005005.jpg -./VOC/test/VOCdevkit/VOC2007/images/005008.jpg -./VOC/test/VOCdevkit/VOC2007/images/005009.jpg -./VOC/test/VOCdevkit/VOC2007/images/005010.jpg -./VOC/test/VOCdevkit/VOC2007/images/005011.jpg -./VOC/test/VOCdevkit/VOC2007/images/005012.jpg -./VOC/test/VOCdevkit/VOC2007/images/005013.jpg -./VOC/test/VOCdevkit/VOC2007/images/005015.jpg -./VOC/test/VOCdevkit/VOC2007/images/005017.jpg -./VOC/test/VOCdevkit/VOC2007/images/005019.jpg -./VOC/test/VOCdevkit/VOC2007/images/005021.jpg -./VOC/test/VOCdevkit/VOC2007/images/005022.jpg -./VOC/test/VOCdevkit/VOC2007/images/005025.jpg -./VOC/test/VOCdevkit/VOC2007/images/005030.jpg -./VOC/test/VOCdevkit/VOC2007/images/005031.jpg -./VOC/test/VOCdevkit/VOC2007/images/005034.jpg -./VOC/test/VOCdevkit/VOC2007/images/005035.jpg -./VOC/test/VOCdevkit/VOC2007/images/005038.jpg -./VOC/test/VOCdevkit/VOC2007/images/005040.jpg -./VOC/test/VOCdevkit/VOC2007/images/005041.jpg -./VOC/test/VOCdevkit/VOC2007/images/005043.jpg -./VOC/test/VOCdevkit/VOC2007/images/005044.jpg -./VOC/test/VOCdevkit/VOC2007/images/005046.jpg -./VOC/test/VOCdevkit/VOC2007/images/005048.jpg -./VOC/test/VOCdevkit/VOC2007/images/005049.jpg -./VOC/test/VOCdevkit/VOC2007/images/005050.jpg -./VOC/test/VOCdevkit/VOC2007/images/005051.jpg -./VOC/test/VOCdevkit/VOC2007/images/005053.jpg -./VOC/test/VOCdevkit/VOC2007/images/005059.jpg -./VOC/test/VOCdevkit/VOC2007/images/005060.jpg -./VOC/test/VOCdevkit/VOC2007/images/005066.jpg -./VOC/test/VOCdevkit/VOC2007/images/005069.jpg -./VOC/test/VOCdevkit/VOC2007/images/005070.jpg -./VOC/test/VOCdevkit/VOC2007/images/005074.jpg -./VOC/test/VOCdevkit/VOC2007/images/005075.jpg -./VOC/test/VOCdevkit/VOC2007/images/005076.jpg -./VOC/test/VOCdevkit/VOC2007/images/005080.jpg -./VOC/test/VOCdevkit/VOC2007/images/005082.jpg -./VOC/test/VOCdevkit/VOC2007/images/005083.jpg -./VOC/test/VOCdevkit/VOC2007/images/005087.jpg -./VOC/test/VOCdevkit/VOC2007/images/005088.jpg -./VOC/test/VOCdevkit/VOC2007/images/005089.jpg -./VOC/test/VOCdevkit/VOC2007/images/005091.jpg -./VOC/test/VOCdevkit/VOC2007/images/005092.jpg -./VOC/test/VOCdevkit/VOC2007/images/005095.jpg -./VOC/test/VOCdevkit/VOC2007/images/005096.jpg -./VOC/test/VOCdevkit/VOC2007/images/005098.jpg -./VOC/test/VOCdevkit/VOC2007/images/005099.jpg -./VOC/test/VOCdevkit/VOC2007/images/005100.jpg -./VOC/test/VOCdevkit/VOC2007/images/005103.jpg -./VOC/test/VOCdevkit/VOC2007/images/005105.jpg -./VOC/test/VOCdevkit/VOC2007/images/005106.jpg -./VOC/test/VOCdevkit/VOC2007/images/005109.jpg -./VOC/test/VOCdevkit/VOC2007/images/005112.jpg -./VOC/test/VOCdevkit/VOC2007/images/005113.jpg -./VOC/test/VOCdevkit/VOC2007/images/005115.jpg -./VOC/test/VOCdevkit/VOC2007/images/005117.jpg -./VOC/test/VOCdevkit/VOC2007/images/005118.jpg -./VOC/test/VOCdevkit/VOC2007/images/005119.jpg -./VOC/test/VOCdevkit/VOC2007/images/005120.jpg -./VOC/test/VOCdevkit/VOC2007/images/005123.jpg -./VOC/test/VOCdevkit/VOC2007/images/005125.jpg -./VOC/test/VOCdevkit/VOC2007/images/005126.jpg -./VOC/test/VOCdevkit/VOC2007/images/005127.jpg -./VOC/test/VOCdevkit/VOC2007/images/005132.jpg -./VOC/test/VOCdevkit/VOC2007/images/005133.jpg -./VOC/test/VOCdevkit/VOC2007/images/005137.jpg -./VOC/test/VOCdevkit/VOC2007/images/005139.jpg -./VOC/test/VOCdevkit/VOC2007/images/005140.jpg -./VOC/test/VOCdevkit/VOC2007/images/005141.jpg -./VOC/test/VOCdevkit/VOC2007/images/005142.jpg -./VOC/test/VOCdevkit/VOC2007/images/005147.jpg -./VOC/test/VOCdevkit/VOC2007/images/005148.jpg -./VOC/test/VOCdevkit/VOC2007/images/005149.jpg -./VOC/test/VOCdevkit/VOC2007/images/005151.jpg -./VOC/test/VOCdevkit/VOC2007/images/005152.jpg -./VOC/test/VOCdevkit/VOC2007/images/005154.jpg -./VOC/test/VOCdevkit/VOC2007/images/005155.jpg -./VOC/test/VOCdevkit/VOC2007/images/005157.jpg -./VOC/test/VOCdevkit/VOC2007/images/005158.jpg -./VOC/test/VOCdevkit/VOC2007/images/005162.jpg -./VOC/test/VOCdevkit/VOC2007/images/005163.jpg -./VOC/test/VOCdevkit/VOC2007/images/005164.jpg -./VOC/test/VOCdevkit/VOC2007/images/005165.jpg -./VOC/test/VOCdevkit/VOC2007/images/005166.jpg -./VOC/test/VOCdevkit/VOC2007/images/005167.jpg -./VOC/test/VOCdevkit/VOC2007/images/005170.jpg -./VOC/test/VOCdevkit/VOC2007/images/005172.jpg -./VOC/test/VOCdevkit/VOC2007/images/005174.jpg -./VOC/test/VOCdevkit/VOC2007/images/005178.jpg -./VOC/test/VOCdevkit/VOC2007/images/005180.jpg -./VOC/test/VOCdevkit/VOC2007/images/005182.jpg -./VOC/test/VOCdevkit/VOC2007/images/005184.jpg -./VOC/test/VOCdevkit/VOC2007/images/005187.jpg -./VOC/test/VOCdevkit/VOC2007/images/005188.jpg -./VOC/test/VOCdevkit/VOC2007/images/005192.jpg -./VOC/test/VOCdevkit/VOC2007/images/005193.jpg -./VOC/test/VOCdevkit/VOC2007/images/005194.jpg -./VOC/test/VOCdevkit/VOC2007/images/005196.jpg -./VOC/test/VOCdevkit/VOC2007/images/005197.jpg -./VOC/test/VOCdevkit/VOC2007/images/005198.jpg -./VOC/test/VOCdevkit/VOC2007/images/005200.jpg -./VOC/test/VOCdevkit/VOC2007/images/005201.jpg -./VOC/test/VOCdevkit/VOC2007/images/005204.jpg -./VOC/test/VOCdevkit/VOC2007/images/005205.jpg -./VOC/test/VOCdevkit/VOC2007/images/005206.jpg -./VOC/test/VOCdevkit/VOC2007/images/005207.jpg -./VOC/test/VOCdevkit/VOC2007/images/005211.jpg -./VOC/test/VOCdevkit/VOC2007/images/005213.jpg -./VOC/test/VOCdevkit/VOC2007/images/005216.jpg -./VOC/test/VOCdevkit/VOC2007/images/005218.jpg -./VOC/test/VOCdevkit/VOC2007/images/005221.jpg -./VOC/test/VOCdevkit/VOC2007/images/005225.jpg -./VOC/test/VOCdevkit/VOC2007/images/005226.jpg -./VOC/test/VOCdevkit/VOC2007/images/005227.jpg -./VOC/test/VOCdevkit/VOC2007/images/005228.jpg -./VOC/test/VOCdevkit/VOC2007/images/005232.jpg -./VOC/test/VOCdevkit/VOC2007/images/005233.jpg -./VOC/test/VOCdevkit/VOC2007/images/005234.jpg -./VOC/test/VOCdevkit/VOC2007/images/005235.jpg -./VOC/test/VOCdevkit/VOC2007/images/005237.jpg -./VOC/test/VOCdevkit/VOC2007/images/005238.jpg -./VOC/test/VOCdevkit/VOC2007/images/005240.jpg -./VOC/test/VOCdevkit/VOC2007/images/005241.jpg -./VOC/test/VOCdevkit/VOC2007/images/005243.jpg -./VOC/test/VOCdevkit/VOC2007/images/005247.jpg -./VOC/test/VOCdevkit/VOC2007/images/005249.jpg -./VOC/test/VOCdevkit/VOC2007/images/005250.jpg -./VOC/test/VOCdevkit/VOC2007/images/005251.jpg -./VOC/test/VOCdevkit/VOC2007/images/005252.jpg -./VOC/test/VOCdevkit/VOC2007/images/005255.jpg -./VOC/test/VOCdevkit/VOC2007/images/005256.jpg -./VOC/test/VOCdevkit/VOC2007/images/005261.jpg -./VOC/test/VOCdevkit/VOC2007/images/005265.jpg -./VOC/test/VOCdevkit/VOC2007/images/005266.jpg -./VOC/test/VOCdevkit/VOC2007/images/005271.jpg -./VOC/test/VOCdevkit/VOC2007/images/005272.jpg -./VOC/test/VOCdevkit/VOC2007/images/005275.jpg -./VOC/test/VOCdevkit/VOC2007/images/005276.jpg -./VOC/test/VOCdevkit/VOC2007/images/005277.jpg -./VOC/test/VOCdevkit/VOC2007/images/005279.jpg -./VOC/test/VOCdevkit/VOC2007/images/005280.jpg -./VOC/test/VOCdevkit/VOC2007/images/005282.jpg -./VOC/test/VOCdevkit/VOC2007/images/005284.jpg -./VOC/test/VOCdevkit/VOC2007/images/005286.jpg -./VOC/test/VOCdevkit/VOC2007/images/005287.jpg -./VOC/test/VOCdevkit/VOC2007/images/005289.jpg -./VOC/test/VOCdevkit/VOC2007/images/005291.jpg -./VOC/test/VOCdevkit/VOC2007/images/005294.jpg -./VOC/test/VOCdevkit/VOC2007/images/005295.jpg -./VOC/test/VOCdevkit/VOC2007/images/005296.jpg -./VOC/test/VOCdevkit/VOC2007/images/005299.jpg -./VOC/test/VOCdevkit/VOC2007/images/005300.jpg -./VOC/test/VOCdevkit/VOC2007/images/005301.jpg -./VOC/test/VOCdevkit/VOC2007/images/005302.jpg -./VOC/test/VOCdevkit/VOC2007/images/005308.jpg -./VOC/test/VOCdevkit/VOC2007/images/005309.jpg -./VOC/test/VOCdevkit/VOC2007/images/005313.jpg -./VOC/test/VOCdevkit/VOC2007/images/005316.jpg -./VOC/test/VOCdevkit/VOC2007/images/005317.jpg -./VOC/test/VOCdevkit/VOC2007/images/005321.jpg -./VOC/test/VOCdevkit/VOC2007/images/005322.jpg -./VOC/test/VOCdevkit/VOC2007/images/005323.jpg -./VOC/test/VOCdevkit/VOC2007/images/005324.jpg -./VOC/test/VOCdevkit/VOC2007/images/005329.jpg -./VOC/test/VOCdevkit/VOC2007/images/005330.jpg -./VOC/test/VOCdevkit/VOC2007/images/005332.jpg -./VOC/test/VOCdevkit/VOC2007/images/005333.jpg -./VOC/test/VOCdevkit/VOC2007/images/005334.jpg -./VOC/test/VOCdevkit/VOC2007/images/005335.jpg -./VOC/test/VOCdevkit/VOC2007/images/005339.jpg -./VOC/test/VOCdevkit/VOC2007/images/005341.jpg -./VOC/test/VOCdevkit/VOC2007/images/005342.jpg -./VOC/test/VOCdevkit/VOC2007/images/005347.jpg -./VOC/test/VOCdevkit/VOC2007/images/005353.jpg -./VOC/test/VOCdevkit/VOC2007/images/005354.jpg -./VOC/test/VOCdevkit/VOC2007/images/005356.jpg -./VOC/test/VOCdevkit/VOC2007/images/005357.jpg -./VOC/test/VOCdevkit/VOC2007/images/005359.jpg -./VOC/test/VOCdevkit/VOC2007/images/005361.jpg -./VOC/test/VOCdevkit/VOC2007/images/005362.jpg -./VOC/test/VOCdevkit/VOC2007/images/005364.jpg -./VOC/test/VOCdevkit/VOC2007/images/005366.jpg -./VOC/test/VOCdevkit/VOC2007/images/005372.jpg -./VOC/test/VOCdevkit/VOC2007/images/005375.jpg -./VOC/test/VOCdevkit/VOC2007/images/005376.jpg -./VOC/test/VOCdevkit/VOC2007/images/005377.jpg -./VOC/test/VOCdevkit/VOC2007/images/005381.jpg -./VOC/test/VOCdevkit/VOC2007/images/005382.jpg -./VOC/test/VOCdevkit/VOC2007/images/005386.jpg -./VOC/test/VOCdevkit/VOC2007/images/005390.jpg -./VOC/test/VOCdevkit/VOC2007/images/005392.jpg -./VOC/test/VOCdevkit/VOC2007/images/005394.jpg -./VOC/test/VOCdevkit/VOC2007/images/005399.jpg -./VOC/test/VOCdevkit/VOC2007/images/005400.jpg -./VOC/test/VOCdevkit/VOC2007/images/005401.jpg -./VOC/test/VOCdevkit/VOC2007/images/005402.jpg -./VOC/test/VOCdevkit/VOC2007/images/005403.jpg -./VOC/test/VOCdevkit/VOC2007/images/005409.jpg -./VOC/test/VOCdevkit/VOC2007/images/005411.jpg -./VOC/test/VOCdevkit/VOC2007/images/005412.jpg -./VOC/test/VOCdevkit/VOC2007/images/005415.jpg -./VOC/test/VOCdevkit/VOC2007/images/005422.jpg -./VOC/test/VOCdevkit/VOC2007/images/005425.jpg -./VOC/test/VOCdevkit/VOC2007/images/005426.jpg -./VOC/test/VOCdevkit/VOC2007/images/005427.jpg -./VOC/test/VOCdevkit/VOC2007/images/005428.jpg -./VOC/test/VOCdevkit/VOC2007/images/005432.jpg -./VOC/test/VOCdevkit/VOC2007/images/005435.jpg -./VOC/test/VOCdevkit/VOC2007/images/005437.jpg -./VOC/test/VOCdevkit/VOC2007/images/005442.jpg -./VOC/test/VOCdevkit/VOC2007/images/005443.jpg -./VOC/test/VOCdevkit/VOC2007/images/005444.jpg -./VOC/test/VOCdevkit/VOC2007/images/005446.jpg -./VOC/test/VOCdevkit/VOC2007/images/005447.jpg -./VOC/test/VOCdevkit/VOC2007/images/005449.jpg -./VOC/test/VOCdevkit/VOC2007/images/005452.jpg -./VOC/test/VOCdevkit/VOC2007/images/005456.jpg -./VOC/test/VOCdevkit/VOC2007/images/005458.jpg -./VOC/test/VOCdevkit/VOC2007/images/005459.jpg -./VOC/test/VOCdevkit/VOC2007/images/005460.jpg -./VOC/test/VOCdevkit/VOC2007/images/005462.jpg -./VOC/test/VOCdevkit/VOC2007/images/005463.jpg -./VOC/test/VOCdevkit/VOC2007/images/005464.jpg -./VOC/test/VOCdevkit/VOC2007/images/005466.jpg -./VOC/test/VOCdevkit/VOC2007/images/005468.jpg -./VOC/test/VOCdevkit/VOC2007/images/005472.jpg -./VOC/test/VOCdevkit/VOC2007/images/005473.jpg -./VOC/test/VOCdevkit/VOC2007/images/005474.jpg -./VOC/test/VOCdevkit/VOC2007/images/005476.jpg -./VOC/test/VOCdevkit/VOC2007/images/005477.jpg -./VOC/test/VOCdevkit/VOC2007/images/005479.jpg -./VOC/test/VOCdevkit/VOC2007/images/005480.jpg -./VOC/test/VOCdevkit/VOC2007/images/005482.jpg -./VOC/test/VOCdevkit/VOC2007/images/005484.jpg -./VOC/test/VOCdevkit/VOC2007/images/005488.jpg -./VOC/test/VOCdevkit/VOC2007/images/005490.jpg -./VOC/test/VOCdevkit/VOC2007/images/005491.jpg -./VOC/test/VOCdevkit/VOC2007/images/005492.jpg -./VOC/test/VOCdevkit/VOC2007/images/005493.jpg -./VOC/test/VOCdevkit/VOC2007/images/005494.jpg -./VOC/test/VOCdevkit/VOC2007/images/005495.jpg -./VOC/test/VOCdevkit/VOC2007/images/005498.jpg -./VOC/test/VOCdevkit/VOC2007/images/005500.jpg -./VOC/test/VOCdevkit/VOC2007/images/005501.jpg -./VOC/test/VOCdevkit/VOC2007/images/005502.jpg -./VOC/test/VOCdevkit/VOC2007/images/005503.jpg -./VOC/test/VOCdevkit/VOC2007/images/005504.jpg -./VOC/test/VOCdevkit/VOC2007/images/005505.jpg -./VOC/test/VOCdevkit/VOC2007/images/005506.jpg -./VOC/test/VOCdevkit/VOC2007/images/005512.jpg -./VOC/test/VOCdevkit/VOC2007/images/005513.jpg -./VOC/test/VOCdevkit/VOC2007/images/005516.jpg -./VOC/test/VOCdevkit/VOC2007/images/005520.jpg -./VOC/test/VOCdevkit/VOC2007/images/005523.jpg -./VOC/test/VOCdevkit/VOC2007/images/005525.jpg -./VOC/test/VOCdevkit/VOC2007/images/005528.jpg -./VOC/test/VOCdevkit/VOC2007/images/005529.jpg -./VOC/test/VOCdevkit/VOC2007/images/005532.jpg -./VOC/test/VOCdevkit/VOC2007/images/005533.jpg -./VOC/test/VOCdevkit/VOC2007/images/005534.jpg -./VOC/test/VOCdevkit/VOC2007/images/005537.jpg -./VOC/test/VOCdevkit/VOC2007/images/005538.jpg -./VOC/test/VOCdevkit/VOC2007/images/005540.jpg -./VOC/test/VOCdevkit/VOC2007/images/005543.jpg -./VOC/test/VOCdevkit/VOC2007/images/005545.jpg -./VOC/test/VOCdevkit/VOC2007/images/005546.jpg -./VOC/test/VOCdevkit/VOC2007/images/005548.jpg -./VOC/test/VOCdevkit/VOC2007/images/005551.jpg -./VOC/test/VOCdevkit/VOC2007/images/005553.jpg -./VOC/test/VOCdevkit/VOC2007/images/005555.jpg -./VOC/test/VOCdevkit/VOC2007/images/005556.jpg -./VOC/test/VOCdevkit/VOC2007/images/005557.jpg -./VOC/test/VOCdevkit/VOC2007/images/005558.jpg -./VOC/test/VOCdevkit/VOC2007/images/005560.jpg -./VOC/test/VOCdevkit/VOC2007/images/005561.jpg -./VOC/test/VOCdevkit/VOC2007/images/005562.jpg -./VOC/test/VOCdevkit/VOC2007/images/005564.jpg -./VOC/test/VOCdevkit/VOC2007/images/005565.jpg -./VOC/test/VOCdevkit/VOC2007/images/005567.jpg -./VOC/test/VOCdevkit/VOC2007/images/005569.jpg -./VOC/test/VOCdevkit/VOC2007/images/005570.jpg -./VOC/test/VOCdevkit/VOC2007/images/005571.jpg -./VOC/test/VOCdevkit/VOC2007/images/005572.jpg -./VOC/test/VOCdevkit/VOC2007/images/005575.jpg -./VOC/test/VOCdevkit/VOC2007/images/005578.jpg -./VOC/test/VOCdevkit/VOC2007/images/005580.jpg -./VOC/test/VOCdevkit/VOC2007/images/005581.jpg -./VOC/test/VOCdevkit/VOC2007/images/005587.jpg -./VOC/test/VOCdevkit/VOC2007/images/005589.jpg -./VOC/test/VOCdevkit/VOC2007/images/005594.jpg -./VOC/test/VOCdevkit/VOC2007/images/005595.jpg -./VOC/test/VOCdevkit/VOC2007/images/005596.jpg -./VOC/test/VOCdevkit/VOC2007/images/005597.jpg -./VOC/test/VOCdevkit/VOC2007/images/005598.jpg -./VOC/test/VOCdevkit/VOC2007/images/005602.jpg -./VOC/test/VOCdevkit/VOC2007/images/005604.jpg -./VOC/test/VOCdevkit/VOC2007/images/005607.jpg -./VOC/test/VOCdevkit/VOC2007/images/005610.jpg -./VOC/test/VOCdevkit/VOC2007/images/005612.jpg -./VOC/test/VOCdevkit/VOC2007/images/005616.jpg -./VOC/test/VOCdevkit/VOC2007/images/005617.jpg -./VOC/test/VOCdevkit/VOC2007/images/005619.jpg -./VOC/test/VOCdevkit/VOC2007/images/005621.jpg -./VOC/test/VOCdevkit/VOC2007/images/005622.jpg -./VOC/test/VOCdevkit/VOC2007/images/005623.jpg -./VOC/test/VOCdevkit/VOC2007/images/005626.jpg -./VOC/test/VOCdevkit/VOC2007/images/005627.jpg -./VOC/test/VOCdevkit/VOC2007/images/005628.jpg -./VOC/test/VOCdevkit/VOC2007/images/005632.jpg -./VOC/test/VOCdevkit/VOC2007/images/005633.jpg -./VOC/test/VOCdevkit/VOC2007/images/005634.jpg -./VOC/test/VOCdevkit/VOC2007/images/005635.jpg -./VOC/test/VOCdevkit/VOC2007/images/005638.jpg -./VOC/test/VOCdevkit/VOC2007/images/005642.jpg -./VOC/test/VOCdevkit/VOC2007/images/005643.jpg -./VOC/test/VOCdevkit/VOC2007/images/005646.jpg -./VOC/test/VOCdevkit/VOC2007/images/005649.jpg -./VOC/test/VOCdevkit/VOC2007/images/005650.jpg -./VOC/test/VOCdevkit/VOC2007/images/005651.jpg -./VOC/test/VOCdevkit/VOC2007/images/005656.jpg -./VOC/test/VOCdevkit/VOC2007/images/005659.jpg -./VOC/test/VOCdevkit/VOC2007/images/005661.jpg -./VOC/test/VOCdevkit/VOC2007/images/005663.jpg -./VOC/test/VOCdevkit/VOC2007/images/005665.jpg -./VOC/test/VOCdevkit/VOC2007/images/005666.jpg -./VOC/test/VOCdevkit/VOC2007/images/005667.jpg -./VOC/test/VOCdevkit/VOC2007/images/005670.jpg -./VOC/test/VOCdevkit/VOC2007/images/005671.jpg -./VOC/test/VOCdevkit/VOC2007/images/005673.jpg -./VOC/test/VOCdevkit/VOC2007/images/005675.jpg -./VOC/test/VOCdevkit/VOC2007/images/005677.jpg -./VOC/test/VOCdevkit/VOC2007/images/005678.jpg -./VOC/test/VOCdevkit/VOC2007/images/005681.jpg -./VOC/test/VOCdevkit/VOC2007/images/005683.jpg -./VOC/test/VOCdevkit/VOC2007/images/005684.jpg -./VOC/test/VOCdevkit/VOC2007/images/005688.jpg -./VOC/test/VOCdevkit/VOC2007/images/005689.jpg -./VOC/test/VOCdevkit/VOC2007/images/005690.jpg -./VOC/test/VOCdevkit/VOC2007/images/005691.jpg -./VOC/test/VOCdevkit/VOC2007/images/005692.jpg -./VOC/test/VOCdevkit/VOC2007/images/005694.jpg -./VOC/test/VOCdevkit/VOC2007/images/005698.jpg -./VOC/test/VOCdevkit/VOC2007/images/005703.jpg -./VOC/test/VOCdevkit/VOC2007/images/005706.jpg -./VOC/test/VOCdevkit/VOC2007/images/005707.jpg -./VOC/test/VOCdevkit/VOC2007/images/005708.jpg -./VOC/test/VOCdevkit/VOC2007/images/005709.jpg -./VOC/test/VOCdevkit/VOC2007/images/005711.jpg -./VOC/test/VOCdevkit/VOC2007/images/005712.jpg -./VOC/test/VOCdevkit/VOC2007/images/005717.jpg -./VOC/test/VOCdevkit/VOC2007/images/005720.jpg -./VOC/test/VOCdevkit/VOC2007/images/005721.jpg -./VOC/test/VOCdevkit/VOC2007/images/005722.jpg -./VOC/test/VOCdevkit/VOC2007/images/005724.jpg -./VOC/test/VOCdevkit/VOC2007/images/005725.jpg -./VOC/test/VOCdevkit/VOC2007/images/005726.jpg -./VOC/test/VOCdevkit/VOC2007/images/005727.jpg -./VOC/test/VOCdevkit/VOC2007/images/005733.jpg -./VOC/test/VOCdevkit/VOC2007/images/005734.jpg -./VOC/test/VOCdevkit/VOC2007/images/005737.jpg -./VOC/test/VOCdevkit/VOC2007/images/005739.jpg -./VOC/test/VOCdevkit/VOC2007/images/005744.jpg -./VOC/test/VOCdevkit/VOC2007/images/005745.jpg -./VOC/test/VOCdevkit/VOC2007/images/005746.jpg -./VOC/test/VOCdevkit/VOC2007/images/005748.jpg -./VOC/test/VOCdevkit/VOC2007/images/005750.jpg -./VOC/test/VOCdevkit/VOC2007/images/005751.jpg -./VOC/test/VOCdevkit/VOC2007/images/005753.jpg -./VOC/test/VOCdevkit/VOC2007/images/005754.jpg -./VOC/test/VOCdevkit/VOC2007/images/005758.jpg -./VOC/test/VOCdevkit/VOC2007/images/005759.jpg -./VOC/test/VOCdevkit/VOC2007/images/005763.jpg -./VOC/test/VOCdevkit/VOC2007/images/005766.jpg -./VOC/test/VOCdevkit/VOC2007/images/005767.jpg -./VOC/test/VOCdevkit/VOC2007/images/005770.jpg -./VOC/test/VOCdevkit/VOC2007/images/005771.jpg -./VOC/test/VOCdevkit/VOC2007/images/005772.jpg -./VOC/test/VOCdevkit/VOC2007/images/005774.jpg -./VOC/test/VOCdevkit/VOC2007/images/005775.jpg -./VOC/test/VOCdevkit/VOC2007/images/005776.jpg -./VOC/test/VOCdevkit/VOC2007/images/005777.jpg -./VOC/test/VOCdevkit/VOC2007/images/005778.jpg -./VOC/test/VOCdevkit/VOC2007/images/005785.jpg -./VOC/test/VOCdevkit/VOC2007/images/005787.jpg -./VOC/test/VOCdevkit/VOC2007/images/005792.jpg -./VOC/test/VOCdevkit/VOC2007/images/005793.jpg -./VOC/test/VOCdevkit/VOC2007/images/005795.jpg -./VOC/test/VOCdevkit/VOC2007/images/005797.jpg -./VOC/test/VOCdevkit/VOC2007/images/005798.jpg -./VOC/test/VOCdevkit/VOC2007/images/005800.jpg -./VOC/test/VOCdevkit/VOC2007/images/005801.jpg -./VOC/test/VOCdevkit/VOC2007/images/005802.jpg -./VOC/test/VOCdevkit/VOC2007/images/005804.jpg -./VOC/test/VOCdevkit/VOC2007/images/005807.jpg -./VOC/test/VOCdevkit/VOC2007/images/005808.jpg -./VOC/test/VOCdevkit/VOC2007/images/005809.jpg -./VOC/test/VOCdevkit/VOC2007/images/005810.jpg -./VOC/test/VOCdevkit/VOC2007/images/005816.jpg -./VOC/test/VOCdevkit/VOC2007/images/005820.jpg -./VOC/test/VOCdevkit/VOC2007/images/005822.jpg -./VOC/test/VOCdevkit/VOC2007/images/005823.jpg -./VOC/test/VOCdevkit/VOC2007/images/005827.jpg -./VOC/test/VOCdevkit/VOC2007/images/005832.jpg -./VOC/test/VOCdevkit/VOC2007/images/005833.jpg -./VOC/test/VOCdevkit/VOC2007/images/005834.jpg -./VOC/test/VOCdevkit/VOC2007/images/005835.jpg -./VOC/test/VOCdevkit/VOC2007/images/005837.jpg -./VOC/test/VOCdevkit/VOC2007/images/005842.jpg -./VOC/test/VOCdevkit/VOC2007/images/005844.jpg -./VOC/test/VOCdevkit/VOC2007/images/005846.jpg -./VOC/test/VOCdevkit/VOC2007/images/005847.jpg -./VOC/test/VOCdevkit/VOC2007/images/005848.jpg -./VOC/test/VOCdevkit/VOC2007/images/005849.jpg -./VOC/test/VOCdevkit/VOC2007/images/005855.jpg -./VOC/test/VOCdevkit/VOC2007/images/005857.jpg -./VOC/test/VOCdevkit/VOC2007/images/005858.jpg -./VOC/test/VOCdevkit/VOC2007/images/005862.jpg -./VOC/test/VOCdevkit/VOC2007/images/005865.jpg -./VOC/test/VOCdevkit/VOC2007/images/005866.jpg -./VOC/test/VOCdevkit/VOC2007/images/005869.jpg -./VOC/test/VOCdevkit/VOC2007/images/005870.jpg -./VOC/test/VOCdevkit/VOC2007/images/005871.jpg -./VOC/test/VOCdevkit/VOC2007/images/005872.jpg -./VOC/test/VOCdevkit/VOC2007/images/005876.jpg -./VOC/test/VOCdevkit/VOC2007/images/005880.jpg -./VOC/test/VOCdevkit/VOC2007/images/005882.jpg -./VOC/test/VOCdevkit/VOC2007/images/005883.jpg -./VOC/test/VOCdevkit/VOC2007/images/005886.jpg -./VOC/test/VOCdevkit/VOC2007/images/005887.jpg -./VOC/test/VOCdevkit/VOC2007/images/005890.jpg -./VOC/test/VOCdevkit/VOC2007/images/005891.jpg -./VOC/test/VOCdevkit/VOC2007/images/005892.jpg -./VOC/test/VOCdevkit/VOC2007/images/005896.jpg -./VOC/test/VOCdevkit/VOC2007/images/005898.jpg -./VOC/test/VOCdevkit/VOC2007/images/005900.jpg -./VOC/test/VOCdevkit/VOC2007/images/005902.jpg -./VOC/test/VOCdevkit/VOC2007/images/005904.jpg -./VOC/test/VOCdevkit/VOC2007/images/005907.jpg -./VOC/test/VOCdevkit/VOC2007/images/005913.jpg -./VOC/test/VOCdevkit/VOC2007/images/005915.jpg -./VOC/test/VOCdevkit/VOC2007/images/005916.jpg -./VOC/test/VOCdevkit/VOC2007/images/005921.jpg -./VOC/test/VOCdevkit/VOC2007/images/005922.jpg -./VOC/test/VOCdevkit/VOC2007/images/005924.jpg -./VOC/test/VOCdevkit/VOC2007/images/005925.jpg -./VOC/test/VOCdevkit/VOC2007/images/005926.jpg -./VOC/test/VOCdevkit/VOC2007/images/005927.jpg -./VOC/test/VOCdevkit/VOC2007/images/005929.jpg -./VOC/test/VOCdevkit/VOC2007/images/005931.jpg -./VOC/test/VOCdevkit/VOC2007/images/005932.jpg -./VOC/test/VOCdevkit/VOC2007/images/005933.jpg -./VOC/test/VOCdevkit/VOC2007/images/005934.jpg -./VOC/test/VOCdevkit/VOC2007/images/005935.jpg -./VOC/test/VOCdevkit/VOC2007/images/005936.jpg -./VOC/test/VOCdevkit/VOC2007/images/005937.jpg -./VOC/test/VOCdevkit/VOC2007/images/005939.jpg -./VOC/test/VOCdevkit/VOC2007/images/005941.jpg -./VOC/test/VOCdevkit/VOC2007/images/005942.jpg -./VOC/test/VOCdevkit/VOC2007/images/005943.jpg -./VOC/test/VOCdevkit/VOC2007/images/005944.jpg -./VOC/test/VOCdevkit/VOC2007/images/005945.jpg -./VOC/test/VOCdevkit/VOC2007/images/005946.jpg -./VOC/test/VOCdevkit/VOC2007/images/005949.jpg -./VOC/test/VOCdevkit/VOC2007/images/005950.jpg -./VOC/test/VOCdevkit/VOC2007/images/005953.jpg -./VOC/test/VOCdevkit/VOC2007/images/005955.jpg -./VOC/test/VOCdevkit/VOC2007/images/005957.jpg -./VOC/test/VOCdevkit/VOC2007/images/005958.jpg -./VOC/test/VOCdevkit/VOC2007/images/005959.jpg -./VOC/test/VOCdevkit/VOC2007/images/005962.jpg -./VOC/test/VOCdevkit/VOC2007/images/005965.jpg -./VOC/test/VOCdevkit/VOC2007/images/005966.jpg -./VOC/test/VOCdevkit/VOC2007/images/005967.jpg -./VOC/test/VOCdevkit/VOC2007/images/005969.jpg -./VOC/test/VOCdevkit/VOC2007/images/005972.jpg -./VOC/test/VOCdevkit/VOC2007/images/005973.jpg -./VOC/test/VOCdevkit/VOC2007/images/005974.jpg -./VOC/test/VOCdevkit/VOC2007/images/005976.jpg -./VOC/test/VOCdevkit/VOC2007/images/005977.jpg -./VOC/test/VOCdevkit/VOC2007/images/005978.jpg -./VOC/test/VOCdevkit/VOC2007/images/005982.jpg -./VOC/test/VOCdevkit/VOC2007/images/005986.jpg -./VOC/test/VOCdevkit/VOC2007/images/005987.jpg -./VOC/test/VOCdevkit/VOC2007/images/005993.jpg -./VOC/test/VOCdevkit/VOC2007/images/005994.jpg -./VOC/test/VOCdevkit/VOC2007/images/005997.jpg -./VOC/test/VOCdevkit/VOC2007/images/005999.jpg -./VOC/test/VOCdevkit/VOC2007/images/006002.jpg -./VOC/test/VOCdevkit/VOC2007/images/006003.jpg -./VOC/test/VOCdevkit/VOC2007/images/006006.jpg -./VOC/test/VOCdevkit/VOC2007/images/006007.jpg -./VOC/test/VOCdevkit/VOC2007/images/006008.jpg -./VOC/test/VOCdevkit/VOC2007/images/006010.jpg -./VOC/test/VOCdevkit/VOC2007/images/006013.jpg -./VOC/test/VOCdevkit/VOC2007/images/006014.jpg -./VOC/test/VOCdevkit/VOC2007/images/006015.jpg -./VOC/test/VOCdevkit/VOC2007/images/006016.jpg -./VOC/test/VOCdevkit/VOC2007/images/006017.jpg -./VOC/test/VOCdevkit/VOC2007/images/006019.jpg -./VOC/test/VOCdevkit/VOC2007/images/006021.jpg -./VOC/test/VOCdevkit/VOC2007/images/006022.jpg -./VOC/test/VOCdevkit/VOC2007/images/006024.jpg -./VOC/test/VOCdevkit/VOC2007/images/006031.jpg -./VOC/test/VOCdevkit/VOC2007/images/006032.jpg -./VOC/test/VOCdevkit/VOC2007/images/006034.jpg -./VOC/test/VOCdevkit/VOC2007/images/006036.jpg -./VOC/test/VOCdevkit/VOC2007/images/006037.jpg -./VOC/test/VOCdevkit/VOC2007/images/006039.jpg -./VOC/test/VOCdevkit/VOC2007/images/006040.jpg -./VOC/test/VOCdevkit/VOC2007/images/006044.jpg -./VOC/test/VOCdevkit/VOC2007/images/006047.jpg -./VOC/test/VOCdevkit/VOC2007/images/006048.jpg -./VOC/test/VOCdevkit/VOC2007/images/006049.jpg -./VOC/test/VOCdevkit/VOC2007/images/006050.jpg -./VOC/test/VOCdevkit/VOC2007/images/006051.jpg -./VOC/test/VOCdevkit/VOC2007/images/006052.jpg -./VOC/test/VOCdevkit/VOC2007/images/006053.jpg -./VOC/test/VOCdevkit/VOC2007/images/006054.jpg -./VOC/test/VOCdevkit/VOC2007/images/006056.jpg -./VOC/test/VOCdevkit/VOC2007/images/006057.jpg -./VOC/test/VOCdevkit/VOC2007/images/006059.jpg -./VOC/test/VOCdevkit/VOC2007/images/006060.jpg -./VOC/test/VOCdevkit/VOC2007/images/006063.jpg -./VOC/test/VOCdevkit/VOC2007/images/006064.jpg -./VOC/test/VOCdevkit/VOC2007/images/006068.jpg -./VOC/test/VOCdevkit/VOC2007/images/006072.jpg -./VOC/test/VOCdevkit/VOC2007/images/006075.jpg -./VOC/test/VOCdevkit/VOC2007/images/006076.jpg -./VOC/test/VOCdevkit/VOC2007/images/006077.jpg -./VOC/test/VOCdevkit/VOC2007/images/006080.jpg -./VOC/test/VOCdevkit/VOC2007/images/006081.jpg -./VOC/test/VOCdevkit/VOC2007/images/006082.jpg -./VOC/test/VOCdevkit/VOC2007/images/006083.jpg -./VOC/test/VOCdevkit/VOC2007/images/006085.jpg -./VOC/test/VOCdevkit/VOC2007/images/006086.jpg -./VOC/test/VOCdevkit/VOC2007/images/006087.jpg -./VOC/test/VOCdevkit/VOC2007/images/006090.jpg -./VOC/test/VOCdevkit/VOC2007/images/006092.jpg -./VOC/test/VOCdevkit/VOC2007/images/006093.jpg -./VOC/test/VOCdevkit/VOC2007/images/006094.jpg -./VOC/test/VOCdevkit/VOC2007/images/006099.jpg -./VOC/test/VOCdevkit/VOC2007/images/006101.jpg -./VOC/test/VOCdevkit/VOC2007/images/006102.jpg -./VOC/test/VOCdevkit/VOC2007/images/006106.jpg -./VOC/test/VOCdevkit/VOC2007/images/006109.jpg -./VOC/test/VOCdevkit/VOC2007/images/006110.jpg -./VOC/test/VOCdevkit/VOC2007/images/006112.jpg -./VOC/test/VOCdevkit/VOC2007/images/006113.jpg -./VOC/test/VOCdevkit/VOC2007/images/006114.jpg -./VOC/test/VOCdevkit/VOC2007/images/006115.jpg -./VOC/test/VOCdevkit/VOC2007/images/006116.jpg -./VOC/test/VOCdevkit/VOC2007/images/006118.jpg -./VOC/test/VOCdevkit/VOC2007/images/006119.jpg -./VOC/test/VOCdevkit/VOC2007/images/006121.jpg -./VOC/test/VOCdevkit/VOC2007/images/006122.jpg -./VOC/test/VOCdevkit/VOC2007/images/006126.jpg -./VOC/test/VOCdevkit/VOC2007/images/006127.jpg -./VOC/test/VOCdevkit/VOC2007/images/006132.jpg -./VOC/test/VOCdevkit/VOC2007/images/006137.jpg -./VOC/test/VOCdevkit/VOC2007/images/006138.jpg -./VOC/test/VOCdevkit/VOC2007/images/006142.jpg -./VOC/test/VOCdevkit/VOC2007/images/006143.jpg -./VOC/test/VOCdevkit/VOC2007/images/006144.jpg -./VOC/test/VOCdevkit/VOC2007/images/006145.jpg -./VOC/test/VOCdevkit/VOC2007/images/006147.jpg -./VOC/test/VOCdevkit/VOC2007/images/006149.jpg -./VOC/test/VOCdevkit/VOC2007/images/006152.jpg -./VOC/test/VOCdevkit/VOC2007/images/006154.jpg -./VOC/test/VOCdevkit/VOC2007/images/006155.jpg -./VOC/test/VOCdevkit/VOC2007/images/006157.jpg -./VOC/test/VOCdevkit/VOC2007/images/006160.jpg -./VOC/test/VOCdevkit/VOC2007/images/006164.jpg -./VOC/test/VOCdevkit/VOC2007/images/006165.jpg -./VOC/test/VOCdevkit/VOC2007/images/006167.jpg -./VOC/test/VOCdevkit/VOC2007/images/006168.jpg -./VOC/test/VOCdevkit/VOC2007/images/006169.jpg -./VOC/test/VOCdevkit/VOC2007/images/006173.jpg -./VOC/test/VOCdevkit/VOC2007/images/006178.jpg -./VOC/test/VOCdevkit/VOC2007/images/006182.jpg -./VOC/test/VOCdevkit/VOC2007/images/006186.jpg -./VOC/test/VOCdevkit/VOC2007/images/006191.jpg -./VOC/test/VOCdevkit/VOC2007/images/006192.jpg -./VOC/test/VOCdevkit/VOC2007/images/006193.jpg -./VOC/test/VOCdevkit/VOC2007/images/006194.jpg -./VOC/test/VOCdevkit/VOC2007/images/006195.jpg -./VOC/test/VOCdevkit/VOC2007/images/006197.jpg -./VOC/test/VOCdevkit/VOC2007/images/006199.jpg -./VOC/test/VOCdevkit/VOC2007/images/006200.jpg -./VOC/test/VOCdevkit/VOC2007/images/006204.jpg -./VOC/test/VOCdevkit/VOC2007/images/006205.jpg -./VOC/test/VOCdevkit/VOC2007/images/006207.jpg -./VOC/test/VOCdevkit/VOC2007/images/006211.jpg -./VOC/test/VOCdevkit/VOC2007/images/006213.jpg -./VOC/test/VOCdevkit/VOC2007/images/006217.jpg -./VOC/test/VOCdevkit/VOC2007/images/006226.jpg -./VOC/test/VOCdevkit/VOC2007/images/006227.jpg -./VOC/test/VOCdevkit/VOC2007/images/006228.jpg -./VOC/test/VOCdevkit/VOC2007/images/006231.jpg -./VOC/test/VOCdevkit/VOC2007/images/006232.jpg -./VOC/test/VOCdevkit/VOC2007/images/006237.jpg -./VOC/test/VOCdevkit/VOC2007/images/006239.jpg -./VOC/test/VOCdevkit/VOC2007/images/006242.jpg -./VOC/test/VOCdevkit/VOC2007/images/006244.jpg -./VOC/test/VOCdevkit/VOC2007/images/006245.jpg -./VOC/test/VOCdevkit/VOC2007/images/006246.jpg -./VOC/test/VOCdevkit/VOC2007/images/006248.jpg -./VOC/test/VOCdevkit/VOC2007/images/006253.jpg -./VOC/test/VOCdevkit/VOC2007/images/006255.jpg -./VOC/test/VOCdevkit/VOC2007/images/006256.jpg -./VOC/test/VOCdevkit/VOC2007/images/006257.jpg -./VOC/test/VOCdevkit/VOC2007/images/006263.jpg -./VOC/test/VOCdevkit/VOC2007/images/006265.jpg -./VOC/test/VOCdevkit/VOC2007/images/006266.jpg -./VOC/test/VOCdevkit/VOC2007/images/006268.jpg -./VOC/test/VOCdevkit/VOC2007/images/006271.jpg -./VOC/test/VOCdevkit/VOC2007/images/006273.jpg -./VOC/test/VOCdevkit/VOC2007/images/006274.jpg -./VOC/test/VOCdevkit/VOC2007/images/006278.jpg -./VOC/test/VOCdevkit/VOC2007/images/006280.jpg -./VOC/test/VOCdevkit/VOC2007/images/006283.jpg -./VOC/test/VOCdevkit/VOC2007/images/006287.jpg -./VOC/test/VOCdevkit/VOC2007/images/006288.jpg -./VOC/test/VOCdevkit/VOC2007/images/006292.jpg -./VOC/test/VOCdevkit/VOC2007/images/006293.jpg -./VOC/test/VOCdevkit/VOC2007/images/006294.jpg -./VOC/test/VOCdevkit/VOC2007/images/006297.jpg -./VOC/test/VOCdevkit/VOC2007/images/006298.jpg -./VOC/test/VOCdevkit/VOC2007/images/006302.jpg -./VOC/test/VOCdevkit/VOC2007/images/006303.jpg -./VOC/test/VOCdevkit/VOC2007/images/006307.jpg -./VOC/test/VOCdevkit/VOC2007/images/006308.jpg -./VOC/test/VOCdevkit/VOC2007/images/006310.jpg -./VOC/test/VOCdevkit/VOC2007/images/006311.jpg -./VOC/test/VOCdevkit/VOC2007/images/006312.jpg -./VOC/test/VOCdevkit/VOC2007/images/006313.jpg -./VOC/test/VOCdevkit/VOC2007/images/006315.jpg -./VOC/test/VOCdevkit/VOC2007/images/006316.jpg -./VOC/test/VOCdevkit/VOC2007/images/006317.jpg -./VOC/test/VOCdevkit/VOC2007/images/006322.jpg -./VOC/test/VOCdevkit/VOC2007/images/006324.jpg -./VOC/test/VOCdevkit/VOC2007/images/006326.jpg -./VOC/test/VOCdevkit/VOC2007/images/006327.jpg -./VOC/test/VOCdevkit/VOC2007/images/006328.jpg -./VOC/test/VOCdevkit/VOC2007/images/006331.jpg -./VOC/test/VOCdevkit/VOC2007/images/006332.jpg -./VOC/test/VOCdevkit/VOC2007/images/006333.jpg -./VOC/test/VOCdevkit/VOC2007/images/006334.jpg -./VOC/test/VOCdevkit/VOC2007/images/006336.jpg -./VOC/test/VOCdevkit/VOC2007/images/006340.jpg -./VOC/test/VOCdevkit/VOC2007/images/006342.jpg -./VOC/test/VOCdevkit/VOC2007/images/006343.jpg -./VOC/test/VOCdevkit/VOC2007/images/006345.jpg -./VOC/test/VOCdevkit/VOC2007/images/006347.jpg -./VOC/test/VOCdevkit/VOC2007/images/006354.jpg -./VOC/test/VOCdevkit/VOC2007/images/006356.jpg -./VOC/test/VOCdevkit/VOC2007/images/006358.jpg -./VOC/test/VOCdevkit/VOC2007/images/006359.jpg -./VOC/test/VOCdevkit/VOC2007/images/006360.jpg -./VOC/test/VOCdevkit/VOC2007/images/006361.jpg -./VOC/test/VOCdevkit/VOC2007/images/006364.jpg -./VOC/test/VOCdevkit/VOC2007/images/006365.jpg -./VOC/test/VOCdevkit/VOC2007/images/006368.jpg -./VOC/test/VOCdevkit/VOC2007/images/006370.jpg -./VOC/test/VOCdevkit/VOC2007/images/006372.jpg -./VOC/test/VOCdevkit/VOC2007/images/006373.jpg -./VOC/test/VOCdevkit/VOC2007/images/006376.jpg -./VOC/test/VOCdevkit/VOC2007/images/006378.jpg -./VOC/test/VOCdevkit/VOC2007/images/006379.jpg -./VOC/test/VOCdevkit/VOC2007/images/006380.jpg -./VOC/test/VOCdevkit/VOC2007/images/006383.jpg -./VOC/test/VOCdevkit/VOC2007/images/006384.jpg -./VOC/test/VOCdevkit/VOC2007/images/006386.jpg -./VOC/test/VOCdevkit/VOC2007/images/006388.jpg -./VOC/test/VOCdevkit/VOC2007/images/006389.jpg -./VOC/test/VOCdevkit/VOC2007/images/006390.jpg -./VOC/test/VOCdevkit/VOC2007/images/006393.jpg -./VOC/test/VOCdevkit/VOC2007/images/006394.jpg -./VOC/test/VOCdevkit/VOC2007/images/006397.jpg -./VOC/test/VOCdevkit/VOC2007/images/006399.jpg -./VOC/test/VOCdevkit/VOC2007/images/006401.jpg -./VOC/test/VOCdevkit/VOC2007/images/006402.jpg -./VOC/test/VOCdevkit/VOC2007/images/006403.jpg -./VOC/test/VOCdevkit/VOC2007/images/006405.jpg -./VOC/test/VOCdevkit/VOC2007/images/006406.jpg -./VOC/test/VOCdevkit/VOC2007/images/006407.jpg -./VOC/test/VOCdevkit/VOC2007/images/006408.jpg -./VOC/test/VOCdevkit/VOC2007/images/006410.jpg -./VOC/test/VOCdevkit/VOC2007/images/006412.jpg -./VOC/test/VOCdevkit/VOC2007/images/006413.jpg -./VOC/test/VOCdevkit/VOC2007/images/006414.jpg -./VOC/test/VOCdevkit/VOC2007/images/006415.jpg -./VOC/test/VOCdevkit/VOC2007/images/006416.jpg -./VOC/test/VOCdevkit/VOC2007/images/006420.jpg -./VOC/test/VOCdevkit/VOC2007/images/006422.jpg -./VOC/test/VOCdevkit/VOC2007/images/006423.jpg -./VOC/test/VOCdevkit/VOC2007/images/006426.jpg -./VOC/test/VOCdevkit/VOC2007/images/006431.jpg -./VOC/test/VOCdevkit/VOC2007/images/006432.jpg -./VOC/test/VOCdevkit/VOC2007/images/006435.jpg -./VOC/test/VOCdevkit/VOC2007/images/006439.jpg -./VOC/test/VOCdevkit/VOC2007/images/006441.jpg -./VOC/test/VOCdevkit/VOC2007/images/006446.jpg -./VOC/test/VOCdevkit/VOC2007/images/006451.jpg -./VOC/test/VOCdevkit/VOC2007/images/006452.jpg -./VOC/test/VOCdevkit/VOC2007/images/006453.jpg -./VOC/test/VOCdevkit/VOC2007/images/006454.jpg -./VOC/test/VOCdevkit/VOC2007/images/006457.jpg -./VOC/test/VOCdevkit/VOC2007/images/006460.jpg -./VOC/test/VOCdevkit/VOC2007/images/006461.jpg -./VOC/test/VOCdevkit/VOC2007/images/006464.jpg -./VOC/test/VOCdevkit/VOC2007/images/006467.jpg -./VOC/test/VOCdevkit/VOC2007/images/006469.jpg -./VOC/test/VOCdevkit/VOC2007/images/006471.jpg -./VOC/test/VOCdevkit/VOC2007/images/006477.jpg -./VOC/test/VOCdevkit/VOC2007/images/006478.jpg -./VOC/test/VOCdevkit/VOC2007/images/006479.jpg -./VOC/test/VOCdevkit/VOC2007/images/006481.jpg -./VOC/test/VOCdevkit/VOC2007/images/006485.jpg -./VOC/test/VOCdevkit/VOC2007/images/006487.jpg -./VOC/test/VOCdevkit/VOC2007/images/006489.jpg -./VOC/test/VOCdevkit/VOC2007/images/006490.jpg -./VOC/test/VOCdevkit/VOC2007/images/006491.jpg -./VOC/test/VOCdevkit/VOC2007/images/006493.jpg -./VOC/test/VOCdevkit/VOC2007/images/006494.jpg -./VOC/test/VOCdevkit/VOC2007/images/006496.jpg -./VOC/test/VOCdevkit/VOC2007/images/006498.jpg -./VOC/test/VOCdevkit/VOC2007/images/006500.jpg -./VOC/test/VOCdevkit/VOC2007/images/006502.jpg -./VOC/test/VOCdevkit/VOC2007/images/006504.jpg -./VOC/test/VOCdevkit/VOC2007/images/006505.jpg -./VOC/test/VOCdevkit/VOC2007/images/006508.jpg -./VOC/test/VOCdevkit/VOC2007/images/006510.jpg -./VOC/test/VOCdevkit/VOC2007/images/006511.jpg -./VOC/test/VOCdevkit/VOC2007/images/006513.jpg -./VOC/test/VOCdevkit/VOC2007/images/006514.jpg -./VOC/test/VOCdevkit/VOC2007/images/006516.jpg -./VOC/test/VOCdevkit/VOC2007/images/006517.jpg -./VOC/test/VOCdevkit/VOC2007/images/006518.jpg -./VOC/test/VOCdevkit/VOC2007/images/006521.jpg -./VOC/test/VOCdevkit/VOC2007/images/006522.jpg -./VOC/test/VOCdevkit/VOC2007/images/006525.jpg -./VOC/test/VOCdevkit/VOC2007/images/006526.jpg -./VOC/test/VOCdevkit/VOC2007/images/006527.jpg -./VOC/test/VOCdevkit/VOC2007/images/006528.jpg -./VOC/test/VOCdevkit/VOC2007/images/006531.jpg -./VOC/test/VOCdevkit/VOC2007/images/006533.jpg -./VOC/test/VOCdevkit/VOC2007/images/006535.jpg -./VOC/test/VOCdevkit/VOC2007/images/006537.jpg -./VOC/test/VOCdevkit/VOC2007/images/006539.jpg -./VOC/test/VOCdevkit/VOC2007/images/006540.jpg -./VOC/test/VOCdevkit/VOC2007/images/006541.jpg -./VOC/test/VOCdevkit/VOC2007/images/006544.jpg -./VOC/test/VOCdevkit/VOC2007/images/006545.jpg -./VOC/test/VOCdevkit/VOC2007/images/006546.jpg -./VOC/test/VOCdevkit/VOC2007/images/006552.jpg -./VOC/test/VOCdevkit/VOC2007/images/006554.jpg -./VOC/test/VOCdevkit/VOC2007/images/006555.jpg -./VOC/test/VOCdevkit/VOC2007/images/006557.jpg -./VOC/test/VOCdevkit/VOC2007/images/006558.jpg -./VOC/test/VOCdevkit/VOC2007/images/006559.jpg -./VOC/test/VOCdevkit/VOC2007/images/006561.jpg -./VOC/test/VOCdevkit/VOC2007/images/006563.jpg -./VOC/test/VOCdevkit/VOC2007/images/006566.jpg -./VOC/test/VOCdevkit/VOC2007/images/006567.jpg -./VOC/test/VOCdevkit/VOC2007/images/006568.jpg -./VOC/test/VOCdevkit/VOC2007/images/006571.jpg -./VOC/test/VOCdevkit/VOC2007/images/006573.jpg -./VOC/test/VOCdevkit/VOC2007/images/006574.jpg -./VOC/test/VOCdevkit/VOC2007/images/006577.jpg -./VOC/test/VOCdevkit/VOC2007/images/006579.jpg -./VOC/test/VOCdevkit/VOC2007/images/006580.jpg -./VOC/test/VOCdevkit/VOC2007/images/006581.jpg -./VOC/test/VOCdevkit/VOC2007/images/006582.jpg -./VOC/test/VOCdevkit/VOC2007/images/006586.jpg -./VOC/test/VOCdevkit/VOC2007/images/006589.jpg -./VOC/test/VOCdevkit/VOC2007/images/006590.jpg -./VOC/test/VOCdevkit/VOC2007/images/006591.jpg -./VOC/test/VOCdevkit/VOC2007/images/006592.jpg -./VOC/test/VOCdevkit/VOC2007/images/006594.jpg -./VOC/test/VOCdevkit/VOC2007/images/006596.jpg -./VOC/test/VOCdevkit/VOC2007/images/006598.jpg -./VOC/test/VOCdevkit/VOC2007/images/006600.jpg -./VOC/test/VOCdevkit/VOC2007/images/006601.jpg -./VOC/test/VOCdevkit/VOC2007/images/006604.jpg -./VOC/test/VOCdevkit/VOC2007/images/006607.jpg -./VOC/test/VOCdevkit/VOC2007/images/006608.jpg -./VOC/test/VOCdevkit/VOC2007/images/006613.jpg -./VOC/test/VOCdevkit/VOC2007/images/006614.jpg -./VOC/test/VOCdevkit/VOC2007/images/006615.jpg -./VOC/test/VOCdevkit/VOC2007/images/006616.jpg -./VOC/test/VOCdevkit/VOC2007/images/006620.jpg -./VOC/test/VOCdevkit/VOC2007/images/006623.jpg -./VOC/test/VOCdevkit/VOC2007/images/006624.jpg -./VOC/test/VOCdevkit/VOC2007/images/006629.jpg -./VOC/test/VOCdevkit/VOC2007/images/006630.jpg -./VOC/test/VOCdevkit/VOC2007/images/006633.jpg -./VOC/test/VOCdevkit/VOC2007/images/006634.jpg -./VOC/test/VOCdevkit/VOC2007/images/006639.jpg -./VOC/test/VOCdevkit/VOC2007/images/006640.jpg -./VOC/test/VOCdevkit/VOC2007/images/006641.jpg -./VOC/test/VOCdevkit/VOC2007/images/006642.jpg -./VOC/test/VOCdevkit/VOC2007/images/006644.jpg -./VOC/test/VOCdevkit/VOC2007/images/006646.jpg -./VOC/test/VOCdevkit/VOC2007/images/006649.jpg -./VOC/test/VOCdevkit/VOC2007/images/006650.jpg -./VOC/test/VOCdevkit/VOC2007/images/006651.jpg -./VOC/test/VOCdevkit/VOC2007/images/006653.jpg -./VOC/test/VOCdevkit/VOC2007/images/006655.jpg -./VOC/test/VOCdevkit/VOC2007/images/006656.jpg -./VOC/test/VOCdevkit/VOC2007/images/006659.jpg -./VOC/test/VOCdevkit/VOC2007/images/006662.jpg -./VOC/test/VOCdevkit/VOC2007/images/006663.jpg -./VOC/test/VOCdevkit/VOC2007/images/006665.jpg -./VOC/test/VOCdevkit/VOC2007/images/006669.jpg -./VOC/test/VOCdevkit/VOC2007/images/006672.jpg -./VOC/test/VOCdevkit/VOC2007/images/006675.jpg -./VOC/test/VOCdevkit/VOC2007/images/006676.jpg -./VOC/test/VOCdevkit/VOC2007/images/006680.jpg -./VOC/test/VOCdevkit/VOC2007/images/006683.jpg -./VOC/test/VOCdevkit/VOC2007/images/006685.jpg -./VOC/test/VOCdevkit/VOC2007/images/006686.jpg -./VOC/test/VOCdevkit/VOC2007/images/006688.jpg -./VOC/test/VOCdevkit/VOC2007/images/006691.jpg -./VOC/test/VOCdevkit/VOC2007/images/006692.jpg -./VOC/test/VOCdevkit/VOC2007/images/006693.jpg -./VOC/test/VOCdevkit/VOC2007/images/006700.jpg -./VOC/test/VOCdevkit/VOC2007/images/006701.jpg -./VOC/test/VOCdevkit/VOC2007/images/006705.jpg -./VOC/test/VOCdevkit/VOC2007/images/006710.jpg -./VOC/test/VOCdevkit/VOC2007/images/006711.jpg -./VOC/test/VOCdevkit/VOC2007/images/006712.jpg -./VOC/test/VOCdevkit/VOC2007/images/006713.jpg -./VOC/test/VOCdevkit/VOC2007/images/006715.jpg -./VOC/test/VOCdevkit/VOC2007/images/006716.jpg -./VOC/test/VOCdevkit/VOC2007/images/006717.jpg -./VOC/test/VOCdevkit/VOC2007/images/006720.jpg -./VOC/test/VOCdevkit/VOC2007/images/006721.jpg -./VOC/test/VOCdevkit/VOC2007/images/006723.jpg -./VOC/test/VOCdevkit/VOC2007/images/006724.jpg -./VOC/test/VOCdevkit/VOC2007/images/006728.jpg -./VOC/test/VOCdevkit/VOC2007/images/006729.jpg -./VOC/test/VOCdevkit/VOC2007/images/006732.jpg -./VOC/test/VOCdevkit/VOC2007/images/006733.jpg -./VOC/test/VOCdevkit/VOC2007/images/006737.jpg -./VOC/test/VOCdevkit/VOC2007/images/006741.jpg -./VOC/test/VOCdevkit/VOC2007/images/006742.jpg -./VOC/test/VOCdevkit/VOC2007/images/006743.jpg -./VOC/test/VOCdevkit/VOC2007/images/006744.jpg -./VOC/test/VOCdevkit/VOC2007/images/006745.jpg -./VOC/test/VOCdevkit/VOC2007/images/006746.jpg -./VOC/test/VOCdevkit/VOC2007/images/006749.jpg -./VOC/test/VOCdevkit/VOC2007/images/006750.jpg -./VOC/test/VOCdevkit/VOC2007/images/006752.jpg -./VOC/test/VOCdevkit/VOC2007/images/006754.jpg -./VOC/test/VOCdevkit/VOC2007/images/006756.jpg -./VOC/test/VOCdevkit/VOC2007/images/006757.jpg -./VOC/test/VOCdevkit/VOC2007/images/006758.jpg -./VOC/test/VOCdevkit/VOC2007/images/006763.jpg -./VOC/test/VOCdevkit/VOC2007/images/006764.jpg -./VOC/test/VOCdevkit/VOC2007/images/006767.jpg -./VOC/test/VOCdevkit/VOC2007/images/006770.jpg -./VOC/test/VOCdevkit/VOC2007/images/006771.jpg -./VOC/test/VOCdevkit/VOC2007/images/006774.jpg -./VOC/test/VOCdevkit/VOC2007/images/006775.jpg -./VOC/test/VOCdevkit/VOC2007/images/006776.jpg -./VOC/test/VOCdevkit/VOC2007/images/006778.jpg -./VOC/test/VOCdevkit/VOC2007/images/006779.jpg -./VOC/test/VOCdevkit/VOC2007/images/006780.jpg -./VOC/test/VOCdevkit/VOC2007/images/006785.jpg -./VOC/test/VOCdevkit/VOC2007/images/006787.jpg -./VOC/test/VOCdevkit/VOC2007/images/006788.jpg -./VOC/test/VOCdevkit/VOC2007/images/006790.jpg -./VOC/test/VOCdevkit/VOC2007/images/006791.jpg -./VOC/test/VOCdevkit/VOC2007/images/006792.jpg -./VOC/test/VOCdevkit/VOC2007/images/006793.jpg -./VOC/test/VOCdevkit/VOC2007/images/006795.jpg -./VOC/test/VOCdevkit/VOC2007/images/006796.jpg -./VOC/test/VOCdevkit/VOC2007/images/006798.jpg -./VOC/test/VOCdevkit/VOC2007/images/006801.jpg -./VOC/test/VOCdevkit/VOC2007/images/006804.jpg -./VOC/test/VOCdevkit/VOC2007/images/006807.jpg -./VOC/test/VOCdevkit/VOC2007/images/006809.jpg -./VOC/test/VOCdevkit/VOC2007/images/006811.jpg -./VOC/test/VOCdevkit/VOC2007/images/006812.jpg -./VOC/test/VOCdevkit/VOC2007/images/006815.jpg -./VOC/test/VOCdevkit/VOC2007/images/006816.jpg -./VOC/test/VOCdevkit/VOC2007/images/006817.jpg -./VOC/test/VOCdevkit/VOC2007/images/006818.jpg -./VOC/test/VOCdevkit/VOC2007/images/006820.jpg -./VOC/test/VOCdevkit/VOC2007/images/006823.jpg -./VOC/test/VOCdevkit/VOC2007/images/006826.jpg -./VOC/test/VOCdevkit/VOC2007/images/006830.jpg -./VOC/test/VOCdevkit/VOC2007/images/006831.jpg -./VOC/test/VOCdevkit/VOC2007/images/006832.jpg -./VOC/test/VOCdevkit/VOC2007/images/006834.jpg -./VOC/test/VOCdevkit/VOC2007/images/006837.jpg -./VOC/test/VOCdevkit/VOC2007/images/006843.jpg -./VOC/test/VOCdevkit/VOC2007/images/006846.jpg -./VOC/test/VOCdevkit/VOC2007/images/006851.jpg -./VOC/test/VOCdevkit/VOC2007/images/006853.jpg -./VOC/test/VOCdevkit/VOC2007/images/006854.jpg -./VOC/test/VOCdevkit/VOC2007/images/006856.jpg -./VOC/test/VOCdevkit/VOC2007/images/006857.jpg -./VOC/test/VOCdevkit/VOC2007/images/006861.jpg -./VOC/test/VOCdevkit/VOC2007/images/006863.jpg -./VOC/test/VOCdevkit/VOC2007/images/006870.jpg -./VOC/test/VOCdevkit/VOC2007/images/006871.jpg -./VOC/test/VOCdevkit/VOC2007/images/006872.jpg -./VOC/test/VOCdevkit/VOC2007/images/006873.jpg -./VOC/test/VOCdevkit/VOC2007/images/006875.jpg -./VOC/test/VOCdevkit/VOC2007/images/006877.jpg -./VOC/test/VOCdevkit/VOC2007/images/006879.jpg -./VOC/test/VOCdevkit/VOC2007/images/006881.jpg -./VOC/test/VOCdevkit/VOC2007/images/006882.jpg -./VOC/test/VOCdevkit/VOC2007/images/006885.jpg -./VOC/test/VOCdevkit/VOC2007/images/006888.jpg -./VOC/test/VOCdevkit/VOC2007/images/006889.jpg -./VOC/test/VOCdevkit/VOC2007/images/006890.jpg -./VOC/test/VOCdevkit/VOC2007/images/006891.jpg -./VOC/test/VOCdevkit/VOC2007/images/006894.jpg -./VOC/test/VOCdevkit/VOC2007/images/006895.jpg -./VOC/test/VOCdevkit/VOC2007/images/006897.jpg -./VOC/test/VOCdevkit/VOC2007/images/006898.jpg -./VOC/test/VOCdevkit/VOC2007/images/006901.jpg -./VOC/test/VOCdevkit/VOC2007/images/006902.jpg -./VOC/test/VOCdevkit/VOC2007/images/006904.jpg -./VOC/test/VOCdevkit/VOC2007/images/006905.jpg -./VOC/test/VOCdevkit/VOC2007/images/006906.jpg -./VOC/test/VOCdevkit/VOC2007/images/006907.jpg -./VOC/test/VOCdevkit/VOC2007/images/006913.jpg -./VOC/test/VOCdevkit/VOC2007/images/006915.jpg -./VOC/test/VOCdevkit/VOC2007/images/006920.jpg -./VOC/test/VOCdevkit/VOC2007/images/006921.jpg -./VOC/test/VOCdevkit/VOC2007/images/006923.jpg -./VOC/test/VOCdevkit/VOC2007/images/006925.jpg -./VOC/test/VOCdevkit/VOC2007/images/006926.jpg -./VOC/test/VOCdevkit/VOC2007/images/006927.jpg -./VOC/test/VOCdevkit/VOC2007/images/006928.jpg -./VOC/test/VOCdevkit/VOC2007/images/006929.jpg -./VOC/test/VOCdevkit/VOC2007/images/006936.jpg -./VOC/test/VOCdevkit/VOC2007/images/006937.jpg -./VOC/test/VOCdevkit/VOC2007/images/006938.jpg -./VOC/test/VOCdevkit/VOC2007/images/006941.jpg -./VOC/test/VOCdevkit/VOC2007/images/006942.jpg -./VOC/test/VOCdevkit/VOC2007/images/006946.jpg -./VOC/test/VOCdevkit/VOC2007/images/006951.jpg -./VOC/test/VOCdevkit/VOC2007/images/006954.jpg -./VOC/test/VOCdevkit/VOC2007/images/006955.jpg -./VOC/test/VOCdevkit/VOC2007/images/006957.jpg -./VOC/test/VOCdevkit/VOC2007/images/006960.jpg -./VOC/test/VOCdevkit/VOC2007/images/006961.jpg -./VOC/test/VOCdevkit/VOC2007/images/006964.jpg -./VOC/test/VOCdevkit/VOC2007/images/006967.jpg -./VOC/test/VOCdevkit/VOC2007/images/006969.jpg -./VOC/test/VOCdevkit/VOC2007/images/006970.jpg -./VOC/test/VOCdevkit/VOC2007/images/006973.jpg -./VOC/test/VOCdevkit/VOC2007/images/006974.jpg -./VOC/test/VOCdevkit/VOC2007/images/006975.jpg -./VOC/test/VOCdevkit/VOC2007/images/006977.jpg -./VOC/test/VOCdevkit/VOC2007/images/006978.jpg -./VOC/test/VOCdevkit/VOC2007/images/006979.jpg -./VOC/test/VOCdevkit/VOC2007/images/006980.jpg -./VOC/test/VOCdevkit/VOC2007/images/006982.jpg -./VOC/test/VOCdevkit/VOC2007/images/006984.jpg -./VOC/test/VOCdevkit/VOC2007/images/006985.jpg -./VOC/test/VOCdevkit/VOC2007/images/006986.jpg -./VOC/test/VOCdevkit/VOC2007/images/006991.jpg -./VOC/test/VOCdevkit/VOC2007/images/006992.jpg -./VOC/test/VOCdevkit/VOC2007/images/006993.jpg -./VOC/test/VOCdevkit/VOC2007/images/006996.jpg -./VOC/test/VOCdevkit/VOC2007/images/006997.jpg -./VOC/test/VOCdevkit/VOC2007/images/006998.jpg -./VOC/test/VOCdevkit/VOC2007/images/006999.jpg -./VOC/test/VOCdevkit/VOC2007/images/007000.jpg -./VOC/test/VOCdevkit/VOC2007/images/007001.jpg -./VOC/test/VOCdevkit/VOC2007/images/007005.jpg -./VOC/test/VOCdevkit/VOC2007/images/007010.jpg -./VOC/test/VOCdevkit/VOC2007/images/007012.jpg -./VOC/test/VOCdevkit/VOC2007/images/007013.jpg -./VOC/test/VOCdevkit/VOC2007/images/007014.jpg -./VOC/test/VOCdevkit/VOC2007/images/007015.jpg -./VOC/test/VOCdevkit/VOC2007/images/007017.jpg -./VOC/test/VOCdevkit/VOC2007/images/007019.jpg -./VOC/test/VOCdevkit/VOC2007/images/007024.jpg -./VOC/test/VOCdevkit/VOC2007/images/007026.jpg -./VOC/test/VOCdevkit/VOC2007/images/007027.jpg -./VOC/test/VOCdevkit/VOC2007/images/007028.jpg -./VOC/test/VOCdevkit/VOC2007/images/007030.jpg -./VOC/test/VOCdevkit/VOC2007/images/007032.jpg -./VOC/test/VOCdevkit/VOC2007/images/007034.jpg -./VOC/test/VOCdevkit/VOC2007/images/007037.jpg -./VOC/test/VOCdevkit/VOC2007/images/007041.jpg -./VOC/test/VOCdevkit/VOC2007/images/007043.jpg -./VOC/test/VOCdevkit/VOC2007/images/007044.jpg -./VOC/test/VOCdevkit/VOC2007/images/007047.jpg -./VOC/test/VOCdevkit/VOC2007/images/007051.jpg -./VOC/test/VOCdevkit/VOC2007/images/007053.jpg -./VOC/test/VOCdevkit/VOC2007/images/007055.jpg -./VOC/test/VOCdevkit/VOC2007/images/007057.jpg -./VOC/test/VOCdevkit/VOC2007/images/007060.jpg -./VOC/test/VOCdevkit/VOC2007/images/007061.jpg -./VOC/test/VOCdevkit/VOC2007/images/007063.jpg -./VOC/test/VOCdevkit/VOC2007/images/007066.jpg -./VOC/test/VOCdevkit/VOC2007/images/007067.jpg -./VOC/test/VOCdevkit/VOC2007/images/007069.jpg -./VOC/test/VOCdevkit/VOC2007/images/007076.jpg -./VOC/test/VOCdevkit/VOC2007/images/007081.jpg -./VOC/test/VOCdevkit/VOC2007/images/007082.jpg -./VOC/test/VOCdevkit/VOC2007/images/007083.jpg -./VOC/test/VOCdevkit/VOC2007/images/007085.jpg -./VOC/test/VOCdevkit/VOC2007/images/007087.jpg -./VOC/test/VOCdevkit/VOC2007/images/007091.jpg -./VOC/test/VOCdevkit/VOC2007/images/007094.jpg -./VOC/test/VOCdevkit/VOC2007/images/007096.jpg -./VOC/test/VOCdevkit/VOC2007/images/007098.jpg -./VOC/test/VOCdevkit/VOC2007/images/007099.jpg -./VOC/test/VOCdevkit/VOC2007/images/007102.jpg -./VOC/test/VOCdevkit/VOC2007/images/007103.jpg -./VOC/test/VOCdevkit/VOC2007/images/007106.jpg -./VOC/test/VOCdevkit/VOC2007/images/007107.jpg -./VOC/test/VOCdevkit/VOC2007/images/007110.jpg -./VOC/test/VOCdevkit/VOC2007/images/007111.jpg -./VOC/test/VOCdevkit/VOC2007/images/007112.jpg -./VOC/test/VOCdevkit/VOC2007/images/007115.jpg -./VOC/test/VOCdevkit/VOC2007/images/007116.jpg -./VOC/test/VOCdevkit/VOC2007/images/007118.jpg -./VOC/test/VOCdevkit/VOC2007/images/007119.jpg -./VOC/test/VOCdevkit/VOC2007/images/007120.jpg -./VOC/test/VOCdevkit/VOC2007/images/007124.jpg -./VOC/test/VOCdevkit/VOC2007/images/007126.jpg -./VOC/test/VOCdevkit/VOC2007/images/007127.jpg -./VOC/test/VOCdevkit/VOC2007/images/007131.jpg -./VOC/test/VOCdevkit/VOC2007/images/007134.jpg -./VOC/test/VOCdevkit/VOC2007/images/007135.jpg -./VOC/test/VOCdevkit/VOC2007/images/007136.jpg -./VOC/test/VOCdevkit/VOC2007/images/007137.jpg -./VOC/test/VOCdevkit/VOC2007/images/007142.jpg -./VOC/test/VOCdevkit/VOC2007/images/007143.jpg -./VOC/test/VOCdevkit/VOC2007/images/007145.jpg -./VOC/test/VOCdevkit/VOC2007/images/007151.jpg -./VOC/test/VOCdevkit/VOC2007/images/007155.jpg -./VOC/test/VOCdevkit/VOC2007/images/007156.jpg -./VOC/test/VOCdevkit/VOC2007/images/007157.jpg -./VOC/test/VOCdevkit/VOC2007/images/007158.jpg -./VOC/test/VOCdevkit/VOC2007/images/007160.jpg -./VOC/test/VOCdevkit/VOC2007/images/007161.jpg -./VOC/test/VOCdevkit/VOC2007/images/007164.jpg -./VOC/test/VOCdevkit/VOC2007/images/007169.jpg -./VOC/test/VOCdevkit/VOC2007/images/007170.jpg -./VOC/test/VOCdevkit/VOC2007/images/007171.jpg -./VOC/test/VOCdevkit/VOC2007/images/007173.jpg -./VOC/test/VOCdevkit/VOC2007/images/007175.jpg -./VOC/test/VOCdevkit/VOC2007/images/007176.jpg -./VOC/test/VOCdevkit/VOC2007/images/007178.jpg -./VOC/test/VOCdevkit/VOC2007/images/007179.jpg -./VOC/test/VOCdevkit/VOC2007/images/007181.jpg -./VOC/test/VOCdevkit/VOC2007/images/007183.jpg -./VOC/test/VOCdevkit/VOC2007/images/007186.jpg -./VOC/test/VOCdevkit/VOC2007/images/007188.jpg -./VOC/test/VOCdevkit/VOC2007/images/007190.jpg -./VOC/test/VOCdevkit/VOC2007/images/007192.jpg -./VOC/test/VOCdevkit/VOC2007/images/007195.jpg -./VOC/test/VOCdevkit/VOC2007/images/007196.jpg -./VOC/test/VOCdevkit/VOC2007/images/007198.jpg -./VOC/test/VOCdevkit/VOC2007/images/007199.jpg -./VOC/test/VOCdevkit/VOC2007/images/007201.jpg -./VOC/test/VOCdevkit/VOC2007/images/007202.jpg -./VOC/test/VOCdevkit/VOC2007/images/007203.jpg -./VOC/test/VOCdevkit/VOC2007/images/007206.jpg -./VOC/test/VOCdevkit/VOC2007/images/007207.jpg -./VOC/test/VOCdevkit/VOC2007/images/007209.jpg -./VOC/test/VOCdevkit/VOC2007/images/007218.jpg -./VOC/test/VOCdevkit/VOC2007/images/007220.jpg -./VOC/test/VOCdevkit/VOC2007/images/007221.jpg -./VOC/test/VOCdevkit/VOC2007/images/007225.jpg -./VOC/test/VOCdevkit/VOC2007/images/007226.jpg -./VOC/test/VOCdevkit/VOC2007/images/007228.jpg -./VOC/test/VOCdevkit/VOC2007/images/007229.jpg -./VOC/test/VOCdevkit/VOC2007/images/007231.jpg -./VOC/test/VOCdevkit/VOC2007/images/007232.jpg -./VOC/test/VOCdevkit/VOC2007/images/007233.jpg -./VOC/test/VOCdevkit/VOC2007/images/007235.jpg -./VOC/test/VOCdevkit/VOC2007/images/007237.jpg -./VOC/test/VOCdevkit/VOC2007/images/007238.jpg -./VOC/test/VOCdevkit/VOC2007/images/007239.jpg -./VOC/test/VOCdevkit/VOC2007/images/007240.jpg -./VOC/test/VOCdevkit/VOC2007/images/007242.jpg -./VOC/test/VOCdevkit/VOC2007/images/007246.jpg -./VOC/test/VOCdevkit/VOC2007/images/007248.jpg -./VOC/test/VOCdevkit/VOC2007/images/007251.jpg -./VOC/test/VOCdevkit/VOC2007/images/007252.jpg -./VOC/test/VOCdevkit/VOC2007/images/007253.jpg -./VOC/test/VOCdevkit/VOC2007/images/007254.jpg -./VOC/test/VOCdevkit/VOC2007/images/007255.jpg -./VOC/test/VOCdevkit/VOC2007/images/007257.jpg -./VOC/test/VOCdevkit/VOC2007/images/007262.jpg -./VOC/test/VOCdevkit/VOC2007/images/007264.jpg -./VOC/test/VOCdevkit/VOC2007/images/007265.jpg -./VOC/test/VOCdevkit/VOC2007/images/007267.jpg -./VOC/test/VOCdevkit/VOC2007/images/007268.jpg -./VOC/test/VOCdevkit/VOC2007/images/007269.jpg -./VOC/test/VOCdevkit/VOC2007/images/007272.jpg -./VOC/test/VOCdevkit/VOC2007/images/007273.jpg -./VOC/test/VOCdevkit/VOC2007/images/007277.jpg -./VOC/test/VOCdevkit/VOC2007/images/007278.jpg -./VOC/test/VOCdevkit/VOC2007/images/007281.jpg -./VOC/test/VOCdevkit/VOC2007/images/007282.jpg -./VOC/test/VOCdevkit/VOC2007/images/007286.jpg -./VOC/test/VOCdevkit/VOC2007/images/007287.jpg -./VOC/test/VOCdevkit/VOC2007/images/007288.jpg -./VOC/test/VOCdevkit/VOC2007/images/007290.jpg -./VOC/test/VOCdevkit/VOC2007/images/007291.jpg -./VOC/test/VOCdevkit/VOC2007/images/007293.jpg -./VOC/test/VOCdevkit/VOC2007/images/007301.jpg -./VOC/test/VOCdevkit/VOC2007/images/007303.jpg -./VOC/test/VOCdevkit/VOC2007/images/007304.jpg -./VOC/test/VOCdevkit/VOC2007/images/007306.jpg -./VOC/test/VOCdevkit/VOC2007/images/007307.jpg -./VOC/test/VOCdevkit/VOC2007/images/007309.jpg -./VOC/test/VOCdevkit/VOC2007/images/007310.jpg -./VOC/test/VOCdevkit/VOC2007/images/007312.jpg -./VOC/test/VOCdevkit/VOC2007/images/007313.jpg -./VOC/test/VOCdevkit/VOC2007/images/007315.jpg -./VOC/test/VOCdevkit/VOC2007/images/007316.jpg -./VOC/test/VOCdevkit/VOC2007/images/007317.jpg -./VOC/test/VOCdevkit/VOC2007/images/007319.jpg -./VOC/test/VOCdevkit/VOC2007/images/007320.jpg -./VOC/test/VOCdevkit/VOC2007/images/007321.jpg -./VOC/test/VOCdevkit/VOC2007/images/007324.jpg -./VOC/test/VOCdevkit/VOC2007/images/007326.jpg -./VOC/test/VOCdevkit/VOC2007/images/007328.jpg -./VOC/test/VOCdevkit/VOC2007/images/007331.jpg -./VOC/test/VOCdevkit/VOC2007/images/007332.jpg -./VOC/test/VOCdevkit/VOC2007/images/007333.jpg -./VOC/test/VOCdevkit/VOC2007/images/007335.jpg -./VOC/test/VOCdevkit/VOC2007/images/007337.jpg -./VOC/test/VOCdevkit/VOC2007/images/007338.jpg -./VOC/test/VOCdevkit/VOC2007/images/007339.jpg -./VOC/test/VOCdevkit/VOC2007/images/007340.jpg -./VOC/test/VOCdevkit/VOC2007/images/007341.jpg -./VOC/test/VOCdevkit/VOC2007/images/007342.jpg -./VOC/test/VOCdevkit/VOC2007/images/007345.jpg -./VOC/test/VOCdevkit/VOC2007/images/007347.jpg -./VOC/test/VOCdevkit/VOC2007/images/007348.jpg -./VOC/test/VOCdevkit/VOC2007/images/007349.jpg -./VOC/test/VOCdevkit/VOC2007/images/007352.jpg -./VOC/test/VOCdevkit/VOC2007/images/007353.jpg -./VOC/test/VOCdevkit/VOC2007/images/007354.jpg -./VOC/test/VOCdevkit/VOC2007/images/007355.jpg -./VOC/test/VOCdevkit/VOC2007/images/007357.jpg -./VOC/test/VOCdevkit/VOC2007/images/007358.jpg -./VOC/test/VOCdevkit/VOC2007/images/007360.jpg -./VOC/test/VOCdevkit/VOC2007/images/007362.jpg -./VOC/test/VOCdevkit/VOC2007/images/007364.jpg -./VOC/test/VOCdevkit/VOC2007/images/007366.jpg -./VOC/test/VOCdevkit/VOC2007/images/007367.jpg -./VOC/test/VOCdevkit/VOC2007/images/007368.jpg -./VOC/test/VOCdevkit/VOC2007/images/007371.jpg -./VOC/test/VOCdevkit/VOC2007/images/007377.jpg -./VOC/test/VOCdevkit/VOC2007/images/007378.jpg -./VOC/test/VOCdevkit/VOC2007/images/007379.jpg -./VOC/test/VOCdevkit/VOC2007/images/007380.jpg -./VOC/test/VOCdevkit/VOC2007/images/007382.jpg -./VOC/test/VOCdevkit/VOC2007/images/007384.jpg -./VOC/test/VOCdevkit/VOC2007/images/007386.jpg -./VOC/test/VOCdevkit/VOC2007/images/007387.jpg -./VOC/test/VOCdevkit/VOC2007/images/007391.jpg -./VOC/test/VOCdevkit/VOC2007/images/007392.jpg -./VOC/test/VOCdevkit/VOC2007/images/007393.jpg -./VOC/test/VOCdevkit/VOC2007/images/007395.jpg -./VOC/test/VOCdevkit/VOC2007/images/007397.jpg -./VOC/test/VOCdevkit/VOC2007/images/007399.jpg -./VOC/test/VOCdevkit/VOC2007/images/007400.jpg -./VOC/test/VOCdevkit/VOC2007/images/007401.jpg -./VOC/test/VOCdevkit/VOC2007/images/007402.jpg -./VOC/test/VOCdevkit/VOC2007/images/007403.jpg -./VOC/test/VOCdevkit/VOC2007/images/007404.jpg -./VOC/test/VOCdevkit/VOC2007/images/007405.jpg -./VOC/test/VOCdevkit/VOC2007/images/007406.jpg -./VOC/test/VOCdevkit/VOC2007/images/007407.jpg -./VOC/test/VOCdevkit/VOC2007/images/007409.jpg -./VOC/test/VOCdevkit/VOC2007/images/007412.jpg -./VOC/test/VOCdevkit/VOC2007/images/007415.jpg -./VOC/test/VOCdevkit/VOC2007/images/007418.jpg -./VOC/test/VOCdevkit/VOC2007/images/007420.jpg -./VOC/test/VOCdevkit/VOC2007/images/007423.jpg -./VOC/test/VOCdevkit/VOC2007/images/007426.jpg -./VOC/test/VOCdevkit/VOC2007/images/007428.jpg -./VOC/test/VOCdevkit/VOC2007/images/007429.jpg -./VOC/test/VOCdevkit/VOC2007/images/007430.jpg -./VOC/test/VOCdevkit/VOC2007/images/007434.jpg -./VOC/test/VOCdevkit/VOC2007/images/007440.jpg -./VOC/test/VOCdevkit/VOC2007/images/007441.jpg -./VOC/test/VOCdevkit/VOC2007/images/007442.jpg -./VOC/test/VOCdevkit/VOC2007/images/007444.jpg -./VOC/test/VOCdevkit/VOC2007/images/007447.jpg -./VOC/test/VOCdevkit/VOC2007/images/007450.jpg -./VOC/test/VOCdevkit/VOC2007/images/007452.jpg -./VOC/test/VOCdevkit/VOC2007/images/007453.jpg -./VOC/test/VOCdevkit/VOC2007/images/007455.jpg -./VOC/test/VOCdevkit/VOC2007/images/007456.jpg -./VOC/test/VOCdevkit/VOC2007/images/007459.jpg -./VOC/test/VOCdevkit/VOC2007/images/007462.jpg -./VOC/test/VOCdevkit/VOC2007/images/007463.jpg -./VOC/test/VOCdevkit/VOC2007/images/007464.jpg -./VOC/test/VOCdevkit/VOC2007/images/007469.jpg -./VOC/test/VOCdevkit/VOC2007/images/007471.jpg -./VOC/test/VOCdevkit/VOC2007/images/007472.jpg -./VOC/test/VOCdevkit/VOC2007/images/007473.jpg -./VOC/test/VOCdevkit/VOC2007/images/007476.jpg -./VOC/test/VOCdevkit/VOC2007/images/007478.jpg -./VOC/test/VOCdevkit/VOC2007/images/007485.jpg -./VOC/test/VOCdevkit/VOC2007/images/007487.jpg -./VOC/test/VOCdevkit/VOC2007/images/007488.jpg -./VOC/test/VOCdevkit/VOC2007/images/007492.jpg -./VOC/test/VOCdevkit/VOC2007/images/007494.jpg -./VOC/test/VOCdevkit/VOC2007/images/007495.jpg -./VOC/test/VOCdevkit/VOC2007/images/007496.jpg -./VOC/test/VOCdevkit/VOC2007/images/007499.jpg -./VOC/test/VOCdevkit/VOC2007/images/007500.jpg -./VOC/test/VOCdevkit/VOC2007/images/007501.jpg -./VOC/test/VOCdevkit/VOC2007/images/007502.jpg -./VOC/test/VOCdevkit/VOC2007/images/007504.jpg -./VOC/test/VOCdevkit/VOC2007/images/007505.jpg -./VOC/test/VOCdevkit/VOC2007/images/007507.jpg -./VOC/test/VOCdevkit/VOC2007/images/007508.jpg -./VOC/test/VOCdevkit/VOC2007/images/007509.jpg -./VOC/test/VOCdevkit/VOC2007/images/007510.jpg -./VOC/test/VOCdevkit/VOC2007/images/007512.jpg -./VOC/test/VOCdevkit/VOC2007/images/007514.jpg -./VOC/test/VOCdevkit/VOC2007/images/007515.jpg -./VOC/test/VOCdevkit/VOC2007/images/007516.jpg -./VOC/test/VOCdevkit/VOC2007/images/007518.jpg -./VOC/test/VOCdevkit/VOC2007/images/007520.jpg -./VOC/test/VOCdevkit/VOC2007/images/007522.jpg -./VOC/test/VOCdevkit/VOC2007/images/007529.jpg -./VOC/test/VOCdevkit/VOC2007/images/007531.jpg -./VOC/test/VOCdevkit/VOC2007/images/007532.jpg -./VOC/test/VOCdevkit/VOC2007/images/007534.jpg -./VOC/test/VOCdevkit/VOC2007/images/007539.jpg -./VOC/test/VOCdevkit/VOC2007/images/007541.jpg -./VOC/test/VOCdevkit/VOC2007/images/007542.jpg -./VOC/test/VOCdevkit/VOC2007/images/007545.jpg -./VOC/test/VOCdevkit/VOC2007/images/007548.jpg -./VOC/test/VOCdevkit/VOC2007/images/007549.jpg -./VOC/test/VOCdevkit/VOC2007/images/007550.jpg -./VOC/test/VOCdevkit/VOC2007/images/007552.jpg -./VOC/test/VOCdevkit/VOC2007/images/007553.jpg -./VOC/test/VOCdevkit/VOC2007/images/007554.jpg -./VOC/test/VOCdevkit/VOC2007/images/007556.jpg -./VOC/test/VOCdevkit/VOC2007/images/007557.jpg -./VOC/test/VOCdevkit/VOC2007/images/007560.jpg -./VOC/test/VOCdevkit/VOC2007/images/007561.jpg -./VOC/test/VOCdevkit/VOC2007/images/007562.jpg -./VOC/test/VOCdevkit/VOC2007/images/007564.jpg -./VOC/test/VOCdevkit/VOC2007/images/007567.jpg -./VOC/test/VOCdevkit/VOC2007/images/007569.jpg -./VOC/test/VOCdevkit/VOC2007/images/007573.jpg -./VOC/test/VOCdevkit/VOC2007/images/007574.jpg -./VOC/test/VOCdevkit/VOC2007/images/007577.jpg -./VOC/test/VOCdevkit/VOC2007/images/007580.jpg -./VOC/test/VOCdevkit/VOC2007/images/007581.jpg -./VOC/test/VOCdevkit/VOC2007/images/007582.jpg -./VOC/test/VOCdevkit/VOC2007/images/007583.jpg -./VOC/test/VOCdevkit/VOC2007/images/007584.jpg -./VOC/test/VOCdevkit/VOC2007/images/007587.jpg -./VOC/test/VOCdevkit/VOC2007/images/007588.jpg -./VOC/test/VOCdevkit/VOC2007/images/007589.jpg -./VOC/test/VOCdevkit/VOC2007/images/007591.jpg -./VOC/test/VOCdevkit/VOC2007/images/007593.jpg -./VOC/test/VOCdevkit/VOC2007/images/007595.jpg -./VOC/test/VOCdevkit/VOC2007/images/007596.jpg -./VOC/test/VOCdevkit/VOC2007/images/007597.jpg -./VOC/test/VOCdevkit/VOC2007/images/007598.jpg -./VOC/test/VOCdevkit/VOC2007/images/007599.jpg -./VOC/test/VOCdevkit/VOC2007/images/007602.jpg -./VOC/test/VOCdevkit/VOC2007/images/007604.jpg -./VOC/test/VOCdevkit/VOC2007/images/007607.jpg -./VOC/test/VOCdevkit/VOC2007/images/007608.jpg -./VOC/test/VOCdevkit/VOC2007/images/007609.jpg -./VOC/test/VOCdevkit/VOC2007/images/007610.jpg -./VOC/test/VOCdevkit/VOC2007/images/007613.jpg -./VOC/test/VOCdevkit/VOC2007/images/007616.jpg -./VOC/test/VOCdevkit/VOC2007/images/007617.jpg -./VOC/test/VOCdevkit/VOC2007/images/007620.jpg -./VOC/test/VOCdevkit/VOC2007/images/007623.jpg -./VOC/test/VOCdevkit/VOC2007/images/007625.jpg -./VOC/test/VOCdevkit/VOC2007/images/007627.jpg -./VOC/test/VOCdevkit/VOC2007/images/007628.jpg -./VOC/test/VOCdevkit/VOC2007/images/007630.jpg -./VOC/test/VOCdevkit/VOC2007/images/007632.jpg -./VOC/test/VOCdevkit/VOC2007/images/007634.jpg -./VOC/test/VOCdevkit/VOC2007/images/007635.jpg -./VOC/test/VOCdevkit/VOC2007/images/007636.jpg -./VOC/test/VOCdevkit/VOC2007/images/007638.jpg -./VOC/test/VOCdevkit/VOC2007/images/007641.jpg -./VOC/test/VOCdevkit/VOC2007/images/007643.jpg -./VOC/test/VOCdevkit/VOC2007/images/007644.jpg -./VOC/test/VOCdevkit/VOC2007/images/007645.jpg -./VOC/test/VOCdevkit/VOC2007/images/007646.jpg -./VOC/test/VOCdevkit/VOC2007/images/007648.jpg -./VOC/test/VOCdevkit/VOC2007/images/007651.jpg -./VOC/test/VOCdevkit/VOC2007/images/007652.jpg -./VOC/test/VOCdevkit/VOC2007/images/007658.jpg -./VOC/test/VOCdevkit/VOC2007/images/007659.jpg -./VOC/test/VOCdevkit/VOC2007/images/007660.jpg -./VOC/test/VOCdevkit/VOC2007/images/007661.jpg -./VOC/test/VOCdevkit/VOC2007/images/007665.jpg -./VOC/test/VOCdevkit/VOC2007/images/007669.jpg -./VOC/test/VOCdevkit/VOC2007/images/007674.jpg -./VOC/test/VOCdevkit/VOC2007/images/007676.jpg -./VOC/test/VOCdevkit/VOC2007/images/007681.jpg -./VOC/test/VOCdevkit/VOC2007/images/007684.jpg -./VOC/test/VOCdevkit/VOC2007/images/007686.jpg -./VOC/test/VOCdevkit/VOC2007/images/007689.jpg -./VOC/test/VOCdevkit/VOC2007/images/007690.jpg -./VOC/test/VOCdevkit/VOC2007/images/007693.jpg -./VOC/test/VOCdevkit/VOC2007/images/007695.jpg -./VOC/test/VOCdevkit/VOC2007/images/007698.jpg -./VOC/test/VOCdevkit/VOC2007/images/007700.jpg -./VOC/test/VOCdevkit/VOC2007/images/007701.jpg -./VOC/test/VOCdevkit/VOC2007/images/007703.jpg -./VOC/test/VOCdevkit/VOC2007/images/007706.jpg -./VOC/test/VOCdevkit/VOC2007/images/007707.jpg -./VOC/test/VOCdevkit/VOC2007/images/007708.jpg -./VOC/test/VOCdevkit/VOC2007/images/007710.jpg -./VOC/test/VOCdevkit/VOC2007/images/007711.jpg -./VOC/test/VOCdevkit/VOC2007/images/007714.jpg -./VOC/test/VOCdevkit/VOC2007/images/007716.jpg -./VOC/test/VOCdevkit/VOC2007/images/007717.jpg -./VOC/test/VOCdevkit/VOC2007/images/007719.jpg -./VOC/test/VOCdevkit/VOC2007/images/007722.jpg -./VOC/test/VOCdevkit/VOC2007/images/007725.jpg -./VOC/test/VOCdevkit/VOC2007/images/007726.jpg -./VOC/test/VOCdevkit/VOC2007/images/007728.jpg -./VOC/test/VOCdevkit/VOC2007/images/007730.jpg -./VOC/test/VOCdevkit/VOC2007/images/007733.jpg -./VOC/test/VOCdevkit/VOC2007/images/007734.jpg -./VOC/test/VOCdevkit/VOC2007/images/007737.jpg -./VOC/test/VOCdevkit/VOC2007/images/007738.jpg -./VOC/test/VOCdevkit/VOC2007/images/007739.jpg -./VOC/test/VOCdevkit/VOC2007/images/007741.jpg -./VOC/test/VOCdevkit/VOC2007/images/007744.jpg -./VOC/test/VOCdevkit/VOC2007/images/007747.jpg -./VOC/test/VOCdevkit/VOC2007/images/007750.jpg -./VOC/test/VOCdevkit/VOC2007/images/007752.jpg -./VOC/test/VOCdevkit/VOC2007/images/007755.jpg -./VOC/test/VOCdevkit/VOC2007/images/007756.jpg -./VOC/test/VOCdevkit/VOC2007/images/007757.jpg -./VOC/test/VOCdevkit/VOC2007/images/007759.jpg -./VOC/test/VOCdevkit/VOC2007/images/007761.jpg -./VOC/test/VOCdevkit/VOC2007/images/007764.jpg -./VOC/test/VOCdevkit/VOC2007/images/007766.jpg -./VOC/test/VOCdevkit/VOC2007/images/007769.jpg -./VOC/test/VOCdevkit/VOC2007/images/007770.jpg -./VOC/test/VOCdevkit/VOC2007/images/007771.jpg -./VOC/test/VOCdevkit/VOC2007/images/007774.jpg -./VOC/test/VOCdevkit/VOC2007/images/007778.jpg -./VOC/test/VOCdevkit/VOC2007/images/007780.jpg -./VOC/test/VOCdevkit/VOC2007/images/007782.jpg -./VOC/test/VOCdevkit/VOC2007/images/007783.jpg -./VOC/test/VOCdevkit/VOC2007/images/007784.jpg -./VOC/test/VOCdevkit/VOC2007/images/007785.jpg -./VOC/test/VOCdevkit/VOC2007/images/007787.jpg -./VOC/test/VOCdevkit/VOC2007/images/007788.jpg -./VOC/test/VOCdevkit/VOC2007/images/007789.jpg -./VOC/test/VOCdevkit/VOC2007/images/007792.jpg -./VOC/test/VOCdevkit/VOC2007/images/007794.jpg -./VOC/test/VOCdevkit/VOC2007/images/007796.jpg -./VOC/test/VOCdevkit/VOC2007/images/007797.jpg -./VOC/test/VOCdevkit/VOC2007/images/007800.jpg -./VOC/test/VOCdevkit/VOC2007/images/007801.jpg -./VOC/test/VOCdevkit/VOC2007/images/007802.jpg -./VOC/test/VOCdevkit/VOC2007/images/007804.jpg -./VOC/test/VOCdevkit/VOC2007/images/007805.jpg -./VOC/test/VOCdevkit/VOC2007/images/007806.jpg -./VOC/test/VOCdevkit/VOC2007/images/007807.jpg -./VOC/test/VOCdevkit/VOC2007/images/007808.jpg -./VOC/test/VOCdevkit/VOC2007/images/007811.jpg -./VOC/test/VOCdevkit/VOC2007/images/007816.jpg -./VOC/test/VOCdevkit/VOC2007/images/007817.jpg -./VOC/test/VOCdevkit/VOC2007/images/007818.jpg -./VOC/test/VOCdevkit/VOC2007/images/007822.jpg -./VOC/test/VOCdevkit/VOC2007/images/007823.jpg -./VOC/test/VOCdevkit/VOC2007/images/007825.jpg -./VOC/test/VOCdevkit/VOC2007/images/007827.jpg -./VOC/test/VOCdevkit/VOC2007/images/007828.jpg -./VOC/test/VOCdevkit/VOC2007/images/007829.jpg -./VOC/test/VOCdevkit/VOC2007/images/007830.jpg -./VOC/test/VOCdevkit/VOC2007/images/007832.jpg -./VOC/test/VOCdevkit/VOC2007/images/007835.jpg -./VOC/test/VOCdevkit/VOC2007/images/007837.jpg -./VOC/test/VOCdevkit/VOC2007/images/007839.jpg -./VOC/test/VOCdevkit/VOC2007/images/007842.jpg -./VOC/test/VOCdevkit/VOC2007/images/007844.jpg -./VOC/test/VOCdevkit/VOC2007/images/007846.jpg -./VOC/test/VOCdevkit/VOC2007/images/007848.jpg -./VOC/test/VOCdevkit/VOC2007/images/007849.jpg -./VOC/test/VOCdevkit/VOC2007/images/007850.jpg -./VOC/test/VOCdevkit/VOC2007/images/007851.jpg -./VOC/test/VOCdevkit/VOC2007/images/007852.jpg -./VOC/test/VOCdevkit/VOC2007/images/007858.jpg -./VOC/test/VOCdevkit/VOC2007/images/007860.jpg -./VOC/test/VOCdevkit/VOC2007/images/007861.jpg -./VOC/test/VOCdevkit/VOC2007/images/007862.jpg -./VOC/test/VOCdevkit/VOC2007/images/007866.jpg -./VOC/test/VOCdevkit/VOC2007/images/007867.jpg -./VOC/test/VOCdevkit/VOC2007/images/007870.jpg -./VOC/test/VOCdevkit/VOC2007/images/007871.jpg -./VOC/test/VOCdevkit/VOC2007/images/007874.jpg -./VOC/test/VOCdevkit/VOC2007/images/007875.jpg -./VOC/test/VOCdevkit/VOC2007/images/007879.jpg -./VOC/test/VOCdevkit/VOC2007/images/007880.jpg -./VOC/test/VOCdevkit/VOC2007/images/007881.jpg -./VOC/test/VOCdevkit/VOC2007/images/007882.jpg -./VOC/test/VOCdevkit/VOC2007/images/007887.jpg -./VOC/test/VOCdevkit/VOC2007/images/007888.jpg -./VOC/test/VOCdevkit/VOC2007/images/007891.jpg -./VOC/test/VOCdevkit/VOC2007/images/007892.jpg -./VOC/test/VOCdevkit/VOC2007/images/007893.jpg -./VOC/test/VOCdevkit/VOC2007/images/007894.jpg -./VOC/test/VOCdevkit/VOC2007/images/007895.jpg -./VOC/test/VOCdevkit/VOC2007/images/007896.jpg -./VOC/test/VOCdevkit/VOC2007/images/007903.jpg -./VOC/test/VOCdevkit/VOC2007/images/007904.jpg -./VOC/test/VOCdevkit/VOC2007/images/007906.jpg -./VOC/test/VOCdevkit/VOC2007/images/007907.jpg -./VOC/test/VOCdevkit/VOC2007/images/007912.jpg -./VOC/test/VOCdevkit/VOC2007/images/007913.jpg -./VOC/test/VOCdevkit/VOC2007/images/007917.jpg -./VOC/test/VOCdevkit/VOC2007/images/007918.jpg -./VOC/test/VOCdevkit/VOC2007/images/007922.jpg -./VOC/test/VOCdevkit/VOC2007/images/007927.jpg -./VOC/test/VOCdevkit/VOC2007/images/007929.jpg -./VOC/test/VOCdevkit/VOC2007/images/007930.jpg -./VOC/test/VOCdevkit/VOC2007/images/007934.jpg -./VOC/test/VOCdevkit/VOC2007/images/007936.jpg -./VOC/test/VOCdevkit/VOC2007/images/007937.jpg -./VOC/test/VOCdevkit/VOC2007/images/007938.jpg -./VOC/test/VOCdevkit/VOC2007/images/007941.jpg -./VOC/test/VOCdevkit/VOC2007/images/007942.jpg -./VOC/test/VOCdevkit/VOC2007/images/007944.jpg -./VOC/test/VOCdevkit/VOC2007/images/007945.jpg -./VOC/test/VOCdevkit/VOC2007/images/007948.jpg -./VOC/test/VOCdevkit/VOC2007/images/007949.jpg -./VOC/test/VOCdevkit/VOC2007/images/007951.jpg -./VOC/test/VOCdevkit/VOC2007/images/007952.jpg -./VOC/test/VOCdevkit/VOC2007/images/007955.jpg -./VOC/test/VOCdevkit/VOC2007/images/007957.jpg -./VOC/test/VOCdevkit/VOC2007/images/007960.jpg -./VOC/test/VOCdevkit/VOC2007/images/007961.jpg -./VOC/test/VOCdevkit/VOC2007/images/007962.jpg -./VOC/test/VOCdevkit/VOC2007/images/007965.jpg -./VOC/test/VOCdevkit/VOC2007/images/007966.jpg -./VOC/test/VOCdevkit/VOC2007/images/007967.jpg -./VOC/test/VOCdevkit/VOC2007/images/007969.jpg -./VOC/test/VOCdevkit/VOC2007/images/007972.jpg -./VOC/test/VOCdevkit/VOC2007/images/007973.jpg -./VOC/test/VOCdevkit/VOC2007/images/007975.jpg -./VOC/test/VOCdevkit/VOC2007/images/007977.jpg -./VOC/test/VOCdevkit/VOC2007/images/007978.jpg -./VOC/test/VOCdevkit/VOC2007/images/007981.jpg -./VOC/test/VOCdevkit/VOC2007/images/007982.jpg -./VOC/test/VOCdevkit/VOC2007/images/007983.jpg -./VOC/test/VOCdevkit/VOC2007/images/007985.jpg -./VOC/test/VOCdevkit/VOC2007/images/007986.jpg -./VOC/test/VOCdevkit/VOC2007/images/007988.jpg -./VOC/test/VOCdevkit/VOC2007/images/007989.jpg -./VOC/test/VOCdevkit/VOC2007/images/007990.jpg -./VOC/test/VOCdevkit/VOC2007/images/007992.jpg -./VOC/test/VOCdevkit/VOC2007/images/007993.jpg -./VOC/test/VOCdevkit/VOC2007/images/007994.jpg -./VOC/test/VOCdevkit/VOC2007/images/007995.jpg -./VOC/test/VOCdevkit/VOC2007/images/008000.jpg -./VOC/test/VOCdevkit/VOC2007/images/008003.jpg -./VOC/test/VOCdevkit/VOC2007/images/008006.jpg -./VOC/test/VOCdevkit/VOC2007/images/008007.jpg -./VOC/test/VOCdevkit/VOC2007/images/008010.jpg -./VOC/test/VOCdevkit/VOC2007/images/008011.jpg -./VOC/test/VOCdevkit/VOC2007/images/008013.jpg -./VOC/test/VOCdevkit/VOC2007/images/008014.jpg -./VOC/test/VOCdevkit/VOC2007/images/008015.jpg -./VOC/test/VOCdevkit/VOC2007/images/008016.jpg -./VOC/test/VOCdevkit/VOC2007/images/008018.jpg -./VOC/test/VOCdevkit/VOC2007/images/008020.jpg -./VOC/test/VOCdevkit/VOC2007/images/008021.jpg -./VOC/test/VOCdevkit/VOC2007/images/008022.jpg -./VOC/test/VOCdevkit/VOC2007/images/008025.jpg -./VOC/test/VOCdevkit/VOC2007/images/008027.jpg -./VOC/test/VOCdevkit/VOC2007/images/008028.jpg -./VOC/test/VOCdevkit/VOC2007/images/008030.jpg -./VOC/test/VOCdevkit/VOC2007/images/008034.jpg -./VOC/test/VOCdevkit/VOC2007/images/008035.jpg -./VOC/test/VOCdevkit/VOC2007/images/008038.jpg -./VOC/test/VOCdevkit/VOC2007/images/008039.jpg -./VOC/test/VOCdevkit/VOC2007/images/008041.jpg -./VOC/test/VOCdevkit/VOC2007/images/008045.jpg -./VOC/test/VOCdevkit/VOC2007/images/008046.jpg -./VOC/test/VOCdevkit/VOC2007/images/008047.jpg -./VOC/test/VOCdevkit/VOC2007/images/008050.jpg -./VOC/test/VOCdevkit/VOC2007/images/008052.jpg -./VOC/test/VOCdevkit/VOC2007/images/008054.jpg -./VOC/test/VOCdevkit/VOC2007/images/008055.jpg -./VOC/test/VOCdevkit/VOC2007/images/008056.jpg -./VOC/test/VOCdevkit/VOC2007/images/008058.jpg -./VOC/test/VOCdevkit/VOC2007/images/008059.jpg -./VOC/test/VOCdevkit/VOC2007/images/008065.jpg -./VOC/test/VOCdevkit/VOC2007/images/008066.jpg -./VOC/test/VOCdevkit/VOC2007/images/008070.jpg -./VOC/test/VOCdevkit/VOC2007/images/008071.jpg -./VOC/test/VOCdevkit/VOC2007/images/008073.jpg -./VOC/test/VOCdevkit/VOC2007/images/008074.jpg -./VOC/test/VOCdevkit/VOC2007/images/008077.jpg -./VOC/test/VOCdevkit/VOC2007/images/008078.jpg -./VOC/test/VOCdevkit/VOC2007/images/008080.jpg -./VOC/test/VOCdevkit/VOC2007/images/008081.jpg -./VOC/test/VOCdevkit/VOC2007/images/008088.jpg -./VOC/test/VOCdevkit/VOC2007/images/008089.jpg -./VOC/test/VOCdevkit/VOC2007/images/008090.jpg -./VOC/test/VOCdevkit/VOC2007/images/008092.jpg -./VOC/test/VOCdevkit/VOC2007/images/008094.jpg -./VOC/test/VOCdevkit/VOC2007/images/008097.jpg -./VOC/test/VOCdevkit/VOC2007/images/008099.jpg -./VOC/test/VOCdevkit/VOC2007/images/008102.jpg -./VOC/test/VOCdevkit/VOC2007/images/008104.jpg -./VOC/test/VOCdevkit/VOC2007/images/008109.jpg -./VOC/test/VOCdevkit/VOC2007/images/008110.jpg -./VOC/test/VOCdevkit/VOC2007/images/008111.jpg -./VOC/test/VOCdevkit/VOC2007/images/008113.jpg -./VOC/test/VOCdevkit/VOC2007/images/008114.jpg -./VOC/test/VOCdevkit/VOC2007/images/008118.jpg -./VOC/test/VOCdevkit/VOC2007/images/008119.jpg -./VOC/test/VOCdevkit/VOC2007/images/008120.jpg -./VOC/test/VOCdevkit/VOC2007/images/008123.jpg -./VOC/test/VOCdevkit/VOC2007/images/008124.jpg -./VOC/test/VOCdevkit/VOC2007/images/008126.jpg -./VOC/test/VOCdevkit/VOC2007/images/008128.jpg -./VOC/test/VOCdevkit/VOC2007/images/008129.jpg -./VOC/test/VOCdevkit/VOC2007/images/008131.jpg -./VOC/test/VOCdevkit/VOC2007/images/008133.jpg -./VOC/test/VOCdevkit/VOC2007/images/008134.jpg -./VOC/test/VOCdevkit/VOC2007/images/008135.jpg -./VOC/test/VOCdevkit/VOC2007/images/008136.jpg -./VOC/test/VOCdevkit/VOC2007/images/008143.jpg -./VOC/test/VOCdevkit/VOC2007/images/008145.jpg -./VOC/test/VOCdevkit/VOC2007/images/008146.jpg -./VOC/test/VOCdevkit/VOC2007/images/008147.jpg -./VOC/test/VOCdevkit/VOC2007/images/008148.jpg -./VOC/test/VOCdevkit/VOC2007/images/008149.jpg -./VOC/test/VOCdevkit/VOC2007/images/008152.jpg -./VOC/test/VOCdevkit/VOC2007/images/008153.jpg -./VOC/test/VOCdevkit/VOC2007/images/008154.jpg -./VOC/test/VOCdevkit/VOC2007/images/008155.jpg -./VOC/test/VOCdevkit/VOC2007/images/008156.jpg -./VOC/test/VOCdevkit/VOC2007/images/008157.jpg -./VOC/test/VOCdevkit/VOC2007/images/008158.jpg -./VOC/test/VOCdevkit/VOC2007/images/008161.jpg -./VOC/test/VOCdevkit/VOC2007/images/008162.jpg -./VOC/test/VOCdevkit/VOC2007/images/008165.jpg -./VOC/test/VOCdevkit/VOC2007/images/008167.jpg -./VOC/test/VOCdevkit/VOC2007/images/008170.jpg -./VOC/test/VOCdevkit/VOC2007/images/008172.jpg -./VOC/test/VOCdevkit/VOC2007/images/008176.jpg -./VOC/test/VOCdevkit/VOC2007/images/008178.jpg -./VOC/test/VOCdevkit/VOC2007/images/008179.jpg -./VOC/test/VOCdevkit/VOC2007/images/008181.jpg -./VOC/test/VOCdevkit/VOC2007/images/008182.jpg -./VOC/test/VOCdevkit/VOC2007/images/008183.jpg -./VOC/test/VOCdevkit/VOC2007/images/008184.jpg -./VOC/test/VOCdevkit/VOC2007/images/008185.jpg -./VOC/test/VOCdevkit/VOC2007/images/008187.jpg -./VOC/test/VOCdevkit/VOC2007/images/008192.jpg -./VOC/test/VOCdevkit/VOC2007/images/008193.jpg -./VOC/test/VOCdevkit/VOC2007/images/008194.jpg -./VOC/test/VOCdevkit/VOC2007/images/008195.jpg -./VOC/test/VOCdevkit/VOC2007/images/008196.jpg -./VOC/test/VOCdevkit/VOC2007/images/008198.jpg -./VOC/test/VOCdevkit/VOC2007/images/008201.jpg -./VOC/test/VOCdevkit/VOC2007/images/008205.jpg -./VOC/test/VOCdevkit/VOC2007/images/008206.jpg -./VOC/test/VOCdevkit/VOC2007/images/008207.jpg -./VOC/test/VOCdevkit/VOC2007/images/008210.jpg -./VOC/test/VOCdevkit/VOC2007/images/008212.jpg -./VOC/test/VOCdevkit/VOC2007/images/008214.jpg -./VOC/test/VOCdevkit/VOC2007/images/008215.jpg -./VOC/test/VOCdevkit/VOC2007/images/008217.jpg -./VOC/test/VOCdevkit/VOC2007/images/008219.jpg -./VOC/test/VOCdevkit/VOC2007/images/008221.jpg -./VOC/test/VOCdevkit/VOC2007/images/008227.jpg -./VOC/test/VOCdevkit/VOC2007/images/008228.jpg -./VOC/test/VOCdevkit/VOC2007/images/008230.jpg -./VOC/test/VOCdevkit/VOC2007/images/008231.jpg -./VOC/test/VOCdevkit/VOC2007/images/008233.jpg -./VOC/test/VOCdevkit/VOC2007/images/008234.jpg -./VOC/test/VOCdevkit/VOC2007/images/008237.jpg -./VOC/test/VOCdevkit/VOC2007/images/008238.jpg -./VOC/test/VOCdevkit/VOC2007/images/008239.jpg -./VOC/test/VOCdevkit/VOC2007/images/008240.jpg -./VOC/test/VOCdevkit/VOC2007/images/008242.jpg -./VOC/test/VOCdevkit/VOC2007/images/008243.jpg -./VOC/test/VOCdevkit/VOC2007/images/008245.jpg -./VOC/test/VOCdevkit/VOC2007/images/008246.jpg -./VOC/test/VOCdevkit/VOC2007/images/008247.jpg -./VOC/test/VOCdevkit/VOC2007/images/008249.jpg -./VOC/test/VOCdevkit/VOC2007/images/008255.jpg -./VOC/test/VOCdevkit/VOC2007/images/008256.jpg -./VOC/test/VOCdevkit/VOC2007/images/008257.jpg -./VOC/test/VOCdevkit/VOC2007/images/008259.jpg -./VOC/test/VOCdevkit/VOC2007/images/008264.jpg -./VOC/test/VOCdevkit/VOC2007/images/008265.jpg -./VOC/test/VOCdevkit/VOC2007/images/008266.jpg -./VOC/test/VOCdevkit/VOC2007/images/008267.jpg -./VOC/test/VOCdevkit/VOC2007/images/008270.jpg -./VOC/test/VOCdevkit/VOC2007/images/008271.jpg -./VOC/test/VOCdevkit/VOC2007/images/008273.jpg -./VOC/test/VOCdevkit/VOC2007/images/008274.jpg -./VOC/test/VOCdevkit/VOC2007/images/008276.jpg -./VOC/test/VOCdevkit/VOC2007/images/008277.jpg -./VOC/test/VOCdevkit/VOC2007/images/008278.jpg -./VOC/test/VOCdevkit/VOC2007/images/008283.jpg -./VOC/test/VOCdevkit/VOC2007/images/008286.jpg -./VOC/test/VOCdevkit/VOC2007/images/008287.jpg -./VOC/test/VOCdevkit/VOC2007/images/008288.jpg -./VOC/test/VOCdevkit/VOC2007/images/008289.jpg -./VOC/test/VOCdevkit/VOC2007/images/008290.jpg -./VOC/test/VOCdevkit/VOC2007/images/008291.jpg -./VOC/test/VOCdevkit/VOC2007/images/008298.jpg -./VOC/test/VOCdevkit/VOC2007/images/008303.jpg -./VOC/test/VOCdevkit/VOC2007/images/008304.jpg -./VOC/test/VOCdevkit/VOC2007/images/008305.jpg -./VOC/test/VOCdevkit/VOC2007/images/008308.jpg -./VOC/test/VOCdevkit/VOC2007/images/008309.jpg -./VOC/test/VOCdevkit/VOC2007/images/008314.jpg -./VOC/test/VOCdevkit/VOC2007/images/008321.jpg -./VOC/test/VOCdevkit/VOC2007/images/008324.jpg -./VOC/test/VOCdevkit/VOC2007/images/008325.jpg -./VOC/test/VOCdevkit/VOC2007/images/008328.jpg -./VOC/test/VOCdevkit/VOC2007/images/008330.jpg -./VOC/test/VOCdevkit/VOC2007/images/008331.jpg -./VOC/test/VOCdevkit/VOC2007/images/008333.jpg -./VOC/test/VOCdevkit/VOC2007/images/008334.jpg -./VOC/test/VOCdevkit/VOC2007/images/008337.jpg -./VOC/test/VOCdevkit/VOC2007/images/008339.jpg -./VOC/test/VOCdevkit/VOC2007/images/008340.jpg -./VOC/test/VOCdevkit/VOC2007/images/008343.jpg -./VOC/test/VOCdevkit/VOC2007/images/008344.jpg -./VOC/test/VOCdevkit/VOC2007/images/008347.jpg -./VOC/test/VOCdevkit/VOC2007/images/008348.jpg -./VOC/test/VOCdevkit/VOC2007/images/008350.jpg -./VOC/test/VOCdevkit/VOC2007/images/008352.jpg -./VOC/test/VOCdevkit/VOC2007/images/008353.jpg -./VOC/test/VOCdevkit/VOC2007/images/008354.jpg -./VOC/test/VOCdevkit/VOC2007/images/008356.jpg -./VOC/test/VOCdevkit/VOC2007/images/008357.jpg -./VOC/test/VOCdevkit/VOC2007/images/008358.jpg -./VOC/test/VOCdevkit/VOC2007/images/008361.jpg -./VOC/test/VOCdevkit/VOC2007/images/008362.jpg -./VOC/test/VOCdevkit/VOC2007/images/008363.jpg -./VOC/test/VOCdevkit/VOC2007/images/008366.jpg -./VOC/test/VOCdevkit/VOC2007/images/008367.jpg -./VOC/test/VOCdevkit/VOC2007/images/008369.jpg -./VOC/test/VOCdevkit/VOC2007/images/008371.jpg -./VOC/test/VOCdevkit/VOC2007/images/008373.jpg -./VOC/test/VOCdevkit/VOC2007/images/008375.jpg -./VOC/test/VOCdevkit/VOC2007/images/008377.jpg -./VOC/test/VOCdevkit/VOC2007/images/008378.jpg -./VOC/test/VOCdevkit/VOC2007/images/008379.jpg -./VOC/test/VOCdevkit/VOC2007/images/008380.jpg -./VOC/test/VOCdevkit/VOC2007/images/008382.jpg -./VOC/test/VOCdevkit/VOC2007/images/008383.jpg -./VOC/test/VOCdevkit/VOC2007/images/008389.jpg -./VOC/test/VOCdevkit/VOC2007/images/008392.jpg -./VOC/test/VOCdevkit/VOC2007/images/008393.jpg -./VOC/test/VOCdevkit/VOC2007/images/008394.jpg -./VOC/test/VOCdevkit/VOC2007/images/008395.jpg -./VOC/test/VOCdevkit/VOC2007/images/008396.jpg -./VOC/test/VOCdevkit/VOC2007/images/008399.jpg -./VOC/test/VOCdevkit/VOC2007/images/008400.jpg -./VOC/test/VOCdevkit/VOC2007/images/008401.jpg -./VOC/test/VOCdevkit/VOC2007/images/008402.jpg -./VOC/test/VOCdevkit/VOC2007/images/008404.jpg -./VOC/test/VOCdevkit/VOC2007/images/008405.jpg -./VOC/test/VOCdevkit/VOC2007/images/008406.jpg -./VOC/test/VOCdevkit/VOC2007/images/008407.jpg -./VOC/test/VOCdevkit/VOC2007/images/008408.jpg -./VOC/test/VOCdevkit/VOC2007/images/008411.jpg -./VOC/test/VOCdevkit/VOC2007/images/008412.jpg -./VOC/test/VOCdevkit/VOC2007/images/008414.jpg -./VOC/test/VOCdevkit/VOC2007/images/008417.jpg -./VOC/test/VOCdevkit/VOC2007/images/008418.jpg -./VOC/test/VOCdevkit/VOC2007/images/008419.jpg -./VOC/test/VOCdevkit/VOC2007/images/008420.jpg -./VOC/test/VOCdevkit/VOC2007/images/008421.jpg -./VOC/test/VOCdevkit/VOC2007/images/008428.jpg -./VOC/test/VOCdevkit/VOC2007/images/008431.jpg -./VOC/test/VOCdevkit/VOC2007/images/008432.jpg -./VOC/test/VOCdevkit/VOC2007/images/008435.jpg -./VOC/test/VOCdevkit/VOC2007/images/008436.jpg -./VOC/test/VOCdevkit/VOC2007/images/008439.jpg -./VOC/test/VOCdevkit/VOC2007/images/008440.jpg -./VOC/test/VOCdevkit/VOC2007/images/008441.jpg -./VOC/test/VOCdevkit/VOC2007/images/008446.jpg -./VOC/test/VOCdevkit/VOC2007/images/008447.jpg -./VOC/test/VOCdevkit/VOC2007/images/008448.jpg -./VOC/test/VOCdevkit/VOC2007/images/008451.jpg -./VOC/test/VOCdevkit/VOC2007/images/008455.jpg -./VOC/test/VOCdevkit/VOC2007/images/008457.jpg -./VOC/test/VOCdevkit/VOC2007/images/008458.jpg -./VOC/test/VOCdevkit/VOC2007/images/008459.jpg -./VOC/test/VOCdevkit/VOC2007/images/008460.jpg -./VOC/test/VOCdevkit/VOC2007/images/008463.jpg -./VOC/test/VOCdevkit/VOC2007/images/008464.jpg -./VOC/test/VOCdevkit/VOC2007/images/008469.jpg -./VOC/test/VOCdevkit/VOC2007/images/008471.jpg -./VOC/test/VOCdevkit/VOC2007/images/008473.jpg -./VOC/test/VOCdevkit/VOC2007/images/008474.jpg -./VOC/test/VOCdevkit/VOC2007/images/008476.jpg -./VOC/test/VOCdevkit/VOC2007/images/008479.jpg -./VOC/test/VOCdevkit/VOC2007/images/008480.jpg -./VOC/test/VOCdevkit/VOC2007/images/008481.jpg -./VOC/test/VOCdevkit/VOC2007/images/008486.jpg -./VOC/test/VOCdevkit/VOC2007/images/008487.jpg -./VOC/test/VOCdevkit/VOC2007/images/008488.jpg -./VOC/test/VOCdevkit/VOC2007/images/008489.jpg -./VOC/test/VOCdevkit/VOC2007/images/008490.jpg -./VOC/test/VOCdevkit/VOC2007/images/008491.jpg -./VOC/test/VOCdevkit/VOC2007/images/008493.jpg -./VOC/test/VOCdevkit/VOC2007/images/008496.jpg -./VOC/test/VOCdevkit/VOC2007/images/008497.jpg -./VOC/test/VOCdevkit/VOC2007/images/008500.jpg -./VOC/test/VOCdevkit/VOC2007/images/008501.jpg -./VOC/test/VOCdevkit/VOC2007/images/008504.jpg -./VOC/test/VOCdevkit/VOC2007/images/008505.jpg -./VOC/test/VOCdevkit/VOC2007/images/008507.jpg -./VOC/test/VOCdevkit/VOC2007/images/008508.jpg -./VOC/test/VOCdevkit/VOC2007/images/008510.jpg -./VOC/test/VOCdevkit/VOC2007/images/008511.jpg -./VOC/test/VOCdevkit/VOC2007/images/008515.jpg -./VOC/test/VOCdevkit/VOC2007/images/008516.jpg -./VOC/test/VOCdevkit/VOC2007/images/008520.jpg -./VOC/test/VOCdevkit/VOC2007/images/008525.jpg -./VOC/test/VOCdevkit/VOC2007/images/008527.jpg -./VOC/test/VOCdevkit/VOC2007/images/008528.jpg -./VOC/test/VOCdevkit/VOC2007/images/008531.jpg -./VOC/test/VOCdevkit/VOC2007/images/008532.jpg -./VOC/test/VOCdevkit/VOC2007/images/008537.jpg -./VOC/test/VOCdevkit/VOC2007/images/008538.jpg -./VOC/test/VOCdevkit/VOC2007/images/008539.jpg -./VOC/test/VOCdevkit/VOC2007/images/008540.jpg -./VOC/test/VOCdevkit/VOC2007/images/008543.jpg -./VOC/test/VOCdevkit/VOC2007/images/008544.jpg -./VOC/test/VOCdevkit/VOC2007/images/008545.jpg -./VOC/test/VOCdevkit/VOC2007/images/008546.jpg -./VOC/test/VOCdevkit/VOC2007/images/008547.jpg -./VOC/test/VOCdevkit/VOC2007/images/008548.jpg -./VOC/test/VOCdevkit/VOC2007/images/008551.jpg -./VOC/test/VOCdevkit/VOC2007/images/008552.jpg -./VOC/test/VOCdevkit/VOC2007/images/008554.jpg -./VOC/test/VOCdevkit/VOC2007/images/008555.jpg -./VOC/test/VOCdevkit/VOC2007/images/008560.jpg -./VOC/test/VOCdevkit/VOC2007/images/008561.jpg -./VOC/test/VOCdevkit/VOC2007/images/008563.jpg -./VOC/test/VOCdevkit/VOC2007/images/008565.jpg -./VOC/test/VOCdevkit/VOC2007/images/008566.jpg -./VOC/test/VOCdevkit/VOC2007/images/008567.jpg -./VOC/test/VOCdevkit/VOC2007/images/008569.jpg -./VOC/test/VOCdevkit/VOC2007/images/008570.jpg -./VOC/test/VOCdevkit/VOC2007/images/008571.jpg -./VOC/test/VOCdevkit/VOC2007/images/008574.jpg -./VOC/test/VOCdevkit/VOC2007/images/008575.jpg -./VOC/test/VOCdevkit/VOC2007/images/008577.jpg -./VOC/test/VOCdevkit/VOC2007/images/008578.jpg -./VOC/test/VOCdevkit/VOC2007/images/008579.jpg -./VOC/test/VOCdevkit/VOC2007/images/008580.jpg -./VOC/test/VOCdevkit/VOC2007/images/008583.jpg -./VOC/test/VOCdevkit/VOC2007/images/008589.jpg -./VOC/test/VOCdevkit/VOC2007/images/008590.jpg -./VOC/test/VOCdevkit/VOC2007/images/008591.jpg -./VOC/test/VOCdevkit/VOC2007/images/008593.jpg -./VOC/test/VOCdevkit/VOC2007/images/008594.jpg -./VOC/test/VOCdevkit/VOC2007/images/008597.jpg -./VOC/test/VOCdevkit/VOC2007/images/008598.jpg -./VOC/test/VOCdevkit/VOC2007/images/008599.jpg -./VOC/test/VOCdevkit/VOC2007/images/008600.jpg -./VOC/test/VOCdevkit/VOC2007/images/008603.jpg -./VOC/test/VOCdevkit/VOC2007/images/008605.jpg -./VOC/test/VOCdevkit/VOC2007/images/008609.jpg -./VOC/test/VOCdevkit/VOC2007/images/008611.jpg -./VOC/test/VOCdevkit/VOC2007/images/008613.jpg -./VOC/test/VOCdevkit/VOC2007/images/008614.jpg -./VOC/test/VOCdevkit/VOC2007/images/008616.jpg -./VOC/test/VOCdevkit/VOC2007/images/008619.jpg -./VOC/test/VOCdevkit/VOC2007/images/008622.jpg -./VOC/test/VOCdevkit/VOC2007/images/008623.jpg -./VOC/test/VOCdevkit/VOC2007/images/008625.jpg -./VOC/test/VOCdevkit/VOC2007/images/008626.jpg -./VOC/test/VOCdevkit/VOC2007/images/008627.jpg -./VOC/test/VOCdevkit/VOC2007/images/008629.jpg -./VOC/test/VOCdevkit/VOC2007/images/008630.jpg -./VOC/test/VOCdevkit/VOC2007/images/008631.jpg -./VOC/test/VOCdevkit/VOC2007/images/008632.jpg -./VOC/test/VOCdevkit/VOC2007/images/008634.jpg -./VOC/test/VOCdevkit/VOC2007/images/008637.jpg -./VOC/test/VOCdevkit/VOC2007/images/008640.jpg -./VOC/test/VOCdevkit/VOC2007/images/008641.jpg -./VOC/test/VOCdevkit/VOC2007/images/008642.jpg -./VOC/test/VOCdevkit/VOC2007/images/008643.jpg -./VOC/test/VOCdevkit/VOC2007/images/008646.jpg -./VOC/test/VOCdevkit/VOC2007/images/008648.jpg -./VOC/test/VOCdevkit/VOC2007/images/008649.jpg -./VOC/test/VOCdevkit/VOC2007/images/008650.jpg -./VOC/test/VOCdevkit/VOC2007/images/008651.jpg -./VOC/test/VOCdevkit/VOC2007/images/008652.jpg -./VOC/test/VOCdevkit/VOC2007/images/008656.jpg -./VOC/test/VOCdevkit/VOC2007/images/008657.jpg -./VOC/test/VOCdevkit/VOC2007/images/008658.jpg -./VOC/test/VOCdevkit/VOC2007/images/008659.jpg -./VOC/test/VOCdevkit/VOC2007/images/008660.jpg -./VOC/test/VOCdevkit/VOC2007/images/008661.jpg -./VOC/test/VOCdevkit/VOC2007/images/008662.jpg -./VOC/test/VOCdevkit/VOC2007/images/008664.jpg -./VOC/test/VOCdevkit/VOC2007/images/008666.jpg -./VOC/test/VOCdevkit/VOC2007/images/008668.jpg -./VOC/test/VOCdevkit/VOC2007/images/008669.jpg -./VOC/test/VOCdevkit/VOC2007/images/008671.jpg -./VOC/test/VOCdevkit/VOC2007/images/008672.jpg -./VOC/test/VOCdevkit/VOC2007/images/008673.jpg -./VOC/test/VOCdevkit/VOC2007/images/008674.jpg -./VOC/test/VOCdevkit/VOC2007/images/008675.jpg -./VOC/test/VOCdevkit/VOC2007/images/008677.jpg -./VOC/test/VOCdevkit/VOC2007/images/008678.jpg -./VOC/test/VOCdevkit/VOC2007/images/008679.jpg -./VOC/test/VOCdevkit/VOC2007/images/008681.jpg -./VOC/test/VOCdevkit/VOC2007/images/008682.jpg -./VOC/test/VOCdevkit/VOC2007/images/008684.jpg -./VOC/test/VOCdevkit/VOC2007/images/008685.jpg -./VOC/test/VOCdevkit/VOC2007/images/008686.jpg -./VOC/test/VOCdevkit/VOC2007/images/008689.jpg -./VOC/test/VOCdevkit/VOC2007/images/008693.jpg -./VOC/test/VOCdevkit/VOC2007/images/008694.jpg -./VOC/test/VOCdevkit/VOC2007/images/008696.jpg -./VOC/test/VOCdevkit/VOC2007/images/008697.jpg -./VOC/test/VOCdevkit/VOC2007/images/008700.jpg -./VOC/test/VOCdevkit/VOC2007/images/008703.jpg -./VOC/test/VOCdevkit/VOC2007/images/008704.jpg -./VOC/test/VOCdevkit/VOC2007/images/008705.jpg -./VOC/test/VOCdevkit/VOC2007/images/008707.jpg -./VOC/test/VOCdevkit/VOC2007/images/008708.jpg -./VOC/test/VOCdevkit/VOC2007/images/008711.jpg -./VOC/test/VOCdevkit/VOC2007/images/008712.jpg -./VOC/test/VOCdevkit/VOC2007/images/008714.jpg -./VOC/test/VOCdevkit/VOC2007/images/008715.jpg -./VOC/test/VOCdevkit/VOC2007/images/008719.jpg -./VOC/test/VOCdevkit/VOC2007/images/008721.jpg -./VOC/test/VOCdevkit/VOC2007/images/008724.jpg -./VOC/test/VOCdevkit/VOC2007/images/008726.jpg -./VOC/test/VOCdevkit/VOC2007/images/008729.jpg -./VOC/test/VOCdevkit/VOC2007/images/008734.jpg -./VOC/test/VOCdevkit/VOC2007/images/008735.jpg -./VOC/test/VOCdevkit/VOC2007/images/008736.jpg -./VOC/test/VOCdevkit/VOC2007/images/008737.jpg -./VOC/test/VOCdevkit/VOC2007/images/008740.jpg -./VOC/test/VOCdevkit/VOC2007/images/008743.jpg -./VOC/test/VOCdevkit/VOC2007/images/008745.jpg -./VOC/test/VOCdevkit/VOC2007/images/008746.jpg -./VOC/test/VOCdevkit/VOC2007/images/008751.jpg -./VOC/test/VOCdevkit/VOC2007/images/008754.jpg -./VOC/test/VOCdevkit/VOC2007/images/008758.jpg -./VOC/test/VOCdevkit/VOC2007/images/008761.jpg -./VOC/test/VOCdevkit/VOC2007/images/008762.jpg -./VOC/test/VOCdevkit/VOC2007/images/008763.jpg -./VOC/test/VOCdevkit/VOC2007/images/008765.jpg -./VOC/test/VOCdevkit/VOC2007/images/008767.jpg -./VOC/test/VOCdevkit/VOC2007/images/008774.jpg -./VOC/test/VOCdevkit/VOC2007/images/008777.jpg -./VOC/test/VOCdevkit/VOC2007/images/008778.jpg -./VOC/test/VOCdevkit/VOC2007/images/008779.jpg -./VOC/test/VOCdevkit/VOC2007/images/008780.jpg -./VOC/test/VOCdevkit/VOC2007/images/008781.jpg -./VOC/test/VOCdevkit/VOC2007/images/008782.jpg -./VOC/test/VOCdevkit/VOC2007/images/008785.jpg -./VOC/test/VOCdevkit/VOC2007/images/008786.jpg -./VOC/test/VOCdevkit/VOC2007/images/008787.jpg -./VOC/test/VOCdevkit/VOC2007/images/008788.jpg -./VOC/test/VOCdevkit/VOC2007/images/008789.jpg -./VOC/test/VOCdevkit/VOC2007/images/008791.jpg -./VOC/test/VOCdevkit/VOC2007/images/008792.jpg -./VOC/test/VOCdevkit/VOC2007/images/008795.jpg -./VOC/test/VOCdevkit/VOC2007/images/008797.jpg -./VOC/test/VOCdevkit/VOC2007/images/008798.jpg -./VOC/test/VOCdevkit/VOC2007/images/008800.jpg -./VOC/test/VOCdevkit/VOC2007/images/008802.jpg -./VOC/test/VOCdevkit/VOC2007/images/008803.jpg -./VOC/test/VOCdevkit/VOC2007/images/008804.jpg -./VOC/test/VOCdevkit/VOC2007/images/008807.jpg -./VOC/test/VOCdevkit/VOC2007/images/008808.jpg -./VOC/test/VOCdevkit/VOC2007/images/008812.jpg -./VOC/test/VOCdevkit/VOC2007/images/008816.jpg -./VOC/test/VOCdevkit/VOC2007/images/008818.jpg -./VOC/test/VOCdevkit/VOC2007/images/008820.jpg -./VOC/test/VOCdevkit/VOC2007/images/008821.jpg -./VOC/test/VOCdevkit/VOC2007/images/008824.jpg -./VOC/test/VOCdevkit/VOC2007/images/008825.jpg -./VOC/test/VOCdevkit/VOC2007/images/008827.jpg -./VOC/test/VOCdevkit/VOC2007/images/008828.jpg -./VOC/test/VOCdevkit/VOC2007/images/008829.jpg -./VOC/test/VOCdevkit/VOC2007/images/008830.jpg -./VOC/test/VOCdevkit/VOC2007/images/008832.jpg -./VOC/test/VOCdevkit/VOC2007/images/008834.jpg -./VOC/test/VOCdevkit/VOC2007/images/008839.jpg -./VOC/test/VOCdevkit/VOC2007/images/008842.jpg -./VOC/test/VOCdevkit/VOC2007/images/008844.jpg -./VOC/test/VOCdevkit/VOC2007/images/008845.jpg -./VOC/test/VOCdevkit/VOC2007/images/008846.jpg -./VOC/test/VOCdevkit/VOC2007/images/008850.jpg -./VOC/test/VOCdevkit/VOC2007/images/008851.jpg -./VOC/test/VOCdevkit/VOC2007/images/008852.jpg -./VOC/test/VOCdevkit/VOC2007/images/008853.jpg -./VOC/test/VOCdevkit/VOC2007/images/008855.jpg -./VOC/test/VOCdevkit/VOC2007/images/008857.jpg -./VOC/test/VOCdevkit/VOC2007/images/008860.jpg -./VOC/test/VOCdevkit/VOC2007/images/008861.jpg -./VOC/test/VOCdevkit/VOC2007/images/008863.jpg -./VOC/test/VOCdevkit/VOC2007/images/008864.jpg -./VOC/test/VOCdevkit/VOC2007/images/008866.jpg -./VOC/test/VOCdevkit/VOC2007/images/008868.jpg -./VOC/test/VOCdevkit/VOC2007/images/008869.jpg -./VOC/test/VOCdevkit/VOC2007/images/008870.jpg -./VOC/test/VOCdevkit/VOC2007/images/008875.jpg -./VOC/test/VOCdevkit/VOC2007/images/008877.jpg -./VOC/test/VOCdevkit/VOC2007/images/008881.jpg -./VOC/test/VOCdevkit/VOC2007/images/008882.jpg -./VOC/test/VOCdevkit/VOC2007/images/008887.jpg -./VOC/test/VOCdevkit/VOC2007/images/008889.jpg -./VOC/test/VOCdevkit/VOC2007/images/008893.jpg -./VOC/test/VOCdevkit/VOC2007/images/008894.jpg -./VOC/test/VOCdevkit/VOC2007/images/008895.jpg -./VOC/test/VOCdevkit/VOC2007/images/008896.jpg -./VOC/test/VOCdevkit/VOC2007/images/008897.jpg -./VOC/test/VOCdevkit/VOC2007/images/008898.jpg -./VOC/test/VOCdevkit/VOC2007/images/008899.jpg -./VOC/test/VOCdevkit/VOC2007/images/008901.jpg -./VOC/test/VOCdevkit/VOC2007/images/008902.jpg -./VOC/test/VOCdevkit/VOC2007/images/008903.jpg -./VOC/test/VOCdevkit/VOC2007/images/008904.jpg -./VOC/test/VOCdevkit/VOC2007/images/008906.jpg -./VOC/test/VOCdevkit/VOC2007/images/008907.jpg -./VOC/test/VOCdevkit/VOC2007/images/008908.jpg -./VOC/test/VOCdevkit/VOC2007/images/008910.jpg -./VOC/test/VOCdevkit/VOC2007/images/008912.jpg -./VOC/test/VOCdevkit/VOC2007/images/008915.jpg -./VOC/test/VOCdevkit/VOC2007/images/008916.jpg -./VOC/test/VOCdevkit/VOC2007/images/008918.jpg -./VOC/test/VOCdevkit/VOC2007/images/008922.jpg -./VOC/test/VOCdevkit/VOC2007/images/008924.jpg -./VOC/test/VOCdevkit/VOC2007/images/008925.jpg -./VOC/test/VOCdevkit/VOC2007/images/008928.jpg -./VOC/test/VOCdevkit/VOC2007/images/008934.jpg -./VOC/test/VOCdevkit/VOC2007/images/008935.jpg -./VOC/test/VOCdevkit/VOC2007/images/008937.jpg -./VOC/test/VOCdevkit/VOC2007/images/008938.jpg -./VOC/test/VOCdevkit/VOC2007/images/008941.jpg -./VOC/test/VOCdevkit/VOC2007/images/008945.jpg -./VOC/test/VOCdevkit/VOC2007/images/008946.jpg -./VOC/test/VOCdevkit/VOC2007/images/008947.jpg -./VOC/test/VOCdevkit/VOC2007/images/008949.jpg -./VOC/test/VOCdevkit/VOC2007/images/008950.jpg -./VOC/test/VOCdevkit/VOC2007/images/008952.jpg -./VOC/test/VOCdevkit/VOC2007/images/008954.jpg -./VOC/test/VOCdevkit/VOC2007/images/008956.jpg -./VOC/test/VOCdevkit/VOC2007/images/008957.jpg -./VOC/test/VOCdevkit/VOC2007/images/008959.jpg -./VOC/test/VOCdevkit/VOC2007/images/008963.jpg -./VOC/test/VOCdevkit/VOC2007/images/008964.jpg -./VOC/test/VOCdevkit/VOC2007/images/008972.jpg -./VOC/test/VOCdevkit/VOC2007/images/008974.jpg -./VOC/test/VOCdevkit/VOC2007/images/008977.jpg -./VOC/test/VOCdevkit/VOC2007/images/008981.jpg -./VOC/test/VOCdevkit/VOC2007/images/008984.jpg -./VOC/test/VOCdevkit/VOC2007/images/008986.jpg -./VOC/test/VOCdevkit/VOC2007/images/008990.jpg -./VOC/test/VOCdevkit/VOC2007/images/008991.jpg -./VOC/test/VOCdevkit/VOC2007/images/008992.jpg -./VOC/test/VOCdevkit/VOC2007/images/008993.jpg -./VOC/test/VOCdevkit/VOC2007/images/008994.jpg -./VOC/test/VOCdevkit/VOC2007/images/008996.jpg -./VOC/test/VOCdevkit/VOC2007/images/008998.jpg -./VOC/test/VOCdevkit/VOC2007/images/009001.jpg -./VOC/test/VOCdevkit/VOC2007/images/009003.jpg -./VOC/test/VOCdevkit/VOC2007/images/009008.jpg -./VOC/test/VOCdevkit/VOC2007/images/009009.jpg -./VOC/test/VOCdevkit/VOC2007/images/009010.jpg -./VOC/test/VOCdevkit/VOC2007/images/009011.jpg -./VOC/test/VOCdevkit/VOC2007/images/009012.jpg -./VOC/test/VOCdevkit/VOC2007/images/009013.jpg -./VOC/test/VOCdevkit/VOC2007/images/009014.jpg -./VOC/test/VOCdevkit/VOC2007/images/009017.jpg -./VOC/test/VOCdevkit/VOC2007/images/009021.jpg -./VOC/test/VOCdevkit/VOC2007/images/009023.jpg -./VOC/test/VOCdevkit/VOC2007/images/009025.jpg -./VOC/test/VOCdevkit/VOC2007/images/009026.jpg -./VOC/test/VOCdevkit/VOC2007/images/009028.jpg -./VOC/test/VOCdevkit/VOC2007/images/009030.jpg -./VOC/test/VOCdevkit/VOC2007/images/009031.jpg -./VOC/test/VOCdevkit/VOC2007/images/009033.jpg -./VOC/test/VOCdevkit/VOC2007/images/009038.jpg -./VOC/test/VOCdevkit/VOC2007/images/009040.jpg -./VOC/test/VOCdevkit/VOC2007/images/009041.jpg -./VOC/test/VOCdevkit/VOC2007/images/009043.jpg -./VOC/test/VOCdevkit/VOC2007/images/009044.jpg -./VOC/test/VOCdevkit/VOC2007/images/009046.jpg -./VOC/test/VOCdevkit/VOC2007/images/009047.jpg -./VOC/test/VOCdevkit/VOC2007/images/009050.jpg -./VOC/test/VOCdevkit/VOC2007/images/009052.jpg -./VOC/test/VOCdevkit/VOC2007/images/009054.jpg -./VOC/test/VOCdevkit/VOC2007/images/009055.jpg -./VOC/test/VOCdevkit/VOC2007/images/009056.jpg -./VOC/test/VOCdevkit/VOC2007/images/009057.jpg -./VOC/test/VOCdevkit/VOC2007/images/009061.jpg -./VOC/test/VOCdevkit/VOC2007/images/009062.jpg -./VOC/test/VOCdevkit/VOC2007/images/009065.jpg -./VOC/test/VOCdevkit/VOC2007/images/009067.jpg -./VOC/test/VOCdevkit/VOC2007/images/009069.jpg -./VOC/test/VOCdevkit/VOC2007/images/009070.jpg -./VOC/test/VOCdevkit/VOC2007/images/009071.jpg -./VOC/test/VOCdevkit/VOC2007/images/009074.jpg -./VOC/test/VOCdevkit/VOC2007/images/009075.jpg -./VOC/test/VOCdevkit/VOC2007/images/009076.jpg -./VOC/test/VOCdevkit/VOC2007/images/009077.jpg -./VOC/test/VOCdevkit/VOC2007/images/009081.jpg -./VOC/test/VOCdevkit/VOC2007/images/009082.jpg -./VOC/test/VOCdevkit/VOC2007/images/009083.jpg -./VOC/test/VOCdevkit/VOC2007/images/009084.jpg -./VOC/test/VOCdevkit/VOC2007/images/009088.jpg -./VOC/test/VOCdevkit/VOC2007/images/009090.jpg -./VOC/test/VOCdevkit/VOC2007/images/009092.jpg -./VOC/test/VOCdevkit/VOC2007/images/009093.jpg -./VOC/test/VOCdevkit/VOC2007/images/009095.jpg -./VOC/test/VOCdevkit/VOC2007/images/009096.jpg -./VOC/test/VOCdevkit/VOC2007/images/009097.jpg -./VOC/test/VOCdevkit/VOC2007/images/009101.jpg -./VOC/test/VOCdevkit/VOC2007/images/009102.jpg -./VOC/test/VOCdevkit/VOC2007/images/009103.jpg -./VOC/test/VOCdevkit/VOC2007/images/009104.jpg -./VOC/test/VOCdevkit/VOC2007/images/009107.jpg -./VOC/test/VOCdevkit/VOC2007/images/009109.jpg -./VOC/test/VOCdevkit/VOC2007/images/009110.jpg -./VOC/test/VOCdevkit/VOC2007/images/009111.jpg -./VOC/test/VOCdevkit/VOC2007/images/009115.jpg -./VOC/test/VOCdevkit/VOC2007/images/009118.jpg -./VOC/test/VOCdevkit/VOC2007/images/009119.jpg -./VOC/test/VOCdevkit/VOC2007/images/009120.jpg -./VOC/test/VOCdevkit/VOC2007/images/009122.jpg -./VOC/test/VOCdevkit/VOC2007/images/009124.jpg -./VOC/test/VOCdevkit/VOC2007/images/009125.jpg -./VOC/test/VOCdevkit/VOC2007/images/009127.jpg -./VOC/test/VOCdevkit/VOC2007/images/009130.jpg -./VOC/test/VOCdevkit/VOC2007/images/009132.jpg -./VOC/test/VOCdevkit/VOC2007/images/009134.jpg -./VOC/test/VOCdevkit/VOC2007/images/009135.jpg -./VOC/test/VOCdevkit/VOC2007/images/009137.jpg -./VOC/test/VOCdevkit/VOC2007/images/009139.jpg -./VOC/test/VOCdevkit/VOC2007/images/009140.jpg -./VOC/test/VOCdevkit/VOC2007/images/009142.jpg -./VOC/test/VOCdevkit/VOC2007/images/009143.jpg -./VOC/test/VOCdevkit/VOC2007/images/009145.jpg -./VOC/test/VOCdevkit/VOC2007/images/009146.jpg -./VOC/test/VOCdevkit/VOC2007/images/009149.jpg -./VOC/test/VOCdevkit/VOC2007/images/009152.jpg -./VOC/test/VOCdevkit/VOC2007/images/009154.jpg -./VOC/test/VOCdevkit/VOC2007/images/009156.jpg -./VOC/test/VOCdevkit/VOC2007/images/009158.jpg -./VOC/test/VOCdevkit/VOC2007/images/009164.jpg -./VOC/test/VOCdevkit/VOC2007/images/009165.jpg -./VOC/test/VOCdevkit/VOC2007/images/009167.jpg -./VOC/test/VOCdevkit/VOC2007/images/009169.jpg -./VOC/test/VOCdevkit/VOC2007/images/009170.jpg -./VOC/test/VOCdevkit/VOC2007/images/009171.jpg -./VOC/test/VOCdevkit/VOC2007/images/009172.jpg -./VOC/test/VOCdevkit/VOC2007/images/009176.jpg -./VOC/test/VOCdevkit/VOC2007/images/009182.jpg -./VOC/test/VOCdevkit/VOC2007/images/009183.jpg -./VOC/test/VOCdevkit/VOC2007/images/009188.jpg -./VOC/test/VOCdevkit/VOC2007/images/009190.jpg -./VOC/test/VOCdevkit/VOC2007/images/009198.jpg -./VOC/test/VOCdevkit/VOC2007/images/009199.jpg -./VOC/test/VOCdevkit/VOC2007/images/009201.jpg -./VOC/test/VOCdevkit/VOC2007/images/009203.jpg -./VOC/test/VOCdevkit/VOC2007/images/009204.jpg -./VOC/test/VOCdevkit/VOC2007/images/009206.jpg -./VOC/test/VOCdevkit/VOC2007/images/009207.jpg -./VOC/test/VOCdevkit/VOC2007/images/009210.jpg -./VOC/test/VOCdevkit/VOC2007/images/009211.jpg -./VOC/test/VOCdevkit/VOC2007/images/009216.jpg -./VOC/test/VOCdevkit/VOC2007/images/009217.jpg -./VOC/test/VOCdevkit/VOC2007/images/009219.jpg -./VOC/test/VOCdevkit/VOC2007/images/009220.jpg -./VOC/test/VOCdevkit/VOC2007/images/009222.jpg -./VOC/test/VOCdevkit/VOC2007/images/009223.jpg -./VOC/test/VOCdevkit/VOC2007/images/009225.jpg -./VOC/test/VOCdevkit/VOC2007/images/009226.jpg -./VOC/test/VOCdevkit/VOC2007/images/009228.jpg -./VOC/test/VOCdevkit/VOC2007/images/009229.jpg -./VOC/test/VOCdevkit/VOC2007/images/009231.jpg -./VOC/test/VOCdevkit/VOC2007/images/009232.jpg -./VOC/test/VOCdevkit/VOC2007/images/009233.jpg -./VOC/test/VOCdevkit/VOC2007/images/009234.jpg -./VOC/test/VOCdevkit/VOC2007/images/009235.jpg -./VOC/test/VOCdevkit/VOC2007/images/009237.jpg -./VOC/test/VOCdevkit/VOC2007/images/009240.jpg -./VOC/test/VOCdevkit/VOC2007/images/009241.jpg -./VOC/test/VOCdevkit/VOC2007/images/009243.jpg -./VOC/test/VOCdevkit/VOC2007/images/009248.jpg -./VOC/test/VOCdevkit/VOC2007/images/009253.jpg -./VOC/test/VOCdevkit/VOC2007/images/009256.jpg -./VOC/test/VOCdevkit/VOC2007/images/009257.jpg -./VOC/test/VOCdevkit/VOC2007/images/009258.jpg -./VOC/test/VOCdevkit/VOC2007/images/009260.jpg -./VOC/test/VOCdevkit/VOC2007/images/009261.jpg -./VOC/test/VOCdevkit/VOC2007/images/009262.jpg -./VOC/test/VOCdevkit/VOC2007/images/009263.jpg -./VOC/test/VOCdevkit/VOC2007/images/009264.jpg -./VOC/test/VOCdevkit/VOC2007/images/009265.jpg -./VOC/test/VOCdevkit/VOC2007/images/009266.jpg -./VOC/test/VOCdevkit/VOC2007/images/009267.jpg -./VOC/test/VOCdevkit/VOC2007/images/009274.jpg -./VOC/test/VOCdevkit/VOC2007/images/009275.jpg -./VOC/test/VOCdevkit/VOC2007/images/009276.jpg -./VOC/test/VOCdevkit/VOC2007/images/009277.jpg -./VOC/test/VOCdevkit/VOC2007/images/009280.jpg -./VOC/test/VOCdevkit/VOC2007/images/009284.jpg -./VOC/test/VOCdevkit/VOC2007/images/009292.jpg -./VOC/test/VOCdevkit/VOC2007/images/009293.jpg -./VOC/test/VOCdevkit/VOC2007/images/009294.jpg -./VOC/test/VOCdevkit/VOC2007/images/009297.jpg -./VOC/test/VOCdevkit/VOC2007/images/009298.jpg -./VOC/test/VOCdevkit/VOC2007/images/009300.jpg -./VOC/test/VOCdevkit/VOC2007/images/009301.jpg -./VOC/test/VOCdevkit/VOC2007/images/009302.jpg -./VOC/test/VOCdevkit/VOC2007/images/009304.jpg -./VOC/test/VOCdevkit/VOC2007/images/009305.jpg -./VOC/test/VOCdevkit/VOC2007/images/009310.jpg -./VOC/test/VOCdevkit/VOC2007/images/009311.jpg -./VOC/test/VOCdevkit/VOC2007/images/009313.jpg -./VOC/test/VOCdevkit/VOC2007/images/009314.jpg -./VOC/test/VOCdevkit/VOC2007/images/009317.jpg -./VOC/test/VOCdevkit/VOC2007/images/009319.jpg -./VOC/test/VOCdevkit/VOC2007/images/009320.jpg -./VOC/test/VOCdevkit/VOC2007/images/009321.jpg -./VOC/test/VOCdevkit/VOC2007/images/009322.jpg -./VOC/test/VOCdevkit/VOC2007/images/009328.jpg -./VOC/test/VOCdevkit/VOC2007/images/009329.jpg -./VOC/test/VOCdevkit/VOC2007/images/009332.jpg -./VOC/test/VOCdevkit/VOC2007/images/009335.jpg -./VOC/test/VOCdevkit/VOC2007/images/009338.jpg -./VOC/test/VOCdevkit/VOC2007/images/009340.jpg -./VOC/test/VOCdevkit/VOC2007/images/009341.jpg -./VOC/test/VOCdevkit/VOC2007/images/009344.jpg -./VOC/test/VOCdevkit/VOC2007/images/009345.jpg -./VOC/test/VOCdevkit/VOC2007/images/009346.jpg -./VOC/test/VOCdevkit/VOC2007/images/009352.jpg -./VOC/test/VOCdevkit/VOC2007/images/009353.jpg -./VOC/test/VOCdevkit/VOC2007/images/009355.jpg -./VOC/test/VOCdevkit/VOC2007/images/009356.jpg -./VOC/test/VOCdevkit/VOC2007/images/009357.jpg -./VOC/test/VOCdevkit/VOC2007/images/009360.jpg -./VOC/test/VOCdevkit/VOC2007/images/009361.jpg -./VOC/test/VOCdevkit/VOC2007/images/009363.jpg -./VOC/test/VOCdevkit/VOC2007/images/009364.jpg -./VOC/test/VOCdevkit/VOC2007/images/009366.jpg -./VOC/test/VOCdevkit/VOC2007/images/009367.jpg -./VOC/test/VOCdevkit/VOC2007/images/009369.jpg -./VOC/test/VOCdevkit/VOC2007/images/009370.jpg -./VOC/test/VOCdevkit/VOC2007/images/009372.jpg -./VOC/test/VOCdevkit/VOC2007/images/009376.jpg -./VOC/test/VOCdevkit/VOC2007/images/009379.jpg -./VOC/test/VOCdevkit/VOC2007/images/009380.jpg -./VOC/test/VOCdevkit/VOC2007/images/009381.jpg -./VOC/test/VOCdevkit/VOC2007/images/009383.jpg -./VOC/test/VOCdevkit/VOC2007/images/009384.jpg -./VOC/test/VOCdevkit/VOC2007/images/009385.jpg -./VOC/test/VOCdevkit/VOC2007/images/009387.jpg -./VOC/test/VOCdevkit/VOC2007/images/009390.jpg -./VOC/test/VOCdevkit/VOC2007/images/009391.jpg -./VOC/test/VOCdevkit/VOC2007/images/009395.jpg -./VOC/test/VOCdevkit/VOC2007/images/009396.jpg -./VOC/test/VOCdevkit/VOC2007/images/009397.jpg -./VOC/test/VOCdevkit/VOC2007/images/009399.jpg -./VOC/test/VOCdevkit/VOC2007/images/009400.jpg -./VOC/test/VOCdevkit/VOC2007/images/009402.jpg -./VOC/test/VOCdevkit/VOC2007/images/009403.jpg -./VOC/test/VOCdevkit/VOC2007/images/009404.jpg -./VOC/test/VOCdevkit/VOC2007/images/009415.jpg -./VOC/test/VOCdevkit/VOC2007/images/009416.jpg -./VOC/test/VOCdevkit/VOC2007/images/009423.jpg -./VOC/test/VOCdevkit/VOC2007/images/009425.jpg -./VOC/test/VOCdevkit/VOC2007/images/009426.jpg -./VOC/test/VOCdevkit/VOC2007/images/009427.jpg -./VOC/test/VOCdevkit/VOC2007/images/009428.jpg -./VOC/test/VOCdevkit/VOC2007/images/009430.jpg -./VOC/test/VOCdevkit/VOC2007/images/009431.jpg -./VOC/test/VOCdevkit/VOC2007/images/009435.jpg -./VOC/test/VOCdevkit/VOC2007/images/009436.jpg -./VOC/test/VOCdevkit/VOC2007/images/009441.jpg -./VOC/test/VOCdevkit/VOC2007/images/009442.jpg -./VOC/test/VOCdevkit/VOC2007/images/009444.jpg -./VOC/test/VOCdevkit/VOC2007/images/009447.jpg -./VOC/test/VOCdevkit/VOC2007/images/009449.jpg -./VOC/test/VOCdevkit/VOC2007/images/009450.jpg -./VOC/test/VOCdevkit/VOC2007/images/009451.jpg -./VOC/test/VOCdevkit/VOC2007/images/009452.jpg -./VOC/test/VOCdevkit/VOC2007/images/009453.jpg -./VOC/test/VOCdevkit/VOC2007/images/009462.jpg -./VOC/test/VOCdevkit/VOC2007/images/009467.jpg -./VOC/test/VOCdevkit/VOC2007/images/009471.jpg -./VOC/test/VOCdevkit/VOC2007/images/009473.jpg -./VOC/test/VOCdevkit/VOC2007/images/009474.jpg -./VOC/test/VOCdevkit/VOC2007/images/009475.jpg -./VOC/test/VOCdevkit/VOC2007/images/009478.jpg -./VOC/test/VOCdevkit/VOC2007/images/009482.jpg -./VOC/test/VOCdevkit/VOC2007/images/009483.jpg -./VOC/test/VOCdevkit/VOC2007/images/009485.jpg -./VOC/test/VOCdevkit/VOC2007/images/009486.jpg -./VOC/test/VOCdevkit/VOC2007/images/009487.jpg -./VOC/test/VOCdevkit/VOC2007/images/009489.jpg -./VOC/test/VOCdevkit/VOC2007/images/009492.jpg -./VOC/test/VOCdevkit/VOC2007/images/009493.jpg -./VOC/test/VOCdevkit/VOC2007/images/009495.jpg -./VOC/test/VOCdevkit/VOC2007/images/009498.jpg -./VOC/test/VOCdevkit/VOC2007/images/009501.jpg -./VOC/test/VOCdevkit/VOC2007/images/009503.jpg -./VOC/test/VOCdevkit/VOC2007/images/009505.jpg -./VOC/test/VOCdevkit/VOC2007/images/009506.jpg -./VOC/test/VOCdevkit/VOC2007/images/009509.jpg -./VOC/test/VOCdevkit/VOC2007/images/009510.jpg -./VOC/test/VOCdevkit/VOC2007/images/009511.jpg -./VOC/test/VOCdevkit/VOC2007/images/009513.jpg -./VOC/test/VOCdevkit/VOC2007/images/009514.jpg -./VOC/test/VOCdevkit/VOC2007/images/009521.jpg -./VOC/test/VOCdevkit/VOC2007/images/009522.jpg -./VOC/test/VOCdevkit/VOC2007/images/009525.jpg -./VOC/test/VOCdevkit/VOC2007/images/009529.jpg -./VOC/test/VOCdevkit/VOC2007/images/009530.jpg -./VOC/test/VOCdevkit/VOC2007/images/009534.jpg -./VOC/test/VOCdevkit/VOC2007/images/009535.jpg -./VOC/test/VOCdevkit/VOC2007/images/009536.jpg -./VOC/test/VOCdevkit/VOC2007/images/009538.jpg -./VOC/test/VOCdevkit/VOC2007/images/009539.jpg -./VOC/test/VOCdevkit/VOC2007/images/009544.jpg -./VOC/test/VOCdevkit/VOC2007/images/009547.jpg -./VOC/test/VOCdevkit/VOC2007/images/009548.jpg -./VOC/test/VOCdevkit/VOC2007/images/009552.jpg -./VOC/test/VOCdevkit/VOC2007/images/009553.jpg -./VOC/test/VOCdevkit/VOC2007/images/009554.jpg -./VOC/test/VOCdevkit/VOC2007/images/009555.jpg -./VOC/test/VOCdevkit/VOC2007/images/009556.jpg -./VOC/test/VOCdevkit/VOC2007/images/009559.jpg -./VOC/test/VOCdevkit/VOC2007/images/009561.jpg -./VOC/test/VOCdevkit/VOC2007/images/009563.jpg -./VOC/test/VOCdevkit/VOC2007/images/009564.jpg -./VOC/test/VOCdevkit/VOC2007/images/009569.jpg -./VOC/test/VOCdevkit/VOC2007/images/009570.jpg -./VOC/test/VOCdevkit/VOC2007/images/009572.jpg -./VOC/test/VOCdevkit/VOC2007/images/009574.jpg -./VOC/test/VOCdevkit/VOC2007/images/009575.jpg -./VOC/test/VOCdevkit/VOC2007/images/009578.jpg -./VOC/test/VOCdevkit/VOC2007/images/009581.jpg -./VOC/test/VOCdevkit/VOC2007/images/009582.jpg -./VOC/test/VOCdevkit/VOC2007/images/009583.jpg -./VOC/test/VOCdevkit/VOC2007/images/009589.jpg -./VOC/test/VOCdevkit/VOC2007/images/009590.jpg -./VOC/test/VOCdevkit/VOC2007/images/009592.jpg -./VOC/test/VOCdevkit/VOC2007/images/009593.jpg -./VOC/test/VOCdevkit/VOC2007/images/009594.jpg -./VOC/test/VOCdevkit/VOC2007/images/009595.jpg -./VOC/test/VOCdevkit/VOC2007/images/009599.jpg -./VOC/test/VOCdevkit/VOC2007/images/009601.jpg -./VOC/test/VOCdevkit/VOC2007/images/009602.jpg -./VOC/test/VOCdevkit/VOC2007/images/009604.jpg -./VOC/test/VOCdevkit/VOC2007/images/009606.jpg -./VOC/test/VOCdevkit/VOC2007/images/009607.jpg -./VOC/test/VOCdevkit/VOC2007/images/009608.jpg -./VOC/test/VOCdevkit/VOC2007/images/009610.jpg -./VOC/test/VOCdevkit/VOC2007/images/009612.jpg -./VOC/test/VOCdevkit/VOC2007/images/009616.jpg -./VOC/test/VOCdevkit/VOC2007/images/009622.jpg -./VOC/test/VOCdevkit/VOC2007/images/009624.jpg -./VOC/test/VOCdevkit/VOC2007/images/009625.jpg -./VOC/test/VOCdevkit/VOC2007/images/009626.jpg -./VOC/test/VOCdevkit/VOC2007/images/009628.jpg -./VOC/test/VOCdevkit/VOC2007/images/009630.jpg -./VOC/test/VOCdevkit/VOC2007/images/009631.jpg -./VOC/test/VOCdevkit/VOC2007/images/009632.jpg -./VOC/test/VOCdevkit/VOC2007/images/009633.jpg -./VOC/test/VOCdevkit/VOC2007/images/009635.jpg -./VOC/test/VOCdevkit/VOC2007/images/009639.jpg -./VOC/test/VOCdevkit/VOC2007/images/009640.jpg -./VOC/test/VOCdevkit/VOC2007/images/009642.jpg -./VOC/test/VOCdevkit/VOC2007/images/009643.jpg -./VOC/test/VOCdevkit/VOC2007/images/009645.jpg -./VOC/test/VOCdevkit/VOC2007/images/009646.jpg -./VOC/test/VOCdevkit/VOC2007/images/009648.jpg -./VOC/test/VOCdevkit/VOC2007/images/009651.jpg -./VOC/test/VOCdevkit/VOC2007/images/009652.jpg -./VOC/test/VOCdevkit/VOC2007/images/009653.jpg -./VOC/test/VOCdevkit/VOC2007/images/009657.jpg -./VOC/test/VOCdevkit/VOC2007/images/009660.jpg -./VOC/test/VOCdevkit/VOC2007/images/009661.jpg -./VOC/test/VOCdevkit/VOC2007/images/009662.jpg -./VOC/test/VOCdevkit/VOC2007/images/009663.jpg -./VOC/test/VOCdevkit/VOC2007/images/009665.jpg -./VOC/test/VOCdevkit/VOC2007/images/009669.jpg -./VOC/test/VOCdevkit/VOC2007/images/009672.jpg -./VOC/test/VOCdevkit/VOC2007/images/009673.jpg -./VOC/test/VOCdevkit/VOC2007/images/009674.jpg -./VOC/test/VOCdevkit/VOC2007/images/009675.jpg -./VOC/test/VOCdevkit/VOC2007/images/009677.jpg -./VOC/test/VOCdevkit/VOC2007/images/009680.jpg -./VOC/test/VOCdevkit/VOC2007/images/009682.jpg -./VOC/test/VOCdevkit/VOC2007/images/009683.jpg -./VOC/test/VOCdevkit/VOC2007/images/009688.jpg -./VOC/test/VOCdevkit/VOC2007/images/009689.jpg -./VOC/test/VOCdevkit/VOC2007/images/009690.jpg -./VOC/test/VOCdevkit/VOC2007/images/009694.jpg -./VOC/test/VOCdevkit/VOC2007/images/009696.jpg -./VOC/test/VOCdevkit/VOC2007/images/009697.jpg -./VOC/test/VOCdevkit/VOC2007/images/009701.jpg -./VOC/test/VOCdevkit/VOC2007/images/009704.jpg -./VOC/test/VOCdevkit/VOC2007/images/009705.jpg -./VOC/test/VOCdevkit/VOC2007/images/009708.jpg -./VOC/test/VOCdevkit/VOC2007/images/009714.jpg -./VOC/test/VOCdevkit/VOC2007/images/009715.jpg -./VOC/test/VOCdevkit/VOC2007/images/009716.jpg -./VOC/test/VOCdevkit/VOC2007/images/009720.jpg -./VOC/test/VOCdevkit/VOC2007/images/009722.jpg -./VOC/test/VOCdevkit/VOC2007/images/009723.jpg -./VOC/test/VOCdevkit/VOC2007/images/009725.jpg -./VOC/test/VOCdevkit/VOC2007/images/009727.jpg -./VOC/test/VOCdevkit/VOC2007/images/009728.jpg -./VOC/test/VOCdevkit/VOC2007/images/009730.jpg -./VOC/test/VOCdevkit/VOC2007/images/009731.jpg -./VOC/test/VOCdevkit/VOC2007/images/009736.jpg -./VOC/test/VOCdevkit/VOC2007/images/009739.jpg -./VOC/test/VOCdevkit/VOC2007/images/009740.jpg -./VOC/test/VOCdevkit/VOC2007/images/009741.jpg -./VOC/test/VOCdevkit/VOC2007/images/009742.jpg -./VOC/test/VOCdevkit/VOC2007/images/009744.jpg -./VOC/test/VOCdevkit/VOC2007/images/009750.jpg -./VOC/test/VOCdevkit/VOC2007/images/009751.jpg -./VOC/test/VOCdevkit/VOC2007/images/009752.jpg -./VOC/test/VOCdevkit/VOC2007/images/009753.jpg -./VOC/test/VOCdevkit/VOC2007/images/009757.jpg -./VOC/test/VOCdevkit/VOC2007/images/009759.jpg -./VOC/test/VOCdevkit/VOC2007/images/009760.jpg -./VOC/test/VOCdevkit/VOC2007/images/009765.jpg -./VOC/test/VOCdevkit/VOC2007/images/009766.jpg -./VOC/test/VOCdevkit/VOC2007/images/009768.jpg -./VOC/test/VOCdevkit/VOC2007/images/009769.jpg -./VOC/test/VOCdevkit/VOC2007/images/009770.jpg -./VOC/test/VOCdevkit/VOC2007/images/009771.jpg -./VOC/test/VOCdevkit/VOC2007/images/009775.jpg -./VOC/test/VOCdevkit/VOC2007/images/009777.jpg -./VOC/test/VOCdevkit/VOC2007/images/009779.jpg -./VOC/test/VOCdevkit/VOC2007/images/009782.jpg -./VOC/test/VOCdevkit/VOC2007/images/009783.jpg -./VOC/test/VOCdevkit/VOC2007/images/009784.jpg -./VOC/test/VOCdevkit/VOC2007/images/009786.jpg -./VOC/test/VOCdevkit/VOC2007/images/009787.jpg -./VOC/test/VOCdevkit/VOC2007/images/009788.jpg -./VOC/test/VOCdevkit/VOC2007/images/009791.jpg -./VOC/test/VOCdevkit/VOC2007/images/009793.jpg -./VOC/test/VOCdevkit/VOC2007/images/009795.jpg -./VOC/test/VOCdevkit/VOC2007/images/009798.jpg -./VOC/test/VOCdevkit/VOC2007/images/009799.jpg -./VOC/test/VOCdevkit/VOC2007/images/009802.jpg -./VOC/test/VOCdevkit/VOC2007/images/009803.jpg -./VOC/test/VOCdevkit/VOC2007/images/009804.jpg -./VOC/test/VOCdevkit/VOC2007/images/009806.jpg -./VOC/test/VOCdevkit/VOC2007/images/009811.jpg -./VOC/test/VOCdevkit/VOC2007/images/009812.jpg -./VOC/test/VOCdevkit/VOC2007/images/009814.jpg -./VOC/test/VOCdevkit/VOC2007/images/009815.jpg -./VOC/test/VOCdevkit/VOC2007/images/009817.jpg -./VOC/test/VOCdevkit/VOC2007/images/009818.jpg -./VOC/test/VOCdevkit/VOC2007/images/009820.jpg -./VOC/test/VOCdevkit/VOC2007/images/009821.jpg -./VOC/test/VOCdevkit/VOC2007/images/009824.jpg -./VOC/test/VOCdevkit/VOC2007/images/009826.jpg -./VOC/test/VOCdevkit/VOC2007/images/009827.jpg -./VOC/test/VOCdevkit/VOC2007/images/009829.jpg -./VOC/test/VOCdevkit/VOC2007/images/009835.jpg -./VOC/test/VOCdevkit/VOC2007/images/009837.jpg -./VOC/test/VOCdevkit/VOC2007/images/009838.jpg -./VOC/test/VOCdevkit/VOC2007/images/009840.jpg -./VOC/test/VOCdevkit/VOC2007/images/009843.jpg -./VOC/test/VOCdevkit/VOC2007/images/009844.jpg -./VOC/test/VOCdevkit/VOC2007/images/009846.jpg -./VOC/test/VOCdevkit/VOC2007/images/009847.jpg -./VOC/test/VOCdevkit/VOC2007/images/009849.jpg -./VOC/test/VOCdevkit/VOC2007/images/009850.jpg -./VOC/test/VOCdevkit/VOC2007/images/009853.jpg -./VOC/test/VOCdevkit/VOC2007/images/009854.jpg -./VOC/test/VOCdevkit/VOC2007/images/009856.jpg -./VOC/test/VOCdevkit/VOC2007/images/009857.jpg -./VOC/test/VOCdevkit/VOC2007/images/009861.jpg -./VOC/test/VOCdevkit/VOC2007/images/009864.jpg -./VOC/test/VOCdevkit/VOC2007/images/009866.jpg -./VOC/test/VOCdevkit/VOC2007/images/009871.jpg -./VOC/test/VOCdevkit/VOC2007/images/009873.jpg -./VOC/test/VOCdevkit/VOC2007/images/009875.jpg -./VOC/test/VOCdevkit/VOC2007/images/009876.jpg -./VOC/test/VOCdevkit/VOC2007/images/009883.jpg -./VOC/test/VOCdevkit/VOC2007/images/009885.jpg -./VOC/test/VOCdevkit/VOC2007/images/009888.jpg -./VOC/test/VOCdevkit/VOC2007/images/009889.jpg -./VOC/test/VOCdevkit/VOC2007/images/009890.jpg -./VOC/test/VOCdevkit/VOC2007/images/009891.jpg -./VOC/test/VOCdevkit/VOC2007/images/009892.jpg -./VOC/test/VOCdevkit/VOC2007/images/009893.jpg -./VOC/test/VOCdevkit/VOC2007/images/009895.jpg -./VOC/test/VOCdevkit/VOC2007/images/009899.jpg -./VOC/test/VOCdevkit/VOC2007/images/009901.jpg -./VOC/test/VOCdevkit/VOC2007/images/009903.jpg -./VOC/test/VOCdevkit/VOC2007/images/009906.jpg -./VOC/test/VOCdevkit/VOC2007/images/009907.jpg -./VOC/test/VOCdevkit/VOC2007/images/009909.jpg -./VOC/test/VOCdevkit/VOC2007/images/009910.jpg -./VOC/test/VOCdevkit/VOC2007/images/009912.jpg -./VOC/test/VOCdevkit/VOC2007/images/009914.jpg -./VOC/test/VOCdevkit/VOC2007/images/009915.jpg -./VOC/test/VOCdevkit/VOC2007/images/009916.jpg -./VOC/test/VOCdevkit/VOC2007/images/009919.jpg -./VOC/test/VOCdevkit/VOC2007/images/009921.jpg -./VOC/test/VOCdevkit/VOC2007/images/009922.jpg -./VOC/test/VOCdevkit/VOC2007/images/009924.jpg -./VOC/test/VOCdevkit/VOC2007/images/009925.jpg -./VOC/test/VOCdevkit/VOC2007/images/009927.jpg -./VOC/test/VOCdevkit/VOC2007/images/009928.jpg -./VOC/test/VOCdevkit/VOC2007/images/009929.jpg -./VOC/test/VOCdevkit/VOC2007/images/009930.jpg -./VOC/test/VOCdevkit/VOC2007/images/009931.jpg -./VOC/test/VOCdevkit/VOC2007/images/009933.jpg -./VOC/test/VOCdevkit/VOC2007/images/009934.jpg -./VOC/test/VOCdevkit/VOC2007/images/009936.jpg -./VOC/test/VOCdevkit/VOC2007/images/009937.jpg -./VOC/test/VOCdevkit/VOC2007/images/009941.jpg -./VOC/test/VOCdevkit/VOC2007/images/009943.jpg -./VOC/test/VOCdevkit/VOC2007/images/009948.jpg -./VOC/test/VOCdevkit/VOC2007/images/009951.jpg -./VOC/test/VOCdevkit/VOC2007/images/009952.jpg -./VOC/test/VOCdevkit/VOC2007/images/009953.jpg -./VOC/test/VOCdevkit/VOC2007/images/009956.jpg -./VOC/test/VOCdevkit/VOC2007/images/009957.jpg -./VOC/test/VOCdevkit/VOC2007/images/009960.jpg -./VOC/test/VOCdevkit/VOC2007/images/009962.jpg -./VOC/test/VOCdevkit/VOC2007/images/009963.jpg diff --git a/cv/detection/yolov3/pytorch/get_num_devices.sh b/cv/detection/yolov3/pytorch/get_num_devices.sh deleted file mode 100644 index e28edae74..000000000 --- a/cv/detection/yolov3/pytorch/get_num_devices.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -devices=$CUDA_VISIBLE_DEVICES -if [ -n "$devices" ]; then - _devices=(${devices//,/ }) - num_devices=${#_devices[@]} -else - num_devices=2 - export CUDA_VISIBLE_DEVICES=0,1 - echo "Not found CUDA_VISIBLE_DEVICES, set nproc_per_node = ${num_devices}" -fi -export IX_NUM_CUDA_VISIBLE_DEVICES=${num_devices} \ No newline at end of file diff --git a/cv/detection/yolov3/pytorch/poetry.lock b/cv/detection/yolov3/pytorch/poetry.lock deleted file mode 100644 index 18bfa8073..000000000 --- a/cv/detection/yolov3/pytorch/poetry.lock +++ /dev/null @@ -1,1137 +0,0 @@ -[[package]] -name = "absl-py" -version = "0.12.0" -description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -six = "*" - -[[package]] -name = "cachetools" -version = "3.1.1" -description = "Extensible memoizing collections and decorators" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "certifi" -version = "2020.12.5" -description = "Python package for providing Mozilla's CA Bundle." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "chardet" -version = "4.0.0" -description = "Universal encoding detector for Python 2 and 3" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "cycler" -version = "0.10.0" -description = "Composable style cycles" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -six = "*" - -[[package]] -name = "dataclasses" -version = "0.8" -description = "A backport of the dataclasses module for Python 3.6" -category = "main" -optional = false -python-versions = ">=3.6, <3.7" - -[[package]] -name = "decorator" -version = "4.4.2" -description = "Decorators for Humans" -category = "main" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*" - -[[package]] -name = "google-auth" -version = "1.29.0" -description = "Google Authentication Library" -category = "main" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" - -[package.dependencies] -cachetools = ">=2.0.0,<5.0" -pyasn1-modules = ">=0.2.1" -rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""} -six = ">=1.9.0" - -[package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)"] -pyopenssl = ["pyopenssl (>=20.0.0)"] -reauth = ["pyu2f (>=0.1.5)"] - -[[package]] -name = "google-auth-oauthlib" -version = "0.4.4" -description = "Google Authentication Library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -google-auth = ">=1.0.0" -requests-oauthlib = ">=0.7.0" - -[package.extras] -tool = ["click (>=6.0.0)"] - -[[package]] -name = "grpcio" -version = "1.37.0" -description = "HTTP/2-based RPC framework" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -six = ">=1.5.2" - -[package.extras] -protobuf = ["grpcio-tools (>=1.37.0)"] - -[[package]] -name = "idna" -version = "2.10" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "imageio" -version = "2.9.0" -description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats." -category = "main" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -numpy = "*" -pillow = "*" - -[package.extras] -ffmpeg = ["imageio-ffmpeg"] -fits = ["astropy"] -full = ["astropy", "gdal", "imageio-ffmpeg", "itk"] -gdal = ["gdal"] -itk = ["itk"] - -[[package]] -name = "imgaug" -version = "0.4.0" -description = "Image augmentation library for deep neural networks" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -imageio = "*" -matplotlib = "*" -numpy = ">=1.15" -opencv-python = "*" -Pillow = "*" -scikit-image = ">=0.14.2" -scipy = "*" -Shapely = "*" -six = "*" - -[[package]] -name = "importlib-metadata" -version = "4.0.1" -description = "Read metadata from Python packages" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = ">=0.5" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] - -[[package]] -name = "kiwisolver" -version = "1.3.1" -description = "A fast implementation of the Cassowary constraint solver" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "markdown" -version = "3.3.4" -description = "Python implementation of Markdown." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -testing = ["coverage", "pyyaml"] - -[[package]] -name = "matplotlib" -version = "3.3.4" -description = "Python plotting package" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -cycler = ">=0.10" -kiwisolver = ">=1.0.1" -numpy = ">=1.15" -pillow = ">=6.2.0" -pyparsing = ">=2.0.3,<2.0.4 || >2.0.4,<2.1.2 || >2.1.2,<2.1.6 || >2.1.6" -python-dateutil = ">=2.1" - -[[package]] -name = "networkx" -version = "2.5.1" -description = "Python package for creating and manipulating graphs and networks" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -decorator = ">=4.3,<5" - -[package.extras] -all = ["numpy", "scipy", "pandas", "matplotlib", "pygraphviz", "pydot", "pyyaml", "lxml", "pytest"] -gdal = ["gdal"] -lxml = ["lxml"] -matplotlib = ["matplotlib"] -numpy = ["numpy"] -pandas = ["pandas"] -pydot = ["pydot"] -pygraphviz = ["pygraphviz"] -pytest = ["pytest"] -pyyaml = ["pyyaml"] -scipy = ["scipy"] - -[[package]] -name = "numpy" -version = "1.19.5" -description = "NumPy is the fundamental package for array computing with Python." -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "oauthlib" -version = "3.1.0" -description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.extras] -rsa = ["cryptography"] -signals = ["blinker"] -signedtoken = ["cryptography", "pyjwt (>=1.0.0)"] - -[[package]] -name = "opencv-python" -version = "4.5.1.48" -description = "Wrapper package for OpenCV python bindings." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -numpy = ">=1.19.3" - -[[package]] -name = "pillow" -version = "8.2.0" -description = "Python Imaging Library (Fork)" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "profilehooks" -version = "1.12.0" -description = "Decorators for profiling/timing/tracing individual functions" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "protobuf" -version = "3.15.8" -description = "Protocol Buffers" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -six = ">=1.9" - -[[package]] -name = "pyasn1" -version = "0.4.8" -description = "ASN.1 types and codecs" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "pyasn1-modules" -version = "0.2.8" -description = "A collection of ASN.1-based protocols modules." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -pyasn1 = ">=0.4.6,<0.5.0" - -[[package]] -name = "pyparsing" -version = "2.4.7" -description = "Python parsing module" -category = "main" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "python-dateutil" -version = "2.8.1" -description = "Extensions to the standard Python datetime module" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "pywavelets" -version = "1.1.1" -description = "PyWavelets, wavelet transform module" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -numpy = ">=1.13.3" - -[[package]] -name = "requests" -version = "2.25.1" -description = "Python HTTP for Humans." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.dependencies] -certifi = ">=2017.4.17" -chardet = ">=3.0.2,<5" -idna = ">=2.5,<3" -urllib3 = ">=1.21.1,<1.27" - -[package.extras] -security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] -socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] - -[[package]] -name = "requests-oauthlib" -version = "1.3.0" -description = "OAuthlib authentication support for Requests." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -oauthlib = ">=3.0.0" -requests = ">=2.0.0" - -[package.extras] -rsa = ["oauthlib[signedtoken] (>=3.0.0)"] - -[[package]] -name = "rope" -version = "0.19.0" -description = "a python refactoring library..." -category = "dev" -optional = false -python-versions = "*" - -[package.extras] -dev = ["pytest"] - -[[package]] -name = "rsa" -version = "4.4" -description = "Pure-Python RSA implementation" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -pyasn1 = ">=0.1.3" - -[[package]] -name = "scikit-image" -version = "0.17.2" -description = "Image processing in Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -imageio = ">=2.3.0" -matplotlib = ">=2.0.0,<3.0.0 || >3.0.0" -networkx = ">=2.0" -numpy = ">=1.15.1" -pillow = ">=4.3.0,<7.1.0 || >7.1.0,<7.1.1 || >7.1.1" -PyWavelets = ">=1.1.1" -scipy = ">=1.0.1" -tifffile = ">=2019.7.26" - -[package.extras] -docs = ["sphinx (>=1.8,<=2.4.4)", "numpydoc (>=0.9)", "sphinx-gallery (>=0.3.1)", "sphinx-copybutton", "pytest-runner", "scikit-learn", "matplotlib (>=3.0.1)", "dask[array] (>=0.15.0)", "cloudpickle (>=0.2.1)", "pandas (>=0.23.0)", "seaborn (>=0.7.1)", "pooch (>=0.5.2)"] -optional = ["simpleitk", "astropy (>=1.2.0)", "qtpy", "pyamg", "dask[array] (>=0.15.0)", "cloudpickle (>=0.2.1)", "pooch (>=0.5.2)"] -test = ["pytest (!=3.7.3)", "pytest-cov", "pytest-localserver", "flake8", "codecov"] - -[[package]] -name = "scipy" -version = "1.5.4" -description = "SciPy: Scientific Library for Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -numpy = ">=1.14.5" - -[[package]] -name = "shapely" -version = "1.7.1" -description = "Geometric objects, predicates, and operations" -category = "main" -optional = false -python-versions = "*" - -[package.extras] -all = ["numpy", "pytest", "pytest-cov"] -test = ["pytest", "pytest-cov"] -vectorized = ["numpy"] - -[[package]] -name = "six" -version = "1.15.0" -description = "Python 2 and 3 compatibility utilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "tensorboard" -version = "2.5.0" -description = "TensorBoard lets you watch Tensors Flow" -category = "main" -optional = false -python-versions = ">= 2.7, != 3.0.*, != 3.1.*" - -[package.dependencies] -absl-py = ">=0.4" -google-auth = ">=1.6.3,<2" -google-auth-oauthlib = ">=0.4.1,<0.5" -grpcio = ">=1.24.3" -markdown = ">=2.6.8" -numpy = ">=1.12.0" -protobuf = ">=3.6.0" -requests = ">=2.21.0,<3" -tensorboard-data-server = ">=0.6.0,<0.7.0" -tensorboard-plugin-wit = ">=1.6.0" -werkzeug = ">=0.11.15" - -[[package]] -name = "tensorboard-data-server" -version = "0.6.0" -description = "Fast data loading for TensorBoard" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "tensorboard-plugin-wit" -version = "1.8.0" -description = "What-If Tool TensorBoard plugin." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "terminaltables" -version = "3.1.0" -description = "Generate simple tables in terminals from a nested list of strings." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "tifffile" -version = "2020.9.3" -description = "Read and write TIFF(r) files" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -numpy = ">=1.15.1" - -[package.extras] -all = ["imagecodecs (>=2020.2.18)", "matplotlib (>=3.1)", "lxml"] - -[[package]] -name = "torch" -version = "1.7.1" -description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" -category = "main" -optional = false -python-versions = ">=3.6.2" - -[package.dependencies] -dataclasses = {version = "*", markers = "python_version < \"3.7\""} -numpy = "*" -typing-extensions = "*" - -[[package]] -name = "torchsummary" -version = "1.5.1" -description = "Model summary in PyTorch similar to `model.summary()` in Keras" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "torchvision" -version = "0.8.2" -description = "image and video datasets and models for torch deep learning" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -numpy = "*" -pillow = ">=4.1.1" -torch = "1.7.1" - -[package.extras] -scipy = ["scipy"] - -[[package]] -name = "tqdm" -version = "4.61.1" -description = "Fast, Extensible Progress Meter" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" - -[package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] -notebook = ["ipywidgets (>=6)"] -telegram = ["requests"] - -[[package]] -name = "typing-extensions" -version = "3.7.4.3" -description = "Backported and Experimental Type Hints for Python 3.5+" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "urllib3" -version = "1.22" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" -optional = false -python-versions = "*" - -[package.extras] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "werkzeug" -version = "1.0.1" -description = "The comprehensive WSGI web application library." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.extras] -dev = ["pytest", "pytest-timeout", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinx-issues"] -watchdog = ["watchdog"] - -[[package]] -name = "zipp" -version = "3.4.1" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] - -[metadata] -lock-version = "1.1" -python-versions = ">=3.6.2" -content-hash = "0ae76b71dc01d634182477b444416ade23527cb1837dcd5a54061e944af04a24" - -[metadata.files] -absl-py = [ - {file = "absl-py-0.12.0.tar.gz", hash = "sha256:b44f68984a5ceb2607d135a615999b93924c771238a63920d17d3387b0d229d5"}, - {file = "absl_py-0.12.0-py3-none-any.whl", hash = "sha256:afe94e3c751ff81aad55d33ab6e630390da32780110b5af72ae81ecff8418d9e"}, -] -cachetools = [ - {file = "cachetools-3.1.1-py2.py3-none-any.whl", hash = "sha256:428266a1c0d36dc5aca63a2d7c5942e88c2c898d72139fca0e97fdd2380517ae"}, - {file = "cachetools-3.1.1.tar.gz", hash = "sha256:8ea2d3ce97850f31e4a08b0e2b5e6c34997d7216a9d2c98e0f3978630d4da69a"}, -] -certifi = [ - {file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"}, - {file = "certifi-2020.12.5.tar.gz", hash = "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c"}, -] -chardet = [ - {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"}, - {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"}, -] -cycler = [ - {file = "cycler-0.10.0-py2.py3-none-any.whl", hash = "sha256:1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d"}, - {file = "cycler-0.10.0.tar.gz", hash = "sha256:cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8"}, -] -dataclasses = [ - {file = "dataclasses-0.8-py3-none-any.whl", hash = "sha256:0201d89fa866f68c8ebd9d08ee6ff50c0b255f8ec63a71c16fda7af82bb887bf"}, - {file = "dataclasses-0.8.tar.gz", hash = "sha256:8479067f342acf957dc82ec415d355ab5edb7e7646b90dc6e2fd1d96ad084c97"}, -] -decorator = [ - {file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"}, - {file = "decorator-4.4.2.tar.gz", hash = "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"}, -] -google-auth = [ - {file = "google-auth-1.29.0.tar.gz", hash = "sha256:010f011c4e27d3d5eb01106fba6aac39d164842dfcd8709955c4638f5b11ccf8"}, - {file = "google_auth-1.29.0-py2.py3-none-any.whl", hash = "sha256:f30a672a64d91cc2e3137765d088c5deec26416246f7a9e956eaf69a8d7ed49c"}, -] -google-auth-oauthlib = [ - {file = "google-auth-oauthlib-0.4.4.tar.gz", hash = "sha256:09832c6e75032f93818edf1affe4746121d640c625a5bef9b5c96af676e98eee"}, - {file = "google_auth_oauthlib-0.4.4-py2.py3-none-any.whl", hash = "sha256:0e92aacacfb94978de3b7972cf4b0f204c3cd206f74ddd0dc0b31e91164e6317"}, -] -grpcio = [ - {file = "grpcio-1.37.0-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:8a0517e7a6784439a3730e50597bd64debf776692adea3c18f869a36454952e1"}, - {file = "grpcio-1.37.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96ca74522bcd979856d359fcca3128f760c69885d264dc22044fd1a468e0eb68"}, - {file = "grpcio-1.37.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:3da2b0b8afe3ef34c9e2f90329b1f170fc50db5c4d0bbe986946caa659e5ed17"}, - {file = "grpcio-1.37.0-cp27-cp27m-win32.whl", hash = "sha256:0634cd805c6725ab71bebaf3370da0e5d32339c26eb1b6ad0f73d64224e19ddf"}, - {file = "grpcio-1.37.0-cp27-cp27m-win_amd64.whl", hash = "sha256:fe14c86c58190463f6e714637bba366874ca1e518ff1f82723d90765e6e39288"}, - {file = "grpcio-1.37.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:14d7a15030a3f72cfd16dde8018d9f0e29e3f52cb566506dc942220b69b65de8"}, - {file = "grpcio-1.37.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:9d389f4e008edbd91082baff37507bbf4b25afd6c239c8070071f8936466a374"}, - {file = "grpcio-1.37.0-cp35-cp35m-macosx_10_10_intel.whl", hash = "sha256:a8b0914e6ac8987b8f59fcfb79519c5ce8df279b19d1c88bda2fc6e147821217"}, - {file = "grpcio-1.37.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:aaf44d496fe53ca1414677cab73b7935d01006f0b8ab4a32ab18704643a80ab5"}, - {file = "grpcio-1.37.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:fb6588a47d096cdaa0815d108b714d3e273361bfe03bc47725ddb1fdeaa56061"}, - {file = "grpcio-1.37.0-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:9b872b6c8ab618caa9bdee871c51021c7cc4890c141e7ee7bb6b923174bb299a"}, - {file = "grpcio-1.37.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:810d488804291f22cb696692cfddf75b12bbc9d34beca0159d99103286ac0091"}, - {file = "grpcio-1.37.0-cp35-cp35m-win32.whl", hash = "sha256:55fbdb9a2f81b28bd15af5c6e6669a2c8bb0bdb2add74c8818f9593a7428a164"}, - {file = "grpcio-1.37.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fa6cfecbafbab8c4a229c42787b02cf58d0f128ad43c27b89c4df603b66d7f3c"}, - {file = "grpcio-1.37.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:b36eeb8a29f214f876ddda563990267a8b35d0a6da587edfa97effa4cdf6e5bd"}, - {file = "grpcio-1.37.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:a89b5d2f64d588b46a8b77c04ada4c68ee1cfd0b7a148ff9108d72eefdc9b363"}, - {file = "grpcio-1.37.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:e0169f550dc9ba88da0bb60b8198437d9bd0e8600d600e3569cd3ba7d2ce0bc7"}, - {file = "grpcio-1.37.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:4408b2732fdf93f735ecb059193219528981d27483feaa822970226d5c66c143"}, - {file = "grpcio-1.37.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:5784d1e4877345efb6655f6851809441478769558565d8291a54e1bd3f19548b"}, - {file = "grpcio-1.37.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:96e3d85eb63d144656611eef4683f5b4003e1deec93bc2d6cbc5cf330f275a7e"}, - {file = "grpcio-1.37.0-cp36-cp36m-win32.whl", hash = "sha256:e1a5322d63346afdda8ad7ff8cf9933a0ab029546395eae31af7cd27ef75e47b"}, - {file = "grpcio-1.37.0-cp36-cp36m-win_amd64.whl", hash = "sha256:5e11b7176e7c14675868b7c46b7aa2da0b184cf7c189348f3ad7c98829de07be"}, - {file = "grpcio-1.37.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:6c2798eaef4eebcf3f9d62b49652bc1110787c684861605d20fec842580f6cee"}, - {file = "grpcio-1.37.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:3e541240650f9173b4891f3e252234976199e487b9bd771e4f082403db50130d"}, - {file = "grpcio-1.37.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:b4f3ddfed733264c4f6431302e5fbafdd9c03f166b98b04d16a058fae3101a5d"}, - {file = "grpcio-1.37.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:f16e40ea37600fe21b51651617867c46d26dcb3f25a5912b7e61c7199b3f5a9f"}, - {file = "grpcio-1.37.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b897b825fb464c940001a2cc1d631f418f5b071ccff64647148dbf99c775b98b"}, - {file = "grpcio-1.37.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:5e598af1d64ece6a91797b2dcacaf2d537ffb1c0075ecd184c62976068ce1f09"}, - {file = "grpcio-1.37.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:1a167d39b1db6e1b29653d69938ff79936602e95863db897ff9eeab81366b304"}, - {file = "grpcio-1.37.0-cp37-cp37m-win32.whl", hash = "sha256:c4f71341c20327bda9f8c28c35d1475af335bb27e591e7f6409d493b49e06223"}, - {file = "grpcio-1.37.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e86acc1462bc796df672568492d24c6b4e7692e3f58b873d56b215dc65553ae1"}, - {file = "grpcio-1.37.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:28f94700775ceca8820fa2c141501ec713e821de7362b966f8d7bf4d8e1eb93a"}, - {file = "grpcio-1.37.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:ca5c96c61289c001b9bcd607dcc1df3060eb8cc13088baf8a6e13268e4879a1f"}, - {file = "grpcio-1.37.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:06cae65dc4557a445748092a61f2adb425ee472088a7e39826369f1f0ae9ffea"}, - {file = "grpcio-1.37.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:6986d58240addd69e001e2e0e97c4b198370dd575162ab4bb1e3ea3816103e75"}, - {file = "grpcio-1.37.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:606f0bbfac3860cb6f23f8ebabb974c14db8797317a86d6df063b132f64318f9"}, - {file = "grpcio-1.37.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:1c611a4d137a40f8a6803933dd77ab43f04cc54c27fb0e07483fd37b70e7dae6"}, - {file = "grpcio-1.37.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:3acfb47d930daec7127a7bc27a7e9c1c276d5e4ae3d2b04a4c7a33432712c811"}, - {file = "grpcio-1.37.0-cp38-cp38-win32.whl", hash = "sha256:575b49cbdd7286df9f77451709060a4a311a9c8767e89cf4e28d3b3200893de4"}, - {file = "grpcio-1.37.0-cp38-cp38-win_amd64.whl", hash = "sha256:04582b260ff0c953011819b1964e875139a7a43adb84621d3ab57f66d0f3d04e"}, - {file = "grpcio-1.37.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:00f0acc463d9e6b1e74e71ce516c8cabd053619d08dd81765eb573492811de54"}, - {file = "grpcio-1.37.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:4eb3907fda03eda8bdb7d666f5371b6500a9054f355a547961da1ee231d2d6aa"}, - {file = "grpcio-1.37.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:3eecf543aa66f7d8304f82854132df6116476279a8e3ba0665c5d93f1ef622de"}, - {file = "grpcio-1.37.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:91f91388e6f72a5d15161124458ad62387470f3a0a16b488db169232f79dd4d2"}, - {file = "grpcio-1.37.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:efb928f1a3fd5889b9045c323077d2696937cf9cdb7d2e60b90caa7da5bd1ce9"}, - {file = "grpcio-1.37.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:93d990885d392f564ef95a97e0d6936cb09ee404418e8c986835a4d1786b882d"}, - {file = "grpcio-1.37.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:ebbb2796ec138cb56373f328f5046ccb9e591046cd8aaccbb8af5bfc397d8b53"}, - {file = "grpcio-1.37.0-cp39-cp39-win32.whl", hash = "sha256:adfef1a3994220bd39e5e2dd57714ca94c4c38c9015f2812a0b09b39f86ddbe0"}, - {file = "grpcio-1.37.0-cp39-cp39-win_amd64.whl", hash = "sha256:df142d51d7de3f8d13aaa78f7ddc7d74088226f92ec5aae8d98d8ae5d328f74b"}, - {file = "grpcio-1.37.0.tar.gz", hash = "sha256:b3ce16aa91569760fdabd77ca901b2288152eb16941d28edd9a3a75a0c4a8a85"}, -] -idna = [ - {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, - {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, -] -imageio = [ - {file = "imageio-2.9.0-py3-none-any.whl", hash = "sha256:3604d751f03002e8e0e7650aa71d8d9148144a87daf17cb1f3228e80747f2e6b"}, - {file = "imageio-2.9.0.tar.gz", hash = "sha256:52ddbaeca2dccf53ba2d6dec5676ca7bc3b2403ef8b37f7da78b7654bb3e10f0"}, -] -imgaug = [ - {file = "imgaug-0.4.0-py2.py3-none-any.whl", hash = "sha256:ce61e65b4eb7405fc62c1b0a79d2fa92fd47f763aaecb65152d29243592111f9"}, - {file = "imgaug-0.4.0.tar.gz", hash = "sha256:46bab63ed38f8980630ff721a09ca2281b7dbd4d8c11258818b6ebcc69ea46c7"}, -] -importlib-metadata = [ - {file = "importlib_metadata-4.0.1-py3-none-any.whl", hash = "sha256:d7eb1dea6d6a6086f8be21784cc9e3bcfa55872b52309bc5fad53a8ea444465d"}, - {file = "importlib_metadata-4.0.1.tar.gz", hash = "sha256:8c501196e49fb9df5df43833bdb1e4328f64847763ec8a50703148b73784d581"}, -] -kiwisolver = [ - {file = "kiwisolver-1.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd34fbbfbc40628200730bc1febe30631347103fc8d3d4fa012c21ab9c11eca9"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:d3155d828dec1d43283bd24d3d3e0d9c7c350cdfcc0bd06c0ad1209c1bbc36d0"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5a7a7dbff17e66fac9142ae2ecafb719393aaee6a3768c9de2fd425c63b53e21"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f8d6f8db88049a699817fd9178782867bf22283e3813064302ac59f61d95be05"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:5f6ccd3dd0b9739edcf407514016108e2280769c73a85b9e59aa390046dbf08b"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-win32.whl", hash = "sha256:225e2e18f271e0ed8157d7f4518ffbf99b9450fca398d561eb5c4a87d0986dd9"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:cf8b574c7b9aa060c62116d4181f3a1a4e821b2ec5cbfe3775809474113748d4"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:232c9e11fd7ac3a470d65cd67e4359eee155ec57e822e5220322d7b2ac84fbf0"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:b38694dcdac990a743aa654037ff1188c7a9801ac3ccc548d3341014bc5ca278"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ca3820eb7f7faf7f0aa88de0e54681bddcb46e485beb844fcecbcd1c8bd01689"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:c8fd0f1ae9d92b42854b2979024d7597685ce4ada367172ed7c09edf2cef9cb8"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:1e1bc12fb773a7b2ffdeb8380609f4f8064777877b2225dec3da711b421fda31"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-win32.whl", hash = "sha256:72c99e39d005b793fb7d3d4e660aed6b6281b502e8c1eaf8ee8346023c8e03bc"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:8be8d84b7d4f2ba4ffff3665bcd0211318aa632395a1a41553250484a871d454"}, - {file = "kiwisolver-1.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:31dfd2ac56edc0ff9ac295193eeaea1c0c923c0355bf948fbd99ed6018010b72"}, - {file = "kiwisolver-1.3.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:563c649cfdef27d081c84e72a03b48ea9408c16657500c312575ae9d9f7bc1c3"}, - {file = "kiwisolver-1.3.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:78751b33595f7f9511952e7e60ce858c6d64db2e062afb325985ddbd34b5c131"}, - {file = "kiwisolver-1.3.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:a357fd4f15ee49b4a98b44ec23a34a95f1e00292a139d6015c11f55774ef10de"}, - {file = "kiwisolver-1.3.1-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:5989db3b3b34b76c09253deeaf7fbc2707616f130e166996606c284395da3f18"}, - {file = "kiwisolver-1.3.1-cp38-cp38-win32.whl", hash = "sha256:c08e95114951dc2090c4a630c2385bef681cacf12636fb0241accdc6b303fd81"}, - {file = "kiwisolver-1.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:44a62e24d9b01ba94ae7a4a6c3fb215dc4af1dde817e7498d901e229aaf50e4e"}, - {file = "kiwisolver-1.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:50af681a36b2a1dee1d3c169ade9fdc59207d3c31e522519181e12f1b3ba7000"}, - {file = "kiwisolver-1.3.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:a53d27d0c2a0ebd07e395e56a1fbdf75ffedc4a05943daf472af163413ce9598"}, - {file = "kiwisolver-1.3.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:834ee27348c4aefc20b479335fd422a2c69db55f7d9ab61721ac8cd83eb78882"}, - {file = "kiwisolver-1.3.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:5c3e6455341008a054cccee8c5d24481bcfe1acdbc9add30aa95798e95c65621"}, - {file = "kiwisolver-1.3.1-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:acef3d59d47dd85ecf909c359d0fd2c81ed33bdff70216d3956b463e12c38a54"}, - {file = "kiwisolver-1.3.1-cp39-cp39-win32.whl", hash = "sha256:c5518d51a0735b1e6cee1fdce66359f8d2b59c3ca85dc2b0813a8aa86818a030"}, - {file = "kiwisolver-1.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:b9edd0110a77fc321ab090aaa1cfcaba1d8499850a12848b81be2222eab648f6"}, - {file = "kiwisolver-1.3.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0cd53f403202159b44528498de18f9285b04482bab2a6fc3f5dd8dbb9352e30d"}, - {file = "kiwisolver-1.3.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:33449715e0101e4d34f64990352bce4095c8bf13bed1b390773fc0a7295967b3"}, - {file = "kiwisolver-1.3.1-pp36-pypy36_pp73-win32.whl", hash = "sha256:401a2e9afa8588589775fe34fc22d918ae839aaaf0c0e96441c0fdbce6d8ebe6"}, - {file = "kiwisolver-1.3.1.tar.gz", hash = "sha256:950a199911a8d94683a6b10321f9345d5a3a8433ec58b217ace979e18f16e248"}, -] -markdown = [ - {file = "Markdown-3.3.4-py3-none-any.whl", hash = "sha256:96c3ba1261de2f7547b46a00ea8463832c921d3f9d6aba3f255a6f71386db20c"}, - {file = "Markdown-3.3.4.tar.gz", hash = "sha256:31b5b491868dcc87d6c24b7e3d19a0d730d59d3e46f4eea6430a321bed387a49"}, -] -matplotlib = [ - {file = "matplotlib-3.3.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:672960dd114e342b7c610bf32fb99d14227f29919894388b41553217457ba7ef"}, - {file = "matplotlib-3.3.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:7c155437ae4fd366e2700e2716564d1787700687443de46bcb895fe0f84b761d"}, - {file = "matplotlib-3.3.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:a17f0a10604fac7627ec82820439e7db611722e80c408a726cd00d8c974c2fb3"}, - {file = "matplotlib-3.3.4-cp36-cp36m-win32.whl", hash = "sha256:215e2a30a2090221a9481db58b770ce56b8ef46f13224ae33afe221b14b24dc1"}, - {file = "matplotlib-3.3.4-cp36-cp36m-win_amd64.whl", hash = "sha256:348e6032f666ffd151b323342f9278b16b95d4a75dfacae84a11d2829a7816ae"}, - {file = "matplotlib-3.3.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:94bdd1d55c20e764d8aea9d471d2ae7a7b2c84445e0fa463f02e20f9730783e1"}, - {file = "matplotlib-3.3.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:a1acb72f095f1d58ecc2538ed1b8bca0b57df313b13db36ed34b8cdf1868e674"}, - {file = "matplotlib-3.3.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:46b1a60a04e6d884f0250d5cc8dc7bd21a9a96c584a7acdaab44698a44710bab"}, - {file = "matplotlib-3.3.4-cp37-cp37m-win32.whl", hash = "sha256:ed4a9e6dcacba56b17a0a9ac22ae2c72a35b7f0ef0693aa68574f0b2df607a89"}, - {file = "matplotlib-3.3.4-cp37-cp37m-win_amd64.whl", hash = "sha256:c24c05f645aef776e8b8931cb81e0f1632d229b42b6d216e30836e2e145a2b40"}, - {file = "matplotlib-3.3.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7310e353a4a35477c7f032409966920197d7df3e757c7624fd842f3eeb307d3d"}, - {file = "matplotlib-3.3.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:451cc89cb33d6652c509fc6b588dc51c41d7246afdcc29b8624e256b7663ed1f"}, - {file = "matplotlib-3.3.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:3d2eb9c1cc254d0ffa90bc96fde4b6005d09c2228f99dfd493a4219c1af99644"}, - {file = "matplotlib-3.3.4-cp38-cp38-win32.whl", hash = "sha256:e15fa23d844d54e7b3b7243afd53b7567ee71c721f592deb0727ee85e668f96a"}, - {file = "matplotlib-3.3.4-cp38-cp38-win_amd64.whl", hash = "sha256:1de0bb6cbfe460725f0e97b88daa8643bcf9571c18ba90bb8e41432aaeca91d6"}, - {file = "matplotlib-3.3.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f44149a0ef5b4991aaef12a93b8e8d66d6412e762745fea1faa61d98524e0ba9"}, - {file = "matplotlib-3.3.4-cp39-cp39-manylinux1_i686.whl", hash = "sha256:746a1df55749629e26af7f977ea426817ca9370ad1569436608dc48d1069b87c"}, - {file = "matplotlib-3.3.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:5f571b92a536206f7958f7cb2d367ff6c9a1fa8229dc35020006e4cdd1ca0acd"}, - {file = "matplotlib-3.3.4-cp39-cp39-win32.whl", hash = "sha256:9265ae0fb35e29f9b8cc86c2ab0a2e3dcddc4dd9de4b85bf26c0f63fe5c1c2ca"}, - {file = "matplotlib-3.3.4-cp39-cp39-win_amd64.whl", hash = "sha256:9a79e5dd7bb797aa611048f5b70588b23c5be05b63eefd8a0d152ac77c4243db"}, - {file = "matplotlib-3.3.4-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1e850163579a8936eede29fad41e202b25923a0a8d5ffd08ce50fc0a97dcdc93"}, - {file = "matplotlib-3.3.4-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:d738acfdfb65da34c91acbdb56abed46803db39af259b7f194dc96920360dbe4"}, - {file = "matplotlib-3.3.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:aa49571d8030ad0b9ac39708ee77bd2a22f87815e12bdee52ecaffece9313ed8"}, - {file = "matplotlib-3.3.4-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:cf3a7e54eff792f0815dbbe9b85df2f13d739289c93d346925554f71d484be78"}, - {file = "matplotlib-3.3.4.tar.gz", hash = "sha256:3e477db76c22929e4c6876c44f88d790aacdf3c3f8f3a90cb1975c0bf37825b0"}, -] -networkx = [ - {file = "networkx-2.5.1-py3-none-any.whl", hash = "sha256:0635858ed7e989f4c574c2328380b452df892ae85084144c73d8cd819f0c4e06"}, - {file = "networkx-2.5.1.tar.gz", hash = "sha256:109cd585cac41297f71103c3c42ac6ef7379f29788eb54cb751be5a663bb235a"}, -] -numpy = [ - {file = "numpy-1.19.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc6bd4fd593cb261332568485e20a0712883cf631f6f5e8e86a52caa8b2b50ff"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:aeb9ed923be74e659984e321f609b9ba54a48354bfd168d21a2b072ed1e833ea"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8b5e972b43c8fc27d56550b4120fe6257fdc15f9301914380b27f74856299fea"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:43d4c81d5ffdff6bae58d66a3cd7f54a7acd9a0e7b18d97abb255defc09e3140"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:a4646724fba402aa7504cd48b4b50e783296b5e10a524c7a6da62e4a8ac9698d"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:2e55195bc1c6b705bfd8ad6f288b38b11b1af32f3c8289d6c50d47f950c12e76"}, - {file = "numpy-1.19.5-cp36-cp36m-win32.whl", hash = "sha256:39b70c19ec771805081578cc936bbe95336798b7edf4732ed102e7a43ec5c07a"}, - {file = "numpy-1.19.5-cp36-cp36m-win_amd64.whl", hash = "sha256:dbd18bcf4889b720ba13a27ec2f2aac1981bd41203b3a3b27ba7a33f88ae4827"}, - {file = "numpy-1.19.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:603aa0706be710eea8884af807b1b3bc9fb2e49b9f4da439e76000f3b3c6ff0f"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:cae865b1cae1ec2663d8ea56ef6ff185bad091a5e33ebbadd98de2cfa3fa668f"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:36674959eed6957e61f11c912f71e78857a8d0604171dfd9ce9ad5cbf41c511c"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:06fab248a088e439402141ea04f0fffb203723148f6ee791e9c75b3e9e82f080"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6149a185cece5ee78d1d196938b2a8f9d09f5a5ebfbba66969302a778d5ddd1d"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:50a4a0ad0111cc1b71fa32dedd05fa239f7fb5a43a40663269bb5dc7877cfd28"}, - {file = "numpy-1.19.5-cp37-cp37m-win32.whl", hash = "sha256:d051ec1c64b85ecc69531e1137bb9751c6830772ee5c1c426dbcfe98ef5788d7"}, - {file = "numpy-1.19.5-cp37-cp37m-win_amd64.whl", hash = "sha256:a12ff4c8ddfee61f90a1633a4c4afd3f7bcb32b11c52026c92a12e1325922d0d"}, - {file = "numpy-1.19.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf2402002d3d9f91c8b01e66fbb436a4ed01c6498fffed0e4c7566da1d40ee1e"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1ded4fce9cfaaf24e7a0ab51b7a87be9038ea1ace7f34b841fe3b6894c721d1c"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:759e4095edc3c1b3ac031f34d9459fa781777a93ccc633a472a5468587a190ff"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a9d17f2be3b427fbb2bce61e596cf555d6f8a56c222bd2ca148baeeb5e5c783c"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:99abf4f353c3d1a0c7a5f27699482c987cf663b1eac20db59b8c7b061eabd7fc"}, - {file = "numpy-1.19.5-cp38-cp38-win32.whl", hash = "sha256:384ec0463d1c2671170901994aeb6dce126de0a95ccc3976c43b0038a37329c2"}, - {file = "numpy-1.19.5-cp38-cp38-win_amd64.whl", hash = "sha256:811daee36a58dc79cf3d8bdd4a490e4277d0e4b7d103a001a4e73ddb48e7e6aa"}, - {file = "numpy-1.19.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c843b3f50d1ab7361ca4f0b3639bf691569493a56808a0b0c54a051d260b7dbd"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d6631f2e867676b13026e2846180e2c13c1e11289d67da08d71cacb2cd93d4aa"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7fb43004bce0ca31d8f13a6eb5e943fa73371381e53f7074ed21a4cb786c32f8"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2ea52bd92ab9f768cc64a4c3ef8f4b2580a17af0a5436f6126b08efbd1838371"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:400580cbd3cff6ffa6293df2278c75aef2d58d8d93d3c5614cd67981dae68ceb"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:df609c82f18c5b9f6cb97271f03315ff0dbe481a2a02e56aeb1b1a985ce38e60"}, - {file = "numpy-1.19.5-cp39-cp39-win32.whl", hash = "sha256:ab83f24d5c52d60dbc8cd0528759532736b56db58adaa7b5f1f76ad551416a1e"}, - {file = "numpy-1.19.5-cp39-cp39-win_amd64.whl", hash = "sha256:0eef32ca3132a48e43f6a0f5a82cb508f22ce5a3d6f67a8329c81c8e226d3f6e"}, - {file = "numpy-1.19.5-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:a0d53e51a6cb6f0d9082decb7a4cb6dfb33055308c4c44f53103c073f649af73"}, - {file = "numpy-1.19.5.zip", hash = "sha256:a76f502430dd98d7546e1ea2250a7360c065a5fdea52b2dffe8ae7180909b6f4"}, -] -oauthlib = [ - {file = "oauthlib-3.1.0-py2.py3-none-any.whl", hash = "sha256:df884cd6cbe20e32633f1db1072e9356f53638e4361bef4e8b03c9127c9328ea"}, - {file = "oauthlib-3.1.0.tar.gz", hash = "sha256:bee41cc35fcca6e988463cacc3bcb8a96224f470ca547e697b604cc697b2f889"}, -] -opencv-python = [ - {file = "opencv-python-4.5.1.48.tar.gz", hash = "sha256:78a6db8467639383caedf1d111da3510a4ee1a0aacf2117821cae2ee8f92ce37"}, - {file = "opencv_python-4.5.1.48-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:bcb27773cfd5340b2b599b303d9f5499838ef4780c20c038f6030175408c64df"}, - {file = "opencv_python-4.5.1.48-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:9646875c501788b1b098f282d777b667d6da69801739504f1b2fd1268970d1da"}, - {file = "opencv_python-4.5.1.48-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:ebe83901971a6755512424c4fe9f63341cca501b7c497bf608dd38ee31ba3f4c"}, - {file = "opencv_python-4.5.1.48-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:d8aefcb30b71064dbbaa2b0ace161a36464c29375a83998fbda39a1d1740f942"}, - {file = "opencv_python-4.5.1.48-cp36-cp36m-win32.whl", hash = "sha256:32dee1c9fd3e31e28edef7b56f868e2b40e280b7062304f9fb8a14dbc51547d5"}, - {file = "opencv_python-4.5.1.48-cp36-cp36m-win_amd64.whl", hash = "sha256:9c77d508e6822f1f40c727d21b822d017622d8305dce7eccf0ab06caac16d5c6"}, - {file = "opencv_python-4.5.1.48-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:4982fa8ccc38310a2bd93e06334ba090b12b6aff2f6fcb8ff9613e3c9bc48f48"}, - {file = "opencv_python-4.5.1.48-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:c0503bfaa2b7b743d6ff5d81f1dd8428dbf4c33e7e4f836456d11be20c2e7721"}, - {file = "opencv_python-4.5.1.48-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:e27d062fa1098d90f48b6c047351c89816492a08906a021c973ce510b04a7b9d"}, - {file = "opencv_python-4.5.1.48-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:6d8434a45e8f75c4da5fd0068ce001f4f8e35771cc851d746d4721eeaf517e25"}, - {file = "opencv_python-4.5.1.48-cp37-cp37m-win32.whl", hash = "sha256:e2c17714da59d9d516ceef0450766ff9557ee232d62f702665af905193557582"}, - {file = "opencv_python-4.5.1.48-cp37-cp37m-win_amd64.whl", hash = "sha256:efac9893d9e21cfb599828801c755ecde8f1e657f05ec6f002efe19422456d5a"}, - {file = "opencv_python-4.5.1.48-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:e77d0feaff37326f62b127098264e2a7099deb476e38432b1083ce11cdedf560"}, - {file = "opencv_python-4.5.1.48-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:ffc75c614b8dc3d8102f3ba15dafd6ec0400c7ffa71a91953d41511964ee50e0"}, - {file = "opencv_python-4.5.1.48-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:c1159d91f29a85c3333edef6ca420284566d9bcdae46dda2fe7282515b48c8b6"}, - {file = "opencv_python-4.5.1.48-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:d16144c435b816c5536d5ff012c1a2b7e93155017db7103942ff7efb98c4df1f"}, - {file = "opencv_python-4.5.1.48-cp38-cp38-win32.whl", hash = "sha256:b2b9ac86aec5f2dd531545cebdea1a1ef4f81ef1fb1760d78b4725f9575504f9"}, - {file = "opencv_python-4.5.1.48-cp38-cp38-win_amd64.whl", hash = "sha256:30edebc81b260bcfeb760b3600c367c5261dfb2fe41e5d1408d5357d0867b40d"}, - {file = "opencv_python-4.5.1.48-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:e38fbd7b2db03204ec09930609b7313d6b6d2b271c8fe2c0aa271fa69b726a1b"}, - {file = "opencv_python-4.5.1.48-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:fc1472b825d26c8a4f1cfb172a90c3cc47733e4af7522276c1c2efe8f6006a8b"}, - {file = "opencv_python-4.5.1.48-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:c4ea4f8b217f3e8be6247fc0787fb81797d85202c722523f41070124a7a621c7"}, - {file = "opencv_python-4.5.1.48-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:a1dfa0486db367594510c0c799ec7481247dc86e651b69008806d875ab731471"}, - {file = "opencv_python-4.5.1.48-cp39-cp39-win32.whl", hash = "sha256:5172cb37dfd8a0b4945b071a493eb36e5f17675a160637fa380f9c1d9d80535c"}, - {file = "opencv_python-4.5.1.48-cp39-cp39-win_amd64.whl", hash = "sha256:c8cc1f5ff3c352ebe756119014c4e4ec7ae5ac536d1f66b0316667ced37637c8"}, -] -pillow = [ - {file = "Pillow-8.2.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:dc38f57d8f20f06dd7c3161c59ca2c86893632623f33a42d592f097b00f720a9"}, - {file = "Pillow-8.2.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a013cbe25d20c2e0c4e85a9daf438f85121a4d0344ddc76e33fd7e3965d9af4b"}, - {file = "Pillow-8.2.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8bb1e155a74e1bfbacd84555ea62fa21c58e0b4e7e6b20e4447b8d07990ac78b"}, - {file = "Pillow-8.2.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:c5236606e8570542ed424849f7852a0ff0bce2c4c8d0ba05cc202a5a9c97dee9"}, - {file = "Pillow-8.2.0-cp36-cp36m-win32.whl", hash = "sha256:12e5e7471f9b637762453da74e390e56cc43e486a88289995c1f4c1dc0bfe727"}, - {file = "Pillow-8.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:5afe6b237a0b81bd54b53f835a153770802f164c5570bab5e005aad693dab87f"}, - {file = "Pillow-8.2.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:cb7a09e173903541fa888ba010c345893cd9fc1b5891aaf060f6ca77b6a3722d"}, - {file = "Pillow-8.2.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:0d19d70ee7c2ba97631bae1e7d4725cdb2ecf238178096e8c82ee481e189168a"}, - {file = "Pillow-8.2.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:083781abd261bdabf090ad07bb69f8f5599943ddb539d64497ed021b2a67e5a9"}, - {file = "Pillow-8.2.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:c6b39294464b03457f9064e98c124e09008b35a62e3189d3513e5148611c9388"}, - {file = "Pillow-8.2.0-cp37-cp37m-win32.whl", hash = "sha256:01425106e4e8cee195a411f729cff2a7d61813b0b11737c12bd5991f5f14bcd5"}, - {file = "Pillow-8.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3b570f84a6161cf8865c4e08adf629441f56e32f180f7aa4ccbd2e0a5a02cba2"}, - {file = "Pillow-8.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:031a6c88c77d08aab84fecc05c3cde8414cd6f8406f4d2b16fed1e97634cc8a4"}, - {file = "Pillow-8.2.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:66cc56579fd91f517290ab02c51e3a80f581aba45fd924fcdee01fa06e635812"}, - {file = "Pillow-8.2.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6c32cc3145928c4305d142ebec682419a6c0a8ce9e33db900027ddca1ec39178"}, - {file = "Pillow-8.2.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:624b977355cde8b065f6d51b98497d6cd5fbdd4f36405f7a8790e3376125e2bb"}, - {file = "Pillow-8.2.0-cp38-cp38-win32.whl", hash = "sha256:5cbf3e3b1014dddc45496e8cf38b9f099c95a326275885199f427825c6522232"}, - {file = "Pillow-8.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:463822e2f0d81459e113372a168f2ff59723e78528f91f0bd25680ac185cf797"}, - {file = "Pillow-8.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:95d5ef984eff897850f3a83883363da64aae1000e79cb3c321915468e8c6add5"}, - {file = "Pillow-8.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b91c36492a4bbb1ee855b7d16fe51379e5f96b85692dc8210831fbb24c43e484"}, - {file = "Pillow-8.2.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d68cb92c408261f806b15923834203f024110a2e2872ecb0bd2a110f89d3c602"}, - {file = "Pillow-8.2.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f217c3954ce5fd88303fc0c317af55d5e0204106d86dea17eb8205700d47dec2"}, - {file = "Pillow-8.2.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:5b70110acb39f3aff6b74cf09bb4169b167e2660dabc304c1e25b6555fa781ef"}, - {file = "Pillow-8.2.0-cp39-cp39-win32.whl", hash = "sha256:a7d5e9fad90eff8f6f6106d3b98b553a88b6f976e51fce287192a5d2d5363713"}, - {file = "Pillow-8.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:238c197fc275b475e87c1453b05b467d2d02c2915fdfdd4af126145ff2e4610c"}, - {file = "Pillow-8.2.0-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:0e04d61f0064b545b989126197930807c86bcbd4534d39168f4aa5fda39bb8f9"}, - {file = "Pillow-8.2.0-pp36-pypy36_pp73-manylinux2010_i686.whl", hash = "sha256:63728564c1410d99e6d1ae8e3b810fe012bc440952168af0a2877e8ff5ab96b9"}, - {file = "Pillow-8.2.0-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:c03c07ed32c5324939b19e36ae5f75c660c81461e312a41aea30acdd46f93a7c"}, - {file = "Pillow-8.2.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:4d98abdd6b1e3bf1a1cbb14c3895226816e666749ac040c4e2554231068c639b"}, - {file = "Pillow-8.2.0-pp37-pypy37_pp73-manylinux2010_i686.whl", hash = "sha256:aac00e4bc94d1b7813fe882c28990c1bc2f9d0e1aa765a5f2b516e8a6a16a9e4"}, - {file = "Pillow-8.2.0-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:22fd0f42ad15dfdde6c581347eaa4adb9a6fc4b865f90b23378aa7914895e120"}, - {file = "Pillow-8.2.0-pp37-pypy37_pp73-win32.whl", hash = "sha256:e98eca29a05913e82177b3ba3d198b1728e164869c613d76d0de4bde6768a50e"}, - {file = "Pillow-8.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:8b56553c0345ad6dcb2e9b433ae47d67f95fc23fe28a0bde15a120f25257e291"}, - {file = "Pillow-8.2.0.tar.gz", hash = "sha256:a787ab10d7bb5494e5f76536ac460741788f1fbce851068d73a87ca7c35fc3e1"}, -] -profilehooks = [ - {file = "profilehooks-1.12.0-py2.py3-none-any.whl", hash = "sha256:dc87f319c9596b8c50fd374e3c08c51fa29a61553f1d9281482e4ca31829b021"}, - {file = "profilehooks-1.12.0.tar.gz", hash = "sha256:05b87589df8a8c630fd701bae6008cc1cfff4457bd0064887ad25248327a5ba3"}, -] -protobuf = [ - {file = "protobuf-3.15.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:fad4f971ec38d8df7f4b632c819bf9bbf4f57cfd7312cf526c69ce17ef32436a"}, - {file = "protobuf-3.15.8-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:f17b352d7ce33c81773cf81d536ca70849de6f73c96413f17309f4b43ae7040b"}, - {file = "protobuf-3.15.8-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:4a054b0b5900b7ea7014099e783fb8c4618e4209fffcd6050857517b3f156e18"}, - {file = "protobuf-3.15.8-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:efa4c4d4fc9ba734e5e85eaced70e1b63fb3c8d08482d839eb838566346f1737"}, - {file = "protobuf-3.15.8-cp35-cp35m-win32.whl", hash = "sha256:07eec4e2ccbc74e95bb9b3afe7da67957947ee95bdac2b2e91b038b832dd71f0"}, - {file = "protobuf-3.15.8-cp35-cp35m-win_amd64.whl", hash = "sha256:f9cadaaa4065d5dd4d15245c3b68b967b3652a3108e77f292b58b8c35114b56c"}, - {file = "protobuf-3.15.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2dc0e8a9e4962207bdc46a365b63a3f1aca6f9681a5082a326c5837ef8f4b745"}, - {file = "protobuf-3.15.8-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:f80afc0a0ba13339bbab25ca0409e9e2836b12bb012364c06e97c2df250c3343"}, - {file = "protobuf-3.15.8-cp36-cp36m-win32.whl", hash = "sha256:c5566f956a26cda3abdfacc0ca2e21db6c9f3d18f47d8d4751f2209d6c1a5297"}, - {file = "protobuf-3.15.8-cp36-cp36m-win_amd64.whl", hash = "sha256:dab75b56a12b1ceb3e40808b5bd9dfdaef3a1330251956e6744e5b6ed8f8830b"}, - {file = "protobuf-3.15.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3053f13207e7f13dc7be5e9071b59b02020172f09f648e85dc77e3fcb50d1044"}, - {file = "protobuf-3.15.8-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1f0b5d156c3df08cc54bc2c8b8b875648ea4cd7ebb2a9a130669f7547ec3488c"}, - {file = "protobuf-3.15.8-cp37-cp37m-win32.whl", hash = "sha256:90270fe5732c1f1ff664a3bd7123a16456d69b4e66a09a139a00443a32f210b8"}, - {file = "protobuf-3.15.8-cp37-cp37m-win_amd64.whl", hash = "sha256:f42c2f5fb67da5905bfc03733a311f72fa309252bcd77c32d1462a1ad519521e"}, - {file = "protobuf-3.15.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f6077db37bfa16494dca58a4a02bfdacd87662247ad6bc1f7f8d13ff3f0013e1"}, - {file = "protobuf-3.15.8-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:510e66491f1a5ac5953c908aa8300ec47f793130097e4557482803b187a8ee05"}, - {file = "protobuf-3.15.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5ff9fa0e67fcab442af9bc8d4ec3f82cb2ff3be0af62dba047ed4187f0088b7d"}, - {file = "protobuf-3.15.8-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:1c0e9e56202b9dccbc094353285a252e2b7940b74fdf75f1b4e1b137833fabd7"}, - {file = "protobuf-3.15.8-py2.py3-none-any.whl", hash = "sha256:a0a08c6b2e6d6c74a6eb5bf6184968eefb1569279e78714e239d33126e753403"}, - {file = "protobuf-3.15.8.tar.gz", hash = "sha256:0277f62b1e42210cafe79a71628c1d553348da81cbd553402a7f7549c50b11d0"}, -] -pyasn1 = [ - {file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"}, - {file = "pyasn1-0.4.8-py2.5.egg", hash = "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf"}, - {file = "pyasn1-0.4.8-py2.6.egg", hash = "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00"}, - {file = "pyasn1-0.4.8-py2.7.egg", hash = "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8"}, - {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, - {file = "pyasn1-0.4.8-py3.1.egg", hash = "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86"}, - {file = "pyasn1-0.4.8-py3.2.egg", hash = "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7"}, - {file = "pyasn1-0.4.8-py3.3.egg", hash = "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576"}, - {file = "pyasn1-0.4.8-py3.4.egg", hash = "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12"}, - {file = "pyasn1-0.4.8-py3.5.egg", hash = "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2"}, - {file = "pyasn1-0.4.8-py3.6.egg", hash = "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359"}, - {file = "pyasn1-0.4.8-py3.7.egg", hash = "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776"}, - {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, -] -pyasn1-modules = [ - {file = "pyasn1-modules-0.2.8.tar.gz", hash = "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e"}, - {file = "pyasn1_modules-0.2.8-py2.4.egg", hash = "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199"}, - {file = "pyasn1_modules-0.2.8-py2.5.egg", hash = "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405"}, - {file = "pyasn1_modules-0.2.8-py2.6.egg", hash = "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb"}, - {file = "pyasn1_modules-0.2.8-py2.7.egg", hash = "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8"}, - {file = "pyasn1_modules-0.2.8-py2.py3-none-any.whl", hash = "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74"}, - {file = "pyasn1_modules-0.2.8-py3.1.egg", hash = "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d"}, - {file = "pyasn1_modules-0.2.8-py3.2.egg", hash = "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45"}, - {file = "pyasn1_modules-0.2.8-py3.3.egg", hash = "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4"}, - {file = "pyasn1_modules-0.2.8-py3.4.egg", hash = "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811"}, - {file = "pyasn1_modules-0.2.8-py3.5.egg", hash = "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed"}, - {file = "pyasn1_modules-0.2.8-py3.6.egg", hash = "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0"}, - {file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"}, -] -pyparsing = [ - {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, - {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, -] -python-dateutil = [ - {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, - {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"}, -] -pywavelets = [ - {file = "PyWavelets-1.1.1-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:35959c041ec014648575085a97b498eafbbaa824f86f6e4a59bfdef8a3fe6308"}, - {file = "PyWavelets-1.1.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:55e39ec848ceec13c9fa1598253ae9dd5c31d09dfd48059462860d2b908fb224"}, - {file = "PyWavelets-1.1.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c06d2e340c7bf8b9ec71da2284beab8519a3908eab031f4ea126e8ccfc3fd567"}, - {file = "PyWavelets-1.1.1-cp35-cp35m-win32.whl", hash = "sha256:be105382961745f88d8196bba5a69ee2c4455d87ad2a2e5d1eed6bd7fda4d3fd"}, - {file = "PyWavelets-1.1.1-cp35-cp35m-win_amd64.whl", hash = "sha256:076ca8907001fdfe4205484f719d12b4a0262dfe6652fa1cfc3c5c362d14dc84"}, - {file = "PyWavelets-1.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7947e51ca05489b85928af52a34fe67022ab5b81d4ae32a4109a99e883a0635e"}, - {file = "PyWavelets-1.1.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9e2528823ccf5a0a1d23262dfefe5034dce89cd84e4e124dc553dfcdf63ebb92"}, - {file = "PyWavelets-1.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:80b924edbc012ded8aa8b91cb2fd6207fb1a9a3a377beb4049b8a07445cec6f0"}, - {file = "PyWavelets-1.1.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:c2a799e79cee81a862216c47e5623c97b95f1abee8dd1f9eed736df23fb653fb"}, - {file = "PyWavelets-1.1.1-cp36-cp36m-win32.whl", hash = "sha256:d510aef84d9852653d079c84f2f81a82d5d09815e625f35c95714e7364570ad4"}, - {file = "PyWavelets-1.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:889d4c5c5205a9c90118c1980df526857929841df33e4cd1ff1eff77c6817a65"}, - {file = "PyWavelets-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:68b5c33741d26c827074b3d8f0251de1c3019bb9567b8d303eb093c822ce28f1"}, - {file = "PyWavelets-1.1.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:18a51b3f9416a2ae6e9a35c4af32cf520dd7895f2b69714f4aa2f4342fca47f9"}, - {file = "PyWavelets-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:cfe79844526dd92e3ecc9490b5031fca5f8ab607e1e858feba232b1b788ff0ea"}, - {file = "PyWavelets-1.1.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:2f7429eeb5bf9c7068002d0d7f094ed654c77a70ce5e6198737fd68ab85f8311"}, - {file = "PyWavelets-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:720dbcdd3d91c6dfead79c80bf8b00a1d8aa4e5d551dc528c6d5151e4efc3403"}, - {file = "PyWavelets-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:bc5e87b72371da87c9bebc68e54882aada9c3114e640de180f62d5da95749cd3"}, - {file = "PyWavelets-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:98b2669c5af842a70cfab33a7043fcb5e7535a690a00cd251b44c9be0be418e5"}, - {file = "PyWavelets-1.1.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e02a0558e0c2ac8b8bbe6a6ac18c136767ec56b96a321e0dfde2173adfa5a504"}, - {file = "PyWavelets-1.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6162dc0ae04669ea04b4b51420777b9ea2d30b0a9d02901b2a3b4d61d159c2e9"}, - {file = "PyWavelets-1.1.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:39c74740718e420d38c78ca4498568fa57976d78d5096277358e0fa9629a7aea"}, - {file = "PyWavelets-1.1.1-cp38-cp38-win32.whl", hash = "sha256:79f5b54f9dc353e5ee47f0c3f02bebd2c899d49780633aa771fed43fa20b3149"}, - {file = "PyWavelets-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:935ff247b8b78bdf77647fee962b1cc208c51a7b229db30b9ba5f6da3e675178"}, - {file = "PyWavelets-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6ebfefebb5c6494a3af41ad8c60248a95da267a24b79ed143723d4502b1fe4d7"}, - {file = "PyWavelets-1.1.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6bc78fb9c42a716309b4ace56f51965d8b5662c3ba19d4591749f31773db1125"}, - {file = "PyWavelets-1.1.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:411e17ca6ed8cf5e18a7ca5ee06a91c25800cc6c58c77986202abf98d749273a"}, - {file = "PyWavelets-1.1.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:83c5e3eb78ce111c2f0b45f46106cc697c3cb6c4e5f51308e1f81b512c70c8fb"}, - {file = "PyWavelets-1.1.1-cp39-cp39-win32.whl", hash = "sha256:2b634a54241c190ee989a4af87669d377b37c91bcc9cf0efe33c10ff847f7841"}, - {file = "PyWavelets-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:732bab78435c48be5d6bc75486ef629d7c8f112e07b313bf1f1a2220ab437277"}, - {file = "PyWavelets-1.1.1.tar.gz", hash = "sha256:1a64b40f6acb4ffbaccce0545d7fc641744f95351f62e4c6aaa40549326008c9"}, -] -requests = [ - {file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"}, - {file = "requests-2.25.1.tar.gz", hash = "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"}, -] -requests-oauthlib = [ - {file = "requests-oauthlib-1.3.0.tar.gz", hash = "sha256:b4261601a71fd721a8bd6d7aa1cc1d6a8a93b4a9f5e96626f8e4d91e8beeaa6a"}, - {file = "requests_oauthlib-1.3.0-py2.py3-none-any.whl", hash = "sha256:7f71572defaecd16372f9006f33c2ec8c077c3cfa6f5911a9a90202beb513f3d"}, - {file = "requests_oauthlib-1.3.0-py3.7.egg", hash = "sha256:fa6c47b933f01060936d87ae9327fead68768b69c6c9ea2109c48be30f2d4dbc"}, -] -rope = [ - {file = "rope-0.19.0.tar.gz", hash = "sha256:64e6d747532e1f5c8009ec5aae3e5523a5bcedf516f39a750d57d8ed749d90da"}, -] -rsa = [ - {file = "rsa-4.4-py2.py3-none-any.whl", hash = "sha256:4afbaaecc3e9550c7351fdf0ab3fea1857ff616b85bab59215f00fb42e0e9582"}, - {file = "rsa-4.4.tar.gz", hash = "sha256:5d95293bbd0fbee1dd9cb4b72d27b723942eb50584abc8c4f5f00e4bcfa55307"}, -] -scikit-image = [ - {file = "scikit-image-0.17.2.tar.gz", hash = "sha256:bd954c0588f0f7e81d9763dc95e06950e68247d540476e06cb77bcbcd8c2d8b3"}, - {file = "scikit_image-0.17.2-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:11eec2e65cd4cd6487fe1089aa3538dbe25525aec7a36f5a0f14145df0163ce7"}, - {file = "scikit_image-0.17.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:c5c277704b12e702e34d1f7b7a04d5ee8418735f535d269c74c02c6c9f8abee2"}, - {file = "scikit_image-0.17.2-cp36-cp36m-win32.whl", hash = "sha256:1fda9109a19dc9d7a4ac152d1fc226fed7282ad186a099f14c0aa9151f0c758e"}, - {file = "scikit_image-0.17.2-cp36-cp36m-win_amd64.whl", hash = "sha256:86a834f9a4d30201c0803a48a25364fe8f93f9feb3c58f2c483d3ce0a3e5fe4a"}, - {file = "scikit_image-0.17.2-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:87ca5168c6fc36b7a298a1db2d185a8298f549854342020f282f747a4e4ddce9"}, - {file = "scikit_image-0.17.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e99fa7514320011b250a21ab855fdd61ddcc05d3c77ec9e8f13edcc15d3296b5"}, - {file = "scikit_image-0.17.2-cp37-cp37m-win32.whl", hash = "sha256:ee3db438b5b9f8716a91ab26a61377a8a63356b186706f5b979822cc7241006d"}, - {file = "scikit_image-0.17.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6b65a103edbc34b22640daf3b084dc9e470c358d3298c10aa9e3b424dcc02db6"}, - {file = "scikit_image-0.17.2-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c0876e562991b0babff989ff4d00f35067a2ddef82e5fdd895862555ffbaec25"}, - {file = "scikit_image-0.17.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:178210582cc62a5b25c633966658f1f2598615f9c3f27f36cf45055d2a74b401"}, - {file = "scikit_image-0.17.2-cp38-cp38-win32.whl", hash = "sha256:7bedd3881ca4fea657a894815bcd5e5bf80944c26274f6b6417bb770c3f4f8e6"}, - {file = "scikit_image-0.17.2-cp38-cp38-win_amd64.whl", hash = "sha256:113bcacdfc839854f527a166a71768708328208e7b66e491050d6a57fa6727c7"}, -] -scipy = [ - {file = "scipy-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4f12d13ffbc16e988fa40809cbbd7a8b45bc05ff6ea0ba8e3e41f6f4db3a9e47"}, - {file = "scipy-1.5.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a254b98dbcc744c723a838c03b74a8a34c0558c9ac5c86d5561703362231107d"}, - {file = "scipy-1.5.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:368c0f69f93186309e1b4beb8e26d51dd6f5010b79264c0f1e9ca00cd92ea8c9"}, - {file = "scipy-1.5.4-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:4598cf03136067000855d6b44d7a1f4f46994164bcd450fb2c3d481afc25dd06"}, - {file = "scipy-1.5.4-cp36-cp36m-win32.whl", hash = "sha256:e98d49a5717369d8241d6cf33ecb0ca72deee392414118198a8e5b4c35c56340"}, - {file = "scipy-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:65923bc3809524e46fb7eb4d6346552cbb6a1ffc41be748535aa502a2e3d3389"}, - {file = "scipy-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9ad4fcddcbf5dc67619379782e6aeef41218a79e17979aaed01ed099876c0e62"}, - {file = "scipy-1.5.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f87b39f4d69cf7d7529d7b1098cb712033b17ea7714aed831b95628f483fd012"}, - {file = "scipy-1.5.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:25b241034215247481f53355e05f9e25462682b13bd9191359075682adcd9554"}, - {file = "scipy-1.5.4-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:fa789583fc94a7689b45834453fec095245c7e69c58561dc159b5d5277057e4c"}, - {file = "scipy-1.5.4-cp37-cp37m-win32.whl", hash = "sha256:d6d25c41a009e3c6b7e757338948d0076ee1dd1770d1c09ec131f11946883c54"}, - {file = "scipy-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:2c872de0c69ed20fb1a9b9cf6f77298b04a26f0b8720a5457be08be254366c6e"}, - {file = "scipy-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e360cb2299028d0b0d0f65a5c5e51fc16a335f1603aa2357c25766c8dab56938"}, - {file = "scipy-1.5.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:3397c129b479846d7eaa18f999369a24322d008fac0782e7828fa567358c36ce"}, - {file = "scipy-1.5.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:168c45c0c32e23f613db7c9e4e780bc61982d71dcd406ead746c7c7c2f2004ce"}, - {file = "scipy-1.5.4-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:213bc59191da2f479984ad4ec39406bf949a99aba70e9237b916ce7547b6ef42"}, - {file = "scipy-1.5.4-cp38-cp38-win32.whl", hash = "sha256:634568a3018bc16a83cda28d4f7aed0d803dd5618facb36e977e53b2df868443"}, - {file = "scipy-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:b03c4338d6d3d299e8ca494194c0ae4f611548da59e3c038813f1a43976cb437"}, - {file = "scipy-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3d5db5d815370c28d938cf9b0809dade4acf7aba57eaf7ef733bfedc9b2474c4"}, - {file = "scipy-1.5.4-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b0ceb23560f46dd236a8ad4378fc40bad1783e997604ba845e131d6c680963e"}, - {file = "scipy-1.5.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:ed572470af2438b526ea574ff8f05e7f39b44ac37f712105e57fc4d53a6fb660"}, - {file = "scipy-1.5.4-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:8c8d6ca19c8497344b810b0b0344f8375af5f6bb9c98bd42e33f747417ab3f57"}, - {file = "scipy-1.5.4-cp39-cp39-win32.whl", hash = "sha256:d84cadd7d7998433334c99fa55bcba0d8b4aeff0edb123b2a1dfcface538e474"}, - {file = "scipy-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:cc1f78ebc982cd0602c9a7615d878396bec94908db67d4ecddca864d049112f2"}, - {file = "scipy-1.5.4.tar.gz", hash = "sha256:4a453d5e5689de62e5d38edf40af3f17560bfd63c9c5bd228c18c1f99afa155b"}, -] -shapely = [ - {file = "Shapely-1.7.1-1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:46da0ea527da9cf9503e66c18bab6981c5556859e518fe71578b47126e54ca93"}, - {file = "Shapely-1.7.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:4c10f317e379cc404f8fc510cd9982d5d3e7ba13a9cfd39aa251d894c6366798"}, - {file = "Shapely-1.7.1-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:17df66e87d0fe0193910aeaa938c99f0b04f67b430edb8adae01e7be557b141b"}, - {file = "Shapely-1.7.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:da38ed3d65b8091447dc3717e5218cc336d20303b77b0634b261bc5c1aa2bae8"}, - {file = "Shapely-1.7.1-cp35-cp35m-win32.whl", hash = "sha256:8e7659dd994792a0aad8fb80439f59055a21163e236faf2f9823beb63a380e19"}, - {file = "Shapely-1.7.1-cp35-cp35m-win_amd64.whl", hash = "sha256:791477edb422692e7dc351c5ed6530eb0e949a31b45569946619a0d9cd5f53cb"}, - {file = "Shapely-1.7.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e3afccf0437edc108eef1e2bb9cc4c7073e7705924eb4cd0bf7715cd1ef0ce1b"}, - {file = "Shapely-1.7.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8f15b6ce67dcc05b61f19c689b60f3fe58550ba994290ff8332f711f5aaa9840"}, - {file = "Shapely-1.7.1-cp36-cp36m-win32.whl", hash = "sha256:60e5b2282619249dbe8dc5266d781cc7d7fb1b27fa49f8241f2167672ad26719"}, - {file = "Shapely-1.7.1-cp36-cp36m-win_amd64.whl", hash = "sha256:de618e67b64a51a0768d26a9963ecd7d338a2cf6e9e7582d2385f88ad005b3d1"}, - {file = "Shapely-1.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:182716ffb500d114b5d1b75d7fd9d14b7d3414cef3c38c0490534cc9ce20981a"}, - {file = "Shapely-1.7.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:4f3c59f6dbf86a9fc293546de492f5e07344e045f9333f3a753f2dda903c45d1"}, - {file = "Shapely-1.7.1-cp37-cp37m-win32.whl", hash = "sha256:6871acba8fbe744efa4f9f34e726d070bfbf9bffb356a8f6d64557846324232b"}, - {file = "Shapely-1.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:35be1c5d869966569d3dfd4ec31832d7c780e9df760e1fe52131105685941891"}, - {file = "Shapely-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:052eb5b9ba756808a7825e8a8020fb146ec489dd5c919e7d139014775411e688"}, - {file = "Shapely-1.7.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:90a3e2ae0d6d7d50ff2370ba168fbd416a53e7d8448410758c5d6a5920646c1d"}, - {file = "Shapely-1.7.1-cp38-cp38-win32.whl", hash = "sha256:a3774516c8a83abfd1ddffb8b6ec1b0935d7fe6ea0ff5c31a18bfdae567b4eba"}, - {file = "Shapely-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:6593026cd3f5daaea12bcc51ae5c979318070fefee210e7990cb8ac2364e79a1"}, - {file = "Shapely-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:617bf046a6861d7c6b44d2d9cb9e2311548638e684c2cd071d8945f24a926263"}, - {file = "Shapely-1.7.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b40cc7bb089ae4aa9ddba1db900b4cd1bce3925d2a4b5837b639e49de054784f"}, - {file = "Shapely-1.7.1-cp39-cp39-win32.whl", hash = "sha256:2df5260d0f2983309776cb41bfa85c464ec07018d88c0ecfca23d40bfadae2f1"}, - {file = "Shapely-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:a5c3a50d823c192f32615a2a6920e8c046b09e07a58eba220407335a9cd2e8ea"}, - {file = "Shapely-1.7.1.tar.gz", hash = "sha256:1641724c1055459a7e2b8bbe47ba25bdc89554582e62aec23cb3f3ca25f9b129"}, -] -six = [ - {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, - {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, -] -tensorboard = [ - {file = "tensorboard-2.5.0-py3-none-any.whl", hash = "sha256:e167460085b6528956b33bab1c970c989cdce47a6616273880733f5e7bde452e"}, -] -tensorboard-data-server = [ - {file = "tensorboard_data_server-0.6.0-py3-none-any.whl", hash = "sha256:a4b8e1c3fc85237b3afeef450db06c9a9b25f5854ad27c21667a90808acd1822"}, - {file = "tensorboard_data_server-0.6.0-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:2d723d73e3a3b0a4498f56c64c39e2e26ac192414891df22c9f152b7058fd6bc"}, - {file = "tensorboard_data_server-0.6.0-py3-none-manylinux2010_x86_64.whl", hash = "sha256:b620e520d3d535ceb896557acca0029fd7fd2f9f408af35abc2d2dad91f0345d"}, -] -tensorboard-plugin-wit = [ - {file = "tensorboard_plugin_wit-1.8.0-py3-none-any.whl", hash = "sha256:2a80d1c551d741e99b2f197bb915d8a133e24adb8da1732b840041860f91183a"}, -] -terminaltables = [ - {file = "terminaltables-3.1.0.tar.gz", hash = "sha256:f3eb0eb92e3833972ac36796293ca0906e998dc3be91fbe1f8615b331b853b81"}, -] -tifffile = [ - {file = "tifffile-2020.9.3-py3-none-any.whl", hash = "sha256:e7c03c5827def91bec6e353e728f4bd02f35f08b142cd520f66b21f31ff4402b"}, - {file = "tifffile-2020.9.3.tar.gz", hash = "sha256:5b5f079d61c473795d71aca4e91068811fbb43f6f115e3ef9e77f079c23b17c4"}, -] -torch = [ - {file = "torch-1.7.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:422e64e98d0e100c360993819d0307e5d56e9517b26135808ad68984d577d75a"}, - {file = "torch-1.7.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f0aaf657145533824b15f2fd8fde8f8c67fe6c6281088ef588091f03fad90243"}, - {file = "torch-1.7.1-cp36-none-macosx_10_9_x86_64.whl", hash = "sha256:af464a6f4314a875035e0c4c2b07517599704b214634f4ed3ad2e748c5ef291f"}, - {file = "torch-1.7.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5d76c255a41484c1d41a9ff570b9c9f36cb85df9428aa15a58ae16ac7cfc2ea6"}, - {file = "torch-1.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:d241c3f1c4d563e4ba86f84769c23e12606db167ee6f674eedff6d02901462e3"}, - {file = "torch-1.7.1-cp37-none-macosx_10_9_x86_64.whl", hash = "sha256:de84b4166e3f7335eb868b51d3bbd909ec33828af27290b4171bce832a55be3c"}, - {file = "torch-1.7.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:dd2fc6880c95e836960d86efbbc7f63d3287f2e1893c51d31f96dbfe02f0d73e"}, - {file = "torch-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:e000b94be3aa58ad7f61e7d07cf379ea9366cf6c6874e68bd58ad0bdc537b3a7"}, - {file = "torch-1.7.1-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:2e49cac969976be63117004ee00d0a3e3dd4ea662ad77383f671b8992825de1a"}, - {file = "torch-1.7.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:a3793dcceb12b1e2281290cca1277c5ce86ddfd5bf044f654285a4d69057aea7"}, - {file = "torch-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:6652a767a0572ae0feb74ad128758e507afd3b8396b6e7f147e438ba8d4c6f63"}, - {file = "torch-1.7.1-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:38d67f4fb189a92a977b2c0a38e4f6dd413e0bf55aa6d40004696df7e40a71ff"}, -] -torchsummary = [ - {file = "torchsummary-1.5.1-py3-none-any.whl", hash = "sha256:10f41d1743fb918f83293f13183f532ab1bb8f6639a1b89e5f8592ec1919a976"}, - {file = "torchsummary-1.5.1.tar.gz", hash = "sha256:981bf689e22e0cf7f95c746002f20a24ad26aa6b9d861134a14bc6ce92230590"}, -] -torchvision = [ - {file = "torchvision-0.8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:86fae370d222f76ad57c57c3bee03f78b8db727743bfb4c1559a3d395159cea8"}, - {file = "torchvision-0.8.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:951239b5fcb911dbf78c1385d677f5f48c7a1b12859e3d3ec287562821b17cf2"}, - {file = "torchvision-0.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:24db8f4c3d812a032273f68563ad5dbd724f5bfbed523d0c6dce8cede26bb153"}, - {file = "torchvision-0.8.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:b068f6bcbe91bdd34dda0a39e8a26392add45a3be82543f6dd523b76484fb56f"}, - {file = "torchvision-0.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:afb76a66b9b0693f758a881a2bf333ed97e3c0c3f15a413c4f49d8dd8bd21307"}, - {file = "torchvision-0.8.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd8817e9197fc60ebae37162a445db90bbf35591314a5767ad3d1490b5d65b0f"}, - {file = "torchvision-0.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1bd58acc3366ec02266aae56a7a752d43ef07de4a6ba420c4f907d0c9168bb8c"}, - {file = "torchvision-0.8.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:976750a49db2e23dc5a1ed0b5c31f7af51ed2702eee410ee09ef985c3a3e48cf"}, -] -tqdm = [ - {file = "tqdm-4.61.1-py2.py3-none-any.whl", hash = "sha256:aa0c29f03f298951ac6318f7c8ce584e48fa22ec26396e6411e43d038243bdb2"}, - {file = "tqdm-4.61.1.tar.gz", hash = "sha256:24be966933e942be5f074c29755a95b315c69a91f839a29139bf26ffffe2d3fd"}, -] -typing-extensions = [ - {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, - {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, - {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, -] -urllib3 = [ - {file = "urllib3-1.22-py2.py3-none-any.whl", hash = "sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b"}, - {file = "urllib3-1.22.tar.gz", hash = "sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f"}, -] -werkzeug = [ - {file = "Werkzeug-1.0.1-py2.py3-none-any.whl", hash = "sha256:2de2a5db0baeae7b2d2664949077c2ac63fbd16d98da0ff71837f7d1dea3fd43"}, - {file = "Werkzeug-1.0.1.tar.gz", hash = "sha256:6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c"}, -] -zipp = [ - {file = "zipp-3.4.1-py3-none-any.whl", hash = "sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098"}, - {file = "zipp-3.4.1.tar.gz", hash = "sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76"}, -] diff --git a/cv/detection/yolov3/pytorch/pyproject.toml b/cv/detection/yolov3/pytorch/pyproject.toml deleted file mode 100644 index 7e3a87f61..000000000 --- a/cv/detection/yolov3/pytorch/pyproject.toml +++ /dev/null @@ -1,34 +0,0 @@ -[tool.poetry] -name = "PyTorchYolo" -version = "1.4.2" -readme = "README.md" -repository = "https://github.com/eriklindernoren/PyTorch-YOLOv3" -description = "Minimal PyTorch implementation of YOLO" -authors = ["Florian Vahl ", "Erik Linder-Noren "] -license = "GPL-3.0" - -[tool.poetry.dependencies] -python = ">=3.6.2" -numpy = "^1.19.5" -torch = ">=1.0" -torchvision = "^0.8.2" -matplotlib = "^3.3.3" -tensorboard = "^2.4.0" -terminaltables = "^3.1.0" -Pillow = "^8.1.0" -tqdm = "^4.55.1" -imgaug = "^0.4.0" -torchsummary = "^1.5.1" - -[tool.poetry.dev-dependencies] -rope = "^0.19.0" -profilehooks = "^1.12.0" - -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" - -[tool.poetry.scripts] -yolo-detect = "pytorchyolo.detect:run" -yolo-train = "pytorchyolo.train:run" -yolo-test = "pytorchyolo.test:run" diff --git a/cv/detection/yolov3/pytorch/pytorchyolo/__init__.py b/cv/detection/yolov3/pytorch/pytorchyolo/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/cv/detection/yolov3/pytorch/pytorchyolo/detect.py b/cv/detection/yolov3/pytorch/pytorchyolo/detect.py deleted file mode 100644 index ca59f4f40..000000000 --- a/cv/detection/yolov3/pytorch/pytorchyolo/detect.py +++ /dev/null @@ -1,285 +0,0 @@ -#! /usr/bin/env python3 - -from __future__ import division - -import os -import argparse -import tqdm -import random -import numpy as np - -from PIL import Image - -import torch -import torchvision.transforms as transforms -from torch.utils.data import DataLoader -from torch.autograd import Variable - -from pytorchyolo.models import load_model -from pytorchyolo.utils.utils import load_classes, rescale_boxes, non_max_suppression, print_environment_info -from pytorchyolo.utils.datasets import ImageFolder -from pytorchyolo.utils.transforms import Resize, DEFAULT_TRANSFORMS - -import matplotlib.pyplot as plt -import matplotlib.patches as patches -from matplotlib.ticker import NullLocator - - -def detect_directory(model_path, weights_path, img_path, classes, output_path, - batch_size=8, img_size=416, n_cpu=8, conf_thres=0.5, nms_thres=0.5): - """Detects objects on all images in specified directory and saves output images with drawn detections. - - :param model_path: Path to model definition file (.cfg) - :type model_path: str - :param weights_path: Path to weights or checkpoint file (.weights or .pth) - :type weights_path: str - :param img_path: Path to directory with images to inference - :type img_path: str - :param classes: List of class names - :type classes: [str] - :param output_path: Path to output directory - :type output_path: str - :param batch_size: Size of each image batch, defaults to 8 - :type batch_size: int, optional - :param img_size: Size of each image dimension for yolo, defaults to 416 - :type img_size: int, optional - :param n_cpu: Number of cpu threads to use during batch generation, defaults to 8 - :type n_cpu: int, optional - :param conf_thres: Object confidence threshold, defaults to 0.5 - :type conf_thres: float, optional - :param nms_thres: IOU threshold for non-maximum suppression, defaults to 0.5 - :type nms_thres: float, optional - """ - dataloader = _create_data_loader(img_path, batch_size, img_size, n_cpu) - model = load_model(model_path, weights_path) - img_detections, imgs = detect( - model, - dataloader, - output_path, - img_size, - conf_thres, - nms_thres) - _draw_and_save_output_images( - img_detections, imgs, img_size, output_path, classes) - - -def detect_image(model, image, img_size=416, conf_thres=0.5, nms_thres=0.5): - """Inferences one image with model. - - :param model: Model for inference - :type model: models.Darknet - :param image: Image to inference - :type image: nd.array - :param img_size: Size of each image dimension for yolo, defaults to 416 - :type img_size: int, optional - :param conf_thres: Object confidence threshold, defaults to 0.5 - :type conf_thres: float, optional - :param nms_thres: IOU threshold for non-maximum suppression, defaults to 0.5 - :type nms_thres: float, optional - :return: Detections on image with each detection in the format: [x1, y1, x2, y2, confidence, class] - :rtype: nd.array - """ - model.eval() # Set model to evaluation mode - - # Configure input - input_img = transforms.Compose([ - DEFAULT_TRANSFORMS, - Resize(img_size)])( - (image, np.zeros((1, 5))))[0].unsqueeze(0) - - if torch.cuda.is_available(): - input_img = input_img.to("cuda") - - # Get detections - with torch.no_grad(): - detections = model(input_img) - detections = non_max_suppression(detections, conf_thres, nms_thres) - detections = rescale_boxes(detections[0], img_size, image.shape[:2]) - return detections.numpy() - - -def detect(model, dataloader, output_path, img_size, conf_thres, nms_thres): - """Inferences images with model. - - :param model: Model for inference - :type model: models.Darknet - :param dataloader: Dataloader provides the batches of images to inference - :type dataloader: DataLoader - :param output_path: Path to output directory - :type output_path: str - :param img_size: Size of each image dimension for yolo, defaults to 416 - :type img_size: int, optional - :param conf_thres: Object confidence threshold, defaults to 0.5 - :type conf_thres: float, optional - :param nms_thres: IOU threshold for non-maximum suppression, defaults to 0.5 - :type nms_thres: float, optional - :return: List of detections. The coordinates are given for the padded image that is provided by the dataloader. - Use `utils.rescale_boxes` to transform them into the desired input image coordinate system before its transformed by the dataloader), - List of input image paths - :rtype: [Tensor], [str] - """ - # Create output directory, if missing - os.makedirs(output_path, exist_ok=True) - - model.eval() # Set model to evaluation mode - - Tensor = torch.cuda.FloatTensor if torch.cuda.is_available() else torch.FloatTensor - - img_detections = [] # Stores detections for each image index - imgs = [] # Stores image paths - - for (img_paths, input_imgs) in tqdm.tqdm(dataloader, desc="Detecting"): - # Configure input - input_imgs = Variable(input_imgs.type(Tensor)) - - # Get detections - with torch.no_grad(): - detections = model(input_imgs) - detections = non_max_suppression(detections, conf_thres, nms_thres) - - # Store image and detections - img_detections.extend(detections) - imgs.extend(img_paths) - return img_detections, imgs - - -def _draw_and_save_output_images(img_detections, imgs, img_size, output_path, classes): - """Draws detections in output images and stores them. - - :param img_detections: List of detections - :type img_detections: [Tensor] - :param imgs: List of paths to image files - :type imgs: [str] - :param img_size: Size of each image dimension for yolo - :type img_size: int - :param output_path: Path of output directory - :type output_path: str - :param classes: List of class names - :type classes: [str] - """ - - # Iterate through images and save plot of detections - for (image_path, detections) in zip(imgs, img_detections): - print(f"Image {image_path}:") - _draw_and_save_output_image( - image_path, detections, img_size, output_path, classes) - - -def _draw_and_save_output_image(image_path, detections, img_size, output_path, classes): - """Draws detections in output image and stores this. - - :param image_path: Path to input image - :type image_path: str - :param detections: List of detections on image - :type detections: [Tensor] - :param img_size: Size of each image dimension for yolo - :type img_size: int - :param output_path: Path of output directory - :type output_path: str - :param classes: List of class names - :type classes: [str] - """ - # Create plot - img = np.array(Image.open(image_path)) - plt.figure() - fig, ax = plt.subplots(1) - ax.imshow(img) - # Rescale boxes to original image - detections = rescale_boxes(detections, img_size, img.shape[:2]) - unique_labels = detections[:, -1].cpu().unique() - n_cls_preds = len(unique_labels) - # Bounding-box colors - cmap = plt.get_cmap("tab20b") - colors = [cmap(i) for i in np.linspace(0, 1, n_cls_preds)] - bbox_colors = random.sample(colors, n_cls_preds) - for x1, y1, x2, y2, conf, cls_pred in detections: - - print(f"\t+ Label: {classes[int(cls_pred)]} | Confidence: {conf.item():0.4f}") - - box_w = x2 - x1 - box_h = y2 - y1 - - color = bbox_colors[int(np.where(unique_labels == int(cls_pred))[0])] - # Create a Rectangle patch - bbox = patches.Rectangle((x1, y1), box_w, box_h, linewidth=2, edgecolor=color, facecolor="none") - # Add the bbox to the plot - ax.add_patch(bbox) - # Add label - plt.text( - x1, - y1, - s=classes[int(cls_pred)], - color="white", - verticalalignment="top", - bbox={"color": color, "pad": 0}) - - # Save generated image with detections - plt.axis("off") - plt.gca().xaxis.set_major_locator(NullLocator()) - plt.gca().yaxis.set_major_locator(NullLocator()) - filename = os.path.basename(image_path).split(".")[0] - output_path = os.path.join(output_path, f"{filename}.png") - plt.savefig(output_path, bbox_inches="tight", pad_inches=0.0) - plt.close() - - -def _create_data_loader(img_path, batch_size, img_size, n_cpu): - """Creates a DataLoader for inferencing. - - :param img_path: Path to file containing all paths to validation images. - :type img_path: str - :param batch_size: Size of each image batch - :type batch_size: int - :param img_size: Size of each image dimension for yolo - :type img_size: int - :param n_cpu: Number of cpu threads to use during batch generation - :type n_cpu: int - :return: Returns DataLoader - :rtype: DataLoader - """ - dataset = ImageFolder( - img_path, - transform=transforms.Compose([DEFAULT_TRANSFORMS, Resize(img_size)])) - dataloader = DataLoader( - dataset, - batch_size=batch_size, - shuffle=False, - num_workers=n_cpu, - pin_memory=True) - return dataloader - - -def run(): - print_environment_info() - parser = argparse.ArgumentParser(description="Detect objects on images.") - parser.add_argument("-m", "--model", type=str, default="config/yolov3.cfg", help="Path to model definition file (.cfg)") - parser.add_argument("-w", "--weights", type=str, default="weights/yolov3.weights", help="Path to weights or checkpoint file (.weights or .pth)") - parser.add_argument("-i", "--images", type=str, default="data/samples", help="Path to directory with images to inference") - parser.add_argument("-c", "--classes", type=str, default="data/coco.names", help="Path to classes label file (.names)") - parser.add_argument("-o", "--output", type=str, default="output", help="Path to output directory") - parser.add_argument("-b", "--batch_size", type=int, default=1, help="Size of each image batch") - parser.add_argument("--img_size", type=int, default=416, help="Size of each image dimension for yolo") - parser.add_argument("--n_cpu", type=int, default=8, help="Number of cpu threads to use during batch generation") - parser.add_argument("--conf_thres", type=float, default=0.5, help="Object confidence threshold") - parser.add_argument("--nms_thres", type=float, default=0.4, help="IOU threshold for non-maximum suppression") - args = parser.parse_args() - print(f"Command line arguments: {args}") - - # Extract class names from file - classes = load_classes(args.classes) # List of class names - - detect_directory( - args.model, - args.weights, - args.images, - classes, - args.output, - batch_size=args.batch_size, - img_size=args.img_size, - n_cpu=args.n_cpu, - conf_thres=args.conf_thres, - nms_thres=args.nms_thres) - - -if __name__ == '__main__': - run() diff --git a/cv/detection/yolov3/pytorch/pytorchyolo/finetune.py b/cv/detection/yolov3/pytorch/pytorchyolo/finetune.py deleted file mode 100644 index bf37afcfa..000000000 --- a/cv/detection/yolov3/pytorch/pytorchyolo/finetune.py +++ /dev/null @@ -1,602 +0,0 @@ -#! /usr/bin/env python3 - -from __future__ import division - -import os -import argparse -import tqdm -import time -import datetime -import sys -sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..')) - -import torch - -try: - from torch.utils.tensorboard import SummaryWriter -except: - class SummaryWriter(object): - def __init__(self, log_dir=None, comment='', purge_step=None, max_queue=10, - flush_secs=120, filename_suffix=''): - if not log_dir: - import socket - from datetime import datetime - current_time = datetime.now().strftime('%b%d_%H-%M-%S') - log_dir = os.path.join( - 'runs', current_time + '_' + socket.gethostname() + comment) - self.log_dir = log_dir - self.purge_step = purge_step - self.max_queue = max_queue - self.flush_secs = flush_secs - self.filename_suffix = filename_suffix - - # Initialize the file writers, but they can be cleared out on close - # and recreated later as needed. - self.file_writer = self.all_writers = None - self._get_file_writer() - - # Create default bins for histograms, see generate_testdata.py in tensorflow/tensorboard - v = 1E-12 - buckets = [] - neg_buckets = [] - while v < 1E20: - buckets.append(v) - neg_buckets.append(-v) - v *= 1.1 - self.default_bins = neg_buckets[::-1] + [0] + buckets - - def _check_caffe2_blob(self, item): pass - - def _get_file_writer(self): pass - - def get_logdir(self): - """Returns the directory where event files will be written.""" - return self.log_dir - - def add_hparams(self, hparam_dict, metric_dict, hparam_domain_discrete=None, run_name=None): pass - - def add_scalar(self, tag, scalar_value, global_step=None, walltime=None, new_style=False): pass - - def add_scalars(self, main_tag, tag_scalar_dict, global_step=None, walltime=None): pass - - def add_histogram(self, tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None): pass - - def add_histogram_raw(self, tag, min, max, num, sum, sum_squares, bucket_limits, bucket_counts, global_step=None, walltime=None): pass - - def add_image(self, tag, img_tensor, global_step=None, walltime=None, dataformats='CHW'): pass - - def add_images(self, tag, img_tensor, global_step=None, walltime=None, dataformats='NCHW'): pass - - def add_image_with_boxes(self, tag, img_tensor, box_tensor, global_step=None, walltime=None, rescale=1, dataformats='CHW', labels=None): pass - - def add_figure(self, tag, figure, global_step=None, close=True, walltime=None): pass - - def add_video(self, tag, vid_tensor, global_step=None, fps=4, walltime=None): pass - - def add_audio(self, tag, snd_tensor, global_step=None, sample_rate=44100, walltime=None): pass - - def add_text(self, tag, text_string, global_step=None, walltime=None): pass - - def add_onnx_graph(self, prototxt): pass - - def add_graph(self, model, input_to_model=None, verbose=False): pass - - @staticmethod - def _encode(rawstr): pass - - def add_embedding(self, mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None): pass - - def add_pr_curve(self, tag, labels, predictions, global_step=None, num_thresholds=127, weights=None, walltime=None): pass - - def add_pr_curve_raw(self, tag, true_positive_counts, false_positive_counts, true_negative_counts, false_negative_counts, precision, recall, global_step=None, num_thresholds=127, weights=None, walltime=None): pass - - def add_custom_scalars_multilinechart(self, tags, category='default', title='untitled'): pass - - def add_custom_scalars_marginchart(self, tags, category='default', title='untitled'): pass - - def add_custom_scalars(self, layout): pass - - def add_mesh(self, tag, vertices, colors=None, faces=None, config_dict=None, global_step=None, walltime=None): pass - - def flush(self): pass - - def close(self): pass - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.close() - - -from torch.utils.data import DataLoader, DistributedSampler -import torch.distributed as dist -from torch.nn.parallel import DistributedDataParallel as DDP -import torch.optim as optim -from torch.cuda import amp - -from pytorchyolo.models import load_model -from pytorchyolo.utils.logger import Logger -from pytorchyolo.utils.utils import to_cpu, load_classes, print_environment_info, worker_seed_set -from pytorchyolo.utils.datasets import ListDataset -from pytorchyolo.utils.augmentations import AUGMENTATION_TRANSFORMS -# from pytorchyolo.utils.transforms import DEFAULT_TRANSFORMS -from pytorchyolo.utils.parse_config import parse_data_config -from pytorchyolo.utils.loss import compute_loss -from pytorchyolo.test import _evaluate, _create_validation_data_loader - -from terminaltables import AsciiTable - -from torchsummary import summary -from common_utils import init_distributed_mode - - - -train_names = ["module_list.81.conv_81.weight", "module_list.81.conv_81.bias", - "module_list.93.conv_93.weight", "module_list.93.conv_93.bias", - "module_list.105.conv_105.weight", "module_list.105.conv_105.bias"] - -def _create_data_loader(img_path, batch_size, img_size, n_cpu, multiscale_training=False, distributed=False): - """Creates a DataLoader for training. - - :param img_path: Path to file containing all paths to training images. - :type img_path: str - :param batch_size: Size of each image batch - :type batch_size: int - :param img_size: Size of each image dimension for yolo - :type img_size: int - :param n_cpu: Number of cpu threads to use during batch generation - :type n_cpu: int - :param multiscale_training: Scale images to different sizes randomly - :type multiscale_training: bool - :return: Returns DataLoader - :rtype: DataLoader - """ - dataset = ListDataset( - img_path, - img_size=img_size, - multiscale=multiscale_training, - transform=AUGMENTATION_TRANSFORMS) - sampler = None - shuffle = True - if distributed: - sampler = DistributedSampler(dataset, rank=dist.get_rank(), shuffle=True) - shuffle = False - dataloader = DataLoader( - dataset, - batch_size=batch_size, - shuffle=shuffle, - num_workers=n_cpu, - pin_memory=True, - collate_fn=dataset.collate_fn, - worker_init_fn=worker_seed_set, - sampler=sampler - ) - return dataloader - - -def run(): - print_environment_info() - start_time = time.time() - parser = argparse.ArgumentParser(description="Trains the YOLO model.") - parser.add_argument("-m", "--model", type=str, default="config/yolov3-voc.cfg", help="Path to model definition file (.cfg)") - parser.add_argument("-d", "--data", type=str, default="config/voc.data", help="Path to data config file (.data)") - parser.add_argument("-e", "--epochs", type=int, default=10, help="Number of epochs") - parser.add_argument("-v", "--verbose", action='store_true', help="Makes the training more verbose") - parser.add_argument("--n_cpu", type=int, default=0, help="Number of cpu threads to use during batch generation") - parser.add_argument("--pretrained_weights", type=str, help="Path to checkpoint file (.weights or .pth). Starts training from checkpoint model") - parser.add_argument("--checkpoint_interval", type=int, default=1, help="Interval of epochs between saving model weights") - parser.add_argument("--evaluation_interval", type=int, default=1, help="Interval of epochs between evaluations on validation set") - parser.add_argument("--multiscale_training", action="store_false", help="Allow for multi-scale training") - parser.add_argument("--iou_thres", type=float, default=0.5, help="Evaluation: IOU threshold required to qualify as detected") - parser.add_argument("--conf_thres", type=float, default=0.01, help="Evaluation: Object confidence threshold") - parser.add_argument("--nms_thres", type=float, default=0.4, help="Evaluation: IOU threshold for non-maximum suppression") - parser.add_argument("--logdir", type=str, default="logs", help="Directory for training log files (e.g. for TensorBoard)") - parser.add_argument("--second_stage_steps", type=int, default=10, help="Number of second stage training steps(unfreeze all params)") - - # distributed training parameters - parser.add_argument('--local_rank', default=-1, type=int, - help='Local rank') - parser.add_argument('--world-size', default=1, type=int, - help='number of distributed processes') - parser.add_argument('--dist-url', default='env://', help='url used to set up distributed training') - - parser.add_argument("--dist_backend", type=str, default="gloo", help="Distributed training backend.") - - parser.add_argument('--amp', action='store_true', default=False, help='use amp to train and test') - args = parser.parse_args() - - args.rank = -1 - init_distributed_mode(args) - rank = args.rank - - print(f"Command line arguments: {args}") - - logger = Logger(args.logdir) # Tensorboard logger - - # Create output directories if missing - os.makedirs("output", exist_ok=True) - os.makedirs("checkpoints", exist_ok=True) - - # enable cudnn autotune - torch.backends.cudnn.benchmark = True - - # Get data configuration - data_config = parse_data_config(args.data) - train_path = data_config["train"] - valid_path = data_config["valid"] - class_names = load_classes(data_config["names"]) - device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - - # ############ - # Create model - # ############ - - model = load_model(args.model, args.pretrained_weights) - model_module = model - if args.distributed: - model = model.to(rank) - model = DDP(model, device_ids=[args.rank], find_unused_parameters=True) - model_module = model.module - - # Print model - if args.verbose: - summary(model_module, input_size=(3, model_module.hyperparams['height'], model_module.hyperparams['height'])) - - mini_batch_size = model_module.hyperparams['batch'] // model_module.hyperparams['subdivisions'] - - if dist.is_initialized(): - if dist.get_world_size() >= 8: - _origin_bs = mini_batch_size - mini_batch_size = mini_batch_size // 4 - mini_batch_size = max(4, mini_batch_size) - print(f"WARN: Updating batch size from {_origin_bs} to {mini_batch_size} in per process, avoid non-convergence when training small dataset.") - - # ################# - # Create Dataloader - # ################# - - # Load training dataloader - dataloader = _create_data_loader( - train_path, - mini_batch_size, - model_module.hyperparams['height'], - args.n_cpu, - args.multiscale_training, - distributed=args.distributed - ) - - # Load validation dataloader - validation_dataloader = _create_validation_data_loader( - valid_path, - mini_batch_size, - model_module.hyperparams['height'], - args.n_cpu - ) - - # ################ - # Create optimizer - # ################ - - params = [p for p in model.parameters() if p.requires_grad] - print("===== Print trainable parameters =====") - print("Number of all parameters is {}".format(len(list(model.parameters())))) # 222 - # Should not print anything - for name, param in model.named_parameters(): - if not param.requires_grad: - print(name, param.data.shape) - - # Freeze backbone network params - other_names = [] - for name, param in model.named_parameters(): - if rank != -1 and name.startswith('module.'): - # DDP - name = name[len('module.'):] - if name in train_names: - print(name, param.data.shape) - else: - param.requires_grad = False - other_names.append(name) - params = [p for p in model.parameters() if p.requires_grad] - - if (model_module.hyperparams['optimizer'] in [None, "adam"]): - optimizer = optim.Adam( - params, - lr=model_module.hyperparams['learning_rate'], - weight_decay=model_module.hyperparams['decay'], - ) - elif (model_module.hyperparams['optimizer'] == "sgd"): - optimizer = optim.SGD( - params, - lr=model_module.hyperparams['learning_rate'], - weight_decay=model_module.hyperparams['decay'], - momentum=model_module.hyperparams['momentum']) - else: - print("Unknown optimizer. Please choose between (adam, sgd).") - - scaler = amp.GradScaler() - - checkpoint_path = None - # First stage training - for epoch in range(args.epochs): - - print("\n---- Finetuning Model ----") - epoch_start_time = time.time() - - model.train() # Set model to training mode - - for batch_i, (img_paths, imgs, targets) in enumerate(tqdm.tqdm(dataloader, desc=f"Training Epoch {epoch}")): - batches_done = len(dataloader) * epoch + batch_i - - imgs = imgs.to(device, non_blocking=True) - targets = targets.to(device) - - # print("len of img_paths = {}".format(len(img_paths))) - # print(img_paths) - # print(len(targets)) - # for target in targets: - # print("{}\t|\t{}".format(target, target.shape)) - # print(1/0) - if args.amp: - with amp.autocast(): - outputs = model(imgs) - loss, loss_components = compute_loss(outputs, targets, model_module) - scaler.scale(loss).backward() - else: - outputs = model(imgs) - - loss, loss_components = compute_loss(outputs, targets, model_module) - - loss.backward() - - ############### - # Run optimizer - ############### - - if batches_done % model_module.hyperparams['subdivisions'] == 0: - # Adapt learning rate - # Get learning rate defined in cfg - lr = model_module.hyperparams['learning_rate'] - if batches_done < model_module.hyperparams['burn_in']: - # Burn in - lr *= (batches_done / model_module.hyperparams['burn_in']) - else: - # Set and parse the learning rate to the steps defined in the cfg - for threshold, value in model_module.hyperparams['lr_steps']: - if batches_done > threshold: - lr *= value - # Log the learning rate - if rank in [-1, 0]: - logger.scalar_summary("train/learning_rate", lr, batches_done) - # Set learning rate - for g in optimizer.param_groups: - g['lr'] = lr - - # Run optimizer - if args.amp: - scaler.unscale_(optimizer) - torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.) - scaler.step(optimizer) - scaler.update() - else: - optimizer.step() - # Reset gradients - optimizer.zero_grad() - - # ############ - # Log progress - # ############ - if args.verbose and rank in [-1, 0]: - print(AsciiTable( - [ - ["Type", "Value"], - ["IoU loss", float(loss_components[0])], - ["Object loss", float(loss_components[1])], - ["Class loss", float(loss_components[2])], - ["Loss", float(loss_components[3])], - ["Batch loss", to_cpu(loss).item()], - ]).table) - - # Tensorboard logging - if rank in [-1, 0]: - tensorboard_log = [ - ("train/iou_loss", float(loss_components[0])), - ("train/obj_loss", float(loss_components[1])), - ("train/class_loss", float(loss_components[2])), - ("train/loss", to_cpu(loss).item())] - logger.list_of_scalars_summary(tensorboard_log, batches_done) - - model_module.seen += imgs.size(0) - - # ############# - # Save progress - # ############# - - # Save model to checkpoint file - if (epoch % args.checkpoint_interval == 0) and (rank in [-1, 0]): - checkpoint_path = f"checkpoints/yolov3_ckpt_{epoch}.pth" - print(f"---- Saving checkpoint to: '{checkpoint_path}' ----") - saved_state_dict = {} - _state_dict = model.state_dict() - for k in _state_dict.keys(): - new_k = k - if k.startswith('module.'): - new_k = k[len('module.'):] - saved_state_dict[new_k] = _state_dict[k] - torch.save(saved_state_dict, checkpoint_path) - epoch_total_time = time.time() - epoch_start_time - epoch_total_time_str = str(datetime.timedelta(seconds=int(epoch_total_time))) - - fps = len(dataloader) * mini_batch_size / epoch_total_time - if dist.is_initialized(): - fps = fps * dist.get_world_size() - - print('epoch time {}, Total FPS: {}'.format(epoch_total_time_str, fps)) - - # Unfreeze all params - # if (checkpoint_path is not None) and (rank == -1): - # print('Load checkpoint') - # model = load_model(args.model, checkpoint_path) # Why do we need to restore? - # for name, param in model.named_parameters(): - # param.requires_grad = True - # - # model_module = model - # if args.distributed: - # model = DDP(model, device_ids=[args.rank]) - # model_module = model.module - # - # print('Resume training') - # # other_params = [] - # # for name, param in model.named_parameters(): - # # if name in other_names: - # # param.requires_grad = True - # # other_params.append(param) - # - # # optimizer.param_groups.append({'params': other_params}) - # # params = [p for p in model.parameters() if p.requires_grad] - # # Reset optimizer - # optimizer.zero_grad() - # if torch.cuda.is_available(): - # model.module.cuda() - # model.train() - # model_module.train() - # print( - # 'model', type(model), '\n', - # 'model module', type(model_module) - # ) - # for name, param in model.named_parameters(): - # param.requires_grad = True - # params = model.parameters() - # if (model_module.hyperparams['optimizer'] in [None, "adam"]): - # optimizer = optim.Adam( - # params, - # lr=lr, - # weight_decay=model_module.hyperparams['decay'], - # ) - # elif (model_module.hyperparams['optimizer'] == "sgd"): - # optimizer = optim.SGD( - # params, - # lr=lr, - # weight_decay=model_module.hyperparams['decay'], - # momentum=model_module.hyperparams['momentum']) - # else: - # print("Unknown optimizer. Please choose between (adam, sgd).") - - # # Second stage training - # epoch += 1 - # dist.barrier() - # dataloader_iter = iter(dataloader) - # for batch_i in tqdm.tqdm(range(args.second_stage_steps), desc=f"Training Epoch {epoch}"): - # (img_paths, imgs, targets) = next(dataloader_iter) - # # for batch_i, (img_paths, imgs, targets) in enumerate(tqdm.tqdm(dataloader, desc=f"Training Epoch {epoch}")): - # batches_done = len(dataloader) * epoch + batch_i - # - # imgs = imgs.to(device, non_blocking=True) - # targets = targets.to(device) - # - # outputs = model(imgs) - # - # loss, loss_components = compute_loss(outputs, targets, model_module) - # - # loss.backward() - # - # ############### - # # Run optimizer - # ############### - # - # if batches_done % model_module.hyperparams['subdivisions'] == 0: - # # Adapt learning rate - # # Get learning rate defined in cfg - # lr = model_module.hyperparams['learning_rate'] - # if batches_done < model_module.hyperparams['burn_in']: - # # Burn in - # lr *= (batches_done / model_module.hyperparams['burn_in']) - # else: - # # Set and parse the learning rate to the steps defined in the cfg - # for threshold, value in model_module.hyperparams['lr_steps']: - # if batches_done > threshold: - # lr *= value - # # Log the learning rate - # logger.scalar_summary("train/learning_rate", lr, batches_done) - # # Set learning rate - # for g in optimizer.param_groups: - # g['lr'] = lr - # g['lr'] = 3e-7 - # # Run optimizer - # optimizer.step() - # # Reset gradients - # optimizer.zero_grad() - # - # # ############ - # # Log progress - # # ############ - # if args.verbose: - # print(AsciiTable( - # [ - # ["Type", "Value"], - # ["IoU loss", float(loss_components[0])], - # ["Object loss", float(loss_components[1])], - # ["Class loss", float(loss_components[2])], - # ["Loss", float(loss_components[3])], - # ["Batch loss", to_cpu(loss).item()], - # ]).table) - # - # # Tensorboard logging - # tensorboard_log = [ - # ("train/iou_loss", float(loss_components[0])), - # ("train/obj_loss", float(loss_components[1])), - # ("train/class_loss", float(loss_components[2])), - # ("train/loss", to_cpu(loss).item())] - # logger.list_of_scalars_summary(tensorboard_log, batches_done) - # - # model_module.seen += imgs.size(0) - - # ############# - # Save progress - # ############# - - # # Save model to checkpoint file - # if epoch % args.checkpoint_interval == 0: - # checkpoint_path = f"checkpoints/yolov3_ckpt_{epoch}.pth" - # print(f"---- Saving checkpoint to: '{checkpoint_path}' ----") - # torch.save(model_module.state_dict(), checkpoint_path) - - # ######## - # Evaluate - # ######## - - print("\n---- Evaluating Model ----") - # Evaluate the model on the validation set - metrics_output = _evaluate( - model_module, - validation_dataloader, - class_names, - img_size=model_module.hyperparams['height'], - iou_thres=args.iou_thres, - conf_thres=args.conf_thres, - nms_thres=args.nms_thres, - verbose=True - ) - - if (metrics_output is not None) and (rank in [-1, 0]): - precision, recall, AP, f1, ap_class = metrics_output - evaluation_metrics = [ - ("validation/precision", precision.mean()), - ("validation/recall", recall.mean()), - ("validation/mAP", AP.mean()), - ("validation/f1", f1.mean())] - logger.list_of_scalars_summary(evaluation_metrics, epoch) - with open("train.logs", 'a') as f: - f.write("epoch = {}\n".format(epoch)) - f.write("mAP = {}\n".format(AP.mean())) - f.write("AP = \n") - for elem in AP: - f.write("{}\n".format(elem)) - - total_time = time.time() - start_time - total_time_str = str(datetime.timedelta(seconds=int(total_time))) - print('Training time {}'.format(total_time_str)) - - -if __name__ == "__main__": - run() diff --git a/cv/detection/yolov3/pytorch/pytorchyolo/models.py b/cv/detection/yolov3/pytorch/pytorchyolo/models.py deleted file mode 100644 index 4413ffa06..000000000 --- a/cv/detection/yolov3/pytorch/pytorchyolo/models.py +++ /dev/null @@ -1,311 +0,0 @@ -from __future__ import division -from itertools import chain - -import torch -import torch.nn as nn -import torch.nn.functional as F -import numpy as np - -from pytorchyolo.utils.parse_config import parse_model_config -from pytorchyolo.utils.utils import weights_init_normal - - -def create_modules(module_defs): - """ - Constructs module list of layer blocks from module configuration in module_defs - """ - hyperparams = module_defs.pop(0) - hyperparams.update({ - 'batch': int(hyperparams['batch']), - 'subdivisions': int(hyperparams['subdivisions']), - 'width': int(hyperparams['width']), - 'height': int(hyperparams['height']), - 'channels': int(hyperparams['channels']), - 'optimizer': hyperparams.get('optimizer'), - 'momentum': float(hyperparams['momentum']), - 'decay': float(hyperparams['decay']), - 'learning_rate': float(hyperparams['learning_rate']), - 'burn_in': int(hyperparams['burn_in']), - 'max_batches': int(hyperparams['max_batches']), - 'policy': hyperparams['policy'], - 'lr_steps': list(zip(map(int, hyperparams["steps"].split(",")), - map(float, hyperparams["scales"].split(",")))) - }) - assert hyperparams["height"] == hyperparams["width"], \ - "Height and width should be equal! Non square images are padded with zeros." - output_filters = [hyperparams["channels"]] - module_list = nn.ModuleList() - for module_i, module_def in enumerate(module_defs): - modules = nn.Sequential() - - if module_def["type"] == "convolutional": - bn = int(module_def["batch_normalize"]) - filters = int(module_def["filters"]) - kernel_size = int(module_def["size"]) - pad = (kernel_size - 1) // 2 - modules.add_module( - f"conv_{module_i}", - nn.Conv2d( - in_channels=output_filters[-1], - out_channels=filters, - kernel_size=kernel_size, - stride=int(module_def["stride"]), - padding=pad, - bias=not bn, - ), - ) - if bn: - modules.add_module(f"batch_norm_{module_i}", - nn.BatchNorm2d(filters, momentum=0.9, eps=1e-5)) - if module_def["activation"] == "leaky": - modules.add_module(f"leaky_{module_i}", nn.LeakyReLU(0.1)) - if module_def["activation"] == "mish": - modules.add_module(f"mish_{module_i}", Mish()) - - elif module_def["type"] == "maxpool": - kernel_size = int(module_def["size"]) - stride = int(module_def["stride"]) - if kernel_size == 2 and stride == 1: - modules.add_module(f"_debug_padding_{module_i}", nn.ZeroPad2d((0, 1, 0, 1))) - maxpool = nn.MaxPool2d(kernel_size=kernel_size, stride=stride, - padding=int((kernel_size - 1) // 2)) - modules.add_module(f"maxpool_{module_i}", maxpool) - - elif module_def["type"] == "upsample": - upsample = Upsample(scale_factor=int(module_def["stride"]), mode="nearest") - modules.add_module(f"upsample_{module_i}", upsample) - - elif module_def["type"] == "route": - layers = [int(x) for x in module_def["layers"].split(",")] - filters = sum([output_filters[1:][i] for i in layers]) // int(module_def.get("groups", 1)) - modules.add_module(f"route_{module_i}", nn.Sequential()) - - elif module_def["type"] == "shortcut": - filters = output_filters[1:][int(module_def["from"])] - modules.add_module(f"shortcut_{module_i}", nn.Sequential()) - - elif module_def["type"] == "yolo": - anchor_idxs = [int(x) for x in module_def["mask"].split(",")] - # Extract anchors - anchors = [int(x) for x in module_def["anchors"].split(",")] - anchors = [(anchors[i], anchors[i + 1]) for i in range(0, len(anchors), 2)] - anchors = [anchors[i] for i in anchor_idxs] - num_classes = int(module_def["classes"]) - # Define detection layer - yolo_layer = YOLOLayer(anchors, num_classes) - modules.add_module(f"yolo_{module_i}", yolo_layer) - # Register module list and number of output filters - module_list.append(modules) - output_filters.append(filters) - - return hyperparams, module_list - - -class Upsample(nn.Module): - """ nn.Upsample is deprecated """ - - def __init__(self, scale_factor, mode="nearest"): - super(Upsample, self).__init__() - self.scale_factor = scale_factor - self.mode = mode - - def forward(self, x): - x = F.interpolate(x, scale_factor=self.scale_factor, mode=self.mode) - return x - -class Mish(nn.Module): - """ The MISH activation function (https://github.com/digantamisra98/Mish) """ - - def __init__(self): - super(Mish, self).__init__() - - def forward(self, x): - return x * torch.tanh(F.softplus(x)) - -class YOLOLayer(nn.Module): - """Detection layer""" - - def __init__(self, anchors, num_classes): - super(YOLOLayer, self).__init__() - self.num_anchors = len(anchors) - self.num_classes = num_classes - self.mse_loss = nn.MSELoss() - self.bce_loss = nn.BCELoss() - self.no = num_classes + 5 # number of outputs per anchor - self.grid = torch.zeros(1) # TODO - - anchors = torch.tensor(list(chain(*anchors))).float().view(-1, 2) - self.register_buffer('anchors', anchors) - self.register_buffer( - 'anchor_grid', anchors.clone().view(1, -1, 1, 1, 2)) - self.stride = None - - def forward(self, x, img_size): - stride = img_size // x.size(2) - self.stride = stride - bs, _, ny, nx = x.shape # x(bs,255,20,20) to x(bs,3,20,20,85) - x = x.view(bs, self.num_anchors, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous() - - if not self.training: # inference - if self.grid.shape[2:4] != x.shape[2:4]: - self.grid = self._make_grid(nx, ny).to(x.device) - - x[..., 0:2] = (x[..., 0:2].sigmoid() + self.grid) * stride # xy - x[..., 2:4] = torch.exp(x[..., 2:4]) * self.anchor_grid # wh - x[..., 4:] = x[..., 4:].sigmoid() - x = x.view(bs, -1, self.no) - - return x - - @staticmethod - def _make_grid(nx=20, ny=20): - yv, xv = torch.meshgrid([torch.arange(ny), torch.arange(nx)]) - return torch.stack((xv, yv), 2).view((1, 1, ny, nx, 2)).float() - - -class Darknet(nn.Module): - """YOLOv3 object detection model""" - - def __init__(self, config_path): - super(Darknet, self).__init__() - self.module_defs = parse_model_config(config_path) - self.hyperparams, self.module_list = create_modules(self.module_defs) - self.yolo_layers = [layer[0] - for layer in self.module_list if isinstance(layer[0], YOLOLayer)] - self.seen = 0 - self.header_info = np.array([0, 0, 0, self.seen, 0], dtype=np.int32) - - def forward(self, x): - img_size = x.size(2) - layer_outputs, yolo_outputs = [], [] - for i, (module_def, module) in enumerate(zip(self.module_defs, self.module_list)): - if module_def["type"] in ["convolutional", "upsample", "maxpool"]: - x = module(x) - elif module_def["type"] == "route": - combined_outputs = torch.cat([layer_outputs[int(layer_i)] for layer_i in module_def["layers"].split(",")], 1) - group_size = combined_outputs.shape[1] // int(module_def.get("groups", 1)) - group_id = int(module_def.get("group_id", 0)) - x = combined_outputs[:, group_size * group_id : group_size * (group_id + 1)] # Slice groupings used by yolo v4 - elif module_def["type"] == "shortcut": - layer_i = int(module_def["from"]) - x = layer_outputs[-1] + layer_outputs[layer_i] - elif module_def["type"] == "yolo": - x = module[0](x, img_size) - yolo_outputs.append(x) - layer_outputs.append(x) - return yolo_outputs if self.training else torch.cat(yolo_outputs, 1) - - def load_darknet_weights(self, weights_path): - """Parses and loads the weights stored in 'weights_path'""" - - # Open the weights file - with open(weights_path, "rb") as f: - # First five are header values - header = np.fromfile(f, dtype=np.int32, count=5) - self.header_info = header # Needed to write header when saving weights - self.seen = header[3] # number of images seen during training - weights = np.fromfile(f, dtype=np.float32) # The rest are weights - - # Establish cutoff for loading backbone weights - cutoff = None - if "darknet53.conv.74" in weights_path: - cutoff = 75 - - ptr = 0 - for i, (module_def, module) in enumerate(zip(self.module_defs, self.module_list)): - if i == cutoff: - break - if module_def["type"] == "convolutional": - conv_layer = module[0] - if module_def["batch_normalize"]: - # Load BN bias, weights, running mean and running variance - bn_layer = module[1] - num_b = bn_layer.bias.numel() # Number of biases - # Bias - bn_b = torch.from_numpy( - weights[ptr: ptr + num_b]).view_as(bn_layer.bias) - bn_layer.bias.data.copy_(bn_b) - ptr += num_b - # Weight - bn_w = torch.from_numpy( - weights[ptr: ptr + num_b]).view_as(bn_layer.weight) - bn_layer.weight.data.copy_(bn_w) - ptr += num_b - # Running Mean - bn_rm = torch.from_numpy( - weights[ptr: ptr + num_b]).view_as(bn_layer.running_mean) - bn_layer.running_mean.data.copy_(bn_rm) - ptr += num_b - # Running Var - bn_rv = torch.from_numpy( - weights[ptr: ptr + num_b]).view_as(bn_layer.running_var) - bn_layer.running_var.data.copy_(bn_rv) - ptr += num_b - else: - # Load conv. bias - num_b = conv_layer.bias.numel() - conv_b = torch.from_numpy( - weights[ptr: ptr + num_b]).view_as(conv_layer.bias) - conv_layer.bias.data.copy_(conv_b) - ptr += num_b - # Load conv. weights - num_w = conv_layer.weight.numel() - conv_w = torch.from_numpy( - weights[ptr: ptr + num_w]).view_as(conv_layer.weight) - conv_layer.weight.data.copy_(conv_w) - ptr += num_w - - def save_darknet_weights(self, path, cutoff=-1): - """ - @:param path - path of the new weights file - @:param cutoff - save layers between 0 and cutoff (cutoff = -1 -> all are saved) - """ - fp = open(path, "wb") - self.header_info[3] = self.seen - self.header_info.tofile(fp) - - # Iterate through layers - for i, (module_def, module) in enumerate(zip(self.module_defs[:cutoff], self.module_list[:cutoff])): - if module_def["type"] == "convolutional": - conv_layer = module[0] - # If batch norm, load bn first - if module_def["batch_normalize"]: - bn_layer = module[1] - bn_layer.bias.data.cpu().numpy().tofile(fp) - bn_layer.weight.data.cpu().numpy().tofile(fp) - bn_layer.running_mean.data.cpu().numpy().tofile(fp) - bn_layer.running_var.data.cpu().numpy().tofile(fp) - # Load conv bias - else: - conv_layer.bias.data.cpu().numpy().tofile(fp) - # Load conv weights - conv_layer.weight.data.cpu().numpy().tofile(fp) - - fp.close() - - -def load_model(model_path, weights_path=None): - """Loads the yolo model from file. - - :param model_path: Path to model definition file (.cfg) - :type model_path: str - :param weights_path: Path to weights or checkpoint file (.weights or .pth) - :type weights_path: str - :return: Returns model - :rtype: Darknet - """ - device = torch.device("cuda" if torch.cuda.is_available() - else "cpu") # Select device for inference - model = Darknet(model_path).to(device) - - model.apply(weights_init_normal) - - # If pretrained weights are specified, start from checkpoint or weight file - if weights_path: - if weights_path.endswith(".pth"): - # Load checkpoint weights - model.load_state_dict(torch.load(weights_path, map_location=device)) - else: - # Load darknet weights - model.load_darknet_weights(weights_path) - return model diff --git a/cv/detection/yolov3/pytorch/pytorchyolo/test.py b/cv/detection/yolov3/pytorch/pytorchyolo/test.py deleted file mode 100644 index f281d3279..000000000 --- a/cv/detection/yolov3/pytorch/pytorchyolo/test.py +++ /dev/null @@ -1,297 +0,0 @@ -#! /usr/bin/env python3 - -from __future__ import division - -import argparse -import tqdm -import numpy as np - -from terminaltables import AsciiTable - -import torch - -try: - from torch.utils.tensorboard import SummaryWriter -except: - class SummaryWriter(object): - def __init__(self, log_dir=None, comment='', purge_step=None, max_queue=10, - flush_secs=120, filename_suffix=''): - if not log_dir: - import socket - from datetime import datetime - current_time = datetime.now().strftime('%b%d_%H-%M-%S') - log_dir = os.path.join( - 'runs', current_time + '_' + socket.gethostname() + comment) - self.log_dir = log_dir - self.purge_step = purge_step - self.max_queue = max_queue - self.flush_secs = flush_secs - self.filename_suffix = filename_suffix - - # Initialize the file writers, but they can be cleared out on close - # and recreated later as needed. - self.file_writer = self.all_writers = None - self._get_file_writer() - - # Create default bins for histograms, see generate_testdata.py in tensorflow/tensorboard - v = 1E-12 - buckets = [] - neg_buckets = [] - while v < 1E20: - buckets.append(v) - neg_buckets.append(-v) - v *= 1.1 - self.default_bins = neg_buckets[::-1] + [0] + buckets - - def _check_caffe2_blob(self, item): pass - - def _get_file_writer(self): pass - - def get_logdir(self): - """Returns the directory where event files will be written.""" - return self.log_dir - - def add_hparams(self, hparam_dict, metric_dict, hparam_domain_discrete=None, run_name=None): pass - - def add_scalar(self, tag, scalar_value, global_step=None, walltime=None, new_style=False): pass - - def add_scalars(self, main_tag, tag_scalar_dict, global_step=None, walltime=None): pass - - def add_histogram(self, tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None): pass - - def add_histogram_raw(self, tag, min, max, num, sum, sum_squares, bucket_limits, bucket_counts, global_step=None, walltime=None): pass - - def add_image(self, tag, img_tensor, global_step=None, walltime=None, dataformats='CHW'): pass - - def add_images(self, tag, img_tensor, global_step=None, walltime=None, dataformats='NCHW'): pass - - def add_image_with_boxes(self, tag, img_tensor, box_tensor, global_step=None, walltime=None, rescale=1, dataformats='CHW', labels=None): pass - - def add_figure(self, tag, figure, global_step=None, close=True, walltime=None): pass - - def add_video(self, tag, vid_tensor, global_step=None, fps=4, walltime=None): pass - - def add_audio(self, tag, snd_tensor, global_step=None, sample_rate=44100, walltime=None): pass - - def add_text(self, tag, text_string, global_step=None, walltime=None): pass - - def add_onnx_graph(self, prototxt): pass - - def add_graph(self, model, input_to_model=None, verbose=False): pass - - @staticmethod - def _encode(rawstr): pass - - def add_embedding(self, mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None): pass - - def add_pr_curve(self, tag, labels, predictions, global_step=None, num_thresholds=127, weights=None, walltime=None): pass - - def add_pr_curve_raw(self, tag, true_positive_counts, false_positive_counts, true_negative_counts, false_negative_counts, precision, recall, global_step=None, num_thresholds=127, weights=None, walltime=None): pass - - def add_custom_scalars_multilinechart(self, tags, category='default', title='untitled'): pass - - def add_custom_scalars_marginchart(self, tags, category='default', title='untitled'): pass - - def add_custom_scalars(self, layout): pass - - def add_mesh(self, tag, vertices, colors=None, faces=None, config_dict=None, global_step=None, walltime=None): pass - - def flush(self): pass - - def close(self): pass - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.close() - - -from torch.utils.data import DataLoader -from torch.autograd import Variable - -from pytorchyolo.models import load_model -from pytorchyolo.utils.utils import load_classes, ap_per_class, get_batch_statistics, non_max_suppression, to_cpu, xywh2xyxy, print_environment_info -from pytorchyolo.utils.datasets import ListDataset -from pytorchyolo.utils.transforms import DEFAULT_TRANSFORMS -from pytorchyolo.utils.parse_config import parse_data_config - - -def evaluate_model_file(model_path, weights_path, img_path, class_names, batch_size=8, img_size=416, - n_cpu=8, iou_thres=0.5, conf_thres=0.5, nms_thres=0.5, verbose=True): - """Evaluate model on validation dataset. - - :param model_path: Path to model definition file (.cfg) - :type model_path: str - :param weights_path: Path to weights or checkpoint file (.weights or .pth) - :type weights_path: str - :param img_path: Path to file containing all paths to validation images. - :type img_path: str - :param class_names: List of class names - :type class_names: [str] - :param batch_size: Size of each image batch, defaults to 8 - :type batch_size: int, optional - :param img_size: Size of each image dimension for yolo, defaults to 416 - :type img_size: int, optional - :param n_cpu: Number of cpu threads to use during batch generation, defaults to 8 - :type n_cpu: int, optional - :param iou_thres: IOU threshold required to qualify as detected, defaults to 0.5 - :type iou_thres: float, optional - :param conf_thres: Object confidence threshold, defaults to 0.5 - :type conf_thres: float, optional - :param nms_thres: IOU threshold for non-maximum suppression, defaults to 0.5 - :type nms_thres: float, optional - :param verbose: If True, prints stats of model, defaults to True - :type verbose: bool, optional - :return: Returns precision, recall, AP, f1, ap_class - """ - dataloader = _create_validation_data_loader( - img_path, batch_size, img_size, n_cpu) - model = load_model(model_path, weights_path) - metrics_output = _evaluate( - model, - dataloader, - class_names, - img_size, - iou_thres, - conf_thres, - nms_thres, - verbose) - return metrics_output - - -def print_eval_stats(metrics_output, class_names, verbose): - if metrics_output is not None: - precision, recall, AP, f1, ap_class = metrics_output - if verbose: - # Prints class AP and mean AP - ap_table = [["Index", "Class", "AP"]] - for i, c in enumerate(ap_class): - ap_table += [[c, class_names[c], "%.5f" % AP[i]]] - print(AsciiTable(ap_table).table) - print(f"---- mAP {AP.mean():.5f} ----") - else: - print("---- mAP not measured (no detections found by model) ----") - - -def _evaluate(model, dataloader, class_names, img_size, iou_thres, conf_thres, nms_thres, verbose): - """Evaluate model on validation dataset. - - :param model: Model to evaluate - :type model: models.Darknet - :param dataloader: Dataloader provides the batches of images with targets - :type dataloader: DataLoader - :param class_names: List of class names - :type class_names: [str] - :param img_size: Size of each image dimension for yolo - :type img_size: int - :param iou_thres: IOU threshold required to qualify as detected - :type iou_thres: float - :param conf_thres: Object confidence threshold - :type conf_thres: float - :param nms_thres: IOU threshold for non-maximum suppression - :type nms_thres: float - :param verbose: If True, prints stats of model - :type verbose: bool - :return: Returns precision, recall, AP, f1, ap_class - """ - model.eval() # Set model to evaluation mode - - Tensor = torch.cuda.FloatTensor if torch.cuda.is_available() else torch.FloatTensor - - labels = [] - sample_metrics = [] # List of tuples (TP, confs, pred) - for _, imgs, targets in tqdm.tqdm(dataloader, desc="Validating"): - # Extract labels - labels += targets[:, 1].tolist() - # Rescale target - targets[:, 2:] = xywh2xyxy(targets[:, 2:]) - targets[:, 2:] *= img_size - - imgs = Variable(imgs.type(Tensor), requires_grad=False) - - with torch.no_grad(): - outputs = model(imgs) - outputs = non_max_suppression(outputs, conf_thres=conf_thres, iou_thres=nms_thres) - - sample_metrics += get_batch_statistics(outputs, targets, iou_threshold=iou_thres) - - if len(sample_metrics) == 0: # No detections over whole validation set. - print("---- No detections over whole validation set ----") - return None - - # Concatenate sample statistics - true_positives, pred_scores, pred_labels = [ - np.concatenate(x, 0) for x in list(zip(*sample_metrics))] - metrics_output = ap_per_class( - true_positives, pred_scores, pred_labels, labels) - - print_eval_stats(metrics_output, class_names, verbose) - - return metrics_output - - -def _create_validation_data_loader(img_path, batch_size, img_size, n_cpu): - """ - Creates a DataLoader for validation. - - :param img_path: Path to file containing all paths to validation images. - :type img_path: str - :param batch_size: Size of each image batch - :type batch_size: int - :param img_size: Size of each image dimension for yolo - :type img_size: int - :param n_cpu: Number of cpu threads to use during batch generation - :type n_cpu: int - :return: Returns DataLoader - :rtype: DataLoader - """ - dataset = ListDataset(img_path, img_size=img_size, multiscale=False, transform=DEFAULT_TRANSFORMS) - dataloader = DataLoader( - dataset, - batch_size=batch_size, - shuffle=False, - num_workers=n_cpu, - pin_memory=True, - collate_fn=dataset.collate_fn) - return dataloader - - -def run(): - print_environment_info() - parser = argparse.ArgumentParser(description="Evaluate validation data.") - parser.add_argument("-m", "--model", type=str, default="config/yolov3.cfg", help="Path to model definition file (.cfg)") - parser.add_argument("-w", "--weights", type=str, default="weights/yolov3.weights", help="Path to weights or checkpoint file (.weights or .pth)") - parser.add_argument("-d", "--data", type=str, default="config/coco.data", help="Path to data config file (.data)") - parser.add_argument("-b", "--batch_size", type=int, default=8, help="Size of each image batch") - parser.add_argument("-v", "--verbose", action='store_true', help="Makes the validation more verbose") - parser.add_argument("--img_size", type=int, default=416, help="Size of each image dimension for yolo") - parser.add_argument("--n_cpu", type=int, default=8, help="Number of cpu threads to use during batch generation") - parser.add_argument("--iou_thres", type=float, default=0.5, help="IOU threshold required to qualify as detected") - parser.add_argument("--conf_thres", type=float, default=0.01, help="Object confidence threshold") - parser.add_argument("--nms_thres", type=float, default=0.4, help="IOU threshold for non-maximum suppression") - args = parser.parse_args() - print(f"Command line arguments: {args}") - - # Load configuration from data file - data_config = parse_data_config(args.data) - # Path to file containing all images for validation - valid_path = data_config["valid"] - class_names = load_classes(data_config["names"]) # List of class names - - precision, recall, AP, f1, ap_class = evaluate_model_file( - args.model, - args.weights, - valid_path, - class_names, - batch_size=args.batch_size, - img_size=args.img_size, - n_cpu=args.n_cpu, - iou_thres=args.iou_thres, - conf_thres=args.conf_thres, - nms_thres=args.nms_thres, - verbose=True) - - -if __name__ == "__main__": - run() diff --git a/cv/detection/yolov3/pytorch/pytorchyolo/train.py b/cv/detection/yolov3/pytorch/pytorchyolo/train.py deleted file mode 100644 index 831253cdb..000000000 --- a/cv/detection/yolov3/pytorch/pytorchyolo/train.py +++ /dev/null @@ -1,422 +0,0 @@ -#! /usr/bin/env python3 - -from __future__ import division - -import os -import argparse -import tqdm -import datetime -import time -import os -import sys -sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..')) - -import torch - -try: - from torch.utils.tensorboard import SummaryWriter -except: - class SummaryWriter(object): - def __init__(self, log_dir=None, comment='', purge_step=None, max_queue=10, - flush_secs=120, filename_suffix=''): - if not log_dir: - import socket - from datetime import datetime - current_time = datetime.now().strftime('%b%d_%H-%M-%S') - log_dir = os.path.join( - 'runs', current_time + '_' + socket.gethostname() + comment) - self.log_dir = log_dir - self.purge_step = purge_step - self.max_queue = max_queue - self.flush_secs = flush_secs - self.filename_suffix = filename_suffix - - # Initialize the file writers, but they can be cleared out on close - # and recreated later as needed. - self.file_writer = self.all_writers = None - self._get_file_writer() - - # Create default bins for histograms, see generate_testdata.py in tensorflow/tensorboard - v = 1E-12 - buckets = [] - neg_buckets = [] - while v < 1E20: - buckets.append(v) - neg_buckets.append(-v) - v *= 1.1 - self.default_bins = neg_buckets[::-1] + [0] + buckets - - def _check_caffe2_blob(self, item): pass - - def _get_file_writer(self): pass - - def get_logdir(self): - """Returns the directory where event files will be written.""" - return self.log_dir - - def add_hparams(self, hparam_dict, metric_dict, hparam_domain_discrete=None, run_name=None): pass - - def add_scalar(self, tag, scalar_value, global_step=None, walltime=None, new_style=False): pass - - def add_scalars(self, main_tag, tag_scalar_dict, global_step=None, walltime=None): pass - - def add_histogram(self, tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None): pass - - def add_histogram_raw(self, tag, min, max, num, sum, sum_squares, bucket_limits, bucket_counts, global_step=None, walltime=None): pass - - def add_image(self, tag, img_tensor, global_step=None, walltime=None, dataformats='CHW'): pass - - def add_images(self, tag, img_tensor, global_step=None, walltime=None, dataformats='NCHW'): pass - - def add_image_with_boxes(self, tag, img_tensor, box_tensor, global_step=None, walltime=None, rescale=1, dataformats='CHW', labels=None): pass - - def add_figure(self, tag, figure, global_step=None, close=True, walltime=None): pass - - def add_video(self, tag, vid_tensor, global_step=None, fps=4, walltime=None): pass - - def add_audio(self, tag, snd_tensor, global_step=None, sample_rate=44100, walltime=None): pass - - def add_text(self, tag, text_string, global_step=None, walltime=None): pass - - def add_onnx_graph(self, prototxt): pass - - def add_graph(self, model, input_to_model=None, verbose=False): pass - - @staticmethod - def _encode(rawstr): pass - - def add_embedding(self, mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None): pass - - def add_pr_curve(self, tag, labels, predictions, global_step=None, num_thresholds=127, weights=None, walltime=None): pass - - def add_pr_curve_raw(self, tag, true_positive_counts, false_positive_counts, true_negative_counts, false_negative_counts, precision, recall, global_step=None, num_thresholds=127, weights=None, walltime=None): pass - - def add_custom_scalars_multilinechart(self, tags, category='default', title='untitled'): pass - - def add_custom_scalars_marginchart(self, tags, category='default', title='untitled'): pass - - def add_custom_scalars(self, layout): pass - - def add_mesh(self, tag, vertices, colors=None, faces=None, config_dict=None, global_step=None, walltime=None): pass - - def flush(self): pass - - def close(self): pass - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.close() - -from torch.utils.data import DataLoader, DistributedSampler -import torch.distributed as dist -from torch.nn.parallel import DistributedDataParallel as DDP -import torch.optim as optim - -from pytorchyolo.models import load_model -from pytorchyolo.utils.logger import Logger -from pytorchyolo.utils.utils import to_cpu, load_classes, print_environment_info, provide_determinism, worker_seed_set -from pytorchyolo.utils.datasets import ListDataset -from pytorchyolo.utils.augmentations import AUGMENTATION_TRANSFORMS -# from pytorchyolo.utils.transforms import DEFAULT_TRANSFORMS -from pytorchyolo.utils.parse_config import parse_data_config -from pytorchyolo.utils.loss import compute_loss -from pytorchyolo.test import _evaluate, _create_validation_data_loader - -from terminaltables import AsciiTable - -from torchsummary import summary - - -def setup_for_distributed(is_master): - """ - This function disables printing when not in master process - """ - import builtins as __builtin__ - builtin_print = __builtin__.print - - def print(*args, **kwargs): - force = kwargs.pop('force', False) - if is_master or force: - builtin_print(*args, **kwargs) - - __builtin__.print = print - - -def _create_data_loader(img_path, batch_size, img_size, n_cpu, multiscale_training=False, distributed=False): - """Creates a DataLoader for training. - - :param img_path: Path to file containing all paths to training images. - :type img_path: str - :param batch_size: Size of each image batch - :type batch_size: int - :param img_size: Size of each image dimension for yolo - :type img_size: int - :param n_cpu: Number of cpu threads to use during batch generation - :type n_cpu: int - :param multiscale_training: Scale images to different sizes randomly - :type multiscale_training: bool - :return: Returns DataLoader - :rtype: DataLoader - """ - dataset = ListDataset( - img_path, - img_size=img_size, - multiscale=multiscale_training, - transform=AUGMENTATION_TRANSFORMS) - sampler = None - if distributed: - sampler = DistributedSampler(dataset, rank=dist.get_rank(), shuffle=True) - dataloader = DataLoader( - dataset, - batch_size=batch_size, - shuffle=True, - num_workers=n_cpu, - pin_memory=True, - collate_fn=dataset.collate_fn, - worker_init_fn=worker_seed_set, - sampler=sampler - ) - return dataloader - - -def run(): - print_environment_info() - start_time = time.time() - parser = argparse.ArgumentParser(description="Trains the YOLO model.") - parser.add_argument("-m", "--model", type=str, default="config/yolov3.cfg", help="Path to model definition file (.cfg)") - parser.add_argument("-d", "--data", type=str, default="config/coco.data", help="Path to data config file (.data)") - parser.add_argument("-e", "--epochs", type=int, default=300, help="Number of epochs") - parser.add_argument("-v", "--verbose", action='store_true', help="Makes the training more verbose") - parser.add_argument("--n_cpu", type=int, default=8, help="Number of cpu threads to use during batch generation") - parser.add_argument("--pretrained_weights", type=str, help="Path to checkpoint file (.weights or .pth). Starts training from checkpoint model") - parser.add_argument("--checkpoint_interval", type=int, default=1, help="Interval of epochs between saving model weights") - parser.add_argument("--evaluation_interval", type=int, default=1, help="Interval of epochs between evaluations on validation set") - parser.add_argument("--multiscale_training", action="store_false", help="Allow for multi-scale training") - parser.add_argument("--iou_thres", type=float, default=0.5, help="Evaluation: IOU threshold required to qualify as detected") - parser.add_argument("--conf_thres", type=float, default=0.1, help="Evaluation: Object confidence threshold") - parser.add_argument("--nms_thres", type=float, default=0.5, help="Evaluation: IOU threshold for non-maximum suppression") - parser.add_argument("--logdir", type=str, default="logs", help="Directory for training log files (e.g. for TensorBoard)") - parser.add_argument("--seed", type=int, default=-1, help="Makes results reproducable. Set -1 to disable.") - - parser.add_argument("--local_rank", type=int, default=-1, help="Local rank.") - parser.add_argument("--dist_backend", type=str, default="gloo", help="Distributed training backend.") - args = parser.parse_args() - rank = args.local_rank - args.distributed = rank != -1 - args.rank = rank - if args.distributed: - dist_backend = args.dist_backend - DIST_BACKEND_ENV = "PT_DIST_BACKEND" - if DIST_BACKEND_ENV in os.environ: - print("WARN: Use the distributed backend of the environment.") - dist_backend = os.environ[DIST_BACKEND_ENV] - dist.init_process_group(backend=dist_backend, rank=args.rank) - setup_for_distributed(args.rank == 0) - torch.cuda.set_device(args.rank) - - print('CUDA_VISIBLE_DEVICES=', list(range(torch.cuda.device_count()))) - print(f"Command line arguments: {args}") - - if args.seed != -1: - provide_determinism(args.seed) - - logger = Logger(args.logdir) # Tensorboard logger - - # Create output directories if missing - os.makedirs("output", exist_ok=True) - os.makedirs("checkpoints", exist_ok=True) - - # Get data configuration - data_config = parse_data_config(args.data) - train_path = data_config["train"] - valid_path = data_config["valid"] - class_names = load_classes(data_config["names"]) - device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - - # ############ - # Create model - # ############ - - model = load_model(args.model, args.pretrained_weights) - - # Print model - if args.verbose: - summary(model, input_size=(3, model.hyperparams['height'], model.hyperparams['height'])) - - mini_batch_size = model.hyperparams['batch'] // model.hyperparams['subdivisions'] - - # ################# - # Create Dataloader - # ################# - # Load training dataloader - dataloader = _create_data_loader( - train_path, - mini_batch_size, - model.hyperparams['height'], - args.n_cpu, - args.multiscale_training, - distributed=args.distributed - ) - - # Load validation dataloader - validation_dataloader = _create_validation_data_loader( - valid_path, - mini_batch_size, - model.hyperparams['height'], - args.n_cpu - ) - - # ################ - # Create optimizer - # ################ - - params = [p for p in model.parameters() if p.requires_grad] - - if (model.hyperparams['optimizer'] in [None, "adam"]): - optimizer = optim.Adam( - params, - lr=model.hyperparams['learning_rate'], - weight_decay=model.hyperparams['decay'], - ) - elif (model.hyperparams['optimizer'] == "sgd"): - optimizer = optim.SGD( - params, - lr=model.hyperparams['learning_rate'], - weight_decay=model.hyperparams['decay'], - momentum=model.hyperparams['momentum']) - else: - print("Unknown optimizer. Please choose between (adam, sgd).") - - model_module = model - if args.distributed: - model = DDP(model, device_ids=[args.rank]) - model_module = model.module - - for epoch in range(args.epochs): - - print("\n---- Training Model ----") - epoch_start_time = time.time() - - model.train() # Set model to training mode - - for batch_i, (_, imgs, targets) in enumerate(tqdm.tqdm(dataloader, desc=f"Training Epoch {epoch}")): - batches_done = len(dataloader) * epoch + batch_i - - imgs = imgs.to(device, non_blocking=True) - targets = targets.to(device) - - outputs = model(imgs) - - loss, loss_components = compute_loss(outputs, targets, model_module) - - loss.backward() - - ############### - # Run optimizer - ############### - - if batches_done % model_module.hyperparams['subdivisions'] == 0: - # Adapt learning rate - # Get learning rate defined in cfg - lr = model_module.hyperparams['learning_rate'] - if batches_done < model_module.hyperparams['burn_in']: - # Burn in - lr *= (batches_done / model_module.hyperparams['burn_in']) - else: - # Set and parse the learning rate to the steps defined in the cfg - for threshold, value in model_module.hyperparams['lr_steps']: - if batches_done > threshold: - lr *= value - # Log the learning rate - if rank in [-1, 0]: - logger.scalar_summary("train/learning_rate", lr, batches_done) - # Set learning rate - for g in optimizer.param_groups: - g['lr'] = lr - - # Run optimizer - optimizer.step() - # Reset gradients - optimizer.zero_grad() - - # ############ - # Log progress - # ############ - if args.verbose and rank in [-1, 0]: - print(AsciiTable( - [ - ["Type", "Value"], - ["IoU loss", float(loss_components[0])], - ["Object loss", float(loss_components[1])], - ["Class loss", float(loss_components[2])], - ["Loss", float(loss_components[3])], - ["Batch loss", to_cpu(loss).item()], - ]).table) - - # Tensorboard logging - if rank in [-1, 0]: - tensorboard_log = [ - ("train/iou_loss", float(loss_components[0])), - ("train/obj_loss", float(loss_components[1])), - ("train/class_loss", float(loss_components[2])), - ("train/loss", to_cpu(loss).item())] - logger.list_of_scalars_summary(tensorboard_log, batches_done) - - model_module.seen += imgs.size(0) - - # ############# - # Save progress - # ############# - - # Save model to checkpoint file - if epoch % args.checkpoint_interval == 0 and rank in [-1, 0]: - checkpoint_path = f"checkpoints/yolov3_ckpt_{epoch}.pth" - print(f"---- Saving checkpoint to: '{checkpoint_path}' ----") - torch.save(model.state_dict(), checkpoint_path) - - # ######## - # Evaluate - # ######## - - if epoch % args.evaluation_interval == 0: - print("\n---- Evaluating Model ----") - # Evaluate the model on the validation set - metrics_output = _evaluate( - model_module, - validation_dataloader, - class_names, - img_size=model_module.hyperparams['height'], - iou_thres=args.iou_thres, - conf_thres=args.conf_thres, - nms_thres=args.nms_thres, - verbose=args.verbose - ) - - if metrics_output is not None and rank in [-1, 0]: - precision, recall, AP, f1, ap_class = metrics_output - evaluation_metrics = [ - ("validation/precision", precision.mean()), - ("validation/recall", recall.mean()), - ("validation/mAP", AP.mean()), - ("validation/f1", f1.mean())] - logger.list_of_scalars_summary(evaluation_metrics, epoch) - - epoch_total_time = time.time() - epoch_start_time - epoch_total_time_str = str(datetime.timedelta(seconds=int(epoch_total_time))) - - fps = len(dataloader) * mini_batch_size / epoch_total_time - if dist.is_initialized(): - fps = fps * dist.get_world_size() - - print('epoch time {}, Total FPS: {}'.format(epoch_total_time_str, fps)) - - - total_time = time.time() - start_time - total_time_str = str(datetime.timedelta(seconds=int(total_time))) - print('Training time {}'.format(total_time_str)) - - -if __name__ == "__main__": - run() diff --git a/cv/detection/yolov3/pytorch/pytorchyolo/utils/__init__.py b/cv/detection/yolov3/pytorch/pytorchyolo/utils/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/cv/detection/yolov3/pytorch/pytorchyolo/utils/augmentations.py b/cv/detection/yolov3/pytorch/pytorchyolo/utils/augmentations.py deleted file mode 100644 index 5c1eb58a1..000000000 --- a/cv/detection/yolov3/pytorch/pytorchyolo/utils/augmentations.py +++ /dev/null @@ -1,35 +0,0 @@ -import imgaug.augmenters as iaa -from torchvision import transforms -from pytorchyolo.utils.transforms import ToTensor, PadSquare, RelativeLabels, AbsoluteLabels, ImgAug - - -class DefaultAug(ImgAug): - def __init__(self, ): - self.augmentations = iaa.Sequential([ - iaa.Sharpen((0.0, 0.1)), - iaa.Affine(rotate=(-0, 0), translate_percent=(-0.1, 0.1), scale=(0.8, 1.5)), - iaa.AddToBrightness((-60, 40)), - iaa.AddToHue((-10, 10)), - iaa.Fliplr(0.5), - ]) - - -class StrongAug(ImgAug): - def __init__(self, ): - self.augmentations = iaa.Sequential([ - iaa.Dropout([0.0, 0.01]), - iaa.Sharpen((0.0, 0.1)), - iaa.Affine(rotate=(-10, 10), translate_percent=(-0.1, 0.1), scale=(0.8, 1.5)), - iaa.AddToBrightness((-60, 40)), - iaa.AddToHue((-20, 20)), - iaa.Fliplr(0.5), - ]) - - -AUGMENTATION_TRANSFORMS = transforms.Compose([ - AbsoluteLabels(), - DefaultAug(), - PadSquare(), - RelativeLabels(), - ToTensor(), -]) diff --git a/cv/detection/yolov3/pytorch/pytorchyolo/utils/datasets.py b/cv/detection/yolov3/pytorch/pytorchyolo/utils/datasets.py deleted file mode 100644 index 206c9bfb9..000000000 --- a/cv/detection/yolov3/pytorch/pytorchyolo/utils/datasets.py +++ /dev/null @@ -1,142 +0,0 @@ -from torch.utils.data import Dataset -import torch.nn.functional as F -import torch -import glob -import random -import os -import warnings -import numpy as np -from PIL import Image -from PIL import ImageFile - -ImageFile.LOAD_TRUNCATED_IMAGES = True - - -def pad_to_square(img, pad_value): - c, h, w = img.shape - dim_diff = np.abs(h - w) - # (upper / left) padding and (lower / right) padding - pad1, pad2 = dim_diff // 2, dim_diff - dim_diff // 2 - # Determine padding - pad = (0, 0, pad1, pad2) if h <= w else (pad1, pad2, 0, 0) - # Add padding - img = F.pad(img, pad, "constant", value=pad_value) - - return img, pad - - -def resize(image, size): - image = F.interpolate(image.unsqueeze(0), size=size, mode="nearest").squeeze(0) - return image - - -class ImageFolder(Dataset): - def __init__(self, folder_path, transform=None): - self.files = sorted(glob.glob("%s/*.*" % folder_path)) - self.transform = transform - - def __getitem__(self, index): - - img_path = self.files[index % len(self.files)] - img = np.array( - Image.open(img_path).convert('RGB'), - dtype=np.uint8) - - # Label Placeholder - boxes = np.zeros((1, 5)) - - # Apply transforms - if self.transform: - img, _ = self.transform((img, boxes)) - - return img_path, img - - def __len__(self): - return len(self.files) - - -class ListDataset(Dataset): - def __init__(self, list_path, img_size=416, multiscale=True, transform=None): - with open(list_path, "r") as file: - self.img_files = file.readlines() - self.label_files = [] - for path in self.img_files: - image_dir = os.path.dirname(path) - label_dir = "labels".join(image_dir.rsplit("images", 1)) - assert label_dir != image_dir, \ - f"Image path must contain a folder named 'images'! \n'{image_dir}'" - label_file = os.path.join(label_dir, os.path.basename(path)) - label_file = os.path.splitext(label_file)[0] + '.txt' - self.label_files.append(label_file) - - self.img_size = img_size - self.max_objects = 100 - self.multiscale = multiscale - self.min_size = self.img_size - 3 * 32 - self.max_size = self.img_size + 3 * 32 - self.batch_count = 0 - self.transform = transform - - def __getitem__(self, index): - - # --------- - # Image - # --------- - try: - - img_path = self.img_files[index % len(self.img_files)].rstrip() - - img = np.array(Image.open(img_path).convert('RGB'), dtype=np.uint8) - except Exception: - print(f"Could not read image '{img_path}'.") - return - - # --------- - # Label - # --------- - try: - label_path = self.label_files[index % len(self.img_files)].rstrip() - - # Ignore warning if file is empty - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - boxes = np.loadtxt(label_path).reshape(-1, 5) - except Exception: - #print(f"Could not read label '{label_path}'.") - return - - # ----------- - # Transform - # ----------- - if self.transform: - try: - img, bb_targets = self.transform((img, boxes)) - except Exception: - print("Could not apply transform.") - return - - return img_path, img, bb_targets - - def collate_fn(self, batch): - self.batch_count += 1 - # Drop invalid images - batch = [data for data in batch if data is not None] - paths, imgs, bb_targets = list(zip(*batch)) - - # Selects new image size every tenth batch - if self.multiscale and self.batch_count % 10 == 0: - self.img_size = random.choice( - range(self.min_size, self.max_size + 1, 32)) - - # Resize images to input shape - imgs = torch.stack([resize(img, self.img_size) for img in imgs]) - - # Add sample index to targets - for i, boxes in enumerate(bb_targets): - boxes[:, 0] = i - bb_targets = torch.cat(bb_targets, 0) - - return paths, imgs, bb_targets - - def __len__(self): - return len(self.img_files) diff --git a/cv/detection/yolov3/pytorch/pytorchyolo/utils/logger.py b/cv/detection/yolov3/pytorch/pytorchyolo/utils/logger.py deleted file mode 100644 index 26b606799..000000000 --- a/cv/detection/yolov3/pytorch/pytorchyolo/utils/logger.py +++ /dev/null @@ -1,119 +0,0 @@ -import os -import datetime -import torch - -try: - from torch.utils.tensorboard import SummaryWriter -except: - class SummaryWriter(object): - def __init__(self, log_dir=None, comment='', purge_step=None, max_queue=10, - flush_secs=120, filename_suffix=''): - if not log_dir: - import socket - from datetime import datetime - current_time = datetime.now().strftime('%b%d_%H-%M-%S') - log_dir = os.path.join( - 'runs', current_time + '_' + socket.gethostname() + comment) - self.log_dir = log_dir - self.purge_step = purge_step - self.max_queue = max_queue - self.flush_secs = flush_secs - self.filename_suffix = filename_suffix - - # Initialize the file writers, but they can be cleared out on close - # and recreated later as needed. - self.file_writer = self.all_writers = None - self._get_file_writer() - - # Create default bins for histograms, see generate_testdata.py in tensorflow/tensorboard - v = 1E-12 - buckets = [] - neg_buckets = [] - while v < 1E20: - buckets.append(v) - neg_buckets.append(-v) - v *= 1.1 - self.default_bins = neg_buckets[::-1] + [0] + buckets - - def _check_caffe2_blob(self, item): pass - - def _get_file_writer(self): pass - - def get_logdir(self): - """Returns the directory where event files will be written.""" - return self.log_dir - - def add_hparams(self, hparam_dict, metric_dict, hparam_domain_discrete=None, run_name=None): pass - - def add_scalar(self, tag, scalar_value, global_step=None, walltime=None, new_style=False): pass - - def add_scalars(self, main_tag, tag_scalar_dict, global_step=None, walltime=None): pass - - def add_histogram(self, tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None): pass - - def add_histogram_raw(self, tag, min, max, num, sum, sum_squares, bucket_limits, bucket_counts, global_step=None, walltime=None): pass - - def add_image(self, tag, img_tensor, global_step=None, walltime=None, dataformats='CHW'): pass - - def add_images(self, tag, img_tensor, global_step=None, walltime=None, dataformats='NCHW'): pass - - def add_image_with_boxes(self, tag, img_tensor, box_tensor, global_step=None, walltime=None, rescale=1, dataformats='CHW', labels=None): pass - - def add_figure(self, tag, figure, global_step=None, close=True, walltime=None): pass - - def add_video(self, tag, vid_tensor, global_step=None, fps=4, walltime=None): pass - - def add_audio(self, tag, snd_tensor, global_step=None, sample_rate=44100, walltime=None): pass - - def add_text(self, tag, text_string, global_step=None, walltime=None): pass - - def add_onnx_graph(self, prototxt): pass - - def add_graph(self, model, input_to_model=None, verbose=False): pass - - @staticmethod - def _encode(rawstr): pass - - def add_embedding(self, mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None): pass - - def add_pr_curve(self, tag, labels, predictions, global_step=None, num_thresholds=127, weights=None, walltime=None): pass - - def add_pr_curve_raw(self, tag, true_positive_counts, false_positive_counts, true_negative_counts, false_negative_counts, precision, recall, global_step=None, num_thresholds=127, weights=None, walltime=None): pass - - def add_custom_scalars_multilinechart(self, tags, category='default', title='untitled'): pass - - def add_custom_scalars_marginchart(self, tags, category='default', title='untitled'): pass - - def add_custom_scalars(self, layout): pass - - def add_mesh(self, tag, vertices, colors=None, faces=None, config_dict=None, global_step=None, walltime=None): pass - - def flush(self): pass - - def close(self): pass - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.close() - - - -class Logger(object): - def __init__(self, log_dir, log_hist=True): - """Create a summary writer logging to log_dir.""" - if log_hist: # Check a new folder for each log should be dreated - log_dir = os.path.join( - log_dir, - datetime.datetime.now().strftime("%Y_%m_%d__%H_%M_%S")) - self.writer = SummaryWriter(log_dir) - - def scalar_summary(self, tag, value, step): - """Log a scalar variable.""" - self.writer.add_scalar(tag, value, step) - - def list_of_scalars_summary(self, tag_value_pairs, step): - """Log scalar variables.""" - for tag, value in tag_value_pairs: - self.writer.add_scalar(tag, value, step) diff --git a/cv/detection/yolov3/pytorch/pytorchyolo/utils/loss.py b/cv/detection/yolov3/pytorch/pytorchyolo/utils/loss.py deleted file mode 100644 index 1a3f091da..000000000 --- a/cv/detection/yolov3/pytorch/pytorchyolo/utils/loss.py +++ /dev/null @@ -1,251 +0,0 @@ -import math - -import torch -import torch.nn as nn - -from .utils import to_cpu - -# This new loss function is based on https://github.com/ultralytics/yolov3/blob/master/utils/loss.py - - -def bbox_iou(box1, box2, x1y1x2y2=True, GIoU=False, DIoU=False, CIoU=False, eps=1e-9): - # Returns the IoU of box1 to box2. box1 is 4, box2 is nx4 - box2 = box2.T - - # Get the coordinates of bounding boxes - if x1y1x2y2: # x1, y1, x2, y2 = box1 - b1_x1, b1_y1, b1_x2, b1_y2 = box1[0], box1[1], box1[2], box1[3] - b2_x1, b2_y1, b2_x2, b2_y2 = box2[0], box2[1], box2[2], box2[3] - else: # transform from xywh to xyxy - b1_x1, b1_x2 = box1[0] - box1[2] / 2, box1[0] + box1[2] / 2 - b1_y1, b1_y2 = box1[1] - box1[3] / 2, box1[1] + box1[3] / 2 - b2_x1, b2_x2 = box2[0] - box2[2] / 2, box2[0] + box2[2] / 2 - b2_y1, b2_y2 = box2[1] - box2[3] / 2, box2[1] + box2[3] / 2 - - # Intersection area - inter = (torch.min(b1_x2, b2_x2) - torch.max(b1_x1, b2_x1)).clamp(0) * \ - (torch.min(b1_y2, b2_y2) - torch.max(b1_y1, b2_y1)).clamp(0) - - # Union Area - w1, h1 = b1_x2 - b1_x1, b1_y2 - b1_y1 + eps - w2, h2 = b2_x2 - b2_x1, b2_y2 - b2_y1 + eps - union = w1 * h1 + w2 * h2 - inter + eps - - iou = inter / union - if GIoU or DIoU or CIoU: - # convex (smallest enclosing box) width - cw = torch.max(b1_x2, b2_x2) - torch.min(b1_x1, b2_x1) - ch = torch.max(b1_y2, b2_y2) - torch.min(b1_y1, b2_y1) # convex height - if CIoU or DIoU: # Distance or Complete IoU https://arxiv.org/abs/1911.08287v1 - c2 = cw ** 2 + ch ** 2 + eps # convex diagonal squared - rho2 = ((b2_x1 + b2_x2 - b1_x1 - b1_x2) ** 2 + - (b2_y1 + b2_y2 - b1_y1 - b1_y2) ** 2) / 4 # center distance squared - if DIoU: - return iou - rho2 / c2 # DIoU - elif CIoU: # https://github.com/Zzh-tju/DIoU-SSD-pytorch/blob/master/utils/box/box_utils.py#L47 - v = (4 / math.pi ** 2) * \ - torch.pow(torch.atan(w2 / h2) - torch.atan(w1 / h1), 2) - with torch.no_grad(): - alpha = v / ((1 + eps) - iou + v) - return iou - (rho2 / c2 + v * alpha) # CIoU - else: # GIoU https://arxiv.org/pdf/1902.09630.pdf - c_area = cw * ch + eps # convex area - return iou - (c_area - union) / c_area # GIoU - else: - return iou # IoU - - -def smooth_BCE(eps=0.1): # https://github.com/ultralytics/yolov3/issues/238#issuecomment-598028441 - # return positive, negative label smoothing BCE targets - return 1.0 - 0.5 * eps, 0.5 * eps - - -class BCEBlurWithLogitsLoss(nn.Module): - # BCEwithLogitLoss() with reduced missing label effects. - def __init__(self, alpha=0.05): - super(BCEBlurWithLogitsLoss, self).__init__() - self.loss_fcn = nn.BCEWithLogitsLoss(reduction='none') # must be nn.BCEWithLogitsLoss() - self.alpha = alpha - - def forward(self, pred, true): - loss = self.loss_fcn(pred, true) - pred = torch.sigmoid(pred) # prob from logits - dx = pred - true # reduce only missing label effects - # dx = (pred - true).abs() # reduce missing label and false label effects - alpha_factor = 1 - torch.exp((dx - 1) / (self.alpha + 1e-4)) - loss *= alpha_factor - return loss.mean() - - -class FocalLoss(nn.Module): - # Wraps focal loss around existing loss_fcn(), i.e. criteria = FocalLoss(nn.BCEWithLogitsLoss(), gamma=1.5) - def __init__(self, loss_fcn, gamma=1.5, alpha=0.25): - super(FocalLoss, self).__init__() - self.loss_fcn = loss_fcn # must be nn.BCEWithLogitsLoss() - self.gamma = gamma - self.alpha = alpha - self.reduction = loss_fcn.reduction - self.loss_fcn.reduction = 'none' # required to apply FL to each element - - def forward(self, pred, true): - loss = self.loss_fcn(pred, true) - # p_t = torch.exp(-loss) - # loss *= self.alpha * (1.000001 - p_t) ** self.gamma # non-zero power for gradient stability - - # TF implementation https://github.com/tensorflow/addons/blob/v0.7.1/tensorflow_addons/losses/focal_loss.py - pred_prob = torch.sigmoid(pred) # prob from logits - p_t = true * pred_prob + (1 - true) * (1 - pred_prob) - alpha_factor = true * self.alpha + (1 - true) * (1 - self.alpha) - modulating_factor = (1.0 - p_t) ** self.gamma - loss *= alpha_factor * modulating_factor - - if self.reduction == 'mean': - return loss.mean() - elif self.reduction == 'sum': - return loss.sum() - else: # 'none' - return loss - - -class QFocalLoss(nn.Module): - # Wraps Quality focal loss around existing loss_fcn(), i.e. criteria = FocalLoss(nn.BCEWithLogitsLoss(), gamma=1.5) - def __init__(self, loss_fcn, gamma=1.5, alpha=0.25): - super(QFocalLoss, self).__init__() - self.loss_fcn = loss_fcn # must be nn.BCEWithLogitsLoss() - self.gamma = gamma - self.alpha = alpha - self.reduction = loss_fcn.reduction - self.loss_fcn.reduction = 'none' # required to apply FL to each element - - def forward(self, pred, true): - loss = self.loss_fcn(pred, true) - - pred_prob = torch.sigmoid(pred) # prob from logits - alpha_factor = true * self.alpha + (1 - true) * (1 - self.alpha) - modulating_factor = torch.abs(true - pred_prob) ** self.gamma - loss *= alpha_factor * modulating_factor - - if self.reduction == 'mean': - return loss.mean() - elif self.reduction == 'sum': - return loss.sum() - else: # 'none' - return loss - - -def compute_loss(predictions, targets, model): # predictions, targets, model - device = targets.device - lcls, lbox, lobj = torch.zeros(1, device=device), torch.zeros(1, device=device), torch.zeros(1, device=device) - tcls, tbox, indices, anchors = build_targets(predictions, targets, model) # targets - - # Define criteria - BCEcls = nn.BCEWithLogitsLoss( - pos_weight=torch.tensor([1.0], device=device)) - BCEobj = nn.BCEWithLogitsLoss( - pos_weight=torch.tensor([1.0], device=device)) - - # Class label smoothing https://arxiv.org/pdf/1902.04103.pdf eqn 3 - cp, cn = smooth_BCE(eps=0.0) - - # Focal loss - gamma = 0 # focal loss gamma - if gamma > 0: - BCEcls, BCEobj = FocalLoss(BCEcls, gamma), FocalLoss(BCEobj, gamma) - - # Losses - # layer index, layer predictions - for layer_index, layer_predictions in enumerate(predictions): - # image, anchor, gridy, gridx - b, anchor, grid_j, grid_i = indices[layer_index] - tobj = torch.zeros_like(layer_predictions[..., 0], device=device) # target obj - - num_targets = b.shape[0] # number of targets - if num_targets: - # prediction subset corresponding to targets - ps = layer_predictions[b, anchor, grid_j, grid_i] - - # Regression - pxy = ps[:, :2].sigmoid() - pwh = torch.exp(ps[:, 2:4]) * anchors[layer_index] - pbox = torch.cat((pxy, pwh), 1) # predicted box - # iou(prediction, target) - iou = bbox_iou(pbox.T, tbox[layer_index], x1y1x2y2=False, CIoU=True) - lbox += (1.0 - iou).mean() # iou loss - - model.gr = 1 - - # Objectness - tobj[b, anchor, grid_j, grid_i] = \ - (1.0 - model.gr) + model.gr * iou.detach().clamp(0).type(tobj.dtype) # iou ratio - - # Classification - if ps.size(1) - 5 > 1: - t = torch.full_like(ps[:, 5:], cn, device=device) # targets - t[range(num_targets), tcls[layer_index]] = cp - lcls += BCEcls(ps[:, 5:], t) # BCE - - lobj += BCEobj(layer_predictions[..., 4], tobj) # obj loss - - lbox *= 0.05 * (3. / 2) - lobj *= (3. / 2) - lcls *= 0.31 - batch_size = tobj.shape[0] # batch size - - loss = lbox + lobj + lcls - - return loss * batch_size, to_cpu(torch.cat((lbox, lobj, lcls, loss))) - - -def build_targets(p, targets, model): - # Build targets for compute_loss(), input targets(image,class,x,y,w,h) - na, nt = 3, targets.shape[0] # number of anchors, targets #TODO - tcls, tbox, indices, anch = [], [], [], [] - gain = torch.ones(7, device=targets.device) # normalized to gridspace gain - ai = torch.arange(na, device=targets.device).float().view(na, 1).repeat(1, nt) # same as .repeat_interleave(nt) - # append anchor indices - targets = torch.cat((targets.repeat(na, 1, 1), ai[:, :, None]), 2) - - g = 0.5 # bias - off = torch.tensor([[0, 0]], device=targets.device).float() * g # offsets - - for i, yolo_layer in enumerate(model.yolo_layers): - anchors = yolo_layer.anchors / yolo_layer.stride - gain[2:6] = torch.tensor(p[i].shape)[[3, 2, 3, 2]] # xyxy gain - - # Match targets to anchors - t = targets * gain - if nt: - # Matches - r = t[:, :, 4:6] / anchors[:, None] # wh ratio - j = torch.max(r, 1. / r).max(2)[0] < 4 # compare #TODO - # j = wh_iou(anchors, t[:, 4:6]) > model.hyp['iou_t'] # iou(3,n)=wh_iou(anchors(3,2), gwh(n,2)) - t = t[j] # filter - # Offsets - gxy = t[:, 2:4] # grid xy - gxi = gain[[2, 3]] - gxy # inverse - j, k = ((gxy % 1. < g) & (gxy > 1.)).T - l, m = ((gxi % 1. < g) & (gxi > 1.)).T - j = torch.stack((torch.ones_like(j),)) - t = t.repeat((off.shape[0], 1, 1))[j] - offsets = (torch.zeros_like(gxy)[None] + off[:, None])[j] - - else: - t = targets[0] - offsets = 0 - - # Define - b, c = t[:, :2].long().T # image, class - gxy = t[:, 2:4] # grid xy - gwh = t[:, 4:6] # grid wh - gij = (gxy - offsets).long() - gi, gj = gij.T # grid xy indices - - # Append - a = t[:, 6].long() # anchor indices - # image, anchor, grid indices - indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1))) - tbox.append(torch.cat((gxy - gij, gwh), 1)) # box - anch.append(anchors[a]) # anchors - tcls.append(c) # class - - return tcls, tbox, indices, anch diff --git a/cv/detection/yolov3/pytorch/pytorchyolo/utils/parse_config.py b/cv/detection/yolov3/pytorch/pytorchyolo/utils/parse_config.py deleted file mode 100644 index 4c9fa7f74..000000000 --- a/cv/detection/yolov3/pytorch/pytorchyolo/utils/parse_config.py +++ /dev/null @@ -1,37 +0,0 @@ - - -def parse_model_config(path): - """Parses the yolo-v3 layer configuration file and returns module definitions""" - file = open(path, 'r') - lines = file.read().split('\n') - lines = [x for x in lines if x and not x.startswith('#')] - lines = [x.rstrip().lstrip() for x in lines] # get rid of fringe whitespaces - module_defs = [] - for line in lines: - if line.startswith('['): # This marks the start of a new block - module_defs.append({}) - module_defs[-1]['type'] = line[1:-1].rstrip() - if module_defs[-1]['type'] == 'convolutional': - module_defs[-1]['batch_normalize'] = 0 - else: - key, value = line.split("=") - value = value.strip() - module_defs[-1][key.rstrip()] = value.strip() - - return module_defs - - -def parse_data_config(path): - """Parses the data configuration file""" - options = dict() - options['gpus'] = '0,1,2,3' - options['num_workers'] = '10' - with open(path, 'r') as fp: - lines = fp.readlines() - for line in lines: - line = line.strip() - if line == '' or line.startswith('#'): - continue - key, value = line.split('=') - options[key.strip()] = value.strip() - return options diff --git a/cv/detection/yolov3/pytorch/pytorchyolo/utils/transforms.py b/cv/detection/yolov3/pytorch/pytorchyolo/utils/transforms.py deleted file mode 100644 index 141ae9328..000000000 --- a/cv/detection/yolov3/pytorch/pytorchyolo/utils/transforms.py +++ /dev/null @@ -1,119 +0,0 @@ -import torch -import torch.nn.functional as F -import numpy as np - -import imgaug.augmenters as iaa -from imgaug.augmentables.bbs import BoundingBox, BoundingBoxesOnImage - -from .utils import xywh2xyxy_np -import torchvision.transforms as transforms - - -class ImgAug(object): - def __init__(self, augmentations=[]): - self.augmentations = augmentations - - def __call__(self, data): - # Unpack data - img, boxes = data - - # Convert xywh to xyxy - boxes = np.array(boxes) - boxes[:, 1:] = xywh2xyxy_np(boxes[:, 1:]) - - # Convert bounding boxes to imgaug - bounding_boxes = BoundingBoxesOnImage( - [BoundingBox(*box[1:], label=box[0]) for box in boxes], - shape=img.shape) - - # Apply augmentations - img, bounding_boxes = self.augmentations( - image=img, - bounding_boxes=bounding_boxes) - - # Clip out of image boxes - bounding_boxes = bounding_boxes.clip_out_of_image() - - # Convert bounding boxes back to numpy - boxes = np.zeros((len(bounding_boxes), 5)) - for box_idx, box in enumerate(bounding_boxes): - # Extract coordinates for unpadded + unscaled image - x1 = box.x1 - y1 = box.y1 - x2 = box.x2 - y2 = box.y2 - - # Returns (x, y, w, h) - boxes[box_idx, 0] = box.label - boxes[box_idx, 1] = ((x1 + x2) / 2) - boxes[box_idx, 2] = ((y1 + y2) / 2) - boxes[box_idx, 3] = (x2 - x1) - boxes[box_idx, 4] = (y2 - y1) - - return img, boxes - - -class RelativeLabels(object): - def __init__(self, ): - pass - - def __call__(self, data): - img, boxes = data - h, w, _ = img.shape - boxes[:, [1, 3]] /= w - boxes[:, [2, 4]] /= h - return img, boxes - - -class AbsoluteLabels(object): - def __init__(self, ): - pass - - def __call__(self, data): - img, boxes = data - h, w, _ = img.shape - boxes[:, [1, 3]] *= w - boxes[:, [2, 4]] *= h - return img, boxes - - -class PadSquare(ImgAug): - def __init__(self, ): - self.augmentations = iaa.Sequential([ - iaa.PadToAspectRatio( - 1.0, - position="center-center").to_deterministic() - ]) - - -class ToTensor(object): - def __init__(self, ): - pass - - def __call__(self, data): - img, boxes = data - # Extract image as PyTorch tensor - img = transforms.ToTensor()(img) - - bb_targets = torch.zeros((len(boxes), 6)) - bb_targets[:, 1:] = transforms.ToTensor()(boxes) - - return img, bb_targets - - -class Resize(object): - def __init__(self, size): - self.size = size - - def __call__(self, data): - img, boxes = data - img = F.interpolate(img.unsqueeze(0), size=self.size, mode="nearest").squeeze(0) - return img, boxes - - -DEFAULT_TRANSFORMS = transforms.Compose([ - AbsoluteLabels(), - PadSquare(), - RelativeLabels(), - ToTensor(), -]) diff --git a/cv/detection/yolov3/pytorch/pytorchyolo/utils/utils.py b/cv/detection/yolov3/pytorch/pytorchyolo/utils/utils.py deleted file mode 100644 index 316ad5ce8..000000000 --- a/cv/detection/yolov3/pytorch/pytorchyolo/utils/utils.py +++ /dev/null @@ -1,387 +0,0 @@ -from __future__ import division - -import os -import time -import platform -import tqdm -import torch -import torch.nn as nn -import torchvision -import numpy as np -import subprocess -import random - - -def provide_determinism(seed=42): - random.seed(seed) - np.random.seed(seed) - torch.manual_seed(seed) - torch.cuda.manual_seed_all(seed) - - torch.backends.cudnn.benchmark = False - torch.backends.cudnn.deterministic = True - -def worker_seed_set(worker_id): - # See for details of numpy: - # https://github.com/pytorch/pytorch/issues/5059#issuecomment-817392562 - # See for details of random: - # https://pytorch.org/docs/stable/notes/randomness.html#dataloader - - # NumPy - uint64_seed = torch.initial_seed() - ss = np.random.SeedSequence([uint64_seed]) - np.random.seed(ss.generate_state(4)) - - # random - worker_seed = torch.initial_seed() % 2**32 - random.seed(worker_seed) - - -def to_cpu(tensor): - return tensor.detach().cpu() - - -def load_classes(path): - """ - Loads class labels at 'path' - """ - with open(path, "r") as fp: - names = fp.read().splitlines() - return names - - -def weights_init_normal(m): - classname = m.__class__.__name__ - if classname.find("Conv") != -1: - nn.init.normal_(m.weight.data, 0.0, 0.02) - elif classname.find("BatchNorm2d") != -1: - nn.init.normal_(m.weight.data, 1.0, 0.02) - nn.init.constant_(m.bias.data, 0.0) - - -def rescale_boxes(boxes, current_dim, original_shape): - """ - Rescales bounding boxes to the original shape - """ - orig_h, orig_w = original_shape - - # The amount of padding that was added - pad_x = max(orig_h - orig_w, 0) * (current_dim / max(original_shape)) - pad_y = max(orig_w - orig_h, 0) * (current_dim / max(original_shape)) - - # Image height and width after padding is removed - unpad_h = current_dim - pad_y - unpad_w = current_dim - pad_x - - # Rescale bounding boxes to dimension of original image - boxes[:, 0] = ((boxes[:, 0] - pad_x // 2) / unpad_w) * orig_w - boxes[:, 1] = ((boxes[:, 1] - pad_y // 2) / unpad_h) * orig_h - boxes[:, 2] = ((boxes[:, 2] - pad_x // 2) / unpad_w) * orig_w - boxes[:, 3] = ((boxes[:, 3] - pad_y // 2) / unpad_h) * orig_h - return boxes - - -def xywh2xyxy(x): - y = x.new(x.shape) - y[..., 0] = x[..., 0] - x[..., 2] / 2 - y[..., 1] = x[..., 1] - x[..., 3] / 2 - y[..., 2] = x[..., 0] + x[..., 2] / 2 - y[..., 3] = x[..., 1] + x[..., 3] / 2 - return y - - -def xywh2xyxy_np(x): - y = np.zeros_like(x) - y[..., 0] = x[..., 0] - x[..., 2] / 2 - y[..., 1] = x[..., 1] - x[..., 3] / 2 - y[..., 2] = x[..., 0] + x[..., 2] / 2 - y[..., 3] = x[..., 1] + x[..., 3] / 2 - return y - - -def ap_per_class(tp, conf, pred_cls, target_cls): - """ Compute the average precision, given the recall and precision curves. - Source: https://github.com/rafaelpadilla/Object-Detection-Metrics. - # Arguments - tp: True positives (list). - conf: Objectness value from 0-1 (list). - pred_cls: Predicted object classes (list). - target_cls: True object classes (list). - # Returns - The average precision as computed in py-faster-rcnn. - """ - - # Sort by objectness - i = np.argsort(-conf) - tp, conf, pred_cls = tp[i], conf[i], pred_cls[i] - - # Find unique classes - unique_classes = np.unique(target_cls) - - # Create Precision-Recall curve and compute AP for each class - ap, p, r = [], [], [] - for c in tqdm.tqdm(unique_classes, desc="Computing AP"): - i = pred_cls == c - n_gt = (target_cls == c).sum() # Number of ground truth objects - n_p = i.sum() # Number of predicted objects - - if n_p == 0 and n_gt == 0: - continue - elif n_p == 0 or n_gt == 0: - ap.append(0) - r.append(0) - p.append(0) - else: - # Accumulate FPs and TPs - fpc = (1 - tp[i]).cumsum() - tpc = (tp[i]).cumsum() - - # Recall - recall_curve = tpc / (n_gt + 1e-16) - r.append(recall_curve[-1]) - - # Precision - precision_curve = tpc / (tpc + fpc) - p.append(precision_curve[-1]) - - # AP from recall-precision curve - ap.append(compute_ap(recall_curve, precision_curve)) - - # Compute F1 score (harmonic mean of precision and recall) - p, r, ap = np.array(p), np.array(r), np.array(ap) - f1 = 2 * p * r / (p + r + 1e-16) - - return p, r, ap, f1, unique_classes.astype("int32") - - -def compute_ap(recall, precision): - """ Compute the average precision, given the recall and precision curves. - Code originally from https://github.com/rbgirshick/py-faster-rcnn. - - # Arguments - recall: The recall curve (list). - precision: The precision curve (list). - # Returns - The average precision as computed in py-faster-rcnn. - """ - # correct AP calculation - # first append sentinel values at the end - mrec = np.concatenate(([0.0], recall, [1.0])) - mpre = np.concatenate(([0.0], precision, [0.0])) - - # compute the precision envelope - for i in range(mpre.size - 1, 0, -1): - mpre[i - 1] = np.maximum(mpre[i - 1], mpre[i]) - - # to calculate area under PR curve, look for points - # where X axis (recall) changes value - i = np.where(mrec[1:] != mrec[:-1])[0] - - # and sum (\Delta recall) * prec - ap = np.sum((mrec[i + 1] - mrec[i]) * mpre[i + 1]) - return ap - - -def get_batch_statistics(outputs, targets, iou_threshold): - """ Compute true positives, predicted scores and predicted labels per sample """ - batch_metrics = [] - for sample_i in range(len(outputs)): - - if outputs[sample_i] is None: - continue - - output = outputs[sample_i] - pred_boxes = output[:, :4] - pred_scores = output[:, 4] - pred_labels = output[:, -1] - - true_positives = np.zeros(pred_boxes.shape[0]) - - annotations = targets[targets[:, 0] == sample_i][:, 1:] - target_labels = annotations[:, 0] if len(annotations) else [] - if len(annotations): - detected_boxes = [] - target_boxes = annotations[:, 1:] - - for pred_i, (pred_box, pred_label) in enumerate(zip(pred_boxes, pred_labels)): - - # If targets are found break - if len(detected_boxes) == len(annotations): - break - - # Ignore if label is not one of the target labels - if pred_label not in target_labels: - continue - - iou, box_index = bbox_iou(pred_box.unsqueeze(0), target_boxes).max(0) - if iou >= iou_threshold and box_index not in detected_boxes: - true_positives[pred_i] = 1 - detected_boxes += [box_index] - batch_metrics.append([true_positives, pred_scores, pred_labels]) - return batch_metrics - - -def bbox_wh_iou(wh1, wh2): - wh2 = wh2.t() - w1, h1 = wh1[0], wh1[1] - w2, h2 = wh2[0], wh2[1] - inter_area = torch.min(w1, w2) * torch.min(h1, h2) - union_area = (w1 * h1 + 1e-16) + w2 * h2 - inter_area - return inter_area / union_area - - -def bbox_iou(box1, box2, x1y1x2y2=True): - """ - Returns the IoU of two bounding boxes - """ - if not x1y1x2y2: - # Transform from center and width to exact coordinates - b1_x1, b1_x2 = box1[:, 0] - box1[:, 2] / 2, box1[:, 0] + box1[:, 2] / 2 - b1_y1, b1_y2 = box1[:, 1] - box1[:, 3] / 2, box1[:, 1] + box1[:, 3] / 2 - b2_x1, b2_x2 = box2[:, 0] - box2[:, 2] / 2, box2[:, 0] + box2[:, 2] / 2 - b2_y1, b2_y2 = box2[:, 1] - box2[:, 3] / 2, box2[:, 1] + box2[:, 3] / 2 - else: - # Get the coordinates of bounding boxes - b1_x1, b1_y1, b1_x2, b1_y2 = \ - box1[:, 0], box1[:, 1], box1[:, 2], box1[:, 3] - b2_x1, b2_y1, b2_x2, b2_y2 = \ - box2[:, 0], box2[:, 1], box2[:, 2], box2[:, 3] - - # get the corrdinates of the intersection rectangle - inter_rect_x1 = torch.max(b1_x1, b2_x1) - inter_rect_y1 = torch.max(b1_y1, b2_y1) - inter_rect_x2 = torch.min(b1_x2, b2_x2) - inter_rect_y2 = torch.min(b1_y2, b2_y2) - # Intersection area - inter_area = torch.clamp(inter_rect_x2 - inter_rect_x1 + 1, min=0) * torch.clamp( - inter_rect_y2 - inter_rect_y1 + 1, min=0 - ) - # Union Area - b1_area = (b1_x2 - b1_x1 + 1) * (b1_y2 - b1_y1 + 1) - b2_area = (b2_x2 - b2_x1 + 1) * (b2_y2 - b2_y1 + 1) - - iou = inter_area / (b1_area + b2_area - inter_area + 1e-16) - - return iou - - -def box_iou(box1, box2): - # https://github.com/pytorch/vision/blob/master/torchvision/ops/boxes.py - """ - Return intersection-over-union (Jaccard index) of boxes. - Both sets of boxes are expected to be in (x1, y1, x2, y2) format. - Arguments: - box1 (Tensor[N, 4]) - box2 (Tensor[M, 4]) - Returns: - iou (Tensor[N, M]): the NxM matrix containing the pairwise - IoU values for every element in boxes1 and boxes2 - """ - - def box_area(box): - # box = 4xn - return (box[2] - box[0]) * (box[3] - box[1]) - - area1 = box_area(box1.T) - area2 = box_area(box2.T) - - # inter(N,M) = (rb(N,M,2) - lt(N,M,2)).clamp(0).prod(2) - inter = (torch.min(box1[:, None, 2:], box2[:, 2:]) - - torch.max(box1[:, None, :2], box2[:, :2])).clamp(0).prod(2) - # iou = inter / (area1 + area2 - inter) - return inter / (area1[:, None] + area2 - inter) - - -def non_max_suppression(prediction, conf_thres=0.25, iou_thres=0.45, classes=None): - """Performs Non-Maximum Suppression (NMS) on inference results - Returns: - detections with shape: nx6 (x1, y1, x2, y2, conf, cls) - """ - - nc = prediction.shape[2] - 5 # number of classes - - # Settings - # (pixels) minimum and maximum box width and height - max_wh = 4096 - max_det = 300 # maximum number of detections per image - max_nms = 30000 # maximum number of boxes into torchvision.ops.nms() - time_limit = 1.0 # seconds to quit after - multi_label = nc > 1 # multiple labels per box (adds 0.5ms/img) - - t = time.time() - output = [torch.zeros((0, 6), device="cpu")] * prediction.shape[0] - - for xi, x in enumerate(prediction): # image index, image inference - # Apply constraints - # x[((x[..., 2:4] < min_wh) | (x[..., 2:4] > max_wh)).any(1), 4] = 0 # width-height - x = x[x[..., 4] > conf_thres] # confidence - - # If none remain process next image - if not x.shape[0]: - continue - - # Compute conf - x[:, 5:] *= x[:, 4:5] # conf = obj_conf * cls_conf - - # Box (center x, center y, width, height) to (x1, y1, x2, y2) - box = xywh2xyxy(x[:, :4]) - - # Detections matrix nx6 (xyxy, conf, cls) - if multi_label: - i, j = (x[:, 5:] > conf_thres).nonzero(as_tuple=False).T - x = torch.cat((box[i], x[i, j + 5, None], j[:, None].float()), 1) - else: # best class only - conf, j = x[:, 5:].max(1, keepdim=True) - x = torch.cat((box, conf, j.float()), 1)[conf.view(-1) > conf_thres] - - # Filter by class - if classes is not None: - x = x[(x[:, 5:6] == torch.tensor(classes, device=x.device)).any(1)] - - # Check shape - n = x.shape[0] # number of boxes - if not n: # no boxes - continue - elif n > max_nms: # excess boxes - # sort by confidence - x = x[x[:, 4].argsort(descending=True)[:max_nms]] - - # Batched NMS - c = x[:, 5:6] * max_wh # classes - # boxes (offset by class), scores - boxes, scores = x[:, :4] + c, x[:, 4] - i = torchvision.ops.nms(boxes, scores, iou_thres) # NMS - if i.shape[0] > max_det: # limit detections - i = i[:max_det] - - output[xi] = to_cpu(x[i]) - - if (time.time() - t) > time_limit: - print(f'WARNING: NMS time limit {time_limit}s exceeded') - break # time limit exceeded - - return output - - -def print_environment_info(): - """ - Prints infos about the environment and the system. - This should help when people make issues containg the printout. - """ - - print("Environment information:") - - # Print OS information - print(f"System: {platform.system()} {platform.release()}") - - # Print poetry package version - try: - print(f"Current Version: {subprocess.check_output(['poetry', 'version'], stderr=subprocess.DEVNULL).decode('ascii').strip()}") - except (subprocess.CalledProcessError, FileNotFoundError): - print("Not using the poetry package") - - # Print commit hash if possible - try: - print(f"Current Commit Hash: {subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD'], stderr=subprocess.DEVNULL).decode('ascii').strip()}") - except (subprocess.CalledProcessError, FileNotFoundError): - print("No git or repo found") diff --git a/cv/detection/yolov3/pytorch/requirements.txt b/cv/detection/yolov3/pytorch/requirements.txt deleted file mode 100644 index a23141b04..000000000 --- a/cv/detection/yolov3/pytorch/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -imgaug -terminaltables -torchsummary diff --git a/cv/detection/yolov3/pytorch/run_dist_training.sh b/cv/detection/yolov3/pytorch/run_dist_training.sh deleted file mode 100644 index 0968d3789..000000000 --- a/cv/detection/yolov3/pytorch/run_dist_training.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -export PYTHONPATH=$PYTHONPATH:`pwd` - -LOG_DIR="logs" -if [ ! -d "$LOG_DIR" ]; then - mkdir -p ${LOG_DIR} -fi -DATE=`date +%Y%m%d%H%M%S` - -source ./get_num_devices.sh - -# Run finetuning -python3 -m torch.distributed.launch --nproc_per_node=$IX_NUM_CUDA_VISIBLE_DEVICES --use_env \ - ./pytorchyolo/train.py --pretrained_weights checkpoints/yolov3_voc_pretrain.pth \ - --second_stage_steps 200 "$@" 2>&1 | tee ${LOG_DIR}/training_${DATE}.log - -if [[ ${PIPESTATUS[0]} != 0 ]]; then - echo "ERROR: finetuning on VOC failed" - exit 1 -fi - -exit 0 diff --git a/cv/detection/yolov3/pytorch/run_training.sh b/cv/detection/yolov3/pytorch/run_training.sh deleted file mode 100644 index fb51026db..000000000 --- a/cv/detection/yolov3/pytorch/run_training.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -export PYTHONPATH=$PYTHONPATH:`pwd` - -LOG_DIR="logs" -if [ ! -d "$LOG_DIR" ]; then - mkdir -p ${LOG_DIR} -fi -DATE=`date +%Y%m%d%H%M%S` - -# Run finetuning -python3 pytorchyolo/train.py "$@" 2>&1 | tee ${LOG_DIR}/training_${DATE}.log - -if [[ ${PIPESTATUS[0]} != 0 ]]; then - echo "ERROR: finetuning on VOC failed" - exit 1 -fi - -exit 0 diff --git a/cv/detection/yolov3/pytorch/setup.sh b/cv/detection/yolov3/pytorch/setup.sh deleted file mode 100644 index e58f014ce..000000000 --- a/cv/detection/yolov3/pytorch/setup.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -# Install packages -echo "Start installing packages..." -pip3 install tqdm -pip3 install terminaltables -ID=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"') -if [[ ${ID} == "ubuntu" ]]; then - echo ${ID} -apt -y install libgl1-mesa-glx -apt -y install libgeos-dev -elif [[ ${ID} == "Loongnix" ]]; then - echo ${ID} -apt -y install libgl1-mesa-glx -apt -y install libgeos-dev -elif [[ ${ID} == "centos" ]]; then - echo ${ID} -yum -y install mesa-libGL -yum -y install geos-devel -elif [[ ${ID} == "kylin" ]]; then - echo ${ID} -yum -y install mesa-libGL -yum -y install geos-devel -else - echo "Unable to determine OS..." -fi -pip3 install cython # Will automatically install opencv-python -pip3 install imgaug # Will automatically install opencv-python -pip3 install torchsummary - -echo "Finished installing packages." - diff --git a/cv/detection/yolov3/pytorch/voc_annotation.py b/cv/detection/yolov3/pytorch/voc_annotation.py deleted file mode 100644 index 358161ef6..000000000 --- a/cv/detection/yolov3/pytorch/voc_annotation.py +++ /dev/null @@ -1,82 +0,0 @@ -''' -Description: -Author: Liwei Dai -Date: 2021-05-10 19:35:41 -LastEditors: VSCode -LastEditTime: 2021-05-10 19:38:34 -''' -import os -import argparse -import xml.etree.ElementTree as ET - -def convert_voc_annotation(data_path, data_type, anno_path, use_difficult_bbox=True): - - classes = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', - 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', - 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', - 'train', 'tvmonitor'] - img_inds_file = os.path.join(data_path, 'ImageSets', 'Main', data_type + '.txt') - # Rename the folder containing images - try: - os.rename(os.path.join(data_path, 'JPEGImages'), os.path.join(data_path, 'images')) - except FileNotFoundError: - print("JPEGImages folder has already been renamed to images") - with open(img_inds_file, 'r') as f: - txt = f.readlines() - image_inds = [line.strip() for line in txt] - - os.makedirs(os.path.join(data_path, 'labels'), exist_ok=True) - with open(anno_path, 'a') as f: - for image_ind in image_inds: - image_path = os.path.join(data_path, 'images', image_ind + '.jpg') - label_path = os.path.join(data_path, 'labels', image_ind + '.txt') # This will be created - anno_path = os.path.join(data_path, 'Annotations', image_ind + '.xml') - root = ET.parse(anno_path).getroot() - objects = root.findall('object') - labels = [] - for obj in objects: - difficult = obj.find('difficult').text.strip() - if (not use_difficult_bbox) and(int(difficult) == 1): - continue - bbox = obj.find('bndbox') - class_ind = classes.index(obj.find('name').text.lower().strip()) - xmin = int(bbox.find('xmin').text.strip()) - xmax = int(bbox.find('xmax').text.strip()) - ymin = int(bbox.find('ymin').text.strip()) - ymax = int(bbox.find('ymax').text.strip()) - annotation = os.path.join(data_path, 'labels', image_ind + '.txt') - img_size = root.find('size') - h, w = int(img_size.find('height').text.strip()), int(img_size.find('width').text.strip()) - - # Prepare for labels - x_center, y_center = (xmin + xmax) / 2 / w, (ymin + ymax) / 2 / h - h_obj, w_obj = abs(xmax - xmin) /w , abs(ymax - ymin) /h - - label = ' '.join(str(i) for i in [class_ind, x_center, y_center, w_obj, h_obj]) - labels.append(label) - with open(label_path, 'w') as f_label: - f_label.writelines("%s\n" % l for l in labels) - f.write(image_path + "\n") - return len(image_inds) - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument("--data_path", default="./VOC/") - parser.add_argument("--train_annotation", default="./data/voc/train.txt") - parser.add_argument("--test_annotation", default="./data/voc/valid.txt") - flags = parser.parse_args() - - if os.path.exists(flags.train_annotation):os.remove(flags.train_annotation) - if os.path.exists(flags.test_annotation):os.remove(flags.test_annotation) - if os.path.dirname(flags.train_annotation): - os.makedirs(os.path.dirname(flags.train_annotation), exist_ok=True) - if os.path.dirname(flags.train_annotation): - os.makedirs(os.path.dirname(flags.test_annotation), exist_ok=True) - - num1 = convert_voc_annotation(os.path.join(flags.data_path, 'train/VOCdevkit/VOC2007'), 'trainval', flags.train_annotation, False) - num2 = convert_voc_annotation(os.path.join(flags.data_path, 'train/VOCdevkit/VOC2012'), 'trainval', flags.train_annotation, False) - num3 = convert_voc_annotation(os.path.join(flags.data_path, 'test/VOCdevkit/VOC2007'), 'test', flags.test_annotation, False) - print('=> The number of image for train is: %d\tThe number of image for test is:%d' %(num1 + num2, num3)) - - diff --git a/cv/detection/yolov3/pytorch/weights/download_weights.sh b/cv/detection/yolov3/pytorch/weights/download_weights.sh deleted file mode 100644 index d78133853..000000000 --- a/cv/detection/yolov3/pytorch/weights/download_weights.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -# Download weights for vanilla YOLOv3 -wget -c "https://pjreddie.com/media/files/yolov3.weights" --header "Referer: pjreddie.com" -# # Download weights for tiny YOLOv3 -wget -c "https://pjreddie.com/media/files/yolov3-tiny.weights" --header "Referer: pjreddie.com" -# Download weights for backbone network -wget -c "https://pjreddie.com/media/files/darknet53.conv.74" --header "Referer: pjreddie.com" -- Gitee From 3b3e2f828cc0b9b715d08feaf5fb85e787972747 Mon Sep 17 00:00:00 2001 From: "mingjiang.li" Date: Fri, 13 Sep 2024 16:12:09 +0800 Subject: [PATCH 4/5] move yolov5 Signed-off-by: mingjiang.li --- cv/detection/yolov5/pytorch/.dockerignore | 216 ---- cv/detection/yolov5/pytorch/.gitignore | 4 - cv/detection/yolov5/pytorch/CONTRIBUTING.md | 70 -- cv/detection/yolov5/pytorch/Dockerfile | 50 - cv/detection/yolov5/pytorch/LICENSE | 674 ------------- cv/detection/yolov5/pytorch/README.md | 29 +- .../yolov5/pytorch/data/Argoverse_HD.yaml | 66 -- .../yolov5/pytorch/data/GlobalWheat2020.yaml | 52 - .../yolov5/pytorch/data/Objects365.yaml | 103 -- .../yolov5/pytorch/data/SKU-110K.yaml | 51 - cv/detection/yolov5/pytorch/data/VOC.yaml | 79 -- .../yolov5/pytorch/data/VisDrone.yaml | 60 -- cv/detection/yolov5/pytorch/data/coco.yaml | 43 - cv/detection/yolov5/pytorch/data/coco128.yaml | 29 - .../pytorch/data/hyps/hyp.finetune.yaml | 39 - .../data/hyps/hyp.finetune_objects365.yaml | 29 - .../pytorch/data/hyps/hyp.scratch-p6.yaml | 34 - .../yolov5/pytorch/data/hyps/hyp.scratch.yaml | 34 - .../yolov5/pytorch/data/images/bus.jpg | Bin 487438 -> 0 bytes .../yolov5/pytorch/data/images/bus_res.jpg | Bin 491492 -> 0 bytes .../yolov5/pytorch/data/images/zidane.jpg | Bin 168949 -> 0 bytes .../yolov5/pytorch/data/images/zidane_res.jpg | Bin 250649 -> 0 bytes .../pytorch/data/scripts/download_weights.sh | 12 - .../yolov5/pytorch/data/scripts/get_coco.sh | 27 - .../pytorch/data/scripts/get_coco128.sh | 17 - cv/detection/yolov5/pytorch/data/xView.yaml | 101 -- cv/detection/yolov5/pytorch/detect.py | 228 ----- cv/detection/yolov5/pytorch/export.py | 173 ---- .../yolov5/pytorch/get_num_devices.sh | 25 - cv/detection/yolov5/pytorch/hubconf.py | 127 --- cv/detection/yolov5/pytorch/init.sh | 42 - .../yolov5/pytorch/models/__init__.py | 0 cv/detection/yolov5/pytorch/models/common.py | 390 -------- .../yolov5/pytorch/models/experimental.py | 136 --- .../yolov5/pytorch/models/hub/anchors.yaml | 58 -- .../yolov5/pytorch/models/hub/yolov3-spp.yaml | 49 - .../pytorch/models/hub/yolov3-tiny.yaml | 39 - .../yolov5/pytorch/models/hub/yolov3.yaml | 49 - .../yolov5/pytorch/models/hub/yolov5-fpn.yaml | 40 - .../yolov5/pytorch/models/hub/yolov5-p2.yaml | 52 - .../yolov5/pytorch/models/hub/yolov5-p6.yaml | 54 - .../yolov5/pytorch/models/hub/yolov5-p7.yaml | 65 -- .../pytorch/models/hub/yolov5-panet.yaml | 46 - .../yolov5/pytorch/models/hub/yolov5l6.yaml | 58 -- .../yolov5/pytorch/models/hub/yolov5m6.yaml | 58 -- .../models/hub/yolov5s-transformer.yaml | 46 - .../yolov5/pytorch/models/hub/yolov5s6.yaml | 58 -- .../yolov5/pytorch/models/hub/yolov5x6.yaml | 58 -- cv/detection/yolov5/pytorch/models/yolo.py | 313 ------ .../yolov5/pytorch/models/yolov5l.yaml | 46 - .../yolov5/pytorch/models/yolov5m.yaml | 46 - .../yolov5/pytorch/models/yolov5s.yaml | 46 - .../yolov5/pytorch/models/yolov5x.yaml | 46 - cv/detection/yolov5/pytorch/requirements.txt | 27 - cv/detection/yolov5/pytorch/run.sh | 38 - .../yolov5/pytorch/run_dist_training.sh | 16 - cv/detection/yolov5/pytorch/run_inference.sh | 26 - cv/detection/yolov5/pytorch/run_training.sh | 16 - .../train_yolov5s_coco128_amp_torch.sh | 21 - .../train_yolov5s_coco128_dist_torch.sh | 18 - .../train_yolov5s_coco128_torch.sh | 18 - .../train_yolov5s_coco_amp_torch.sh | 21 - .../train_yolov5s_coco_dist_torch.sh | 18 - .../start_scripts/train_yolov5s_coco_torch.sh | 19 - cv/detection/yolov5/pytorch/test.py | 366 ------- cv/detection/yolov5/pytorch/train.py | 842 ---------------- cv/detection/yolov5/pytorch/utils/__init__.py | 0 .../yolov5/pytorch/utils/activations.py | 98 -- .../yolov5/pytorch/utils/augmentations.py | 272 ----- .../yolov5/pytorch/utils/autoanchor.py | 161 --- .../yolov5/pytorch/utils/aws/__init__.py | 0 cv/detection/yolov5/pytorch/utils/aws/mime.sh | 26 - .../yolov5/pytorch/utils/aws/resume.py | 37 - .../yolov5/pytorch/utils/aws/userdata.sh | 27 - cv/detection/yolov5/pytorch/utils/datasets.py | 930 ------------------ .../pytorch/utils/flask_rest_api/README.md | 68 -- .../utils/flask_rest_api/example_request.py | 13 - .../pytorch/utils/flask_rest_api/restapi.py | 37 - cv/detection/yolov5/pytorch/utils/general.py | 682 ------------- .../utils/google_app_engine/Dockerfile | 25 - .../additional_requirements.txt | 4 - .../pytorch/utils/google_app_engine/app.yaml | 14 - .../yolov5/pytorch/utils/google_utils.py | 143 --- cv/detection/yolov5/pytorch/utils/loss.py | 226 ----- cv/detection/yolov5/pytorch/utils/metrics.py | 327 ------ cv/detection/yolov5/pytorch/utils/plots.py | 472 --------- .../yolov5/pytorch/utils/torch_utils.py | 312 ------ .../pytorch/utils/wandb_logging/__init__.py | 0 .../utils/wandb_logging/log_dataset.py | 26 - .../utils/wandb_logging/wandb_utils.py | 350 ------- 90 files changed, 15 insertions(+), 9848 deletions(-) delete mode 100644 cv/detection/yolov5/pytorch/.dockerignore delete mode 100644 cv/detection/yolov5/pytorch/.gitignore delete mode 100644 cv/detection/yolov5/pytorch/CONTRIBUTING.md delete mode 100644 cv/detection/yolov5/pytorch/Dockerfile delete mode 100644 cv/detection/yolov5/pytorch/LICENSE delete mode 100644 cv/detection/yolov5/pytorch/data/Argoverse_HD.yaml delete mode 100644 cv/detection/yolov5/pytorch/data/GlobalWheat2020.yaml delete mode 100644 cv/detection/yolov5/pytorch/data/Objects365.yaml delete mode 100644 cv/detection/yolov5/pytorch/data/SKU-110K.yaml delete mode 100644 cv/detection/yolov5/pytorch/data/VOC.yaml delete mode 100644 cv/detection/yolov5/pytorch/data/VisDrone.yaml delete mode 100644 cv/detection/yolov5/pytorch/data/coco.yaml delete mode 100644 cv/detection/yolov5/pytorch/data/coco128.yaml delete mode 100644 cv/detection/yolov5/pytorch/data/hyps/hyp.finetune.yaml delete mode 100644 cv/detection/yolov5/pytorch/data/hyps/hyp.finetune_objects365.yaml delete mode 100644 cv/detection/yolov5/pytorch/data/hyps/hyp.scratch-p6.yaml delete mode 100644 cv/detection/yolov5/pytorch/data/hyps/hyp.scratch.yaml delete mode 100644 cv/detection/yolov5/pytorch/data/images/bus.jpg delete mode 100644 cv/detection/yolov5/pytorch/data/images/bus_res.jpg delete mode 100644 cv/detection/yolov5/pytorch/data/images/zidane.jpg delete mode 100644 cv/detection/yolov5/pytorch/data/images/zidane_res.jpg delete mode 100644 cv/detection/yolov5/pytorch/data/scripts/download_weights.sh delete mode 100644 cv/detection/yolov5/pytorch/data/scripts/get_coco.sh delete mode 100644 cv/detection/yolov5/pytorch/data/scripts/get_coco128.sh delete mode 100644 cv/detection/yolov5/pytorch/data/xView.yaml delete mode 100644 cv/detection/yolov5/pytorch/detect.py delete mode 100644 cv/detection/yolov5/pytorch/export.py delete mode 100644 cv/detection/yolov5/pytorch/get_num_devices.sh delete mode 100644 cv/detection/yolov5/pytorch/hubconf.py delete mode 100644 cv/detection/yolov5/pytorch/init.sh delete mode 100644 cv/detection/yolov5/pytorch/models/__init__.py delete mode 100644 cv/detection/yolov5/pytorch/models/common.py delete mode 100644 cv/detection/yolov5/pytorch/models/experimental.py delete mode 100644 cv/detection/yolov5/pytorch/models/hub/anchors.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/hub/yolov3-spp.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/hub/yolov3-tiny.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/hub/yolov3.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/hub/yolov5-fpn.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/hub/yolov5-p2.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/hub/yolov5-p6.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/hub/yolov5-p7.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/hub/yolov5-panet.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/hub/yolov5l6.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/hub/yolov5m6.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/hub/yolov5s-transformer.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/hub/yolov5s6.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/hub/yolov5x6.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/yolo.py delete mode 100644 cv/detection/yolov5/pytorch/models/yolov5l.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/yolov5m.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/yolov5s.yaml delete mode 100644 cv/detection/yolov5/pytorch/models/yolov5x.yaml delete mode 100644 cv/detection/yolov5/pytorch/requirements.txt delete mode 100644 cv/detection/yolov5/pytorch/run.sh delete mode 100644 cv/detection/yolov5/pytorch/run_dist_training.sh delete mode 100644 cv/detection/yolov5/pytorch/run_inference.sh delete mode 100644 cv/detection/yolov5/pytorch/run_training.sh delete mode 100644 cv/detection/yolov5/pytorch/start_scripts/train_yolov5s_coco128_amp_torch.sh delete mode 100644 cv/detection/yolov5/pytorch/start_scripts/train_yolov5s_coco128_dist_torch.sh delete mode 100644 cv/detection/yolov5/pytorch/start_scripts/train_yolov5s_coco128_torch.sh delete mode 100644 cv/detection/yolov5/pytorch/start_scripts/train_yolov5s_coco_amp_torch.sh delete mode 100644 cv/detection/yolov5/pytorch/start_scripts/train_yolov5s_coco_dist_torch.sh delete mode 100644 cv/detection/yolov5/pytorch/start_scripts/train_yolov5s_coco_torch.sh delete mode 100644 cv/detection/yolov5/pytorch/test.py delete mode 100644 cv/detection/yolov5/pytorch/train.py delete mode 100644 cv/detection/yolov5/pytorch/utils/__init__.py delete mode 100644 cv/detection/yolov5/pytorch/utils/activations.py delete mode 100644 cv/detection/yolov5/pytorch/utils/augmentations.py delete mode 100644 cv/detection/yolov5/pytorch/utils/autoanchor.py delete mode 100644 cv/detection/yolov5/pytorch/utils/aws/__init__.py delete mode 100644 cv/detection/yolov5/pytorch/utils/aws/mime.sh delete mode 100644 cv/detection/yolov5/pytorch/utils/aws/resume.py delete mode 100644 cv/detection/yolov5/pytorch/utils/aws/userdata.sh delete mode 100644 cv/detection/yolov5/pytorch/utils/datasets.py delete mode 100644 cv/detection/yolov5/pytorch/utils/flask_rest_api/README.md delete mode 100644 cv/detection/yolov5/pytorch/utils/flask_rest_api/example_request.py delete mode 100644 cv/detection/yolov5/pytorch/utils/flask_rest_api/restapi.py delete mode 100644 cv/detection/yolov5/pytorch/utils/general.py delete mode 100644 cv/detection/yolov5/pytorch/utils/google_app_engine/Dockerfile delete mode 100644 cv/detection/yolov5/pytorch/utils/google_app_engine/additional_requirements.txt delete mode 100644 cv/detection/yolov5/pytorch/utils/google_app_engine/app.yaml delete mode 100644 cv/detection/yolov5/pytorch/utils/google_utils.py delete mode 100644 cv/detection/yolov5/pytorch/utils/loss.py delete mode 100644 cv/detection/yolov5/pytorch/utils/metrics.py delete mode 100644 cv/detection/yolov5/pytorch/utils/plots.py delete mode 100644 cv/detection/yolov5/pytorch/utils/torch_utils.py delete mode 100644 cv/detection/yolov5/pytorch/utils/wandb_logging/__init__.py delete mode 100644 cv/detection/yolov5/pytorch/utils/wandb_logging/log_dataset.py delete mode 100644 cv/detection/yolov5/pytorch/utils/wandb_logging/wandb_utils.py diff --git a/cv/detection/yolov5/pytorch/.dockerignore b/cv/detection/yolov5/pytorch/.dockerignore deleted file mode 100644 index 9c9663f00..000000000 --- a/cv/detection/yolov5/pytorch/.dockerignore +++ /dev/null @@ -1,216 +0,0 @@ -# Repo-specific DockerIgnore ------------------------------------------------------------------------------------------- -#.git -.cache -.idea -runs -output -coco -storage.googleapis.com - -data/samples/* -**/results*.txt -*.jpg - -# Neural Network weights ----------------------------------------------------------------------------------------------- -**/*.pt -**/*.pth -**/*.onnx -**/*.mlmodel -**/*.torchscript -**/*.torchscript.pt - - -# Below Copied From .gitignore ----------------------------------------------------------------------------------------- -# Below Copied From .gitignore ----------------------------------------------------------------------------------------- - - -# GitHub Python GitIgnore ---------------------------------------------------------------------------------------------- -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -env/ -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -*.egg-info/ -wandb/ -.installed.cfg -*.egg - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -.hypothesis/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# pyenv -.python-version - -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -# dotenv -.env - -# virtualenv -.venv* -venv*/ -ENV*/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ - - -# https://github.com/github/gitignore/blob/master/Global/macOS.gitignore ----------------------------------------------- - -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon -Icon? - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - - -# https://github.com/github/gitignore/blob/master/Global/JetBrains.gitignore -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff: -.idea/* -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/dictionaries -.html # Bokeh Plots -.pg # TensorFlow Frozen Graphs -.avi # videos - -# Sensitive or high-churn files: -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml - -# Gradle: -.idea/**/gradle.xml -.idea/**/libraries - -# CMake -cmake-build-debug/ -cmake-build-release/ - -# Mongo Explorer plugin: -.idea/**/mongoSettings.xml - -## File-based project format: -*.iws - -## Plugin-specific files: - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties diff --git a/cv/detection/yolov5/pytorch/.gitignore b/cv/detection/yolov5/pytorch/.gitignore deleted file mode 100644 index 31facb0c7..000000000 --- a/cv/detection/yolov5/pytorch/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -**/__pycache__/ -runs -weights -datasets diff --git a/cv/detection/yolov5/pytorch/CONTRIBUTING.md b/cv/detection/yolov5/pytorch/CONTRIBUTING.md deleted file mode 100644 index 7c0ba3ae9..000000000 --- a/cv/detection/yolov5/pytorch/CONTRIBUTING.md +++ /dev/null @@ -1,70 +0,0 @@ -## Contributing to YOLOv5 🚀 - -We love your input! We want to make contributing to YOLOv5 as easy and transparent as possible, whether it's: - -- Reporting a bug -- Discussing the current state of the code -- Submitting a fix -- Proposing a new feature -- Becoming a maintainer - -YOLOv5 works so well due to our combined community effort, and for every small improvement you contribute you will be helping push the frontiers of what's possible in AI 😃! - - -## Submitting a Pull Request (PR) 🛠️ -Submitting a PR is easy! This example shows how to submit a PR for updating `requirements.txt` in 4 steps: - -### 1. Select File to Update -Select `requirements.txt` to update by clicking on it in GitHub. -

    PR_step1

    - -### 2. Click 'Edit this file' -Button is in top-right corner. -

    PR_step2

    - -### 3. Make Changes -Change `matplotlib` version from `3.2.2` to `3.3`. -

    PR_step3

    - -### 4. Preview Changes and Submit PR -Click on the **Preview changes** tab to verify your updates. At the bottom of the screen select 'Create a **new branch** for this commit', assign your branch a descriptive name such as `fix/matplotlib_version` and click the green **Propose changes** button. All done, your PR is now submitted to YOLOv5 for review and approval 😃! -

    PR_step4

    - -### PR recommendations - -To allow your work to be integrated as seamlessly as possible, we advise you to: -- ✅ Verify your PR is **up-to-date with origin/master.** If your PR is behind origin/master an automatic [GitHub actions](https://github.com/ultralytics/yolov5/blob/master/.github/workflows/rebase.yml) rebase may be attempted by including the /rebase command in a comment body, or by running the following code, replacing 'feature' with the name of your local branch: -```bash -git remote add upstream https://github.com/ultralytics/yolov5.git -git fetch upstream -git checkout feature # <----- replace 'feature' with local branch name -git merge upstream/master -git push -u origin -f -``` -- ✅ Verify all Continuous Integration (CI) **checks are passing**. -- ✅ Reduce changes to the absolute **minimum** required for your bug fix or feature addition. _"It is not daily increase but daily decrease, hack away the unessential. The closer to the source, the less wastage there is."_ -Bruce Lee - - -## Submitting a Bug Report 🐛 - -If you spot a problem with YOLOv5 please submit a Bug Report! - -For us to start investigating a possibel problem we need to be able to reproduce it ourselves first. We've created a few short guidelines below to help users provide what we need in order to get started. - -When asking a question, people will be better able to provide help if you provide **code** that they can easily understand and use to **reproduce** the problem. This is referred to by community members as creating a [minimum reproducible example](https://stackoverflow.com/help/minimal-reproducible-example). Your code that reproduces the problem should be: - -* ✅ **Minimal** – Use as little code as possible that still produces the same problem -* ✅ **Complete** – Provide **all** parts someone else needs to reproduce your problem in the question itself -* ✅ **Reproducible** – Test the code you're about to provide to make sure it reproduces the problem - -In addition to the above requirements, for [Ultralytics](https://ultralytics.com/) to provide assistance your code should be: - -* ✅ **Current** – Verify that your code is up-to-date with current GitHub [master](https://github.com/ultralytics/yolov5/tree/master), and if necessary `git pull` or `git clone` a new copy to ensure your problem has not already been resolved by previous commits. -* ✅ **Unmodified** – Your problem must be reproducible without any modifications to the codebase in this repository. [Ultralytics](https://ultralytics.com/) does not provide support for custom code ⚠️. - -If you believe your problem meets all of the above criteria, please close this issue and raise a new one using the 🐛 **Bug Report** [template](https://github.com/ultralytics/yolov5/issues/new/choose) and providing a [minimum reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) to help us better understand and diagnose your problem. - - -## License - -By contributing, you agree that your contributions will be licensed under the [GPL-3.0 license](https://choosealicense.com/licenses/gpl-3.0/) diff --git a/cv/detection/yolov5/pytorch/Dockerfile b/cv/detection/yolov5/pytorch/Dockerfile deleted file mode 100644 index e22c1106f..000000000 --- a/cv/detection/yolov5/pytorch/Dockerfile +++ /dev/null @@ -1,50 +0,0 @@ -# Start FROM Nvidia PyTorch image https://ngc.nvidia.com/catalog/containers/nvidia:pytorch -FROM nvcr.io/nvidia/pytorch:21.05-py3 - -# Install linux packages -RUN apt update && apt install -y zip htop screen libgl1-mesa-glx - -# Install python dependencies -COPY requirements.txt . -RUN python -m pip install --upgrade pip -RUN pip uninstall -y nvidia-tensorboard nvidia-tensorboard-plugin-dlprof -RUN pip install --no-cache -r requirements.txt coremltools onnx gsutil notebook -RUN pip install --no-cache -U torch torchvision numpy -# RUN pip install --no-cache torch==1.9.0+cu111 torchvision==0.10.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html - -# Create working directory -RUN mkdir -p /usr/src/app -WORKDIR /usr/src/app - -# Copy contents -COPY . /usr/src/app - -# Set environment variables -ENV HOME=/usr/src/app - - -# Usage Examples ------------------------------------------------------------------------------------------------------- - -# Build and Push -# t=ultralytics/yolov5:latest && sudo docker build -t $t . && sudo docker push $t - -# Pull and Run -# t=ultralytics/yolov5:latest && sudo docker pull $t && sudo docker run -it --ipc=host --gpus all $t - -# Pull and Run with local directory access -# t=ultralytics/yolov5:latest && sudo docker pull $t && sudo docker run -it --ipc=host --gpus all -v "$(pwd)"/datasets:/usr/src/datasets $t - -# Kill all -# sudo docker kill $(sudo docker ps -q) - -# Kill all image-based -# sudo docker kill $(sudo docker ps -qa --filter ancestor=ultralytics/yolov5:latest) - -# Bash into running container -# sudo docker exec -it 5a9b5863d93d bash - -# Bash into stopped container -# id=$(sudo docker ps -qa) && sudo docker start $id && sudo docker exec -it $id bash - -# Clean up -# docker system prune -a --volumes diff --git a/cv/detection/yolov5/pytorch/LICENSE b/cv/detection/yolov5/pytorch/LICENSE deleted file mode 100644 index 9e419e042..000000000 --- a/cv/detection/yolov5/pytorch/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/cv/detection/yolov5/pytorch/README.md b/cv/detection/yolov5/pytorch/README.md index fb3b33ddc..b202d415a 100644 --- a/cv/detection/yolov5/pytorch/README.md +++ b/cv/detection/yolov5/pytorch/README.md @@ -4,8 +4,10 @@ YOLOv5 🚀 is a family of object detection architectures and models pretrained ## Step 1: Installing packages -```shell -# install libGL, requirements. +```bash +## clone yolov5 and install +git clone https://gitee.com/deep-spark/deepsparkhub-GPL.git +cd deepsparkhub-GPL/cv/detection/yolov5/pytorch/ bash init.sh ``` @@ -37,7 +39,7 @@ coco2017 Modify the configuration file(data/coco.yaml) ```bash -$ vim data/coco.yaml +vim data/coco.yaml # path: the root of coco data # train: the relative path of train images # val: the relative path of valid images @@ -50,13 +52,13 @@ Train the yolov5 model as follows, the train log is saved in ./runs/train/exp ### On single GPU ```bash -$ python3 train.py --data ./data/coco.yaml --batch-size 32 --cfg ./models/yolov5s.yaml --weights '' +python3 train.py --data ./data/coco.yaml --batch-size 32 --cfg ./models/yolov5s.yaml --weights '' ``` ### On single GPU (AMP) ```bash -$ python3 train.py --data ./data/coco.yaml --batch-size 32 --cfg ./models/yolov5s.yaml --weights '' --amp +python3 train.py --data ./data/coco.yaml --batch-size 32 --cfg ./models/yolov5s.yaml --weights '' --amp ``` ### Multiple GPUs on one machine @@ -64,7 +66,7 @@ $ python3 train.py --data ./data/coco.yaml --batch-size 32 --cfg ./models/yolov5 ```bash # eight cards # YOLOv5s -$ python3 -m torch.distributed.launch --nproc_per_node 8 \ +python3 -m torch.distributed.launch --nproc_per_node 8 \ train.py \ --data ./data/coco.yaml \ --batch-size 64 \ @@ -72,14 +74,14 @@ $ python3 -m torch.distributed.launch --nproc_per_node 8 \ --device 0,1,2,3,4,5,6,7 # YOLOv5m -$ bash run.sh +bash run.sh ``` ### Multiple GPUs on one machine (AMP) ```bash # eight cards -$ python3 -m torch.distributed.launch --nproc_per_node 8 \ +python3 -m torch.distributed.launch --nproc_per_node 8 \ train.py \ --data ./data/coco.yaml \ --batch-size 256 \ @@ -92,24 +94,23 @@ $ python3 -m torch.distributed.launch --nproc_per_node 8 \ Test the yolov5 model as follows, the result is saved in ./runs/detect: ```bash -$ python3 detect.py --source ./data/images/bus.jpg --weights yolov5s.pt --img 640 +python3 detect.py --source ./data/images/bus.jpg --weights yolov5s.pt --img 640 -$ python3 detect.py --source ./data/images/zidane.jpg --weights yolov5s.pt --img 640 +python3 detect.py --source ./data/images/zidane.jpg --weights yolov5s.pt --img 640 ``` ## Results on BI-V100 | GPUs | FP16 | Batch size | FPS | E2E | mAP@.5 | -| ------ | ------ | ------------ | ----- | ----- | -------- | +| ---- | ---- | ---------- | --- | --- | ------ | | 1x1 | True | 64 | 81 | N/A | N/A | | 1x8 | True | 64 | 598 | 24h | 0.632 | - | Convergence criteria | Configuration (x denotes number of GPUs) | Performance | Accuracy | Power(W) | Scalability | Memory utilization(G) | Stability | -| ---------------------- | ------------------------------------------ | ------------- | ---------- | ------------ | ------------- | ------------------------- | ----------- | +| -------------------- | ---------------------------------------- | ----------- | -------- | ---------- | ----------- | ----------------------- | --------- | | mAP:0.5 | SDK V2.2, bs:128, 8x, AMP | 1228 | 0.56 | 140\*8 | 0.92 | 27.3\*8 | 1 | ## Reference -https://github.com/ultralytics/yolov5 +- [YOLOv5](https://github.com/ultralytics/yolov5) diff --git a/cv/detection/yolov5/pytorch/data/Argoverse_HD.yaml b/cv/detection/yolov5/pytorch/data/Argoverse_HD.yaml deleted file mode 100644 index ad1a52254..000000000 --- a/cv/detection/yolov5/pytorch/data/Argoverse_HD.yaml +++ /dev/null @@ -1,66 +0,0 @@ -# Argoverse-HD dataset (ring-front-center camera) http://www.cs.cmu.edu/~mengtial/proj/streaming/ -# Train command: python train.py --data Argoverse_HD.yaml -# Default dataset location is next to YOLOv5: -# /parent -# /datasets/Argoverse -# /yolov5 - - -# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] -path: ../datasets/Argoverse # dataset root dir -train: Argoverse-1.1/images/train/ # train images (relative to 'path') 39384 images -val: Argoverse-1.1/images/val/ # val images (relative to 'path') 15062 images -test: Argoverse-1.1/images/test/ # test images (optional) https://eval.ai/web/challenges/challenge-page/800/overview - -# Classes -nc: 8 # number of classes -names: [ 'person', 'bicycle', 'car', 'motorcycle', 'bus', 'truck', 'traffic_light', 'stop_sign' ] # class names - - -# Download script/URL (optional) --------------------------------------------------------------------------------------- -download: | - import json - - from tqdm import tqdm - from utils.general import download, Path - - - def argoverse2yolo(set): - labels = {} - a = json.load(open(set, "rb")) - for annot in tqdm(a['annotations'], desc=f"Converting {set} to YOLOv5 format..."): - img_id = annot['image_id'] - img_name = a['images'][img_id]['name'] - img_label_name = img_name[:-3] + "txt" - - cls = annot['category_id'] # instance class id - x_center, y_center, width, height = annot['bbox'] - x_center = (x_center + width / 2) / 1920.0 # offset and scale - y_center = (y_center + height / 2) / 1200.0 # offset and scale - width /= 1920.0 # scale - height /= 1200.0 # scale - - img_dir = set.parents[2] / 'Argoverse-1.1' / 'labels' / a['seq_dirs'][a['images'][annot['image_id']]['sid']] - if not img_dir.exists(): - img_dir.mkdir(parents=True, exist_ok=True) - - k = str(img_dir / img_label_name) - if k not in labels: - labels[k] = [] - labels[k].append(f"{cls} {x_center} {y_center} {width} {height}\n") - - for k in labels: - with open(k, "w") as f: - f.writelines(labels[k]) - - - # Download - dir = Path('../datasets/Argoverse') # dataset root dir - urls = ['https://argoverse-hd.s3.us-east-2.amazonaws.com/Argoverse-HD-Full.zip'] - download(urls, dir=dir, delete=False) - - # Convert - annotations_dir = 'Argoverse-HD/annotations/' - (dir / 'Argoverse-1.1' / 'tracking').rename(dir / 'Argoverse-1.1' / 'images') # rename 'tracking' to 'images' - for d in "train.json", "val.json": - argoverse2yolo(dir / annotations_dir / d) # convert VisDrone annotations to YOLO labels diff --git a/cv/detection/yolov5/pytorch/data/GlobalWheat2020.yaml b/cv/detection/yolov5/pytorch/data/GlobalWheat2020.yaml deleted file mode 100644 index b77534944..000000000 --- a/cv/detection/yolov5/pytorch/data/GlobalWheat2020.yaml +++ /dev/null @@ -1,52 +0,0 @@ -# Global Wheat 2020 dataset http://www.global-wheat.com/ -# Train command: python train.py --data GlobalWheat2020.yaml -# Default dataset location is next to YOLOv5: -# /parent -# /datasets/GlobalWheat2020 -# /yolov5 - - -# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] -path: ../datasets/GlobalWheat2020 # dataset root dir -train: # train images (relative to 'path') 3422 images - - images/arvalis_1 - - images/arvalis_2 - - images/arvalis_3 - - images/ethz_1 - - images/rres_1 - - images/inrae_1 - - images/usask_1 -val: # val images (relative to 'path') 748 images (WARNING: train set contains ethz_1) - - images/ethz_1 -test: # test images (optional) 1276 images - - images/utokyo_1 - - images/utokyo_2 - - images/nau_1 - - images/uq_1 - -# Classes -nc: 1 # number of classes -names: [ 'wheat_head' ] # class names - - -# Download script/URL (optional) --------------------------------------------------------------------------------------- -download: | - from utils.general import download, Path - - # Download - dir = Path(yaml['path']) # dataset root dir - urls = ['https://zenodo.org/record/4298502/files/global-wheat-codalab-official.zip', - 'https://github.com/ultralytics/yolov5/releases/download/v1.0/GlobalWheat2020_labels.zip'] - download(urls, dir=dir) - - # Make Directories - for p in 'annotations', 'images', 'labels': - (dir / p).mkdir(parents=True, exist_ok=True) - - # Move - for p in 'arvalis_1', 'arvalis_2', 'arvalis_3', 'ethz_1', 'rres_1', 'inrae_1', 'usask_1', \ - 'utokyo_1', 'utokyo_2', 'nau_1', 'uq_1': - (dir / p).rename(dir / 'images' / p) # move to /images - f = (dir / p).with_suffix('.json') # json file - if f.exists(): - f.rename((dir / 'annotations' / p).with_suffix('.json')) # move to /annotations diff --git a/cv/detection/yolov5/pytorch/data/Objects365.yaml b/cv/detection/yolov5/pytorch/data/Objects365.yaml deleted file mode 100644 index e365c82ca..000000000 --- a/cv/detection/yolov5/pytorch/data/Objects365.yaml +++ /dev/null @@ -1,103 +0,0 @@ -# Objects365 dataset https://www.objects365.org/ -# Train command: python train.py --data Objects365.yaml -# Default dataset location is next to YOLOv5: -# /parent -# /datasets/Objects365 -# /yolov5 - - -# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] -path: ../datasets/Objects365 # dataset root dir -train: images/train # train images (relative to 'path') 1742289 images -val: images/val # val images (relative to 'path') 5570 images -test: # test images (optional) - -# Classes -nc: 365 # number of classes -names: [ 'Person', 'Sneakers', 'Chair', 'Other Shoes', 'Hat', 'Car', 'Lamp', 'Glasses', 'Bottle', 'Desk', 'Cup', - 'Street Lights', 'Cabinet/shelf', 'Handbag/Satchel', 'Bracelet', 'Plate', 'Picture/Frame', 'Helmet', 'Book', - 'Gloves', 'Storage box', 'Boat', 'Leather Shoes', 'Flower', 'Bench', 'Potted Plant', 'Bowl/Basin', 'Flag', - 'Pillow', 'Boots', 'Vase', 'Microphone', 'Necklace', 'Ring', 'SUV', 'Wine Glass', 'Belt', 'Monitor/TV', - 'Backpack', 'Umbrella', 'Traffic Light', 'Speaker', 'Watch', 'Tie', 'Trash bin Can', 'Slippers', 'Bicycle', - 'Stool', 'Barrel/bucket', 'Van', 'Couch', 'Sandals', 'Basket', 'Drum', 'Pen/Pencil', 'Bus', 'Wild Bird', - 'High Heels', 'Motorcycle', 'Guitar', 'Carpet', 'Cell Phone', 'Bread', 'Camera', 'Canned', 'Truck', - 'Traffic cone', 'Cymbal', 'Lifesaver', 'Towel', 'Stuffed Toy', 'Candle', 'Sailboat', 'Laptop', 'Awning', - 'Bed', 'Faucet', 'Tent', 'Horse', 'Mirror', 'Power outlet', 'Sink', 'Apple', 'Air Conditioner', 'Knife', - 'Hockey Stick', 'Paddle', 'Pickup Truck', 'Fork', 'Traffic Sign', 'Balloon', 'Tripod', 'Dog', 'Spoon', 'Clock', - 'Pot', 'Cow', 'Cake', 'Dinning Table', 'Sheep', 'Hanger', 'Blackboard/Whiteboard', 'Napkin', 'Other Fish', - 'Orange/Tangerine', 'Toiletry', 'Keyboard', 'Tomato', 'Lantern', 'Machinery Vehicle', 'Fan', - 'Green Vegetables', 'Banana', 'Baseball Glove', 'Airplane', 'Mouse', 'Train', 'Pumpkin', 'Soccer', 'Skiboard', - 'Luggage', 'Nightstand', 'Tea pot', 'Telephone', 'Trolley', 'Head Phone', 'Sports Car', 'Stop Sign', - 'Dessert', 'Scooter', 'Stroller', 'Crane', 'Remote', 'Refrigerator', 'Oven', 'Lemon', 'Duck', 'Baseball Bat', - 'Surveillance Camera', 'Cat', 'Jug', 'Broccoli', 'Piano', 'Pizza', 'Elephant', 'Skateboard', 'Surfboard', - 'Gun', 'Skating and Skiing shoes', 'Gas stove', 'Donut', 'Bow Tie', 'Carrot', 'Toilet', 'Kite', 'Strawberry', - 'Other Balls', 'Shovel', 'Pepper', 'Computer Box', 'Toilet Paper', 'Cleaning Products', 'Chopsticks', - 'Microwave', 'Pigeon', 'Baseball', 'Cutting/chopping Board', 'Coffee Table', 'Side Table', 'Scissors', - 'Marker', 'Pie', 'Ladder', 'Snowboard', 'Cookies', 'Radiator', 'Fire Hydrant', 'Basketball', 'Zebra', 'Grape', - 'Giraffe', 'Potato', 'Sausage', 'Tricycle', 'Violin', 'Egg', 'Fire Extinguisher', 'Candy', 'Fire Truck', - 'Billiards', 'Converter', 'Bathtub', 'Wheelchair', 'Golf Club', 'Briefcase', 'Cucumber', 'Cigar/Cigarette', - 'Paint Brush', 'Pear', 'Heavy Truck', 'Hamburger', 'Extractor', 'Extension Cord', 'Tong', 'Tennis Racket', - 'Folder', 'American Football', 'earphone', 'Mask', 'Kettle', 'Tennis', 'Ship', 'Swing', 'Coffee Machine', - 'Slide', 'Carriage', 'Onion', 'Green beans', 'Projector', 'Frisbee', 'Washing Machine/Drying Machine', - 'Chicken', 'Printer', 'Watermelon', 'Saxophone', 'Tissue', 'Toothbrush', 'Ice cream', 'Hot-air balloon', - 'Cello', 'French Fries', 'Scale', 'Trophy', 'Cabbage', 'Hot dog', 'Blender', 'Peach', 'Rice', 'Wallet/Purse', - 'Volleyball', 'Deer', 'Goose', 'Tape', 'Tablet', 'Cosmetics', 'Trumpet', 'Pineapple', 'Golf Ball', - 'Ambulance', 'Parking meter', 'Mango', 'Key', 'Hurdle', 'Fishing Rod', 'Medal', 'Flute', 'Brush', 'Penguin', - 'Megaphone', 'Corn', 'Lettuce', 'Garlic', 'Swan', 'Helicopter', 'Green Onion', 'Sandwich', 'Nuts', - 'Speed Limit Sign', 'Induction Cooker', 'Broom', 'Trombone', 'Plum', 'Rickshaw', 'Goldfish', 'Kiwi fruit', - 'Router/modem', 'Poker Card', 'Toaster', 'Shrimp', 'Sushi', 'Cheese', 'Notepaper', 'Cherry', 'Pliers', 'CD', - 'Pasta', 'Hammer', 'Cue', 'Avocado', 'Hamimelon', 'Flask', 'Mushroom', 'Screwdriver', 'Soap', 'Recorder', - 'Bear', 'Eggplant', 'Board Eraser', 'Coconut', 'Tape Measure/Ruler', 'Pig', 'Showerhead', 'Globe', 'Chips', - 'Steak', 'Crosswalk Sign', 'Stapler', 'Camel', 'Formula 1', 'Pomegranate', 'Dishwasher', 'Crab', - 'Hoverboard', 'Meat ball', 'Rice Cooker', 'Tuba', 'Calculator', 'Papaya', 'Antelope', 'Parrot', 'Seal', - 'Butterfly', 'Dumbbell', 'Donkey', 'Lion', 'Urinal', 'Dolphin', 'Electric Drill', 'Hair Dryer', 'Egg tart', - 'Jellyfish', 'Treadmill', 'Lighter', 'Grapefruit', 'Game board', 'Mop', 'Radish', 'Baozi', 'Target', 'French', - 'Spring Rolls', 'Monkey', 'Rabbit', 'Pencil Case', 'Yak', 'Red Cabbage', 'Binoculars', 'Asparagus', 'Barbell', - 'Scallop', 'Noddles', 'Comb', 'Dumpling', 'Oyster', 'Table Tennis paddle', 'Cosmetics Brush/Eyeliner Pencil', - 'Chainsaw', 'Eraser', 'Lobster', 'Durian', 'Okra', 'Lipstick', 'Cosmetics Mirror', 'Curling', 'Table Tennis' ] - - -# Download script/URL (optional) --------------------------------------------------------------------------------------- -download: | - from pycocotools.coco import COCO - from tqdm import tqdm - - from utils.general import download, Path - - # Make Directories - dir = Path(yaml['path']) # dataset root dir - for p in 'images', 'labels': - (dir / p).mkdir(parents=True, exist_ok=True) - for q in 'train', 'val': - (dir / p / q).mkdir(parents=True, exist_ok=True) - - # Download - url = "https://dorc.ks3-cn-beijing.ksyun.com/data-set/2020Objects365%E6%95%B0%E6%8D%AE%E9%9B%86/train/" - download([url + 'zhiyuan_objv2_train.tar.gz'], dir=dir, delete=False) # annotations json - download([url + f for f in [f'patch{i}.tar.gz' for i in range(51)]], dir=dir / 'images' / 'train', - curl=True, delete=False, threads=8) - - # Move - train = dir / 'images' / 'train' - for f in tqdm(train.rglob('*.jpg'), desc=f'Moving images'): - f.rename(train / f.name) # move to /images/train - - # Labels - coco = COCO(dir / 'zhiyuan_objv2_train.json') - names = [x["name"] for x in coco.loadCats(coco.getCatIds())] - for cid, cat in enumerate(names): - catIds = coco.getCatIds(catNms=[cat]) - imgIds = coco.getImgIds(catIds=catIds) - for im in tqdm(coco.loadImgs(imgIds), desc=f'Class {cid + 1}/{len(names)} {cat}'): - width, height = im["width"], im["height"] - path = Path(im["file_name"]) # image filename - try: - with open(dir / 'labels' / 'train' / path.with_suffix('.txt').name, 'a') as file: - annIds = coco.getAnnIds(imgIds=im["id"], catIds=catIds, iscrowd=None) - for a in coco.loadAnns(annIds): - x, y, w, h = a['bbox'] # bounding box in xywh (xy top-left corner) - x, y = x + w / 2, y + h / 2 # xy to center - file.write(f"{cid} {x / width:.5f} {y / height:.5f} {w / width:.5f} {h / height:.5f}\n") - - except Exception as e: - print(e) diff --git a/cv/detection/yolov5/pytorch/data/SKU-110K.yaml b/cv/detection/yolov5/pytorch/data/SKU-110K.yaml deleted file mode 100644 index 7087bb9c2..000000000 --- a/cv/detection/yolov5/pytorch/data/SKU-110K.yaml +++ /dev/null @@ -1,51 +0,0 @@ -# SKU-110K retail items dataset https://github.com/eg4000/SKU110K_CVPR19 -# Train command: python train.py --data SKU-110K.yaml -# Default dataset location is next to YOLOv5: -# /parent -# /datasets/SKU-110K -# /yolov5 - - -# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] -path: ../datasets/SKU-110K # dataset root dir -train: train.txt # train images (relative to 'path') 8219 images -val: val.txt # val images (relative to 'path') 588 images -test: test.txt # test images (optional) 2936 images - -# Classes -nc: 1 # number of classes -names: [ 'object' ] # class names - - -# Download script/URL (optional) --------------------------------------------------------------------------------------- -download: | - import shutil - from tqdm import tqdm - from utils.general import np, pd, Path, download, xyxy2xywh - - # Download - dir = Path(yaml['path']) # dataset root dir - parent = Path(dir.parent) # download dir - urls = ['http://trax-geometry.s3.amazonaws.com/cvpr_challenge/SKU110K_fixed.tar.gz'] - download(urls, dir=parent, delete=False) - - # Rename directories - if dir.exists(): - shutil.rmtree(dir) - (parent / 'SKU110K_fixed').rename(dir) # rename dir - (dir / 'labels').mkdir(parents=True, exist_ok=True) # create labels dir - - # Convert labels - names = 'image', 'x1', 'y1', 'x2', 'y2', 'class', 'image_width', 'image_height' # column names - for d in 'annotations_train.csv', 'annotations_val.csv', 'annotations_test.csv': - x = pd.read_csv(dir / 'annotations' / d, names=names).values # annotations - images, unique_images = x[:, 0], np.unique(x[:, 0]) - with open((dir / d).with_suffix('.txt').__str__().replace('annotations_', ''), 'w') as f: - f.writelines(f'./images/{s}\n' for s in unique_images) - for im in tqdm(unique_images, desc=f'Converting {dir / d}'): - cls = 0 # single-class dataset - with open((dir / 'labels' / im).with_suffix('.txt'), 'a') as f: - for r in x[images == im]: - w, h = r[6], r[7] # image width, height - xywh = xyxy2xywh(np.array([[r[1] / w, r[2] / h, r[3] / w, r[4] / h]]))[0] # instance - f.write(f"{cls} {xywh[0]:.5f} {xywh[1]:.5f} {xywh[2]:.5f} {xywh[3]:.5f}\n") # write label diff --git a/cv/detection/yolov5/pytorch/data/VOC.yaml b/cv/detection/yolov5/pytorch/data/VOC.yaml deleted file mode 100644 index 3d878fa67..000000000 --- a/cv/detection/yolov5/pytorch/data/VOC.yaml +++ /dev/null @@ -1,79 +0,0 @@ -# PASCAL VOC dataset http://host.robots.ox.ac.uk/pascal/VOC/ -# Train command: python train.py --data VOC.yaml -# Default dataset location is next to YOLOv5: -# /parent -# /datasets/VOC -# /yolov5 - - -# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] -path: ../datasets/VOC -train: # train images (relative to 'path') 16551 images - - images/train2012 - - images/train2007 - - images/val2012 - - images/val2007 -val: # val images (relative to 'path') 4952 images - - images/test2007 -test: # test images (optional) - - images/test2007 - -# Classes -nc: 20 # number of classes -names: [ 'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', - 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor' ] # class names - - -# Download script/URL (optional) --------------------------------------------------------------------------------------- -download: | - import xml.etree.ElementTree as ET - - from tqdm import tqdm - from utils.general import download, Path - - - def convert_label(path, lb_path, year, image_id): - def convert_box(size, box): - dw, dh = 1. / size[0], 1. / size[1] - x, y, w, h = (box[0] + box[1]) / 2.0 - 1, (box[2] + box[3]) / 2.0 - 1, box[1] - box[0], box[3] - box[2] - return x * dw, y * dh, w * dw, h * dh - - in_file = open(path / f'VOC{year}/Annotations/{image_id}.xml') - out_file = open(lb_path, 'w') - tree = ET.parse(in_file) - root = tree.getroot() - size = root.find('size') - w = int(size.find('width').text) - h = int(size.find('height').text) - - for obj in root.iter('object'): - cls = obj.find('name').text - if cls in yaml['names'] and not int(obj.find('difficult').text) == 1: - xmlbox = obj.find('bndbox') - bb = convert_box((w, h), [float(xmlbox.find(x).text) for x in ('xmin', 'xmax', 'ymin', 'ymax')]) - cls_id = yaml['names'].index(cls) # class id - out_file.write(" ".join([str(a) for a in (cls_id, *bb)]) + '\n') - - - # Download - dir = Path(yaml['path']) # dataset root dir - url = 'https://github.com/ultralytics/yolov5/releases/download/v1.0/' - urls = [url + 'VOCtrainval_06-Nov-2007.zip', # 446MB, 5012 images - url + 'VOCtest_06-Nov-2007.zip', # 438MB, 4953 images - url + 'VOCtrainval_11-May-2012.zip'] # 1.95GB, 17126 images - download(urls, dir=dir / 'images', delete=False) - - # Convert - path = dir / f'images/VOCdevkit' - for year, image_set in ('2012', 'train'), ('2012', 'val'), ('2007', 'train'), ('2007', 'val'), ('2007', 'test'): - imgs_path = dir / 'images' / f'{image_set}{year}' - lbs_path = dir / 'labels' / f'{image_set}{year}' - imgs_path.mkdir(exist_ok=True, parents=True) - lbs_path.mkdir(exist_ok=True, parents=True) - - image_ids = open(path / f'VOC{year}/ImageSets/Main/{image_set}.txt').read().strip().split() - for id in tqdm(image_ids, desc=f'{image_set}{year}'): - f = path / f'VOC{year}/JPEGImages/{id}.jpg' # old img path - lb_path = (lbs_path / f.name).with_suffix('.txt') # new label path - f.rename(imgs_path / f.name) # move image - convert_label(path, lb_path, year, id) # convert labels to YOLO format diff --git a/cv/detection/yolov5/pytorch/data/VisDrone.yaml b/cv/detection/yolov5/pytorch/data/VisDrone.yaml deleted file mode 100644 index c1cd38d1e..000000000 --- a/cv/detection/yolov5/pytorch/data/VisDrone.yaml +++ /dev/null @@ -1,60 +0,0 @@ -# VisDrone2019-DET dataset https://github.com/VisDrone/VisDrone-Dataset -# Train command: python train.py --data VisDrone.yaml -# Default dataset location is next to YOLOv5: -# /parent -# /datasets/VisDrone -# /yolov5 - - -# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] -path: ../datasets/VisDrone # dataset root dir -train: VisDrone2019-DET-train/images # train images (relative to 'path') 6471 images -val: VisDrone2019-DET-val/images # val images (relative to 'path') 548 images -test: VisDrone2019-DET-test-dev/images # test images (optional) 1610 images - -# Classes -nc: 10 # number of classes -names: [ 'pedestrian', 'people', 'bicycle', 'car', 'van', 'truck', 'tricycle', 'awning-tricycle', 'bus', 'motor' ] - - -# Download script/URL (optional) --------------------------------------------------------------------------------------- -download: | - from utils.general import download, os, Path - - def visdrone2yolo(dir): - from PIL import Image - from tqdm import tqdm - - def convert_box(size, box): - # Convert VisDrone box to YOLO xywh box - dw = 1. / size[0] - dh = 1. / size[1] - return (box[0] + box[2] / 2) * dw, (box[1] + box[3] / 2) * dh, box[2] * dw, box[3] * dh - - (dir / 'labels').mkdir(parents=True, exist_ok=True) # make labels directory - pbar = tqdm((dir / 'annotations').glob('*.txt'), desc=f'Converting {dir}') - for f in pbar: - img_size = Image.open((dir / 'images' / f.name).with_suffix('.jpg')).size - lines = [] - with open(f, 'r') as file: # read annotation.txt - for row in [x.split(',') for x in file.read().strip().splitlines()]: - if row[4] == '0': # VisDrone 'ignored regions' class 0 - continue - cls = int(row[5]) - 1 - box = convert_box(img_size, tuple(map(int, row[:4]))) - lines.append(f"{cls} {' '.join(f'{x:.6f}' for x in box)}\n") - with open(str(f).replace(os.sep + 'annotations' + os.sep, os.sep + 'labels' + os.sep), 'w') as fl: - fl.writelines(lines) # write label.txt - - - # Download - dir = Path(yaml['path']) # dataset root dir - urls = ['https://github.com/ultralytics/yolov5/releases/download/v1.0/VisDrone2019-DET-train.zip', - 'https://github.com/ultralytics/yolov5/releases/download/v1.0/VisDrone2019-DET-val.zip', - 'https://github.com/ultralytics/yolov5/releases/download/v1.0/VisDrone2019-DET-test-dev.zip', - 'https://github.com/ultralytics/yolov5/releases/download/v1.0/VisDrone2019-DET-test-challenge.zip'] - download(urls, dir=dir) - - # Convert - for d in 'VisDrone2019-DET-train', 'VisDrone2019-DET-val', 'VisDrone2019-DET-test-dev': - visdrone2yolo(dir / d) # convert VisDrone annotations to YOLO labels diff --git a/cv/detection/yolov5/pytorch/data/coco.yaml b/cv/detection/yolov5/pytorch/data/coco.yaml deleted file mode 100644 index ab72c8242..000000000 --- a/cv/detection/yolov5/pytorch/data/coco.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# COCO 2017 dataset http://cocodataset.org -# Train command: python train.py --data coco.yaml -# Default dataset location is next to YOLOv5: -# /parent -# /datasets/coco -# /yolov5 - - -# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] -path: ./datasets/coco # dataset root dir -train: train2017.txt # train images (relative to 'path') 118287 images -val: val2017.txt # train images (relative to 'path') 5000 images -test: test-dev2017.txt # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794 - -# Classes -nc: 80 # number of classes -names: [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', - 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', - 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', - 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', - 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', - 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', - 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', - 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', - 'hair drier', 'toothbrush' ] # class names - - -# Download script/URL (optional) -download: | - from utils.general import download, Path - - # Download labels - segments = False # segment or box labels - dir = Path(yaml['path']) # dataset root dir - url = 'https://github.com/ultralytics/yolov5/releases/download/v1.0/' - urls = [url + ('coco2017labels-segments.zip' if segments else 'coco2017labels.zip')] # labels - download(urls, dir=dir.parent) - - # Download data - urls = ['http://images.cocodataset.org/zips/train2017.zip', # 19G, 118k images - 'http://images.cocodataset.org/zips/val2017.zip', # 1G, 5k images - 'http://images.cocodataset.org/zips/test2017.zip'] # 7G, 41k images (optional) - download(urls, dir=dir / 'images', threads=3) diff --git a/cv/detection/yolov5/pytorch/data/coco128.yaml b/cv/detection/yolov5/pytorch/data/coco128.yaml deleted file mode 100644 index e75628dad..000000000 --- a/cv/detection/yolov5/pytorch/data/coco128.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# COCO 2017 dataset http://cocodataset.org - first 128 training images -# Train command: python train.py --data coco128.yaml -# Default dataset location is next to YOLOv5: -# /parent -# /datasets/coco128 -# /yolov5 - - -# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] -path: ./datasets/coco128 # dataset root dir -train: images/train2017 # train images (relative to 'path') 128 images -val: images/train2017 # val images (relative to 'path') 128 images -test: # test images (optional) - -# Classes -nc: 80 # number of classes -names: [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', - 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', - 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', - 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', - 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', - 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', - 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', - 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', - 'hair drier', 'toothbrush' ] # class names - - -# Download script/URL (optional) -download: https://github.com/ultralytics/yolov5/releases/download/v1.0/coco128.zip diff --git a/cv/detection/yolov5/pytorch/data/hyps/hyp.finetune.yaml b/cv/detection/yolov5/pytorch/data/hyps/hyp.finetune.yaml deleted file mode 100644 index 237cd5bc1..000000000 --- a/cv/detection/yolov5/pytorch/data/hyps/hyp.finetune.yaml +++ /dev/null @@ -1,39 +0,0 @@ -# Hyperparameters for VOC finetuning -# python train.py --batch 64 --weights yolov5m.pt --data VOC.yaml --img 512 --epochs 50 -# See tutorials for hyperparameter evolution https://github.com/ultralytics/yolov5#tutorials - - -# Hyperparameter Evolution Results -# Generations: 306 -# P R mAP.5 mAP.5:.95 box obj cls -# Metrics: 0.6 0.936 0.896 0.684 0.0115 0.00805 0.00146 - -lr0: 0.0032 -lrf: 0.12 -momentum: 0.843 -weight_decay: 0.00036 -warmup_epochs: 2.0 -warmup_momentum: 0.5 -warmup_bias_lr: 0.05 -box: 0.0296 -cls: 0.243 -cls_pw: 0.631 -obj: 0.301 -obj_pw: 0.911 -iou_t: 0.2 -anchor_t: 2.91 -# anchors: 3.63 -fl_gamma: 0.0 -hsv_h: 0.0138 -hsv_s: 0.664 -hsv_v: 0.464 -degrees: 0.373 -translate: 0.245 -scale: 0.898 -shear: 0.602 -perspective: 0.0 -flipud: 0.00856 -fliplr: 0.5 -mosaic: 1.0 -mixup: 0.243 -copy_paste: 0.0 diff --git a/cv/detection/yolov5/pytorch/data/hyps/hyp.finetune_objects365.yaml b/cv/detection/yolov5/pytorch/data/hyps/hyp.finetune_objects365.yaml deleted file mode 100644 index 435fa7a45..000000000 --- a/cv/detection/yolov5/pytorch/data/hyps/hyp.finetune_objects365.yaml +++ /dev/null @@ -1,29 +0,0 @@ -lr0: 0.00258 -lrf: 0.17 -momentum: 0.779 -weight_decay: 0.00058 -warmup_epochs: 1.33 -warmup_momentum: 0.86 -warmup_bias_lr: 0.0711 -box: 0.0539 -cls: 0.299 -cls_pw: 0.825 -obj: 0.632 -obj_pw: 1.0 -iou_t: 0.2 -anchor_t: 3.44 -anchors: 3.2 -fl_gamma: 0.0 -hsv_h: 0.0188 -hsv_s: 0.704 -hsv_v: 0.36 -degrees: 0.0 -translate: 0.0902 -scale: 0.491 -shear: 0.0 -perspective: 0.0 -flipud: 0.0 -fliplr: 0.5 -mosaic: 1.0 -mixup: 0.0 -copy_paste: 0.0 diff --git a/cv/detection/yolov5/pytorch/data/hyps/hyp.scratch-p6.yaml b/cv/detection/yolov5/pytorch/data/hyps/hyp.scratch-p6.yaml deleted file mode 100644 index fc1d8ebe0..000000000 --- a/cv/detection/yolov5/pytorch/data/hyps/hyp.scratch-p6.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# Hyperparameters for COCO training from scratch -# python train.py --batch 32 --cfg yolov5m6.yaml --weights '' --data coco.yaml --img 1280 --epochs 300 -# See tutorials for hyperparameter evolution https://github.com/ultralytics/yolov5#tutorials - - -lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3) -lrf: 0.2 # final OneCycleLR learning rate (lr0 * lrf) -momentum: 0.937 # SGD momentum/Adam beta1 -weight_decay: 0.0005 # optimizer weight decay 5e-4 -warmup_epochs: 3.0 # warmup epochs (fractions ok) -warmup_momentum: 0.8 # warmup initial momentum -warmup_bias_lr: 0.1 # warmup initial bias lr -box: 0.05 # box loss gain -cls: 0.3 # cls loss gain -cls_pw: 1.0 # cls BCELoss positive_weight -obj: 0.7 # obj loss gain (scale with pixels) -obj_pw: 1.0 # obj BCELoss positive_weight -iou_t: 0.20 # IoU training threshold -anchor_t: 4.0 # anchor-multiple threshold -# anchors: 3 # anchors per output layer (0 to ignore) -fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5) -hsv_h: 0.015 # image HSV-Hue augmentation (fraction) -hsv_s: 0.7 # image HSV-Saturation augmentation (fraction) -hsv_v: 0.4 # image HSV-Value augmentation (fraction) -degrees: 0.0 # image rotation (+/- deg) -translate: 0.1 # image translation (+/- fraction) -scale: 0.9 # image scale (+/- gain) -shear: 0.0 # image shear (+/- deg) -perspective: 0.0 # image perspective (+/- fraction), range 0-0.001 -flipud: 0.0 # image flip up-down (probability) -fliplr: 0.5 # image flip left-right (probability) -mosaic: 1.0 # image mosaic (probability) -mixup: 0.0 # image mixup (probability) -copy_paste: 0.0 # segment copy-paste (probability) diff --git a/cv/detection/yolov5/pytorch/data/hyps/hyp.scratch.yaml b/cv/detection/yolov5/pytorch/data/hyps/hyp.scratch.yaml deleted file mode 100644 index b2cf2e32c..000000000 --- a/cv/detection/yolov5/pytorch/data/hyps/hyp.scratch.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# Hyperparameters for COCO training from scratch -# python train.py --batch 40 --cfg yolov5m.yaml --weights '' --data coco.yaml --img 640 --epochs 300 -# See tutorials for hyperparameter evolution https://github.com/ultralytics/yolov5#tutorials - - -lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3) -lrf: 0.2 # final OneCycleLR learning rate (lr0 * lrf) -momentum: 0.937 # SGD momentum/Adam beta1 -weight_decay: 0.0005 # optimizer weight decay 5e-4 -warmup_epochs: 3.0 # warmup epochs (fractions ok) -warmup_momentum: 0.8 # warmup initial momentum -warmup_bias_lr: 0.1 # warmup initial bias lr -box: 0.05 # box loss gain -cls: 0.5 # cls loss gain -cls_pw: 1.0 # cls BCELoss positive_weight -obj: 1.0 # obj loss gain (scale with pixels) -obj_pw: 1.0 # obj BCELoss positive_weight -iou_t: 0.20 # IoU training threshold -anchor_t: 4.0 # anchor-multiple threshold -# anchors: 3 # anchors per output layer (0 to ignore) -fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5) -hsv_h: 0.015 # image HSV-Hue augmentation (fraction) -hsv_s: 0.7 # image HSV-Saturation augmentation (fraction) -hsv_v: 0.4 # image HSV-Value augmentation (fraction) -degrees: 0.0 # image rotation (+/- deg) -translate: 0.1 # image translation (+/- fraction) -scale: 0.5 # image scale (+/- gain) -shear: 0.0 # image shear (+/- deg) -perspective: 0.0 # image perspective (+/- fraction), range 0-0.001 -flipud: 0.0 # image flip up-down (probability) -fliplr: 0.5 # image flip left-right (probability) -mosaic: 1.0 # image mosaic (probability) -mixup: 0.0 # image mixup (probability) -copy_paste: 0.0 # segment copy-paste (probability) diff --git a/cv/detection/yolov5/pytorch/data/images/bus.jpg b/cv/detection/yolov5/pytorch/data/images/bus.jpg deleted file mode 100644 index b43e311165c785f000eb7493ff8fb662d06a3f83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487438 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

    L*Ns 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±R>MFOp7JM4pD#r*Z9T}X!IUIE8D;^=LFcP@ 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

    wcVd9TWT)t}<5p825`(7@t>InCF68vSmf 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
    |11H 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
    K9Rx9V(coCI zIT+B}=GGvP8GNRorG9onhMi@U(3?|^bc|v_Bf#@;q5Xw0>DXBuc;TR>r4*Lc)%17K z+ub(XHr4KDL}Wox)=Anvr0@(ZD^FQ%9 zpMS)L7le>-2+8qQmf6g)ysE;AikA-=!ouj0<8BJS%)QnmCHvJDmVzF+5SXrBNEk_*wv7tHr zq$X!QpO~?emqnsBb>Fg|QkPx@w$IKzR|D7~qPoN~YEG;EwP$s5nbD~548RIf8(-OQ zSbH$WC#x-fs)q`l+t8sSE0KqZRM@@E!EzK7eEfFp0j%L)CT#{0anCB*a8^dM_c^Ju z>eKQ9{A4iI{6E)+y6B;P1GnWD^{d5Ir=PZql#0VLmh2ys@VwlWVw9G-s{#7h*OD2o zcL5bfz??+IwQ#M`dRAWaI6m;rE830GA7?1;#u*3ff^y z+kC!Sw_-e8CosB`-PL^{MoW~hTVWBF zsf!`@t^zn)i1Q@bGW?roj-Q+--7S?1^~98bWGvqU@2&Mc3^{eZx(idr+rWin@kmldg^F@oa&_*upB~zu$e&mFgEhwnpS2 zdS_72ivF`nwSvfybcAgg3XB|kPmnJ7gO6680*3(cCDsqUXEZxAYOokA^!KKzk#4j~ zZD9s==4?R4k;G5vN>M0C%lg>})doU<2H07Sr<+UxWf^< zXJc#th@4tj1v*IeB>X-a5b4URBp307ow6_7u%;WOHa1u(`~$9AxaEntEi1Xh9?Nn&=)HY^BHZmRFLn9vE=G|mc<2y)L-o~y z`fOTU$a~QM-qw=4QzIhONVGGyQ|hJ0x1#a3LS3o5#sq7Q0x*4vNB=O^$i#lw)0>&e z9>irFp0a7K0bIxMJGNin7Ujn3>INENvz6;vi?AJhc#5NMV$tzH+Jyz#2eEB`#}*p> z&fv_j`S?Bhso62v&_Q4R6R&DnqmkMEYRC0E`I}663FjKOyUCFup#17#KN9~7w$Uv4 z(u*;^Yezj^RW2t}v-x3CEqVM*KRUN2 z*2{Wr=-0~7!?@(skHzm_)J2%j=WoK712*%*L!ADGIOau$uv%d#cNRLIrlaIEB&68| zRJ`n76D&k3vpAKGa*-?zD{qpa2Iei+fUN|1;;Kt!AR0IwY$65<-DsGPI;IM$4iucr z#Gekdk@j_(9WKTe4Y@k*toN{}QiRwCn=4cH{rS)Xdcm4`eLfH@Iwu6T)mgY*@AG||gVcTFMA@CQAm1@LGb!6Hb|mC;?0+R*Kt zuaiu=_aPSQr9F9Q)#a>Sa5HZha?S)rA~|C` z;xbx5AXrT7Uj38D<9l*0Znu-nJ*JeeMnCIdKHJnSNLFzOe9N*{8VM1?u^g2BSb49VY)s<6an+f-Om?Un}(UX^!*kmLa%a;yRM-FmW&wL~h=xNv6qj$4* z@+vOvT2Z;-)0ei7Zo;wcheudY&z;pR-yuo{Hh|+5Pm}EL$ZXr}(ms0h|OH7)={Q=|Km;1@x z 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 z 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

    v4oLeD|uyN41evsX-b8Td)J^9v_hclwJ# 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 z zev@D_Aa;$dq>POI@nMe~VNQ7R@p+UW`42*l7IxJBTYe9C1HpGUk$98E7MiZFr{2P1 zdp$nRTay*eL5%&X&vb1T11kdPa@j3`gZ5{`pMYNnJaMQ7__^@!RMGVNRU}Dcr^|U7 zD>gSw)-biwDBu>8g$Fx`$sf|+gnwpF**C-9G_}@8gKxYOs99VKm6ql1tu1age69AA z13sHFGL!O5GtWRrA6odM;2(`r)%8ydU0U7gEW%i{yOBPgfE*AbxVLFkj^MSoJ%|W=L4ETeocnU32-dl@Z9`jCJMT33K*A{ot+g`>u zDF!&M1id~`PAli1i+}J^8=1T$zYV?>_;w$O-Y9|{z61WtH#XKjEcm_f)(uW!9Pam4_AjX$ZLX{H-Py$R#z|f2Ce_+U z@U?s$r})$0?}Bu#Lr49cFYTp(X5td^Cb@HL@u?;$CA()3+mMHHN&_g}v}Bs+g=^~d z9ZGAWKNuqL=f=N?S_Sr*;)vn+eQ9Ag+Z#@>(rz@EqkEYf1~BYkW1qfLYh>;!p!4-V z?ECu${?hH@D11?Os$E{_tr3-;7B$M5E&kbg4ba+Sid#Eolrp{_E}8Pk`I9G)7V!uC6_4PIelL#u;a|fW ze+%l1bgsINuOzxdPEceC;?wf7p$G0=N86E*E3INGOWlGdG&Q?N+W!CvJ`n4A4epiV z&xt<{?#=%Ihop{s9b!8Ob?G90KzOw)Mw0FfcV>l73GKSR;BSUnw}dq_1N=dT()0$B zD;<6~b*GJFC5F(g1==A$bgb?G;0`fgkA5iltN#E6L-^NmYpr+>#THs6rlO*IdqHh1 z(KHgS_}&?9LfmX+AgjovFg$Q;xbTPU{{Z_}>l#(IweiwBuM`QGrNyt272H~@`(kUKrOY=GA6$e?gQ zz^~p2u)pwc!kt{(YTAn%mxEIKRn^s)j4t(CO!JMm_o*_T*V^0P>8`~^@zf``cWiD|QqxQ3hUD^*sLx9EPYQm+`sR_T4-x!o*1Suj z&1~`gqHQlqH;_QXBt6aUme*>KjC{uC6bsj;O=bSjzBtri@r}-v;dw4RB#^j~b%l=i zPL1}CH(c2ydT~Z1@o*bGdW_fFpRK$9*@5X8Gbo;^PSz1h1<;Aqf zB#ol}$`-`NMei(VqWitXA#r`zfm78-sS z@d{d4HN0L*jsi-u4WMo$@_u8t@c#hW??1HeU}-KJ1*Isho-u`TG8BLZ3_E%X+v>Q9 z+VV^K^FEzpsl{DCxqqGi03-TY@J5mU00!ay%eR8V#M;h-@!Z@^wk=yz(e=*}%8FG% z^4iiFbjacaHd+*nAL1pHll1q9{{Y~wKk!Iz+0#gW0shS23}<~l%1G{^)czbTzLSX; zBq5qfEN2Y4K5S=neB&+7Kaq&^TTMh8tzr}Bxdew|>T&EzD~xlBvf6g1W<=~_w6~P; zAXYJi^fHhK(;~B3JX^fv%;lIlEt~oO0F{ybPk+Qu8rGFPy{Cab5o>o^Oq+$vYg+Vc zsYD1N8WxTV+h%@;5>2;C}3OMFwUO*ezQL!fwTOOcslL7_o4_m{Zs zGu*t*6tfjLW=nXGk&u|;zb5#E7ut+x3{Zxi&M9IT zVYHTD6!3Ykv2-8!CHL*+t=%C%3$A=Wrtetf*F0Bo7MG;J?7?=;J2dma+~l#g+Hr!w z)k`nK(|4ERXYD4|kw!kh{{RIy{{VuC>-Trse~f-M>o?X{`-IwjmReDYByikY2}-Mac&TcA+i9E&=MjGJQ>c^n5@6 z0E2!%Xg?IgZ>f0e;}?VU!!%ir9}nrb{vwRXz?BPjC)1;J=yDV|BIVx$w5BE`t@Mn}W%^Pg&aXXpVRMw@>6jsf)tW_&)%I zDmA(MscH5AN