├── .gitignore └── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── _static ├── example.png └── example_no_refine.png ├── chainer_dense_fusion ├── __init__.py ├── datasets │ ├── __init__.py │ └── ycb │ │ ├── __init__.py │ │ ├── config │ │ ├── label_names.txt │ │ ├── train.txt │ │ └── val.txt │ │ └── ycb_video_dataset.py ├── links │ ├── __init__.py │ └── model │ │ ├── __init__.py │ │ ├── dense_fusion.py │ │ ├── posenet.py │ │ ├── pspnet.py │ │ └── resnet.py ├── utils.py └── visualizations │ ├── __init__.py │ └── vis_6d_pose_estimation.py ├── examples ├── dense_fusion │ ├── README.md │ ├── demo.py │ ├── pth2npz.py │ └── pth2npz_posenet.py └── ycb │ ├── README.md │ └── visualize_dataset.py ├── requirements.txt └── setup.py /.gitignore/.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/_build/ 68 | 69 | # PyBuilder 70 | target/ 71 | 72 | # Jupyter Notebook 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # celery beat schedule file 79 | celerybeat-schedule 80 | 81 | # SageMath parsed files 82 | *.sage.py 83 | 84 | # Environments 85 | .env 86 | .venv 87 | env/ 88 | venv/ 89 | ENV/ 90 | env.bak/ 91 | venv.bak/ 92 | 93 | # Spyder project settings 94 | .spyderproject 95 | .spyproject 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | 3 | cache: 4 | - ccache 5 | - pip 6 | 7 | jobs: 8 | include: 9 | - os: linux 10 | python: 2.7 11 | - os: linux 12 | python: 3.6 13 | - os: linux 14 | python: 3.7 15 | - os: linux 16 | python: 3.8 17 | allow_failures: 18 | - os: linux 19 | python: 2.7 20 | 21 | before_install: 22 | - wget https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh -O miniconda.sh 23 | - bash miniconda.sh -b -p $HOME/miniconda 24 | - export PATH="$HOME/miniconda/bin:$PATH" 25 | - conda config --set always_yes yes --set changeps1 no 26 | - conda update -q conda 27 | - conda info -a 28 | 29 | install: 30 | - conda create --name=dense-fusion python=$TRAVIS_PYTHON_VERSION -q -y 31 | - source activate dense-fusion 32 | - pip install opencv-python 33 | - pip install -r requirements.txt 34 | - pip install -e . 35 | 36 | before_script: 37 | - pip install flake8 38 | - pip install hacking 39 | - pip install autopep8 40 | 41 | script: 42 | - flake8 . 43 | 44 | notifications: 45 | email: false 46 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Shingo Kitagawa 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | chainer-dense-fusion 2 | ==================== 3 | 4 | [![Build Status](https://travis-ci.com/knorth55/chainer-dense-fusion.svg?branch=master)](https://travis-ci.com/knorth55/chainer-dense-fusion) 5 | 6 | 7 | 8 | This is [Chainer](https://github.com/chainer/chainer) implementation of [DenseFusion: 6D Object Pose Estimation by Iterative Dense Fusion](https://arxiv.org/abs/1901.04780). 9 | 10 | Original PyTorch repository is [j96w/DenseFusion](https://github.com/j96w/DenseFusion). 11 | 12 | Requirement 13 | ----------- 14 | 15 | - [CuPy](https://github.com/cupy/cupy) 16 | - [Chainer](https://github.com/chainer/chainer) 17 | - [ChainerCV](https://github.com/chainer/chainercv) 18 | - OpenCV 19 | 20 | Installation 21 | ------------ 22 | 23 | We recommend to use [Anacoda](https://anaconda.org/). 24 | 25 | ```bash 26 | # Requirement installation 27 | conda create -n dense-fusion python=3.6 28 | source activate dense-fusion 29 | pip install opencv-python 30 | pip install cupy 31 | 32 | # Installation 33 | git clone https://github.com/knorth55/chainer-dense-fusion.git 34 | cd chainer-dense-fusion/ 35 | pip install -e . 36 | ``` 37 | 38 | Inference 39 | --------- 40 | 41 | ```bash 42 | cd examples/dense_fusion/ 43 | python demo.py --random 44 | ``` 45 | 46 | TODO 47 | ---- 48 | - YCB Video Dataset 49 | - [x] Add estimator inference script. 50 | - [x] Add refiner inference script. 51 | - [ ] Add training script. 52 | - [ ] Reproduce original accuracy. 53 | 54 | LICENSE 55 | ------- 56 | [MIT LICENSE](LICENSE) 57 | -------------------------------------------------------------------------------- /_static/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knorth55/chainer-dense-fusion/8ff53173d7071fc2cfcd05b1e0b2c544aeed090b/_static/example.png -------------------------------------------------------------------------------- /_static/example_no_refine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knorth55/chainer-dense-fusion/8ff53173d7071fc2cfcd05b1e0b2c544aeed090b/_static/example_no_refine.png -------------------------------------------------------------------------------- /chainer_dense_fusion/__init__.py: -------------------------------------------------------------------------------- 1 | from chainer_dense_fusion import datasets # NOQA 2 | from chainer_dense_fusion import links # NOQA 3 | from chainer_dense_fusion import visualizations # NOQA 4 | -------------------------------------------------------------------------------- /chainer_dense_fusion/datasets/__init__.py: -------------------------------------------------------------------------------- 1 | from chainer_dense_fusion.datasets import ycb # NOQA 2 | -------------------------------------------------------------------------------- /chainer_dense_fusion/datasets/ycb/__init__.py: -------------------------------------------------------------------------------- 1 | from chainer_dense_fusion.datasets.ycb.ycb_video_dataset import YCBVideoDataset # NOQA 2 | from chainer_dense_fusion.datasets.ycb.ycb_video_dataset import YCBVideoDatasetPoseCNNSegmented # NOQA 3 | -------------------------------------------------------------------------------- /chainer_dense_fusion/datasets/ycb/config/label_names.txt: -------------------------------------------------------------------------------- 1 | 002_master_chef_can 2 | 003_cracker_box 3 | 004_sugar_box 4 | 005_tomato_soup_can 5 | 006_mustard_bottle 6 | 007_tuna_fish_can 7 | 008_pudding_box 8 | 009_gelatin_box 9 | 010_potted_meat_can 10 | 011_banana 11 | 019_pitcher_base 12 | 021_bleach_cleanser 13 | 024_bowl 14 | 025_mug 15 | 035_power_drill 16 | 036_wood_block 17 | 037_scissors 18 | 040_large_marker 19 | 051_large_clamp 20 | 052_extra_large_clamp 21 | 061_foam_brick 22 | -------------------------------------------------------------------------------- /chainer_dense_fusion/datasets/ycb/config/val.txt: -------------------------------------------------------------------------------- 1 | data/0048/000001 2 | data/0048/000036 3 | data/0048/000047 4 | data/0048/000083 5 | data/0048/000112 6 | data/0048/000135 7 | data/0048/000155 8 | data/0048/000168 9 | data/0048/000181 10 | data/0048/000204 11 | data/0048/000220 12 | data/0048/000235 13 | data/0048/000252 14 | data/0048/000257 15 | data/0048/000261 16 | data/0048/000265 17 | data/0048/000277 18 | data/0048/000292 19 | data/0048/000294 20 | data/0048/000310 21 | data/0048/000311 22 | data/0048/000322 23 | data/0048/000326 24 | data/0048/000335 25 | data/0048/000337 26 | data/0048/000353 27 | data/0048/000356 28 | data/0048/000364 29 | data/0048/000373 30 | data/0048/000380 31 | data/0048/000388 32 | data/0048/000398 33 | data/0048/000401 34 | data/0048/000404 35 | data/0048/000415 36 | data/0048/000422 37 | data/0048/000435 38 | data/0048/000448 39 | data/0048/000464 40 | data/0048/000476 41 | data/0048/000485 42 | data/0048/000494 43 | data/0048/000510 44 | data/0048/000516 45 | data/0048/000529 46 | data/0048/000541 47 | data/0048/000549 48 | data/0048/000556 49 | data/0048/000567 50 | data/0048/000573 51 | data/0048/000581 52 | data/0048/000592 53 | data/0048/000605 54 | data/0048/000614 55 | data/0048/000626 56 | data/0048/000636 57 | data/0048/000648 58 | data/0048/000653 59 | data/0048/000656 60 | data/0048/000664 61 | data/0048/000672 62 | data/0048/000685 63 | data/0048/000694 64 | data/0048/000733 65 | data/0048/000734 66 | data/0048/000756 67 | data/0048/000779 68 | data/0048/000786 69 | data/0048/000803 70 | data/0048/000806 71 | data/0048/000818 72 | data/0048/000820 73 | data/0048/000821 74 | data/0048/000834 75 | data/0048/000836 76 | data/0048/000854 77 | data/0048/000855 78 | data/0048/000858 79 | data/0048/000862 80 | data/0048/000871 81 | data/0048/000874 82 | data/0048/000884 83 | data/0048/000892 84 | data/0048/000899 85 | data/0048/000902 86 | data/0048/000905 87 | data/0048/000907 88 | data/0048/000913 89 | data/0048/000919 90 | data/0048/000927 91 | data/0048/000937 92 | data/0048/000942 93 | data/0048/000943 94 | data/0048/000950 95 | data/0048/000958 96 | data/0048/000959 97 | data/0048/000971 98 | data/0048/000991 99 | data/0048/000996 100 | data/0048/001002 101 | data/0048/001012 102 | data/0048/001024 103 | data/0048/001027 104 | data/0048/001059 105 | data/0048/001065 106 | data/0048/001074 107 | data/0048/001075 108 | data/0048/001083 109 | data/0048/001087 110 | data/0048/001090 111 | data/0048/001094 112 | data/0048/001097 113 | data/0048/001103 114 | data/0048/001104 115 | data/0048/001107 116 | data/0048/001113 117 | data/0048/001119 118 | data/0048/001120 119 | data/0048/001122 120 | data/0048/001124 121 | data/0048/001126 122 | data/0048/001128 123 | data/0048/001132 124 | data/0048/001133 125 | data/0048/001135 126 | data/0048/001137 127 | data/0048/001146 128 | data/0048/001147 129 | data/0048/001149 130 | data/0048/001151 131 | data/0048/001154 132 | data/0048/001155 133 | data/0048/001156 134 | data/0048/001157 135 | data/0048/001158 136 | data/0048/001160 137 | data/0048/001165 138 | data/0048/001168 139 | data/0048/001169 140 | data/0048/001170 141 | data/0048/001171 142 | data/0048/001172 143 | data/0048/001173 144 | data/0048/001175 145 | data/0048/001177 146 | data/0048/001195 147 | data/0048/001199 148 | data/0048/001202 149 | data/0048/001205 150 | data/0048/001207 151 | data/0048/001211 152 | data/0048/001212 153 | data/0048/001219 154 | data/0048/001226 155 | data/0048/001231 156 | data/0048/001233 157 | data/0048/001235 158 | data/0048/001251 159 | data/0048/001261 160 | data/0048/001267 161 | data/0048/001275 162 | data/0048/001289 163 | data/0048/001296 164 | data/0048/001299 165 | data/0048/001300 166 | data/0048/001301 167 | data/0048/001302 168 | data/0048/001303 169 | data/0048/001304 170 | data/0048/001305 171 | data/0048/001307 172 | data/0048/001308 173 | data/0048/001309 174 | data/0048/001310 175 | data/0048/001313 176 | data/0048/001319 177 | data/0048/001328 178 | data/0048/001330 179 | data/0048/001333 180 | data/0048/001334 181 | data/0048/001337 182 | data/0048/001338 183 | data/0048/001343 184 | data/0048/001367 185 | data/0048/001397 186 | data/0048/001405 187 | data/0048/001412 188 | data/0048/001413 189 | data/0048/001426 190 | data/0048/001442 191 | data/0048/001457 192 | data/0048/001478 193 | data/0048/001493 194 | data/0048/001494 195 | data/0048/001513 196 | data/0048/001533 197 | data/0048/001534 198 | data/0048/001539 199 | data/0048/001540 200 | data/0048/001542 201 | data/0048/001543 202 | data/0048/001568 203 | data/0048/001569 204 | data/0048/001571 205 | data/0048/001572 206 | data/0048/001576 207 | data/0048/001577 208 | data/0048/001579 209 | data/0048/001580 210 | data/0048/001583 211 | data/0048/001586 212 | data/0048/001587 213 | data/0048/001588 214 | data/0048/001589 215 | data/0048/001595 216 | data/0048/001597 217 | data/0048/001602 218 | data/0048/001603 219 | data/0048/001604 220 | data/0048/001605 221 | data/0048/001608 222 | data/0048/001609 223 | data/0048/001611 224 | data/0048/001617 225 | data/0048/001619 226 | data/0048/001621 227 | data/0048/001622 228 | data/0048/001623 229 | data/0048/001624 230 | data/0048/001626 231 | data/0048/001627 232 | data/0048/001629 233 | data/0048/001631 234 | data/0048/001639 235 | data/0048/001641 236 | data/0048/001643 237 | data/0048/001644 238 | data/0048/001645 239 | data/0048/001647 240 | data/0048/001648 241 | data/0048/001649 242 | data/0048/001654 243 | data/0048/001656 244 | data/0048/001658 245 | data/0048/001666 246 | data/0048/001667 247 | data/0048/001669 248 | data/0048/001671 249 | data/0048/001672 250 | data/0048/001674 251 | data/0048/001675 252 | data/0048/001676 253 | data/0048/001678 254 | data/0048/001679 255 | data/0048/001682 256 | data/0048/001684 257 | data/0048/001685 258 | data/0048/001690 259 | data/0048/001691 260 | data/0048/001693 261 | data/0048/001696 262 | data/0048/001699 263 | data/0048/001701 264 | data/0048/001705 265 | data/0048/001707 266 | data/0048/001708 267 | data/0048/001709 268 | data/0048/001714 269 | data/0048/001715 270 | data/0048/001717 271 | data/0048/001719 272 | data/0048/001722 273 | data/0048/001723 274 | data/0048/001724 275 | data/0048/001725 276 | data/0048/001730 277 | data/0048/001731 278 | data/0048/001733 279 | data/0048/001735 280 | data/0048/001742 281 | data/0048/001744 282 | data/0048/001745 283 | data/0048/001749 284 | data/0048/001750 285 | data/0048/001753 286 | data/0048/001754 287 | data/0048/001759 288 | data/0048/001760 289 | data/0048/001763 290 | data/0048/001765 291 | data/0048/001766 292 | data/0048/001768 293 | data/0048/001769 294 | data/0048/001771 295 | data/0048/001772 296 | data/0048/001773 297 | data/0048/001776 298 | data/0048/001777 299 | data/0048/001779 300 | data/0048/001780 301 | data/0048/001783 302 | data/0048/001784 303 | data/0048/001785 304 | data/0048/001786 305 | data/0048/001787 306 | data/0048/001789 307 | data/0048/001794 308 | data/0048/001795 309 | data/0048/001796 310 | data/0048/001805 311 | data/0048/001806 312 | data/0048/001808 313 | data/0048/001810 314 | data/0048/001814 315 | data/0048/001819 316 | data/0048/001822 317 | data/0048/001823 318 | data/0048/001825 319 | data/0048/001826 320 | data/0048/001831 321 | data/0048/001834 322 | data/0048/001838 323 | data/0048/001840 324 | data/0048/001841 325 | data/0048/001842 326 | data/0048/001849 327 | data/0048/001854 328 | data/0048/001859 329 | data/0048/001862 330 | data/0048/001866 331 | data/0048/001870 332 | data/0048/001871 333 | data/0048/001872 334 | data/0048/001874 335 | data/0048/001879 336 | data/0048/001881 337 | data/0048/001884 338 | data/0048/001886 339 | data/0048/001888 340 | data/0048/001890 341 | data/0048/001892 342 | data/0048/001893 343 | data/0048/001894 344 | data/0048/001897 345 | data/0048/001898 346 | data/0048/001901 347 | data/0048/001902 348 | data/0048/001907 349 | data/0048/001913 350 | data/0048/001917 351 | data/0048/001921 352 | data/0048/001931 353 | data/0048/001932 354 | data/0048/001934 355 | data/0048/001939 356 | data/0048/001942 357 | data/0048/001945 358 | data/0048/001947 359 | data/0048/001949 360 | data/0048/001954 361 | data/0048/001957 362 | data/0048/001964 363 | data/0048/001965 364 | data/0048/001983 365 | data/0048/001985 366 | data/0048/001988 367 | data/0048/001991 368 | data/0048/001994 369 | data/0048/002004 370 | data/0048/002007 371 | data/0048/002015 372 | data/0048/002016 373 | data/0048/002021 374 | data/0048/002029 375 | data/0048/002037 376 | data/0048/002039 377 | data/0048/002040 378 | data/0048/002050 379 | data/0048/002051 380 | data/0048/002066 381 | data/0048/002069 382 | data/0048/002070 383 | data/0048/002083 384 | data/0048/002090 385 | data/0048/002104 386 | data/0048/002118 387 | data/0048/002133 388 | data/0048/002144 389 | data/0048/002160 390 | data/0048/002173 391 | data/0048/002175 392 | data/0048/002192 393 | data/0048/002198 394 | data/0048/002217 395 | data/0049/000001 396 | data/0049/000036 397 | data/0049/000047 398 | data/0049/000058 399 | data/0049/000065 400 | data/0049/000073 401 | data/0049/000091 402 | data/0049/000109 403 | data/0049/000125 404 | data/0049/000148 405 | data/0049/000170 406 | data/0049/000187 407 | data/0049/000206 408 | data/0049/000222 409 | data/0049/000230 410 | data/0049/000231 411 | data/0049/000235 412 | data/0049/000239 413 | data/0049/000242 414 | data/0049/000246 415 | data/0049/000247 416 | data/0049/000251 417 | data/0049/000252 418 | data/0049/000261 419 | data/0049/000262 420 | data/0049/000270 421 | data/0049/000273 422 | data/0049/000282 423 | data/0049/000289 424 | data/0049/000295 425 | data/0049/000304 426 | data/0049/000310 427 | data/0049/000315 428 | data/0049/000316 429 | data/0049/000324 430 | data/0049/000326 431 | data/0049/000333 432 | data/0049/000335 433 | data/0049/000348 434 | data/0049/000352 435 | data/0049/000357 436 | data/0049/000370 437 | data/0049/000376 438 | data/0049/000394 439 | data/0049/000405 440 | data/0049/000422 441 | data/0049/000427 442 | data/0049/000457 443 | data/0049/000461 444 | data/0049/000470 445 | data/0049/000474 446 | data/0049/000485 447 | data/0049/000489 448 | data/0049/000509 449 | data/0049/000511 450 | data/0049/000521 451 | data/0049/000526 452 | data/0049/000537 453 | data/0049/000542 454 | data/0049/000552 455 | data/0049/000558 456 | data/0049/000564 457 | data/0049/000570 458 | data/0049/000576 459 | data/0049/000591 460 | data/0049/000594 461 | data/0049/000617 462 | data/0049/000629 463 | data/0049/000631 464 | data/0049/000651 465 | data/0049/000669 466 | data/0049/000671 467 | data/0049/000693 468 | data/0049/000695 469 | data/0049/000711 470 | data/0049/000714 471 | data/0049/000735 472 | data/0049/000751 473 | data/0049/000762 474 | data/0049/000769 475 | data/0049/000783 476 | data/0049/000785 477 | data/0049/000798 478 | data/0049/000802 479 | data/0049/000811 480 | data/0049/000817 481 | data/0049/000825 482 | data/0049/000833 483 | data/0049/000840 484 | data/0049/000849 485 | data/0049/000858 486 | data/0049/000884 487 | data/0049/000900 488 | data/0049/000914 489 | data/0049/000949 490 | data/0049/000951 491 | data/0049/000981 492 | data/0049/000983 493 | data/0049/001009 494 | data/0049/001024 495 | data/0049/001036 496 | data/0049/001052 497 | data/0049/001067 498 | data/0049/001095 499 | data/0049/001102 500 | data/0049/001130 501 | data/0049/001144 502 | data/0049/001150 503 | data/0049/001157 504 | data/0049/001168 505 | data/0049/001172 506 | data/0049/001179 507 | data/0049/001187 508 | data/0049/001190 509 | data/0049/001205 510 | data/0049/001222 511 | data/0049/001229 512 | data/0049/001234 513 | data/0049/001247 514 | data/0049/001250 515 | data/0049/001262 516 | data/0049/001266 517 | data/0049/001269 518 | data/0049/001280 519 | data/0049/001283 520 | data/0049/001304 521 | data/0049/001305 522 | data/0049/001319 523 | data/0049/001321 524 | data/0049/001340 525 | data/0049/001344 526 | data/0049/001353 527 | data/0049/001356 528 | data/0049/001391 529 | data/0049/001408 530 | data/0049/001413 531 | data/0049/001429 532 | data/0049/001431 533 | data/0049/001441 534 | data/0049/001446 535 | data/0049/001461 536 | data/0049/001466 537 | data/0049/001474 538 | data/0049/001477 539 | data/0049/001488 540 | data/0049/001491 541 | data/0049/001499 542 | data/0049/001515 543 | data/0049/001518 544 | data/0049/001554 545 | data/0049/001557 546 | data/0049/001565 547 | data/0049/001568 548 | data/0049/001575 549 | data/0049/001582 550 | data/0049/001587 551 | data/0049/001592 552 | data/0049/001595 553 | data/0049/001614 554 | data/0049/001615 555 | data/0049/001618 556 | data/0049/001631 557 | data/0049/001641 558 | data/0049/001644 559 | data/0049/001655 560 | data/0049/001671 561 | data/0049/001677 562 | data/0049/001682 563 | data/0049/001688 564 | data/0049/001699 565 | data/0049/001704 566 | data/0049/001707 567 | data/0049/001719 568 | data/0049/001732 569 | data/0049/001743 570 | data/0049/001759 571 | data/0049/001760 572 | data/0049/001773 573 | data/0049/001776 574 | data/0049/001784 575 | data/0049/001789 576 | data/0049/001796 577 | data/0049/001804 578 | data/0049/001816 579 | data/0049/001828 580 | data/0049/001842 581 | data/0049/001848 582 | data/0049/001854 583 | data/0049/001857 584 | data/0049/001869 585 | data/0049/001875 586 | data/0049/001881 587 | data/0049/001886 588 | data/0049/001889 589 | data/0049/001902 590 | data/0049/001909 591 | data/0049/001926 592 | data/0049/001934 593 | data/0049/001936 594 | data/0049/001937 595 | data/0049/001968 596 | data/0049/001969 597 | data/0049/001988 598 | data/0049/001994 599 | data/0049/002012 600 | data/0049/002014 601 | data/0049/002035 602 | data/0049/002037 603 | data/0049/002043 604 | data/0049/002061 605 | data/0049/002064 606 | data/0049/002089 607 | data/0049/002097 608 | data/0049/002119 609 | data/0049/002123 610 | data/0049/002146 611 | data/0049/002151 612 | data/0049/002173 613 | data/0049/002196 614 | data/0049/002207 615 | data/0049/002219 616 | data/0049/002235 617 | data/0049/002275 618 | data/0049/002287 619 | data/0049/002315 620 | data/0049/002337 621 | data/0049/002365 622 | data/0050/000001 623 | data/0050/000041 624 | data/0050/000055 625 | data/0050/000076 626 | data/0050/000099 627 | data/0050/000111 628 | data/0050/000122 629 | data/0050/000142 630 | data/0050/000181 631 | data/0050/000204 632 | data/0050/000222 633 | data/0050/000231 634 | data/0050/000237 635 | data/0050/000241 636 | data/0050/000249 637 | data/0050/000252 638 | data/0050/000263 639 | data/0050/000265 640 | data/0050/000273 641 | data/0050/000275 642 | data/0050/000290 643 | data/0050/000293 644 | data/0050/000303 645 | data/0050/000315 646 | data/0050/000327 647 | data/0050/000337 648 | data/0050/000345 649 | data/0050/000347 650 | data/0050/000363 651 | data/0050/000366 652 | data/0050/000381 653 | data/0050/000386 654 | data/0050/000405 655 | data/0050/000413 656 | data/0050/000420 657 | data/0050/000437 658 | data/0050/000438 659 | data/0050/000464 660 | data/0050/000466 661 | data/0050/000483 662 | data/0050/000505 663 | data/0050/000509 664 | data/0050/000558 665 | data/0050/000588 666 | data/0050/000605 667 | data/0050/000610 668 | data/0050/000620 669 | data/0050/000623 670 | data/0050/000629 671 | data/0050/000633 672 | data/0050/000640 673 | data/0050/000642 674 | data/0050/000644 675 | data/0050/000651 676 | data/0050/000653 677 | data/0050/000660 678 | data/0050/000662 679 | data/0050/000671 680 | data/0050/000681 681 | data/0050/000682 682 | data/0050/000701 683 | data/0050/000712 684 | data/0050/000721 685 | data/0050/000722 686 | data/0050/000735 687 | data/0050/000737 688 | data/0050/000751 689 | data/0050/000757 690 | data/0050/000769 691 | data/0050/000775 692 | data/0050/000786 693 | data/0050/000790 694 | data/0050/000798 695 | data/0050/000802 696 | data/0050/000811 697 | data/0050/000822 698 | data/0050/000830 699 | data/0050/000831 700 | data/0050/000846 701 | data/0050/000850 702 | data/0050/000876 703 | data/0050/000887 704 | data/0050/000891 705 | data/0050/000902 706 | data/0050/000905 707 | data/0050/000916 708 | data/0050/000918 709 | data/0050/000923 710 | data/0050/000926 711 | data/0050/000928 712 | data/0050/000943 713 | data/0050/000961 714 | data/0050/000963 715 | data/0050/000978 716 | data/0050/000979 717 | data/0050/000988 718 | data/0050/000994 719 | data/0050/001000 720 | data/0050/001008 721 | data/0050/001014 722 | data/0050/001023 723 | data/0050/001026 724 | data/0050/001044 725 | data/0050/001052 726 | data/0050/001058 727 | data/0050/001066 728 | data/0050/001077 729 | data/0050/001094 730 | data/0050/001098 731 | data/0050/001105 732 | data/0050/001113 733 | data/0050/001125 734 | data/0050/001130 735 | data/0050/001145 736 | data/0050/001150 737 | data/0050/001169 738 | data/0050/001189 739 | data/0050/001192 740 | data/0050/001209 741 | data/0050/001216 742 | data/0050/001242 743 | data/0050/001246 744 | data/0050/001263 745 | data/0050/001266 746 | data/0050/001280 747 | data/0050/001284 748 | data/0050/001297 749 | data/0050/001305 750 | data/0050/001324 751 | data/0050/001335 752 | data/0050/001346 753 | data/0050/001350 754 | data/0050/001364 755 | data/0050/001371 756 | data/0050/001389 757 | data/0050/001391 758 | data/0050/001402 759 | data/0050/001412 760 | data/0050/001414 761 | data/0050/001421 762 | data/0050/001433 763 | data/0050/001446 764 | data/0050/001448 765 | data/0050/001455 766 | data/0050/001457 767 | data/0050/001461 768 | data/0050/001462 769 | data/0050/001466 770 | data/0050/001470 771 | data/0050/001475 772 | data/0050/001480 773 | data/0050/001485 774 | data/0050/001492 775 | data/0050/001499 776 | data/0050/001509 777 | data/0050/001514 778 | data/0050/001526 779 | data/0050/001542 780 | data/0050/001564 781 | data/0050/001592 782 | data/0050/001593 783 | data/0050/001613 784 | data/0050/001629 785 | data/0050/001656 786 | data/0050/001658 787 | data/0050/001669 788 | data/0050/001678 789 | data/0050/001695 790 | data/0050/001708 791 | data/0050/001711 792 | data/0050/001713 793 | data/0050/001714 794 | data/0050/001718 795 | data/0050/001719 796 | data/0050/001733 797 | data/0050/001743 798 | data/0050/001745 799 | data/0050/001756 800 | data/0050/001778 801 | data/0050/001782 802 | data/0050/001800 803 | data/0050/001828 804 | data/0050/001844 805 | data/0050/001849 806 | data/0050/001850 807 | data/0050/001866 808 | data/0050/001868 809 | data/0050/001874 810 | data/0050/001893 811 | data/0050/001897 812 | data/0051/000001 813 | data/0051/000035 814 | data/0051/000056 815 | data/0051/000083 816 | data/0051/000100 817 | data/0051/000116 818 | data/0051/000138 819 | data/0051/000169 820 | data/0051/000197 821 | data/0051/000208 822 | data/0051/000219 823 | data/0051/000237 824 | data/0051/000240 825 | data/0051/000249 826 | data/0051/000263 827 | data/0051/000275 828 | data/0051/000284 829 | data/0051/000295 830 | data/0051/000304 831 | data/0051/000313 832 | data/0051/000318 833 | data/0051/000335 834 | data/0051/000339 835 | data/0051/000347 836 | data/0051/000353 837 | data/0051/000366 838 | data/0051/000368 839 | data/0051/000371 840 | data/0051/000387 841 | data/0051/000389 842 | data/0051/000402 843 | data/0051/000407 844 | data/0051/000417 845 | data/0051/000421 846 | data/0051/000431 847 | data/0051/000439 848 | data/0051/000444 849 | data/0051/000454 850 | data/0051/000464 851 | data/0051/000475 852 | data/0051/000482 853 | data/0051/000497 854 | data/0051/000501 855 | data/0051/000515 856 | data/0051/000520 857 | data/0051/000532 858 | data/0051/000546 859 | data/0051/000553 860 | data/0051/000571 861 | data/0051/000582 862 | data/0051/000601 863 | data/0051/000611 864 | data/0051/000618 865 | data/0051/000636 866 | data/0051/000637 867 | data/0051/000649 868 | data/0051/000654 869 | data/0051/000669 870 | data/0051/000672 871 | data/0051/000675 872 | data/0051/000681 873 | data/0051/000685 874 | data/0051/000694 875 | data/0051/000698 876 | data/0051/000713 877 | data/0051/000721 878 | data/0051/000736 879 | data/0051/000740 880 | data/0051/000756 881 | data/0051/000762 882 | data/0051/000773 883 | data/0051/000777 884 | data/0051/000780 885 | data/0051/000789 886 | data/0051/000793 887 | data/0051/000798 888 | data/0051/000803 889 | data/0051/000814 890 | data/0051/000819 891 | data/0051/000834 892 | data/0051/000840 893 | data/0051/000848 894 | data/0051/000852 895 | data/0051/000864 896 | data/0051/000868 897 | data/0051/000893 898 | data/0051/000897 899 | data/0051/000912 900 | data/0051/000916 901 | data/0051/000929 902 | data/0051/000930 903 | data/0051/000939 904 | data/0051/000943 905 | data/0051/000946 906 | data/0051/000961 907 | data/0051/000964 908 | data/0051/000982 909 | data/0051/000986 910 | data/0051/000997 911 | data/0051/001005 912 | data/0051/001014 913 | data/0051/001021 914 | data/0051/001038 915 | data/0051/001045 916 | data/0051/001057 917 | data/0051/001063 918 | data/0051/001076 919 | data/0051/001080 920 | data/0051/001091 921 | data/0051/001092 922 | data/0051/001110 923 | data/0051/001111 924 | data/0051/001149 925 | data/0051/001150 926 | data/0051/001160 927 | data/0051/001182 928 | data/0051/001220 929 | data/0051/001251 930 | data/0051/001275 931 | data/0051/001316 932 | data/0051/001330 933 | data/0051/001339 934 | data/0051/001366 935 | data/0051/001368 936 | data/0051/001393 937 | data/0051/001399 938 | data/0051/001424 939 | data/0051/001431 940 | data/0051/001445 941 | data/0051/001452 942 | data/0051/001471 943 | data/0051/001474 944 | data/0051/001497 945 | data/0051/001499 946 | data/0051/001518 947 | data/0051/001521 948 | data/0051/001528 949 | data/0051/001531 950 | data/0051/001536 951 | data/0051/001545 952 | data/0051/001566 953 | data/0051/001571 954 | data/0051/001584 955 | data/0051/001588 956 | data/0051/001603 957 | data/0051/001611 958 | data/0051/001617 959 | data/0051/001628 960 | data/0051/001629 961 | data/0051/001645 962 | data/0051/001650 963 | data/0051/001673 964 | data/0051/001674 965 | data/0051/001687 966 | data/0051/001693 967 | data/0051/001698 968 | data/0051/001699 969 | data/0051/001700 970 | data/0051/001708 971 | data/0051/001709 972 | data/0051/001715 973 | data/0051/001717 974 | data/0051/001729 975 | data/0051/001734 976 | data/0051/001749 977 | data/0051/001753 978 | data/0051/001767 979 | data/0051/001780 980 | data/0051/001788 981 | data/0051/001803 982 | data/0051/001819 983 | data/0051/001833 984 | data/0051/001867 985 | data/0051/001883 986 | data/0051/001914 987 | data/0051/001924 988 | data/0051/001927 989 | data/0051/001932 990 | data/0051/001968 991 | data/0051/001990 992 | data/0051/001996 993 | data/0052/000001 994 | data/0052/000021 995 | data/0052/000034 996 | data/0052/000039 997 | data/0052/000048 998 | data/0052/000052 999 | data/0052/000057 1000 | data/0052/000061 1001 | data/0052/000065 1002 | data/0052/000071 1003 | data/0052/000080 1004 | data/0052/000081 1005 | data/0052/000084 1006 | data/0052/000088 1007 | data/0052/000092 1008 | data/0052/000097 1009 | data/0052/000098 1010 | data/0052/000114 1011 | data/0052/000116 1012 | data/0052/000121 1013 | data/0052/000127 1014 | data/0052/000132 1015 | data/0052/000136 1016 | data/0052/000143 1017 | data/0052/000150 1018 | data/0052/000156 1019 | data/0052/000164 1020 | data/0052/000165 1021 | data/0052/000167 1022 | data/0052/000169 1023 | data/0052/000170 1024 | data/0052/000171 1025 | data/0052/000173 1026 | data/0052/000175 1027 | data/0052/000178 1028 | data/0052/000179 1029 | data/0052/000190 1030 | data/0052/000195 1031 | data/0052/000202 1032 | data/0052/000213 1033 | data/0052/000214 1034 | data/0052/000227 1035 | data/0052/000236 1036 | data/0052/000245 1037 | data/0052/000256 1038 | data/0052/000257 1039 | data/0052/000259 1040 | data/0052/000265 1041 | data/0052/000266 1042 | data/0052/000272 1043 | data/0052/000275 1044 | data/0052/000282 1045 | data/0052/000292 1046 | data/0052/000293 1047 | data/0052/000304 1048 | data/0052/000313 1049 | data/0052/000325 1050 | data/0052/000341 1051 | data/0052/000343 1052 | data/0052/000357 1053 | data/0052/000361 1054 | data/0052/000365 1055 | data/0052/000385 1056 | data/0052/000388 1057 | data/0052/000389 1058 | data/0052/000396 1059 | data/0052/000403 1060 | data/0052/000407 1061 | data/0052/000413 1062 | data/0052/000414 1063 | data/0052/000418 1064 | data/0052/000426 1065 | data/0052/000432 1066 | data/0052/000434 1067 | data/0052/000442 1068 | data/0052/000448 1069 | data/0052/000451 1070 | data/0052/000483 1071 | data/0052/000484 1072 | data/0052/000493 1073 | data/0052/000494 1074 | data/0052/000502 1075 | data/0052/000511 1076 | data/0052/000516 1077 | data/0052/000520 1078 | data/0052/000524 1079 | data/0052/000526 1080 | data/0052/000527 1081 | data/0052/000532 1082 | data/0052/000537 1083 | data/0052/000539 1084 | data/0052/000543 1085 | data/0052/000544 1086 | data/0052/000550 1087 | data/0052/000556 1088 | data/0052/000561 1089 | data/0052/000567 1090 | data/0052/000574 1091 | data/0052/000575 1092 | data/0052/000582 1093 | data/0052/000587 1094 | data/0052/000589 1095 | data/0052/000593 1096 | data/0052/000594 1097 | data/0052/000604 1098 | data/0052/000608 1099 | data/0052/000622 1100 | data/0052/000625 1101 | data/0052/000632 1102 | data/0052/000638 1103 | data/0052/000643 1104 | data/0052/000650 1105 | data/0052/000653 1106 | data/0052/000656 1107 | data/0052/000662 1108 | data/0052/000666 1109 | data/0052/000669 1110 | data/0052/000678 1111 | data/0052/000688 1112 | data/0052/000694 1113 | data/0052/000699 1114 | data/0052/000707 1115 | data/0052/000714 1116 | data/0052/000720 1117 | data/0052/000722 1118 | data/0052/000725 1119 | data/0052/000732 1120 | data/0052/000733 1121 | data/0052/000741 1122 | data/0052/000742 1123 | data/0052/000745 1124 | data/0052/000747 1125 | data/0052/000750 1126 | data/0052/000751 1127 | data/0052/000752 1128 | data/0052/000756 1129 | data/0052/000758 1130 | data/0052/000759 1131 | data/0052/000760 1132 | data/0052/000763 1133 | data/0052/000765 1134 | data/0052/000770 1135 | data/0052/000771 1136 | data/0052/000774 1137 | data/0052/000777 1138 | data/0052/000790 1139 | data/0052/000799 1140 | data/0052/000806 1141 | data/0052/000810 1142 | data/0052/000813 1143 | data/0052/000815 1144 | data/0052/000817 1145 | data/0052/000820 1146 | data/0052/000823 1147 | data/0052/000825 1148 | data/0052/000826 1149 | data/0052/000833 1150 | data/0052/000844 1151 | data/0052/000853 1152 | data/0052/000855 1153 | data/0052/000860 1154 | data/0052/000875 1155 | data/0052/000880 1156 | data/0052/000885 1157 | data/0052/000886 1158 | data/0052/000892 1159 | data/0052/000897 1160 | data/0053/000001 1161 | data/0053/000014 1162 | data/0053/000033 1163 | data/0053/000043 1164 | data/0053/000052 1165 | data/0053/000061 1166 | data/0053/000075 1167 | data/0053/000084 1168 | data/0053/000093 1169 | data/0053/000103 1170 | data/0053/000111 1171 | data/0053/000118 1172 | data/0053/000123 1173 | data/0053/000126 1174 | data/0053/000131 1175 | data/0053/000135 1176 | data/0053/000138 1177 | data/0053/000139 1178 | data/0053/000142 1179 | data/0053/000145 1180 | data/0053/000147 1181 | data/0053/000152 1182 | data/0053/000153 1183 | data/0053/000155 1184 | data/0053/000158 1185 | data/0053/000162 1186 | data/0053/000164 1187 | data/0053/000165 1188 | data/0053/000167 1189 | data/0053/000168 1190 | data/0053/000171 1191 | data/0053/000176 1192 | data/0053/000179 1193 | data/0053/000183 1194 | data/0053/000187 1195 | data/0053/000190 1196 | data/0053/000193 1197 | data/0053/000196 1198 | data/0053/000199 1199 | data/0053/000204 1200 | data/0053/000207 1201 | data/0053/000210 1202 | data/0053/000213 1203 | data/0053/000216 1204 | data/0053/000219 1205 | data/0053/000221 1206 | data/0053/000225 1207 | data/0053/000227 1208 | data/0053/000230 1209 | data/0053/000243 1210 | data/0053/000247 1211 | data/0053/000250 1212 | data/0053/000254 1213 | data/0053/000256 1214 | data/0053/000260 1215 | data/0053/000263 1216 | data/0053/000268 1217 | data/0053/000272 1218 | data/0053/000274 1219 | data/0053/000281 1220 | data/0053/000285 1221 | data/0053/000289 1222 | data/0053/000293 1223 | data/0053/000295 1224 | data/0053/000299 1225 | data/0053/000301 1226 | data/0053/000303 1227 | data/0053/000308 1228 | data/0053/000309 1229 | data/0053/000314 1230 | data/0053/000315 1231 | data/0053/000316 1232 | data/0053/000318 1233 | data/0053/000319 1234 | data/0053/000324 1235 | data/0053/000328 1236 | data/0053/000330 1237 | data/0053/000340 1238 | data/0053/000341 1239 | data/0053/000345 1240 | data/0053/000348 1241 | data/0053/000356 1242 | data/0053/000357 1243 | data/0053/000364 1244 | data/0053/000366 1245 | data/0053/000367 1246 | data/0053/000373 1247 | data/0053/000374 1248 | data/0053/000407 1249 | data/0053/000414 1250 | data/0053/000421 1251 | data/0053/000425 1252 | data/0053/000430 1253 | data/0053/000434 1254 | data/0053/000435 1255 | data/0053/000439 1256 | data/0053/000441 1257 | data/0053/000443 1258 | data/0053/000449 1259 | data/0053/000452 1260 | data/0053/000454 1261 | data/0053/000455 1262 | data/0053/000457 1263 | data/0053/000458 1264 | data/0053/000459 1265 | data/0053/000460 1266 | data/0053/000463 1267 | data/0053/000467 1268 | data/0053/000468 1269 | data/0053/000469 1270 | data/0053/000471 1271 | data/0053/000472 1272 | data/0053/000474 1273 | data/0053/000476 1274 | data/0053/000477 1275 | data/0053/000479 1276 | data/0053/000483 1277 | data/0053/000484 1278 | data/0053/000486 1279 | data/0053/000490 1280 | data/0053/000501 1281 | data/0053/000505 1282 | data/0053/000508 1283 | data/0053/000509 1284 | data/0053/000513 1285 | data/0053/000519 1286 | data/0053/000523 1287 | data/0053/000526 1288 | data/0053/000533 1289 | data/0053/000534 1290 | data/0053/000538 1291 | data/0053/000539 1292 | data/0053/000542 1293 | data/0053/000545 1294 | data/0053/000547 1295 | data/0053/000550 1296 | data/0053/000551 1297 | data/0053/000552 1298 | data/0053/000555 1299 | data/0053/000556 1300 | data/0053/000567 1301 | data/0053/000569 1302 | data/0053/000576 1303 | data/0053/000579 1304 | data/0053/000583 1305 | data/0053/000587 1306 | data/0053/000591 1307 | data/0053/000592 1308 | data/0053/000602 1309 | data/0053/000604 1310 | data/0053/000610 1311 | data/0053/000616 1312 | data/0053/000628 1313 | data/0053/000638 1314 | data/0053/000647 1315 | data/0053/000655 1316 | data/0053/000665 1317 | data/0053/000677 1318 | data/0053/000686 1319 | data/0053/000687 1320 | data/0053/000692 1321 | data/0053/000700 1322 | data/0053/000708 1323 | data/0053/000716 1324 | data/0053/000722 1325 | data/0053/000730 1326 | data/0053/000732 1327 | data/0053/000735 1328 | data/0053/000738 1329 | data/0053/000740 1330 | data/0053/000742 1331 | data/0053/000752 1332 | data/0053/000768 1333 | data/0053/000779 1334 | data/0053/000789 1335 | data/0053/000797 1336 | data/0053/000802 1337 | data/0053/000817 1338 | data/0053/000834 1339 | data/0054/000001 1340 | data/0054/000022 1341 | data/0054/000032 1342 | data/0054/000038 1343 | data/0054/000043 1344 | data/0054/000050 1345 | data/0054/000056 1346 | data/0054/000063 1347 | data/0054/000069 1348 | data/0054/000081 1349 | data/0054/000086 1350 | data/0054/000090 1351 | data/0054/000092 1352 | data/0054/000098 1353 | data/0054/000099 1354 | data/0054/000101 1355 | data/0054/000105 1356 | data/0054/000110 1357 | data/0054/000114 1358 | data/0054/000118 1359 | data/0054/000121 1360 | data/0054/000124 1361 | data/0054/000126 1362 | data/0054/000127 1363 | data/0054/000130 1364 | data/0054/000132 1365 | data/0054/000133 1366 | data/0054/000134 1367 | data/0054/000135 1368 | data/0054/000136 1369 | data/0054/000137 1370 | data/0054/000139 1371 | data/0054/000140 1372 | data/0054/000142 1373 | data/0054/000143 1374 | data/0054/000146 1375 | data/0054/000147 1376 | data/0054/000152 1377 | data/0054/000153 1378 | data/0054/000159 1379 | data/0054/000161 1380 | data/0054/000173 1381 | data/0054/000175 1382 | data/0054/000184 1383 | data/0054/000186 1384 | data/0054/000191 1385 | data/0054/000195 1386 | data/0054/000196 1387 | data/0054/000202 1388 | data/0054/000204 1389 | data/0054/000209 1390 | data/0054/000214 1391 | data/0054/000223 1392 | data/0054/000232 1393 | data/0054/000236 1394 | data/0054/000244 1395 | data/0054/000249 1396 | data/0054/000255 1397 | data/0054/000259 1398 | data/0054/000266 1399 | data/0054/000269 1400 | data/0054/000313 1401 | data/0054/000334 1402 | data/0054/000345 1403 | data/0054/000350 1404 | data/0054/000359 1405 | data/0054/000365 1406 | data/0054/000366 1407 | data/0054/000376 1408 | data/0054/000378 1409 | data/0054/000385 1410 | data/0054/000387 1411 | data/0054/000390 1412 | data/0054/000393 1413 | data/0054/000398 1414 | data/0054/000405 1415 | data/0054/000411 1416 | data/0054/000413 1417 | data/0054/000414 1418 | data/0054/000420 1419 | data/0054/000423 1420 | data/0054/000426 1421 | data/0054/000433 1422 | data/0054/000437 1423 | data/0054/000445 1424 | data/0054/000447 1425 | data/0054/000457 1426 | data/0054/000460 1427 | data/0054/000470 1428 | data/0054/000473 1429 | data/0054/000479 1430 | data/0054/000480 1431 | data/0054/000483 1432 | data/0054/000491 1433 | data/0054/000495 1434 | data/0054/000501 1435 | data/0054/000504 1436 | data/0054/000511 1437 | data/0054/000514 1438 | data/0054/000520 1439 | data/0054/000524 1440 | data/0054/000530 1441 | data/0054/000537 1442 | data/0054/000543 1443 | data/0054/000560 1444 | data/0054/000561 1445 | data/0054/000568 1446 | data/0054/000577 1447 | data/0054/000583 1448 | data/0054/000588 1449 | data/0054/000589 1450 | data/0054/000595 1451 | data/0054/000598 1452 | data/0054/000603 1453 | data/0054/000604 1454 | data/0054/000609 1455 | data/0054/000611 1456 | data/0054/000615 1457 | data/0054/000619 1458 | data/0054/000620 1459 | data/0054/000624 1460 | data/0054/000626 1461 | data/0054/000628 1462 | data/0054/000634 1463 | data/0054/000636 1464 | data/0054/000642 1465 | data/0054/000644 1466 | data/0054/000649 1467 | data/0054/000653 1468 | data/0054/000656 1469 | data/0054/000661 1470 | data/0054/000666 1471 | data/0054/000672 1472 | data/0054/000673 1473 | data/0054/000679 1474 | data/0054/000681 1475 | data/0054/000687 1476 | data/0054/000689 1477 | data/0054/000693 1478 | data/0054/000697 1479 | data/0054/000701 1480 | data/0054/000705 1481 | data/0054/000707 1482 | data/0054/000711 1483 | data/0054/000715 1484 | data/0054/000719 1485 | data/0054/000721 1486 | data/0054/000724 1487 | data/0054/000725 1488 | data/0054/000730 1489 | data/0054/000731 1490 | data/0054/000736 1491 | data/0054/000741 1492 | data/0054/000746 1493 | data/0054/000748 1494 | data/0054/000752 1495 | data/0054/000756 1496 | data/0054/000766 1497 | data/0054/000777 1498 | data/0054/000786 1499 | data/0054/000800 1500 | data/0054/000802 1501 | data/0054/000817 1502 | data/0054/000819 1503 | data/0054/000830 1504 | data/0054/000831 1505 | data/0054/000848 1506 | data/0054/000857 1507 | data/0054/000866 1508 | data/0054/000868 1509 | data/0054/000875 1510 | data/0054/000877 1511 | data/0054/000902 1512 | data/0054/000915 1513 | data/0054/000920 1514 | data/0054/000923 1515 | data/0054/000932 1516 | data/0054/000934 1517 | data/0054/000952 1518 | data/0054/000956 1519 | data/0054/000975 1520 | data/0054/000983 1521 | data/0054/000988 1522 | data/0054/000993 1523 | data/0054/000998 1524 | data/0054/001002 1525 | data/0054/001006 1526 | data/0054/001008 1527 | data/0054/001011 1528 | data/0054/001012 1529 | data/0054/001015 1530 | data/0054/001016 1531 | data/0054/001017 1532 | data/0054/001019 1533 | data/0054/001020 1534 | data/0054/001024 1535 | data/0054/001025 1536 | data/0054/001028 1537 | data/0054/001029 1538 | data/0054/001032 1539 | data/0054/001033 1540 | data/0054/001039 1541 | data/0054/001042 1542 | data/0054/001063 1543 | data/0054/001068 1544 | data/0054/001080 1545 | data/0054/001083 1546 | data/0054/001089 1547 | data/0054/001096 1548 | data/0054/001106 1549 | data/0054/001110 1550 | data/0054/001111 1551 | data/0054/001123 1552 | data/0054/001129 1553 | data/0054/001134 1554 | data/0054/001135 1555 | data/0054/001139 1556 | data/0054/001144 1557 | data/0054/001145 1558 | data/0054/001152 1559 | data/0054/001153 1560 | data/0054/001159 1561 | data/0054/001160 1562 | data/0054/001162 1563 | data/0054/001166 1564 | data/0054/001168 1565 | data/0054/001169 1566 | data/0054/001174 1567 | data/0054/001175 1568 | data/0054/001178 1569 | data/0054/001183 1570 | data/0054/001184 1571 | data/0054/001191 1572 | data/0054/001194 1573 | data/0054/001210 1574 | data/0054/001215 1575 | data/0054/001232 1576 | data/0054/001246 1577 | data/0054/001257 1578 | data/0054/001266 1579 | data/0054/001277 1580 | data/0054/001284 1581 | data/0054/001302 1582 | data/0054/001307 1583 | data/0054/001313 1584 | data/0054/001317 1585 | data/0054/001321 1586 | data/0054/001333 1587 | data/0054/001348 1588 | data/0054/001352 1589 | data/0054/001355 1590 | data/0054/001359 1591 | data/0054/001361 1592 | data/0054/001365 1593 | data/0054/001369 1594 | data/0054/001371 1595 | data/0054/001385 1596 | data/0054/001389 1597 | data/0054/001407 1598 | data/0054/001413 1599 | data/0054/001438 1600 | data/0054/001439 1601 | data/0054/001451 1602 | data/0054/001466 1603 | data/0054/001491 1604 | data/0054/001494 1605 | data/0054/001509 1606 | data/0054/001513 1607 | data/0054/001515 1608 | data/0054/001521 1609 | data/0054/001526 1610 | data/0054/001531 1611 | data/0054/001539 1612 | data/0054/001543 1613 | data/0054/001547 1614 | data/0054/001550 1615 | data/0054/001557 1616 | data/0054/001559 1617 | data/0054/001568 1618 | data/0054/001573 1619 | data/0054/001580 1620 | data/0054/001585 1621 | data/0054/001595 1622 | data/0054/001597 1623 | data/0054/001605 1624 | data/0054/001613 1625 | data/0054/001619 1626 | data/0054/001625 1627 | data/0054/001631 1628 | data/0054/001636 1629 | data/0054/001649 1630 | data/0054/001652 1631 | data/0054/001661 1632 | data/0054/001663 1633 | data/0054/001668 1634 | data/0054/001674 1635 | data/0054/001681 1636 | data/0054/001686 1637 | data/0054/001699 1638 | data/0054/001711 1639 | data/0054/001717 1640 | data/0054/001730 1641 | data/0054/001731 1642 | data/0054/001749 1643 | data/0054/001753 1644 | data/0054/001765 1645 | data/0054/001774 1646 | data/0054/001789 1647 | data/0054/001801 1648 | data/0054/001821 1649 | data/0054/001842 1650 | data/0054/001844 1651 | data/0054/001854 1652 | data/0054/001872 1653 | data/0054/001882 1654 | data/0054/001888 1655 | data/0054/001900 1656 | data/0054/001918 1657 | data/0055/000001 1658 | data/0055/000011 1659 | data/0055/000018 1660 | data/0055/000022 1661 | data/0055/000032 1662 | data/0055/000042 1663 | data/0055/000049 1664 | data/0055/000062 1665 | data/0055/000078 1666 | data/0055/000089 1667 | data/0055/000094 1668 | data/0055/000100 1669 | data/0055/000107 1670 | data/0055/000122 1671 | data/0055/000128 1672 | data/0055/000155 1673 | data/0055/000179 1674 | data/0055/000204 1675 | data/0055/000205 1676 | data/0055/000218 1677 | data/0055/000219 1678 | data/0055/000229 1679 | data/0055/000231 1680 | data/0055/000240 1681 | data/0055/000245 1682 | data/0055/000255 1683 | data/0055/000259 1684 | data/0055/000271 1685 | data/0055/000273 1686 | data/0055/000278 1687 | data/0055/000289 1688 | data/0055/000303 1689 | data/0055/000305 1690 | data/0055/000320 1691 | data/0055/000346 1692 | data/0055/000348 1693 | data/0055/000352 1694 | data/0055/000354 1695 | data/0055/000355 1696 | data/0055/000356 1697 | data/0055/000358 1698 | data/0055/000359 1699 | data/0055/000360 1700 | data/0055/000363 1701 | data/0055/000369 1702 | data/0055/000371 1703 | data/0055/000376 1704 | data/0055/000381 1705 | data/0055/000385 1706 | data/0055/000389 1707 | data/0055/000391 1708 | data/0055/000395 1709 | data/0055/000398 1710 | data/0055/000404 1711 | data/0055/000407 1712 | data/0055/000411 1713 | data/0055/000415 1714 | data/0055/000425 1715 | data/0055/000434 1716 | data/0055/000436 1717 | data/0055/000446 1718 | data/0055/000448 1719 | data/0055/000454 1720 | data/0055/000461 1721 | data/0055/000464 1722 | data/0055/000471 1723 | data/0055/000479 1724 | data/0055/000488 1725 | data/0055/000495 1726 | data/0055/000502 1727 | data/0055/000512 1728 | data/0055/000513 1729 | data/0055/000526 1730 | data/0055/000530 1731 | data/0055/000546 1732 | data/0055/000562 1733 | data/0055/000563 1734 | data/0055/000588 1735 | data/0055/000598 1736 | data/0055/000603 1737 | data/0055/000610 1738 | data/0055/000612 1739 | data/0055/000618 1740 | data/0055/000621 1741 | data/0055/000622 1742 | data/0055/000638 1743 | data/0055/000641 1744 | data/0055/000649 1745 | data/0055/000654 1746 | data/0055/000663 1747 | data/0055/000668 1748 | data/0055/000686 1749 | data/0055/000687 1750 | data/0055/000702 1751 | data/0055/000710 1752 | data/0055/000715 1753 | data/0055/000724 1754 | data/0055/000732 1755 | data/0055/000739 1756 | data/0055/000746 1757 | data/0055/000747 1758 | data/0055/000759 1759 | data/0055/000761 1760 | data/0055/000772 1761 | data/0055/000785 1762 | data/0055/000793 1763 | data/0055/000813 1764 | data/0055/000820 1765 | data/0055/000829 1766 | data/0055/000839 1767 | data/0055/000846 1768 | data/0055/000856 1769 | data/0055/000859 1770 | data/0055/000864 1771 | data/0055/000869 1772 | data/0055/000873 1773 | data/0055/000879 1774 | data/0055/000884 1775 | data/0055/000890 1776 | data/0055/000893 1777 | data/0055/000901 1778 | data/0055/000904 1779 | data/0055/000905 1780 | data/0055/000906 1781 | data/0055/000908 1782 | data/0055/000910 1783 | data/0055/000912 1784 | data/0055/000915 1785 | data/0055/000920 1786 | data/0055/000927 1787 | data/0055/000937 1788 | data/0055/000944 1789 | data/0055/000951 1790 | data/0055/000958 1791 | data/0055/000968 1792 | data/0055/000983 1793 | data/0055/000989 1794 | data/0055/000997 1795 | data/0055/001009 1796 | data/0055/001019 1797 | data/0055/001025 1798 | data/0055/001038 1799 | data/0055/001040 1800 | data/0055/001041 1801 | data/0055/001042 1802 | data/0055/001044 1803 | data/0055/001046 1804 | data/0055/001048 1805 | data/0055/001049 1806 | data/0055/001053 1807 | data/0055/001055 1808 | data/0055/001064 1809 | data/0055/001068 1810 | data/0055/001088 1811 | data/0055/001100 1812 | data/0055/001103 1813 | data/0055/001115 1814 | data/0055/001120 1815 | data/0055/001132 1816 | data/0055/001136 1817 | data/0055/001147 1818 | data/0055/001151 1819 | data/0055/001161 1820 | data/0055/001164 1821 | data/0055/001176 1822 | data/0055/001177 1823 | data/0055/001187 1824 | data/0055/001188 1825 | data/0055/001189 1826 | data/0055/001200 1827 | data/0055/001202 1828 | data/0055/001215 1829 | data/0055/001216 1830 | data/0055/001229 1831 | data/0055/001237 1832 | data/0055/001244 1833 | data/0055/001252 1834 | data/0055/001265 1835 | data/0055/001266 1836 | data/0055/001276 1837 | data/0055/001283 1838 | data/0055/001291 1839 | data/0055/001298 1840 | data/0055/001307 1841 | data/0055/001308 1842 | data/0055/001317 1843 | data/0055/001327 1844 | data/0055/001330 1845 | data/0055/001336 1846 | data/0055/001341 1847 | data/0055/001347 1848 | data/0055/001351 1849 | data/0055/001355 1850 | data/0055/001358 1851 | data/0055/001359 1852 | data/0055/001362 1853 | data/0055/001366 1854 | data/0055/001367 1855 | data/0055/001369 1856 | data/0055/001372 1857 | data/0055/001374 1858 | data/0055/001381 1859 | data/0055/001390 1860 | data/0055/001400 1861 | data/0055/001407 1862 | data/0055/001419 1863 | data/0055/001426 1864 | data/0055/001439 1865 | data/0055/001453 1866 | data/0055/001468 1867 | data/0055/001478 1868 | data/0055/001481 1869 | data/0055/001489 1870 | data/0055/001492 1871 | data/0055/001503 1872 | data/0055/001505 1873 | data/0055/001520 1874 | data/0055/001522 1875 | data/0055/001532 1876 | data/0055/001543 1877 | data/0055/001563 1878 | data/0055/001567 1879 | data/0055/001585 1880 | data/0055/001592 1881 | data/0055/001603 1882 | data/0055/001604 1883 | data/0055/001609 1884 | data/0055/001612 1885 | data/0055/001625 1886 | data/0055/001632 1887 | data/0055/001643 1888 | data/0055/001666 1889 | data/0055/001691 1890 | data/0055/001708 1891 | data/0055/001717 1892 | data/0055/001721 1893 | data/0055/001746 1894 | data/0055/001773 1895 | data/0055/001785 1896 | data/0055/001801 1897 | data/0055/001811 1898 | data/0055/001824 1899 | data/0056/000001 1900 | data/0056/000024 1901 | data/0056/000032 1902 | data/0056/000039 1903 | data/0056/000046 1904 | data/0056/000053 1905 | data/0056/000062 1906 | data/0056/000075 1907 | data/0056/000085 1908 | data/0056/000098 1909 | data/0056/000104 1910 | data/0056/000107 1911 | data/0056/000116 1912 | data/0056/000119 1913 | data/0056/000128 1914 | data/0056/000132 1915 | data/0056/000140 1916 | data/0056/000143 1917 | data/0056/000150 1918 | data/0056/000163 1919 | data/0056/000170 1920 | data/0056/000175 1921 | data/0056/000190 1922 | data/0056/000200 1923 | data/0056/000207 1924 | data/0056/000217 1925 | data/0056/000232 1926 | data/0056/000236 1927 | data/0056/000246 1928 | data/0056/000249 1929 | data/0056/000254 1930 | data/0056/000257 1931 | data/0056/000260 1932 | data/0056/000265 1933 | data/0056/000267 1934 | data/0056/000290 1935 | data/0056/000293 1936 | data/0056/000303 1937 | data/0056/000314 1938 | data/0056/000324 1939 | data/0056/000329 1940 | data/0056/000331 1941 | data/0056/000333 1942 | data/0056/000337 1943 | data/0056/000342 1944 | data/0056/000347 1945 | data/0056/000348 1946 | data/0056/000354 1947 | data/0056/000355 1948 | data/0056/000357 1949 | data/0056/000375 1950 | data/0056/000376 1951 | data/0056/000381 1952 | data/0056/000383 1953 | data/0056/000414 1954 | data/0056/000415 1955 | data/0056/000425 1956 | data/0056/000434 1957 | data/0056/000436 1958 | data/0056/000441 1959 | data/0056/000444 1960 | data/0056/000447 1961 | data/0056/000451 1962 | data/0056/000453 1963 | data/0056/000458 1964 | data/0056/000461 1965 | data/0056/000468 1966 | data/0056/000473 1967 | data/0056/000479 1968 | data/0056/000493 1969 | data/0056/000497 1970 | data/0056/000498 1971 | data/0056/000500 1972 | data/0056/000504 1973 | data/0056/000509 1974 | data/0056/000515 1975 | data/0056/000517 1976 | data/0056/000522 1977 | data/0056/000527 1978 | data/0056/000535 1979 | data/0056/000538 1980 | data/0056/000551 1981 | data/0056/000553 1982 | data/0056/000559 1983 | data/0056/000563 1984 | data/0056/000567 1985 | data/0056/000570 1986 | data/0056/000575 1987 | data/0056/000578 1988 | data/0056/000587 1989 | data/0056/000589 1990 | data/0056/000596 1991 | data/0056/000598 1992 | data/0056/000601 1993 | data/0056/000603 1994 | data/0056/000604 1995 | data/0056/000608 1996 | data/0056/000628 1997 | data/0056/000631 1998 | data/0056/000634 1999 | data/0056/000644 2000 | data/0056/000653 2001 | data/0056/000664 2002 | data/0056/000671 2003 | data/0056/000676 2004 | data/0056/000680 2005 | data/0056/000685 2006 | data/0056/000686 2007 | data/0056/000697 2008 | data/0056/000703 2009 | data/0056/000715 2010 | data/0056/000724 2011 | data/0056/000730 2012 | data/0056/000734 2013 | data/0056/000746 2014 | data/0056/000748 2015 | data/0056/000751 2016 | data/0056/000753 2017 | data/0056/000754 2018 | data/0056/000761 2019 | data/0056/000764 2020 | data/0056/000775 2021 | data/0056/000793 2022 | data/0056/000797 2023 | data/0056/000805 2024 | data/0056/000810 2025 | data/0056/000814 2026 | data/0056/000826 2027 | data/0056/000834 2028 | data/0056/000835 2029 | data/0056/000840 2030 | data/0056/000845 2031 | data/0056/000846 2032 | data/0056/000851 2033 | data/0056/000858 2034 | data/0056/000869 2035 | data/0056/000878 2036 | data/0056/000883 2037 | data/0056/000886 2038 | data/0056/000887 2039 | data/0056/000894 2040 | data/0056/000905 2041 | data/0056/000936 2042 | data/0056/000938 2043 | data/0056/000952 2044 | data/0056/000953 2045 | data/0056/000956 2046 | data/0056/000959 2047 | data/0056/000960 2048 | data/0056/000966 2049 | data/0056/000968 2050 | data/0056/000973 2051 | data/0056/000977 2052 | data/0056/000981 2053 | data/0056/000986 2054 | data/0056/000988 2055 | data/0056/000990 2056 | data/0056/000996 2057 | data/0056/001001 2058 | data/0056/001002 2059 | data/0056/001014 2060 | data/0056/001025 2061 | data/0056/001028 2062 | data/0056/001036 2063 | data/0056/001037 2064 | data/0056/001044 2065 | data/0056/001046 2066 | data/0056/001047 2067 | data/0056/001048 2068 | data/0056/001049 2069 | data/0056/001054 2070 | data/0056/001062 2071 | data/0056/001064 2072 | data/0056/001070 2073 | data/0056/001071 2074 | data/0056/001078 2075 | data/0056/001087 2076 | data/0056/001097 2077 | data/0056/001108 2078 | data/0056/001116 2079 | data/0056/001124 2080 | data/0056/001135 2081 | data/0056/001146 2082 | data/0056/001158 2083 | data/0056/001171 2084 | data/0056/001186 2085 | data/0056/001197 2086 | data/0056/001202 2087 | data/0056/001220 2088 | data/0057/000001 2089 | data/0057/000024 2090 | data/0057/000038 2091 | data/0057/000049 2092 | data/0057/000061 2093 | data/0057/000074 2094 | data/0057/000081 2095 | data/0057/000088 2096 | data/0057/000103 2097 | data/0057/000117 2098 | data/0057/000119 2099 | data/0057/000123 2100 | data/0057/000129 2101 | data/0057/000136 2102 | data/0057/000139 2103 | data/0057/000148 2104 | data/0057/000149 2105 | data/0057/000157 2106 | data/0057/000159 2107 | data/0057/000166 2108 | data/0057/000168 2109 | data/0057/000181 2110 | data/0057/000183 2111 | data/0057/000187 2112 | data/0057/000195 2113 | data/0057/000201 2114 | data/0057/000214 2115 | data/0057/000217 2116 | data/0057/000235 2117 | data/0057/000240 2118 | data/0057/000246 2119 | data/0057/000252 2120 | data/0057/000255 2121 | data/0057/000265 2122 | data/0057/000269 2123 | data/0057/000277 2124 | data/0057/000283 2125 | data/0057/000324 2126 | data/0057/000354 2127 | data/0057/000386 2128 | data/0057/000388 2129 | data/0057/000397 2130 | data/0057/000400 2131 | data/0057/000408 2132 | data/0057/000414 2133 | data/0057/000424 2134 | data/0057/000440 2135 | data/0057/000445 2136 | data/0057/000453 2137 | data/0057/000456 2138 | data/0057/000469 2139 | data/0057/000473 2140 | data/0057/000483 2141 | data/0057/000486 2142 | data/0057/000498 2143 | data/0057/000499 2144 | data/0057/000503 2145 | data/0057/000518 2146 | data/0057/000526 2147 | data/0057/000528 2148 | data/0057/000537 2149 | data/0057/000541 2150 | data/0057/000553 2151 | data/0057/000554 2152 | data/0057/000565 2153 | data/0057/000574 2154 | data/0057/000575 2155 | data/0057/000584 2156 | data/0057/000592 2157 | data/0057/000597 2158 | data/0057/000606 2159 | data/0057/000610 2160 | data/0057/000613 2161 | data/0057/000618 2162 | data/0057/000621 2163 | data/0057/000622 2164 | data/0057/000634 2165 | data/0057/000638 2166 | data/0057/000644 2167 | data/0057/000645 2168 | data/0057/000653 2169 | data/0057/000654 2170 | data/0057/000664 2171 | data/0057/000665 2172 | data/0057/000671 2173 | data/0057/000674 2174 | data/0057/000689 2175 | data/0057/000696 2176 | data/0057/000711 2177 | data/0057/000712 2178 | data/0057/000717 2179 | data/0057/000735 2180 | data/0057/000747 2181 | data/0057/000768 2182 | data/0057/000779 2183 | data/0057/000780 2184 | data/0057/000790 2185 | data/0057/000791 2186 | data/0057/000795 2187 | data/0057/000801 2188 | data/0057/000803 2189 | data/0057/000809 2190 | data/0057/000811 2191 | data/0057/000818 2192 | data/0057/000819 2193 | data/0057/000824 2194 | data/0057/000825 2195 | data/0057/000827 2196 | data/0057/000829 2197 | data/0057/000830 2198 | data/0057/000833 2199 | data/0057/000836 2200 | data/0057/000837 2201 | data/0057/000839 2202 | data/0057/000840 2203 | data/0057/000841 2204 | data/0057/000842 2205 | data/0057/000844 2206 | data/0057/000845 2207 | data/0057/000847 2208 | data/0057/000849 2209 | data/0057/000851 2210 | data/0057/000870 2211 | data/0057/000877 2212 | data/0057/000890 2213 | data/0057/000897 2214 | data/0057/000907 2215 | data/0057/000928 2216 | data/0057/000934 2217 | data/0057/000935 2218 | data/0057/000940 2219 | data/0057/000942 2220 | data/0057/000946 2221 | data/0057/000951 2222 | data/0057/000953 2223 | data/0057/000958 2224 | data/0057/000959 2225 | data/0057/000964 2226 | data/0057/000965 2227 | data/0057/000971 2228 | data/0057/000973 2229 | data/0057/000978 2230 | data/0057/000982 2231 | data/0057/000983 2232 | data/0057/000986 2233 | data/0057/000990 2234 | data/0057/000991 2235 | data/0057/000998 2236 | data/0057/001012 2237 | data/0057/001026 2238 | data/0057/001028 2239 | data/0057/001035 2240 | data/0057/001040 2241 | data/0057/001046 2242 | data/0057/001054 2243 | data/0057/001057 2244 | data/0057/001066 2245 | data/0057/001071 2246 | data/0057/001073 2247 | data/0057/001076 2248 | data/0057/001078 2249 | data/0057/001081 2250 | data/0057/001082 2251 | data/0057/001083 2252 | data/0057/001086 2253 | data/0057/001087 2254 | data/0057/001092 2255 | data/0057/001093 2256 | data/0057/001099 2257 | data/0057/001101 2258 | data/0057/001108 2259 | data/0057/001116 2260 | data/0057/001118 2261 | data/0057/001131 2262 | data/0057/001132 2263 | data/0057/001135 2264 | data/0057/001138 2265 | data/0057/001141 2266 | data/0057/001144 2267 | data/0057/001148 2268 | data/0057/001153 2269 | data/0057/001158 2270 | data/0057/001159 2271 | data/0057/001161 2272 | data/0057/001164 2273 | data/0057/001166 2274 | data/0057/001170 2275 | data/0057/001173 2276 | data/0057/001176 2277 | data/0057/001181 2278 | data/0057/001185 2279 | data/0057/001190 2280 | data/0057/001215 2281 | data/0057/001245 2282 | data/0057/001250 2283 | data/0057/001257 2284 | data/0057/001258 2285 | data/0057/001268 2286 | data/0057/001269 2287 | data/0057/001275 2288 | data/0057/001276 2289 | data/0057/001282 2290 | data/0057/001290 2291 | data/0057/001292 2292 | data/0057/001306 2293 | data/0057/001313 2294 | data/0057/001322 2295 | data/0057/001325 2296 | data/0057/001331 2297 | data/0057/001336 2298 | data/0057/001340 2299 | data/0057/001347 2300 | data/0057/001360 2301 | data/0057/001361 2302 | data/0057/001369 2303 | data/0057/001381 2304 | data/0057/001407 2305 | data/0057/001422 2306 | data/0057/001428 2307 | data/0057/001434 2308 | data/0057/001435 2309 | data/0057/001440 2310 | data/0057/001441 2311 | data/0057/001442 2312 | data/0057/001447 2313 | data/0057/001458 2314 | data/0057/001464 2315 | data/0057/001465 2316 | data/0057/001469 2317 | data/0057/001471 2318 | data/0057/001474 2319 | data/0057/001476 2320 | data/0057/001480 2321 | data/0057/001482 2322 | data/0057/001483 2323 | data/0057/001490 2324 | data/0057/001492 2325 | data/0057/001498 2326 | data/0057/001500 2327 | data/0057/001511 2328 | data/0057/001518 2329 | data/0057/001527 2330 | data/0057/001530 2331 | data/0057/001531 2332 | data/0057/001538 2333 | data/0057/001539 2334 | data/0057/001549 2335 | data/0057/001560 2336 | data/0057/001563 2337 | data/0057/001566 2338 | data/0057/001570 2339 | data/0057/001585 2340 | data/0057/001589 2341 | data/0057/001593 2342 | data/0057/001602 2343 | data/0057/001612 2344 | data/0057/001621 2345 | data/0057/001628 2346 | data/0057/001637 2347 | data/0057/001647 2348 | data/0057/001671 2349 | data/0057/001681 2350 | data/0057/001691 2351 | data/0057/001700 2352 | data/0057/001703 2353 | data/0057/001705 2354 | data/0057/001708 2355 | data/0057/001709 2356 | data/0057/001712 2357 | data/0057/001713 2358 | data/0057/001714 2359 | data/0057/001722 2360 | data/0057/001734 2361 | data/0057/001737 2362 | data/0057/001739 2363 | data/0057/001740 2364 | data/0057/001741 2365 | data/0057/001742 2366 | data/0057/001745 2367 | data/0057/001747 2368 | data/0057/001748 2369 | data/0057/001752 2370 | data/0057/001759 2371 | data/0057/001774 2372 | data/0057/001789 2373 | data/0057/001814 2374 | data/0057/001827 2375 | data/0057/001835 2376 | data/0058/000001 2377 | data/0058/000021 2378 | data/0058/000030 2379 | data/0058/000040 2380 | data/0058/000048 2381 | data/0058/000061 2382 | data/0058/000068 2383 | data/0058/000077 2384 | data/0058/000086 2385 | data/0058/000094 2386 | data/0058/000102 2387 | data/0058/000103 2388 | data/0058/000107 2389 | data/0058/000109 2390 | data/0058/000114 2391 | data/0058/000116 2392 | data/0058/000121 2393 | data/0058/000124 2394 | data/0058/000135 2395 | data/0058/000137 2396 | data/0058/000149 2397 | data/0058/000154 2398 | data/0058/000163 2399 | data/0058/000166 2400 | data/0058/000180 2401 | data/0058/000181 2402 | data/0058/000197 2403 | data/0058/000201 2404 | data/0058/000211 2405 | data/0058/000215 2406 | data/0058/000217 2407 | data/0058/000221 2408 | data/0058/000226 2409 | data/0058/000237 2410 | data/0058/000242 2411 | data/0058/000247 2412 | data/0058/000249 2413 | data/0058/000255 2414 | data/0058/000257 2415 | data/0058/000262 2416 | data/0058/000269 2417 | data/0058/000278 2418 | data/0058/000279 2419 | data/0058/000287 2420 | data/0058/000288 2421 | data/0058/000300 2422 | data/0058/000301 2423 | data/0058/000313 2424 | data/0058/000317 2425 | data/0058/000319 2426 | data/0058/000329 2427 | data/0058/000332 2428 | data/0058/000342 2429 | data/0058/000354 2430 | data/0058/000361 2431 | data/0058/000369 2432 | data/0058/000372 2433 | data/0058/000382 2434 | data/0058/000390 2435 | data/0058/000395 2436 | data/0058/000402 2437 | data/0058/000404 2438 | data/0058/000410 2439 | data/0058/000414 2440 | data/0058/000422 2441 | data/0058/000423 2442 | data/0058/000434 2443 | data/0058/000443 2444 | data/0058/000444 2445 | data/0058/000445 2446 | data/0058/000456 2447 | data/0058/000460 2448 | data/0058/000469 2449 | data/0058/000472 2450 | data/0058/000476 2451 | data/0058/000484 2452 | data/0058/000488 2453 | data/0058/000495 2454 | data/0058/000498 2455 | data/0058/000505 2456 | data/0058/000508 2457 | data/0058/000516 2458 | data/0058/000519 2459 | data/0058/000529 2460 | data/0058/000531 2461 | data/0058/000541 2462 | data/0058/000553 2463 | data/0058/000561 2464 | data/0058/000562 2465 | data/0058/000574 2466 | data/0058/000576 2467 | data/0058/000583 2468 | data/0058/000588 2469 | data/0058/000596 2470 | data/0058/000603 2471 | data/0058/000610 2472 | data/0058/000617 2473 | data/0058/000631 2474 | data/0058/000635 2475 | data/0058/000642 2476 | data/0058/000646 2477 | data/0058/000653 2478 | data/0058/000655 2479 | data/0058/000660 2480 | data/0058/000662 2481 | data/0058/000670 2482 | data/0058/000677 2483 | data/0058/000688 2484 | data/0058/000691 2485 | data/0058/000694 2486 | data/0058/000703 2487 | data/0058/000712 2488 | data/0058/000725 2489 | data/0058/000730 2490 | data/0058/000737 2491 | data/0058/000743 2492 | data/0058/000759 2493 | data/0058/000763 2494 | data/0058/000772 2495 | data/0058/000776 2496 | data/0058/000783 2497 | data/0058/000785 2498 | data/0058/000793 2499 | data/0058/000794 2500 | data/0058/000802 2501 | data/0058/000813 2502 | data/0058/000815 2503 | data/0058/000824 2504 | data/0058/000826 2505 | data/0058/000838 2506 | data/0058/000839 2507 | data/0058/000849 2508 | data/0058/000850 2509 | data/0058/000857 2510 | data/0058/000858 2511 | data/0058/000866 2512 | data/0058/000867 2513 | data/0058/000874 2514 | data/0058/000878 2515 | data/0058/000891 2516 | data/0058/000897 2517 | data/0058/000905 2518 | data/0058/000909 2519 | data/0058/000920 2520 | data/0058/000921 2521 | data/0058/000931 2522 | data/0058/000932 2523 | data/0058/000940 2524 | data/0058/000943 2525 | data/0058/000952 2526 | data/0058/000958 2527 | data/0058/000967 2528 | data/0058/000971 2529 | data/0058/000983 2530 | data/0058/000985 2531 | data/0058/000999 2532 | data/0058/001000 2533 | data/0058/001012 2534 | data/0058/001013 2535 | data/0058/001023 2536 | data/0058/001035 2537 | data/0058/001036 2538 | data/0058/001051 2539 | data/0058/001068 2540 | data/0058/001072 2541 | data/0058/001082 2542 | data/0058/001084 2543 | data/0058/001094 2544 | data/0058/001097 2545 | data/0058/001113 2546 | data/0058/001129 2547 | data/0058/001144 2548 | data/0058/001146 2549 | data/0058/001164 2550 | data/0058/001167 2551 | data/0058/001177 2552 | data/0058/001180 2553 | data/0058/001196 2554 | data/0058/001199 2555 | data/0058/001216 2556 | data/0058/001217 2557 | data/0058/001248 2558 | data/0058/001253 2559 | data/0058/001274 2560 | data/0058/001278 2561 | data/0058/001289 2562 | data/0058/001293 2563 | data/0058/001301 2564 | data/0058/001305 2565 | data/0058/001324 2566 | data/0058/001330 2567 | data/0058/001393 2568 | data/0058/001395 2569 | data/0058/001416 2570 | data/0058/001420 2571 | data/0058/001426 2572 | data/0058/001427 2573 | data/0058/001434 2574 | data/0058/001436 2575 | data/0058/001447 2576 | data/0058/001451 2577 | data/0058/001467 2578 | data/0058/001480 2579 | data/0058/001504 2580 | data/0058/001511 2581 | data/0058/001529 2582 | data/0058/001549 2583 | data/0058/001584 2584 | data/0058/001599 2585 | data/0058/001614 2586 | data/0058/001639 2587 | data/0058/001669 2588 | data/0058/001672 2589 | data/0058/001684 2590 | data/0059/000001 2591 | data/0059/000029 2592 | data/0059/000037 2593 | data/0059/000055 2594 | data/0059/000061 2595 | data/0059/000068 2596 | data/0059/000080 2597 | data/0059/000088 2598 | data/0059/000099 2599 | data/0059/000114 2600 | data/0059/000120 2601 | data/0059/000126 2602 | data/0059/000127 2603 | data/0059/000132 2604 | data/0059/000139 2605 | data/0059/000142 2606 | data/0059/000145 2607 | data/0059/000148 2608 | data/0059/000150 2609 | data/0059/000151 2610 | data/0059/000153 2611 | data/0059/000154 2612 | data/0059/000156 2613 | data/0059/000158 2614 | data/0059/000159 2615 | data/0059/000160 2616 | data/0059/000162 2617 | data/0059/000163 2618 | data/0059/000164 2619 | data/0059/000165 2620 | data/0059/000167 2621 | data/0059/000169 2622 | data/0059/000171 2623 | data/0059/000176 2624 | data/0059/000190 2625 | data/0059/000196 2626 | data/0059/000206 2627 | data/0059/000210 2628 | data/0059/000215 2629 | data/0059/000224 2630 | data/0059/000231 2631 | data/0059/000232 2632 | data/0059/000234 2633 | data/0059/000236 2634 | data/0059/000238 2635 | data/0059/000239 2636 | data/0059/000240 2637 | data/0059/000241 2638 | data/0059/000242 2639 | data/0059/000243 2640 | data/0059/000244 2641 | data/0059/000245 2642 | data/0059/000246 2643 | data/0059/000248 2644 | data/0059/000250 2645 | data/0059/000252 2646 | data/0059/000253 2647 | data/0059/000255 2648 | data/0059/000256 2649 | data/0059/000260 2650 | data/0059/000262 2651 | data/0059/000265 2652 | data/0059/000266 2653 | data/0059/000268 2654 | data/0059/000270 2655 | data/0059/000274 2656 | data/0059/000275 2657 | data/0059/000279 2658 | data/0059/000280 2659 | data/0059/000284 2660 | data/0059/000290 2661 | data/0059/000294 2662 | data/0059/000295 2663 | data/0059/000299 2664 | data/0059/000300 2665 | data/0059/000304 2666 | data/0059/000305 2667 | data/0059/000309 2668 | data/0059/000310 2669 | data/0059/000315 2670 | data/0059/000316 2671 | data/0059/000320 2672 | data/0059/000321 2673 | data/0059/000323 2674 | data/0059/000333 2675 | data/0059/000346 2676 | data/0059/000352 2677 | data/0059/000358 2678 | data/0059/000364 2679 | data/0059/000376 2680 | data/0059/000384 2681 | data/0059/000391 2682 | data/0059/000392 2683 | data/0059/000395 2684 | data/0059/000396 2685 | data/0059/000400 2686 | data/0059/000402 2687 | data/0059/000403 2688 | data/0059/000408 2689 | data/0059/000412 2690 | data/0059/000416 2691 | data/0059/000419 2692 | data/0059/000420 2693 | data/0059/000422 2694 | data/0059/000423 2695 | data/0059/000425 2696 | data/0059/000426 2697 | data/0059/000427 2698 | data/0059/000428 2699 | data/0059/000429 2700 | data/0059/000430 2701 | data/0059/000431 2702 | data/0059/000434 2703 | data/0059/000435 2704 | data/0059/000438 2705 | data/0059/000439 2706 | data/0059/000442 2707 | data/0059/000444 2708 | data/0059/000447 2709 | data/0059/000451 2710 | data/0059/000455 2711 | data/0059/000459 2712 | data/0059/000463 2713 | data/0059/000467 2714 | data/0059/000471 2715 | data/0059/000475 2716 | data/0059/000479 2717 | data/0059/000480 2718 | data/0059/000483 2719 | data/0059/000484 2720 | data/0059/000488 2721 | data/0059/000492 2722 | data/0059/000495 2723 | data/0059/000496 2724 | data/0059/000499 2725 | data/0059/000503 2726 | data/0059/000505 2727 | data/0059/000506 2728 | data/0059/000509 2729 | data/0059/000510 2730 | data/0059/000514 2731 | data/0059/000515 2732 | data/0059/000523 2733 | data/0059/000525 2734 | data/0059/000530 2735 | data/0059/000535 2736 | data/0059/000545 2737 | data/0059/000561 2738 | data/0059/000567 2739 | data/0059/000615 2740 | data/0059/000629 2741 | data/0059/000636 2742 | data/0059/000637 2743 | data/0059/000648 2744 | data/0059/000650 2745 | data/0059/000656 2746 | data/0059/000657 2747 | data/0059/000661 2748 | data/0059/000662 2749 | data/0059/000669 2750 | data/0059/000670 2751 | data/0059/000675 2752 | data/0059/000676 2753 | data/0059/000687 2754 | data/0059/000689 2755 | data/0059/000692 2756 | data/0059/000698 2757 | data/0059/000699 2758 | data/0059/000701 2759 | data/0059/000703 2760 | data/0059/000704 2761 | data/0059/000708 2762 | data/0059/000710 2763 | data/0059/000712 2764 | data/0059/000717 2765 | data/0059/000721 2766 | data/0059/000726 2767 | data/0059/000729 2768 | data/0059/000733 2769 | data/0059/000736 2770 | data/0059/000745 2771 | data/0059/000748 2772 | data/0059/000755 2773 | data/0059/000764 2774 | data/0059/000769 2775 | data/0059/000772 2776 | data/0059/000775 2777 | data/0059/000777 2778 | data/0059/000781 2779 | data/0059/000788 2780 | data/0059/000795 2781 | data/0059/000799 2782 | data/0059/000801 2783 | data/0059/000802 2784 | data/0059/000806 2785 | data/0059/000809 2786 | data/0059/000816 2787 | data/0059/000822 2788 | data/0059/000833 2789 | data/0059/000835 2790 | data/0059/000839 2791 | data/0059/000842 2792 | data/0059/000845 2793 | data/0059/000848 2794 | data/0059/000851 2795 | data/0059/000856 2796 | data/0059/000863 2797 | data/0059/000868 2798 | data/0059/000872 2799 | data/0059/000875 2800 | data/0059/000879 2801 | data/0059/000904 2802 | data/0059/000908 2803 | data/0059/000910 2804 | data/0059/000915 2805 | data/0059/000918 2806 | data/0059/000943 2807 | data/0059/000957 2808 | data/0059/000991 2809 | data/0059/001001 2810 | data/0059/001008 2811 | data/0059/001017 2812 | data/0059/001022 2813 | data/0059/001026 2814 | data/0059/001027 2815 | data/0059/001032 2816 | data/0059/001034 2817 | data/0059/001039 2818 | data/0059/001044 2819 | data/0059/001048 2820 | data/0059/001054 2821 | data/0059/001060 2822 | data/0059/001063 2823 | data/0059/001064 2824 | data/0059/001068 2825 | data/0059/001070 2826 | data/0059/001071 2827 | data/0059/001073 2828 | data/0059/001074 2829 | data/0059/001075 2830 | data/0059/001076 2831 | data/0059/001078 2832 | data/0059/001081 2833 | data/0059/001090 2834 | data/0059/001093 2835 | data/0059/001103 2836 | data/0059/001110 2837 | data/0059/001124 2838 | data/0059/001129 2839 | data/0059/001131 2840 | data/0059/001132 2841 | data/0059/001148 2842 | data/0059/001152 2843 | data/0059/001165 2844 | data/0059/001170 2845 | data/0059/001184 2846 | data/0059/001199 2847 | data/0059/001209 2848 | data/0059/001214 2849 | data/0059/001251 2850 | data/0059/001259 2851 | data/0059/001264 2852 | data/0059/001271 2853 | data/0059/001278 2854 | data/0059/001295 2855 | data/0059/001299 2856 | data/0059/001308 2857 | data/0059/001311 2858 | data/0059/001313 2859 | data/0059/001318 2860 | data/0059/001320 2861 | data/0059/001327 2862 | data/0059/001334 2863 | data/0059/001335 2864 | data/0059/001349 2865 | data/0059/001351 2866 | data/0059/001360 2867 | data/0059/001368 2868 | data/0059/001374 2869 | data/0059/001379 2870 | data/0059/001385 2871 | data/0059/001391 2872 | data/0059/001399 2873 | data/0059/001414 2874 | data/0059/001428 2875 | data/0059/001445 2876 | data/0059/001458 2877 | data/0059/001474 2878 | data/0059/001483 2879 | data/0059/001486 2880 | data/0059/001487 2881 | data/0059/001490 2882 | data/0059/001491 2883 | data/0059/001495 2884 | data/0059/001498 2885 | data/0059/001500 2886 | data/0059/001509 2887 | data/0059/001510 2888 | data/0059/001514 2889 | data/0059/001516 2890 | data/0059/001520 2891 | data/0059/001521 2892 | data/0059/001523 2893 | data/0059/001524 2894 | data/0059/001528 2895 | data/0059/001529 2896 | data/0059/001539 2897 | data/0059/001541 2898 | data/0059/001544 2899 | data/0059/001546 2900 | data/0059/001553 2901 | data/0059/001555 2902 | data/0059/001559 2903 | data/0059/001564 2904 | data/0059/001565 2905 | data/0059/001567 2906 | data/0059/001574 2907 | data/0059/001576 2908 | data/0059/001581 2909 | data/0059/001583 2910 | data/0059/001585 2911 | data/0059/001606 2912 | data/0059/001612 2913 | data/0059/001613 2914 | data/0059/001621 2915 | data/0059/001628 2916 | data/0059/001637 2917 | data/0059/001647 2918 | data/0059/001661 2919 | data/0059/001662 2920 | data/0059/001669 2921 | data/0059/001670 2922 | data/0059/001677 2923 | data/0059/001678 2924 | data/0059/001682 2925 | data/0059/001683 2926 | data/0059/001690 2927 | data/0059/001692 2928 | data/0059/001696 2929 | data/0059/001698 2930 | data/0059/001699 2931 | data/0059/001704 2932 | data/0059/001707 2933 | data/0059/001734 2934 | data/0059/001747 2935 | data/0059/001777 2936 | data/0059/001782 2937 | data/0059/001787 2938 | data/0059/001800 2939 | data/0059/001803 2940 | data/0059/001806 2941 | data/0059/001809 2942 | data/0059/001812 2943 | data/0059/001817 2944 | data/0059/001819 2945 | data/0059/001820 2946 | data/0059/001821 2947 | data/0059/001822 2948 | data/0059/001824 2949 | data/0059/001857 -------------------------------------------------------------------------------- /chainer_dense_fusion/datasets/ycb/ycb_video_dataset.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import os.path as osp 3 | from PIL import Image 4 | 5 | from chainer.dataset import download 6 | from chainercv.chainer_experimental.datasets.sliceable import GetterDataset 7 | from chainercv import utils 8 | from chainercv.visualizations import vis_image 9 | from chainercv.visualizations import vis_semantic_segmentation 10 | import matplotlib.pyplot as plt 11 | import open3d 12 | from open3d import create_point_cloud_from_rgbd_image 13 | from open3d import create_rgbd_image_from_color_and_depth 14 | from open3d import PinholeCameraIntrinsic 15 | import scipy.io 16 | 17 | from chainer_dense_fusion.visualizations import vis_6d_pose_estimation 18 | 19 | 20 | ycb_root = 'pfnet/chainer-dense-fusion/ycb' 21 | tool_root = 'pfnet/chainer-dense-fusion/YCB_Video_toolbox' 22 | this_dir = osp.dirname(osp.realpath(__file__)) 23 | 24 | 25 | class YCBVideoDataset(GetterDataset): 26 | 27 | def __init__(self, split='train'): 28 | if split not in ['train', 'val']: 29 | raise ValueError( 30 | 'YCB video dataset split {} is not supported'.format(split)) 31 | super(YCBVideoDataset, self).__init__() 32 | 33 | self.data_dir = download.get_dataset_directory(ycb_root) 34 | self.tool_dir = download.get_dataset_directory(tool_root) 35 | with open(osp.join(this_dir, './config/label_names.txt')) as f: 36 | self.label_names = f.read().split('\n')[:-1] 37 | 38 | with open(osp.join(this_dir, './config/{}.txt'.format(split))) as f: 39 | self.ids = f.read().split('\n') 40 | 41 | self.add_getter('img', self._get_image) 42 | self.add_getter('depth', self._get_depth) 43 | self.add_getter('pose', self._get_pose) 44 | self.add_getter('pose_label', self._get_pose_label) 45 | self.add_getter('intrinsic', self._get_intrinsic) 46 | self.keys = ('img', 'depth', 'pose', 'pose_label', 'intrinsic') 47 | 48 | def __len__(self): 49 | return len(self.ids) 50 | 51 | def _get_image(self, i): 52 | imgpath = osp.join(self.data_dir, '{}-color.png'.format(self.ids[i])) 53 | img = utils.read_image(imgpath, dtype=np.float32, color=True) 54 | return img 55 | 56 | def _get_depth(self, i): 57 | depthpath = osp.join(self.data_dir, '{}-depth.png'.format(self.ids[i])) 58 | depth = np.asarray(Image.open(depthpath)).astype(np.float32) 59 | depth_scale = self._get_depth_scale(i) 60 | depth = depth / depth_scale 61 | return depth 62 | 63 | def _get_pose(self, i): 64 | metapath = osp.join(self.data_dir, '{}-meta.mat'.format(self.ids[i])) 65 | rt = scipy.io.loadmat(metapath)['poses'].transpose((2, 0, 1)) 66 | pose = np.zeros((len(rt), 4, 4), dtype=np.float32) 67 | pose[:, 3, 3] = 1 68 | pose[:, :3, :3] = rt[:, :, :3] 69 | pose[:, :3, 3] = rt[:, :, 3] 70 | pose = pose.transpose((0, 2, 1)) 71 | return pose 72 | 73 | def _get_pose_label(self, i): 74 | metapath = osp.join(self.data_dir, '{}-meta.mat'.format(self.ids[i])) 75 | object_ids = scipy.io.loadmat(metapath)['cls_indexes'].flatten() 76 | object_ids = object_ids - 1 77 | return object_ids 78 | 79 | def _get_depth_scale(self, i): 80 | metapath = osp.join(self.data_dir, '{}-meta.mat'.format(self.ids[i])) 81 | depth_scale = scipy.io.loadmat(metapath)['factor_depth'][0][0] 82 | return depth_scale 83 | 84 | def _get_intrinsic(self, i): 85 | metapath = osp.join(self.data_dir, '{}-meta.mat'.format(self.ids[i])) 86 | intrinsic_matrix = scipy.io.loadmat(metapath)['intrinsic_matrix'] 87 | fx = intrinsic_matrix[0][0] 88 | fy = intrinsic_matrix[1][1] 89 | cx = intrinsic_matrix[0][2] 90 | cy = intrinsic_matrix[1][2] 91 | return fx, fy, cx, cy 92 | 93 | def get_object_pcd(self, lbl): 94 | xyzpath = osp.join( 95 | self.data_dir, 96 | './models/{}/points.xyz'.format(self.label_names[lbl])) 97 | obj_pcd = open3d.read_point_cloud(xyzpath) 98 | return obj_pcd 99 | 100 | def get_camera_pcd(self, i): 101 | img = self._get_image(i) 102 | depth = self._get_depth(i) 103 | _, H, W = img.shape 104 | fx, fy, cx, cy = self._get_intrinsic(i) 105 | intrinsic = PinholeCameraIntrinsic(W, H, fx, fy, cx, cy) 106 | img = open3d.Image(img.transpose((1, 2, 0)).astype(np.uint8)) 107 | depth = open3d.Image(depth) 108 | rgbd = create_rgbd_image_from_color_and_depth( 109 | img, depth, depth_scale=1.0, convert_rgb_to_intensity=False) 110 | pcd = create_point_cloud_from_rgbd_image(rgbd, intrinsic) 111 | return pcd 112 | 113 | def visualize(self, i): 114 | img = self._get_image(i) 115 | depth = self._get_depth(i) 116 | f, axes = plt.subplots(1, 2, sharey=True) 117 | vis_image(img, ax=axes[0]) 118 | axes[1].imshow(depth) 119 | plt.show() 120 | 121 | def visualize_3d(self, i): 122 | label = self._get_label(i) 123 | pose = self._get_pose(i) 124 | 125 | # camera pcd 126 | camera_pcd = self.get_camera_pcd(i) 127 | # model pcd 128 | object_pcds = [] 129 | for lbl in label: 130 | object_pcds.append(self.get_object_pcd(lbl)) 131 | vis_6d_pose_estimation( 132 | camera_pcd, object_pcds, pose) 133 | 134 | 135 | class YCBVideoDatasetPoseCNNSegmented(YCBVideoDataset): 136 | 137 | def __init__(self, split='val'): 138 | if split != 'val': 139 | raise ValueError( 140 | 'YCB video segmented dataset split {} is not supported' 141 | .format(split)) 142 | 143 | super(YCBVideoDatasetPoseCNNSegmented, self).__init__(split) 144 | self.add_getter('lbl_img', self._get_lbl_img) 145 | self.add_getter('bbox', self._get_bbox) 146 | self.add_getter('bbox_label', self._get_bbox_label) 147 | self.keys = ('img', 'depth', 'lbl_img', 'bbox', 'bbox_label', 148 | 'pose', 'pose_label', 'intrinsic') 149 | 150 | def _get_lbl_img(self, i): 151 | datapath = osp.join( 152 | self.tool_dir, './results_PoseCNN_RSS2018/{0:06d}.mat'.format(i)) 153 | data = scipy.io.loadmat(datapath) 154 | lbl_img = np.array(data['labels'], dtype=np.int32) 155 | lbl_img = lbl_img - 1 156 | return lbl_img 157 | 158 | def _get_bbox(self, i): 159 | datapath = osp.join( 160 | self.tool_dir, './results_PoseCNN_RSS2018/{0:06d}.mat'.format(i)) 161 | data = scipy.io.loadmat(datapath) 162 | img = self._get_image(i) 163 | _, H, W = img.shape 164 | rois = np.array(data['rois'][:, 2:6], dtype=np.float32) 165 | bbox = rois[:, [1, 0, 3, 2]] 166 | return bbox 167 | 168 | def _get_bbox_label(self, i): 169 | datapath = osp.join( 170 | self.tool_dir, './results_PoseCNN_RSS2018/{0:06d}.mat'.format(i)) 171 | data = scipy.io.loadmat(datapath) 172 | bbox_label = np.array(data['rois'][:, 1], dtype=np.int32) - 1 173 | return bbox_label 174 | 175 | def visualize(self, i): 176 | img = self._get_image(i) 177 | depth = self._get_depth(i) 178 | lbl_img = self._get_lbl_img(i) 179 | f, axes = plt.subplots(1, 3, sharey=True) 180 | vis_image(img, ax=axes[0]) 181 | axes[1].imshow(depth) 182 | _, legend_handles = vis_semantic_segmentation( 183 | img, lbl_img + 1, 184 | label_names=['background'] + self.label_names, ax=axes[2]) 185 | axes[2].legend(handles=legend_handles, bbox_to_anchor=(1, 1), loc=2) 186 | plt.show() 187 | -------------------------------------------------------------------------------- /chainer_dense_fusion/links/__init__.py: -------------------------------------------------------------------------------- 1 | from chainer_dense_fusion.links import model # NOQA 2 | -------------------------------------------------------------------------------- /chainer_dense_fusion/links/model/__init__.py: -------------------------------------------------------------------------------- 1 | from chainer_dense_fusion.links.model.dense_fusion import DenseFusion # NOQA 2 | from chainer_dense_fusion.links.model.posenet import PoseNet # NOQA 3 | -------------------------------------------------------------------------------- /chainer_dense_fusion/links/model/dense_fusion.py: -------------------------------------------------------------------------------- 1 | from __future__ import division 2 | 3 | import chainer 4 | from chainer.backends import cuda 5 | import chainer.functions as F 6 | import chainer.links as L 7 | from chainercv import utils 8 | import numpy as np 9 | 10 | from chainer_dense_fusion.links.model.posenet import PoseNet 11 | from chainer_dense_fusion.utils import generate_organized_pcd 12 | from chainer_dense_fusion.utils import generate_pose 13 | 14 | 15 | class DenseFusion(chainer.Chain): 16 | 17 | _models = { 18 | 'ycb_converted': { 19 | 'param': {'n_fg_class': 21}, 20 | 'url': 'https://github.com/knorth55/' 21 | 'chainer-dense-fusion/releases/download/v0.0.1/' 22 | 'dense_fusion_ycb_converted_2019_02_03.npz', 23 | 'cv2': True 24 | }, 25 | } 26 | 27 | def __init__( 28 | self, pretrained_model=None, 29 | n_fg_class=21, n_point=1000, n_iter=2, 30 | mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225) 31 | ): 32 | super(DenseFusion, self).__init__() 33 | param, path = utils.prepare_pretrained_model( 34 | {'n_fg_class': n_fg_class}, pretrained_model, self._models) 35 | self.n_fg_class = param['n_fg_class'] 36 | self.n_point = n_point 37 | self.n_iter = n_iter 38 | 39 | with self.init_scope(): 40 | self.posenet = PoseNet( 41 | None, n_fg_class, n_point, mean, std) 42 | self.refiner = PoseRefineNet( 43 | n_fg_class, n_point) 44 | 45 | if pretrained_model is not None: 46 | chainer.serializers.load_npz(path, self) 47 | 48 | def predict(self, imgs, depths, lbl_imgs, bboxes, bbox_labels, intrinsics): 49 | prepared_imgs = [] 50 | for img in imgs: 51 | img = self.posenet.prepare(img.astype(np.float32)) 52 | prepared_imgs.append(img) 53 | 54 | poses = [] 55 | labels = [] 56 | scores = [] 57 | for img, depth, lbl_img, bbox, bbox_label, intrinsic in zip( 58 | prepared_imgs, depths, lbl_imgs, 59 | bboxes, bbox_labels, intrinsics): 60 | # generete organized pcd 61 | organized_pcd = generate_organized_pcd(depth, intrinsic) 62 | H, W = img.shape[1:] 63 | 64 | label = [] 65 | pose = [] 66 | score = [] 67 | for bb, bb_lbl in zip(bbox, bbox_label): 68 | if bb_lbl < 0: 69 | continue 70 | prepared_bb = self.posenet.prepare_bb(bb, H, W) 71 | if prepared_bb[0] is None: 72 | continue 73 | pcd_indice = self.posenet.get_pcd_indice( 74 | depth, lbl_img, prepared_bb, bb_lbl) 75 | if pcd_indice is None: 76 | continue 77 | 78 | ymin, xmin, ymax, xmax = prepared_bb 79 | pcd = organized_pcd[:, ymin:ymax, xmin:xmax].reshape((3, -1)) 80 | masked_img = img[:, ymin:ymax, xmin:xmax] 81 | masked_pcd = pcd[:, pcd_indice] 82 | rot, trans, conf, h_img_var = self.posenet.predict_each( 83 | masked_img, masked_pcd, pcd_indice, bb_lbl) 84 | pse = generate_pose(rot, trans) 85 | 86 | # refiner 87 | for _ in range(self.n_iter): 88 | # translate: (Tx, Ty, Tz).T, rotation: R.T 89 | # (x', y', z').T = R.T.T * ((x, y, z).T - (Tx, Ty, Tz).T) 90 | refine_pcd = masked_pcd - pse[3, :3, None] 91 | refine_pcd = np.dot(pse[:3, :3], refine_pcd) 92 | with chainer.using_config('train', False), \ 93 | chainer.function.no_backprop_mode(): 94 | refine_pcd_var = chainer.Variable( 95 | self.xp.array(refine_pcd[None])) 96 | refine_cls_rot, refine_cls_trans = \ 97 | self.refiner.__call__(h_img_var, refine_pcd_var) 98 | 99 | # variable -> cpu array 100 | refine_rot = cuda.to_cpu(refine_cls_rot.array)[0, bb_lbl] 101 | refine_trans = cuda.to_cpu( 102 | refine_cls_trans.array)[0, bb_lbl] 103 | refine_rot = refine_rot / np.linalg.norm(refine_rot) 104 | refine_pse = generate_pose(refine_rot, refine_trans) 105 | pse = np.dot(refine_pse, pse) 106 | 107 | pose.append(pse[None]) 108 | label.append(bb_lbl) 109 | score.append(conf) 110 | 111 | pose = np.concatenate(pose, axis=0) 112 | label = np.array(label) 113 | score = np.array(score) 114 | poses.append(pose) 115 | labels.append(label) 116 | scores.append(score) 117 | return poses, labels, scores 118 | 119 | 120 | class PoseRefineNet(chainer.Chain): 121 | 122 | def __init__(self, n_fg_class, n_point): 123 | super(PoseRefineNet, self).__init__() 124 | self.n_fg_class = n_fg_class 125 | self.n_point = n_point 126 | 127 | with self.init_scope(): 128 | self.extractor = PoseRefineNetExtractor(self.n_point) 129 | self.conv1_rot = L.Linear(1024, 512) 130 | self.conv1_trans = L.Linear(1024, 512) 131 | self.conv2_rot = L.Linear(512, 128) 132 | self.conv2_trans = L.Linear(512, 128) 133 | self.conv3_rot = L.Linear(128, self.n_fg_class * 4) 134 | self.conv3_trans = L.Linear(128, self.n_fg_class * 3) 135 | 136 | def __call__(self, h_img, pcd): 137 | B = pcd.shape[0] 138 | h = self.extractor(h_img, pcd) 139 | # conv1 140 | h_rot = F.relu(self.conv1_rot(h)) 141 | h_trans = F.relu(self.conv1_trans(h)) 142 | # conv2 143 | h_rot = F.relu(self.conv2_rot(h_rot)) 144 | h_trans = F.relu(self.conv2_trans(h_trans)) 145 | # conv3 146 | h_rot = self.conv3_rot(h_rot) 147 | h_trans = self.conv3_trans(h_trans) 148 | cls_rot = h_rot.reshape((B, self.n_fg_class, 4)) 149 | cls_trans = h_trans.reshape((B, self.n_fg_class, 3)) 150 | return cls_rot, cls_trans 151 | 152 | 153 | class PoseRefineNetExtractor(chainer.Chain): 154 | 155 | def __init__(self, n_point): 156 | super(PoseRefineNetExtractor, self).__init__() 157 | self.n_point = n_point 158 | 159 | with self.init_scope(): 160 | # conv1 161 | self.conv1_img = L.Convolution1D(32, 64, 1) 162 | self.conv1_pcd = L.Convolution1D(3, 64, 1) 163 | # conv2 164 | self.conv2_img = L.Convolution1D(64, 128, 1) 165 | self.conv2_pcd = L.Convolution1D(64, 128, 1) 166 | # conv3, conv4 167 | self.conv3 = L.Convolution1D(384, 512, 1) 168 | self.conv4 = L.Convolution1D(512, 1024, 1) 169 | 170 | def __call__(self, h_img, pcd): 171 | B = h_img.shape[0] 172 | # conv1 173 | h_img = F.relu(self.conv1_img(h_img)) 174 | h_pcd = F.relu(self.conv1_pcd(pcd)) 175 | feat1 = F.concat((h_pcd, h_img), axis=1) 176 | # conv2 177 | h_img = F.relu(self.conv2_img(h_img)) 178 | h_pcd = F.relu(self.conv2_pcd(h_pcd)) 179 | feat2 = F.concat((h_pcd, h_img), axis=1) 180 | # conv3, conv4 181 | feat3 = F.concat((feat1, feat2), axis=1) 182 | h = F.relu(self.conv3(feat3)) 183 | h = F.relu(self.conv4(h)) 184 | h = F.average_pooling_1d(h, self.n_point) 185 | h = h.reshape((B, 1024)) 186 | return h 187 | -------------------------------------------------------------------------------- /chainer_dense_fusion/links/model/posenet.py: -------------------------------------------------------------------------------- 1 | from __future__ import division 2 | 3 | import chainer 4 | from chainer.backends import cuda 5 | import chainer.functions as F 6 | import chainer.links as L 7 | from chainercv import utils 8 | import numpy as np 9 | 10 | from chainer_dense_fusion.links.model.pspnet import PSPNetExtractor 11 | from chainer_dense_fusion.links.model.resnet import ResNet18Extractor 12 | from chainer_dense_fusion.utils import generate_organized_pcd 13 | from chainer_dense_fusion.utils import generate_pose 14 | 15 | 16 | class PoseNet(chainer.Chain): 17 | _models = { 18 | 'ycb_converted': { 19 | 'param': {'n_fg_class': 21}, 20 | 'url': 'https://github.com/knorth55/' 21 | 'chainer-dense-fusion/releases/download/v0.0.0/' 22 | 'posenet_ycb_converted_2019_02_01.npz', 23 | 'cv2': True 24 | }, 25 | } 26 | 27 | def __init__( 28 | self, pretrained_model=None, 29 | n_fg_class=21, n_point=1000, 30 | mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225) 31 | ): 32 | super(PoseNet, self).__init__() 33 | param, path = utils.prepare_pretrained_model( 34 | {'n_fg_class': n_fg_class}, pretrained_model, self._models) 35 | self.n_fg_class = param['n_fg_class'] 36 | self.n_point = n_point 37 | self.mean = np.array(mean, dtype=np.float32)[:, None, None] 38 | self.std = np.array(std, dtype=np.float32)[:, None, None] 39 | 40 | with self.init_scope(): 41 | # extractor 42 | self.resnet_extractor = ResNet18Extractor() 43 | self.pspnet_extractor = PSPNetExtractor() 44 | self.posenet_extractor = PoseNetExtractor(self.n_point) 45 | # conv1 46 | self.conv1_rot = L.Convolution1D(1408, 640, 1) 47 | self.conv1_trans = L.Convolution1D(1408, 640, 1) 48 | self.conv1_conf = L.Convolution1D(1408, 640, 1) 49 | # conv2 50 | self.conv2_rot = L.Convolution1D(640, 256, 1) 51 | self.conv2_trans = L.Convolution1D(640, 256, 1) 52 | self.conv2_conf = L.Convolution1D(640, 256, 1) 53 | # conv3 54 | self.conv3_rot = L.Convolution1D(256, 128, 1) 55 | self.conv3_trans = L.Convolution1D(256, 128, 1) 56 | self.conv3_conf = L.Convolution1D(256, 128, 1) 57 | # conv4 58 | self.conv4_rot = L.Convolution1D(128, self.n_fg_class * 4, 1) 59 | self.conv4_trans = L.Convolution1D(128, self.n_fg_class * 3, 1) 60 | self.conv4_conf = L.Convolution1D(128, self.n_fg_class, 1) 61 | 62 | if pretrained_model is not None: 63 | chainer.serializers.load_npz(path, self) 64 | 65 | def __call__(self, img, pcd, pcd_indice): 66 | assert img.shape[0] == 1 67 | pcd_indice = pcd_indice.array[0] 68 | 69 | # resnet extractor 70 | h_img = self.resnet_extractor(img) 71 | # pspnet extractor 72 | h_img = self.pspnet_extractor(h_img) 73 | # posenet extractor 74 | B, C = h_img.shape[:2] 75 | h_img = h_img.reshape((B, C, -1)) 76 | h_img = h_img[:, :, pcd_indice] 77 | 78 | h = self.posenet_extractor(h_img, pcd) 79 | 80 | # conv1 81 | h_rot = F.relu(self.conv1_rot(h)) 82 | h_trans = F.relu(self.conv1_trans(h)) 83 | h_conf = F.relu(self.conv1_conf(h)) 84 | 85 | # conv2 86 | h_rot = F.relu(self.conv2_rot(h_rot)) 87 | h_trans = F.relu(self.conv2_trans(h_trans)) 88 | h_conf = F.relu(self.conv2_conf(h_conf)) 89 | # conv3 90 | h_rot = F.relu(self.conv3_rot(h_rot)) 91 | h_trans = F.relu(self.conv3_trans(h_trans)) 92 | h_conf = F.relu(self.conv3_conf(h_conf)) 93 | # conv4 94 | cls_rot = self.conv4_rot(h_rot) 95 | cls_trans = self.conv4_trans(h_trans) 96 | cls_conf = F.sigmoid(self.conv4_conf(h_conf)) 97 | 98 | cls_rot = cls_rot.reshape((B, self.n_fg_class, 4, self.n_point)) 99 | cls_trans = cls_trans.reshape((B, self.n_fg_class, 3, self.n_point)) 100 | cls_conf = cls_conf.reshape((B, self.n_fg_class, self.n_point)) 101 | return cls_rot, cls_trans, cls_conf, h_img 102 | 103 | def prepare(self, img): 104 | img = ((img - self.mean) / self.std).astype(np.float32, copy=False) 105 | return img 106 | 107 | def prepare_bb(self, bb, H, W): 108 | if bb[2] - bb[0] < 40 or bb[3] - bb[1] < 40: 109 | return None, None, None, None 110 | bb = bb.copy() 111 | bb[:2] = bb[:2].astype(np.int32) + 1 112 | bb[2:] = bb[2:].astype(np.int32) - 1 113 | bb = bb.astype(np.int32) 114 | bb_h = ((bb[2] - bb[0]) // 40 + 1) * 40 115 | bb_w = ((bb[3] - bb[1]) // 40 + 1) * 40 116 | bb_yc = ((bb[2] + bb[0]) / 2).astype(np.int32) 117 | bb_xc = ((bb[3] + bb[1]) / 2).astype(np.int32) 118 | ymin = bb_yc - (bb_h / 2).astype(np.int32) 119 | ymax = bb_yc + (bb_h / 2).astype(np.int32) 120 | xmin = bb_xc - (bb_w / 2).astype(np.int32) 121 | xmax = bb_xc + (bb_w / 2).astype(np.int32) 122 | if ymin < 0: 123 | ymax = ymax - ymin 124 | ymin = 0 125 | if ymax > H: 126 | ymin = ymin - ymax + H 127 | ymax = H 128 | if xmin < 0: 129 | xmax = xmax - xmin 130 | xmin = 0 131 | if xmax > W: 132 | xmin = xmin - xmax + W 133 | xmax = W 134 | return ymin, xmin, ymax, xmax 135 | 136 | def get_pcd_indice(self, depth, lbl_img, bb, bb_lbl): 137 | ymin, xmin, ymax, xmax = bb 138 | msk = np.logical_and(lbl_img == bb_lbl, depth != 0) 139 | pcd_indice = np.where(msk[ymin:ymax, xmin:xmax].flatten())[0] 140 | 141 | if len(pcd_indice) == 0: 142 | return None 143 | if len(pcd_indice) > self.n_point: 144 | pcd_indice_msk = np.zeros(len(pcd_indice), dtype=bool) 145 | pcd_indice_msk[:self.n_point] = True 146 | pcd_indice = pcd_indice[ 147 | np.random.permutation(pcd_indice_msk)] 148 | else: 149 | pcd_indice = np.pad( 150 | pcd_indice, 151 | (0, self.n_point - len(pcd_indice)), 'wrap') 152 | return pcd_indice 153 | 154 | def predict_each(self, masked_img, masked_pcd, pcd_indice, bb_lbl): 155 | with chainer.using_config('train', False), \ 156 | chainer.function.no_backprop_mode(): 157 | masked_img_var = chainer.Variable( 158 | self.xp.array(masked_img[None])) 159 | masked_pcd_var = chainer.Variable( 160 | self.xp.array(masked_pcd[None])) 161 | pcd_indice_var = chainer.Variable( 162 | self.xp.array(pcd_indice[None])) 163 | cls_rot, cls_trans, cls_conf, h_img = \ 164 | self.__call__( 165 | masked_img_var, masked_pcd_var, pcd_indice_var) 166 | 167 | # variable -> cpu array 168 | rot = cuda.to_cpu(cls_rot.array)[0, bb_lbl] 169 | trans = cuda.to_cpu(cls_trans.array)[0, bb_lbl] 170 | conf = cuda.to_cpu(cls_conf.array)[0, bb_lbl] 171 | 172 | # (B, C, 4, N) -> (N, 4) 173 | rot = rot.transpose((1, 0)) 174 | rot = rot / np.linalg.norm(rot, axis=1)[:, None] 175 | # (B, C, 3, N) -> (N, 3) 176 | trans = trans.transpose((1, 0)) 177 | trans = trans + masked_pcd.transpose((1, 0)) 178 | 179 | # get max conf value 180 | maxid = np.argmax(conf) 181 | max_rot = rot[maxid] 182 | max_trans = trans[maxid] 183 | max_conf = conf[maxid] 184 | return max_rot, max_trans, max_conf, h_img 185 | 186 | def predict(self, imgs, depths, lbl_imgs, bboxes, bbox_labels, intrinsics): 187 | prepared_imgs = [] 188 | for img in imgs: 189 | img = self.prepare(img.astype(np.float32)) 190 | prepared_imgs.append(img) 191 | 192 | poses = [] 193 | labels = [] 194 | scores = [] 195 | for img, depth, lbl_img, bbox, bbox_label, intrinsic in zip( 196 | prepared_imgs, depths, lbl_imgs, 197 | bboxes, bbox_labels, intrinsics): 198 | # generete organized pcd 199 | organized_pcd = generate_organized_pcd(depth, intrinsic) 200 | H, W = img.shape[1:] 201 | 202 | label = [] 203 | pose = [] 204 | score = [] 205 | for bb, bb_lbl in zip(bbox, bbox_label): 206 | if bb_lbl < 0: 207 | continue 208 | prepared_bb = self.prepare_bb(bb, H, W) 209 | if prepared_bb[0] is None: 210 | continue 211 | pcd_indice = self.get_pcd_indice( 212 | depth, lbl_img, prepared_bb, bb_lbl) 213 | if pcd_indice is None: 214 | continue 215 | 216 | ymin, xmin, ymax, xmax = prepared_bb 217 | pcd = organized_pcd[:, ymin:ymax, xmin:xmax].reshape((3, -1)) 218 | masked_img = img[:, ymin:ymax, xmin:xmax] 219 | masked_pcd = pcd[:, pcd_indice] 220 | rot, trans, conf, _ = self.predict_each( 221 | masked_img, masked_pcd, pcd_indice, bb_lbl) 222 | pse = generate_pose(rot, trans) 223 | 224 | pose.append(pse[None]) 225 | label.append(bb_lbl) 226 | score.append(conf) 227 | 228 | pose = np.concatenate(pose, axis=0) 229 | label = np.array(label) 230 | score = np.array(score) 231 | poses.append(pose) 232 | labels.append(label) 233 | scores.append(score) 234 | return poses, labels, scores 235 | 236 | 237 | class PoseNetExtractor(chainer.Chain): 238 | 239 | def __init__(self, n_point): 240 | super(PoseNetExtractor, self).__init__() 241 | with self.init_scope(): 242 | # conv1 243 | self.conv1_img = L.Convolution1D(32, 64, 1) 244 | self.conv1_pcd = L.Convolution1D(3, 64, 1) 245 | # conv2 246 | self.conv2_img = L.Convolution1D(64, 128, 1) 247 | self.conv2_pcd = L.Convolution1D(64, 128, 1) 248 | # conv3, conv4 249 | self.conv3 = L.Convolution1D(256, 512, 1) 250 | self.conv4 = L.Convolution1D(512, 1024, 1) 251 | 252 | self.n_point = n_point 253 | 254 | def __call__(self, h_img, pcd): 255 | B = h_img.shape[0] 256 | # conv1 257 | h_img = F.relu(self.conv1_img(h_img)) 258 | h_pcd = F.relu(self.conv1_pcd(pcd)) 259 | feat1 = F.concat((h_pcd, h_img), axis=1) 260 | # conv2 261 | h_img = F.relu(self.conv2_img(h_img)) 262 | h_pcd = F.relu(self.conv2_pcd(h_pcd)) 263 | feat2 = F.concat((h_pcd, h_img), axis=1) 264 | # conv3, conv4 265 | h = F.relu(self.conv3(feat2)) 266 | h = F.relu(self.conv4(h)) 267 | h = F.average_pooling_1d(h, self.n_point) 268 | h = h.reshape((B, 1024, 1)) 269 | feat3 = F.repeat(h, self.n_point, axis=2) 270 | feat = F.concat((feat1, feat2, feat3), axis=1) 271 | return feat 272 | -------------------------------------------------------------------------------- /chainer_dense_fusion/links/model/pspnet.py: -------------------------------------------------------------------------------- 1 | import chainer 2 | import chainer.functions as F 3 | import chainer.links as L 4 | import numpy as np 5 | 6 | 7 | class PSPNetExtractor(chainer.Chain): 8 | 9 | def __init__(self): 10 | super(PSPNetExtractor, self).__init__() 11 | sizes = [1, 2, 3, 6] 12 | with self.init_scope(): 13 | self.psp = PSPModule(512, 1024, sizes) 14 | # 1/8 -> 1/4 15 | self.up1 = PSPUpsample(1024, 256) 16 | # 1/4 -> 1/2 17 | self.up2 = PSPUpsample(256, 64) 18 | # 1/2 -> 1 19 | self.up3 = PSPUpsample(64, 64) 20 | self.conv1 = L.Convolution2D(64, 32, 1) 21 | 22 | def __call__(self, x): 23 | # psp module 24 | h = self.psp(x) 25 | h = F.dropout(h, 0.3) 26 | # upsample 27 | h = F.dropout(self.up1(h), 0.15) 28 | h = F.dropout(self.up2(h), 0.15) 29 | h = self.up3(h) 30 | # head 31 | h = self.conv1(h) 32 | feat = F.log_softmax(h) 33 | return feat 34 | 35 | 36 | class PSPModule(chainer.Chain): 37 | 38 | def __init__(self, in_channels, out_channels, sizes): 39 | super(PSPModule, self).__init__() 40 | with self.init_scope(): 41 | for i in range(len(sizes)): 42 | setattr( 43 | self, 'conv{}'.format(i+1), 44 | L.Convolution2D(in_channels, in_channels, 1, nobias=True)) 45 | self.bottleneck = L.Convolution2D( 46 | in_channels * (len(sizes) + 1), out_channels, 1) 47 | self.sizes = sizes 48 | 49 | def __call__(self, x): 50 | H, W = x.shape[2:] 51 | kh = H // np.array(self.sizes) 52 | kw = W // np.array(self.sizes) 53 | ksizes = list(zip(kh, kw)) 54 | 55 | # extract 56 | hs = [] 57 | for i, ksize in enumerate(ksizes): 58 | h = F.average_pooling_2d(x, ksize, ksize) 59 | h = getattr(self, 'conv{}'.format(i+1))(h) 60 | h = F.resize_images(h, (H, W)) 61 | hs.append(h) 62 | hs.append(x) 63 | h = F.relu(self.bottleneck(F.concat(hs, axis=1))) 64 | return h 65 | 66 | 67 | class PSPUpsample(chainer.Chain): 68 | 69 | def __init__(self, in_channels, out_channels): 70 | super(PSPUpsample, self).__init__() 71 | with self.init_scope(): 72 | self.conv = L.Convolution2D(in_channels, out_channels, 3, 1, pad=1) 73 | self.prelu = L.PReLU() 74 | 75 | def __call__(self, x): 76 | H, W = x.shape[2:] 77 | h = F.resize_images(x, (H*2, W*2)) 78 | h = self.prelu(self.conv(h)) 79 | return h 80 | -------------------------------------------------------------------------------- /chainer_dense_fusion/links/model/resnet.py: -------------------------------------------------------------------------------- 1 | import chainer 2 | import chainer.functions as F 3 | import chainer.links as L 4 | 5 | 6 | class ResNet18Extractor(chainer.Chain): 7 | 8 | def __init__(self): 9 | super(ResNet18Extractor, self).__init__() 10 | with self.init_scope(): 11 | self.conv1 = L.Convolution2D(3, 64, 7, 2, 3, nobias=True) 12 | self.res2 = ResBlock(2, 64, 64, 1, 1, residual_conv=False) 13 | self.res3 = ResBlock(2, 64, 128, 2, 1) 14 | self.res4 = ResBlock(2, 128, 256, 1, 2) 15 | self.res5 = ResBlock(2, 256, 512, 1, 4) 16 | 17 | def __call__(self, x): 18 | # 1 -> 1/2 19 | h = F.relu(self.conv1(x)) 20 | # 1/2 -> 1/4 21 | h = F.max_pooling_2d(h, ksize=3, stride=2, pad=1, cover_all=False) 22 | # 1/4 -> 1/8 23 | h = self.res2(h) 24 | h = self.res3(h) 25 | h = self.res4(h) 26 | h = self.res5(h) 27 | return h 28 | 29 | 30 | class ResBlock(chainer.Chain): 31 | 32 | def __init__(self, n_layer, in_channels, out_channels, 33 | stride, dilate, residual_conv=True): 34 | super(ResBlock, self).__init__() 35 | with self.init_scope(): 36 | self.a = Bottleneck( 37 | in_channels, out_channels, stride, 1, 38 | residual_conv=residual_conv) 39 | for i in range(n_layer - 1): 40 | name = 'b{}'.format(i + 1) 41 | bottleneck = Bottleneck( 42 | out_channels, out_channels, 1, dilate, 43 | residual_conv=False) 44 | setattr(self, name, bottleneck) 45 | self.n_layer = n_layer 46 | 47 | def __call__(self, x): 48 | h = self.a(x) 49 | for i in range(self.n_layer - 1): 50 | h = getattr(self, 'b{}'.format(i + 1))(h) 51 | return h 52 | 53 | 54 | class Bottleneck(chainer.Chain): 55 | 56 | def __init__(self, in_channels, out_channels, stride, dilate, 57 | initialW=None, residual_conv=False): 58 | super(Bottleneck, self).__init__() 59 | with self.init_scope(): 60 | # pad = dilate 61 | self.conv1 = L.Convolution2D( 62 | in_channels, out_channels, 3, stride, 63 | pad=dilate, dilate=dilate, nobias=True) 64 | self.conv2 = L.Convolution2D( 65 | out_channels, out_channels, 3, 1, 66 | pad=dilate, dilate=dilate, nobias=True) 67 | if residual_conv: 68 | self.residual_conv = L.Convolution2D( 69 | in_channels, out_channels, 1, stride, 70 | nobias=True) 71 | 72 | def __call__(self, x): 73 | h = F.relu(self.conv1(x)) 74 | h = self.conv2(h) 75 | 76 | if hasattr(self, 'residual_conv'): 77 | residual = self.residual_conv(x) 78 | else: 79 | residual = x 80 | h = h + residual 81 | h = F.relu(h) 82 | return h 83 | -------------------------------------------------------------------------------- /chainer_dense_fusion/utils.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | 4 | def generate_organized_pcd(depth, intrinsic): 5 | H, W = depth.shape 6 | fx, fy, cx, cy = intrinsic 7 | xmap = np.repeat(np.arange(H)[:, None], W, 1).astype(np.float32) 8 | ymap = np.repeat(np.arange(W)[None], H, 0).astype(np.float32) 9 | pcd_x = (ymap - cx) * depth / fx 10 | pcd_y = (xmap - cy) * depth / fy 11 | organized_pcd = np.concatenate( 12 | (pcd_x[None], pcd_y[None], depth[None]), axis=0) 13 | return organized_pcd 14 | 15 | 16 | def generate_pose(rot, trans): 17 | pose = quaternion_to_rotation_matrix(rot) 18 | pose[3, :3] = trans 19 | return pose 20 | 21 | 22 | def quaternion_to_rotation_matrix(quat): 23 | q = quat.copy() 24 | n = np.dot(q, q) 25 | if n < np.finfo(q.dtype).eps: 26 | return np.identity(4) 27 | q = q * np.sqrt(2.0 / n) 28 | q = np.outer(q, q) 29 | rot_matrix = np.array( 30 | [[1.0 - q[2, 2] - q[3, 3], q[1, 2] + q[3, 0], q[1, 3] - q[2, 0], 0.0], 31 | [q[1, 2] - q[3, 0], 1.0 - q[1, 1] - q[3, 3], q[2, 3] + q[1, 0], 0.0], 32 | [q[1, 3] + q[2, 0], q[2, 3] - q[1, 0], 1.0 - q[1, 1] - q[2, 2], 0.0], 33 | [0.0, 0.0, 0.0, 1.0]], 34 | dtype=q.dtype) 35 | return rot_matrix 36 | -------------------------------------------------------------------------------- /chainer_dense_fusion/visualizations/__init__.py: -------------------------------------------------------------------------------- 1 | from chainer_dense_fusion.visualizations.vis_6d_pose_estimation import vis_6d_pose_estimation # NOQA 2 | -------------------------------------------------------------------------------- /chainer_dense_fusion/visualizations/vis_6d_pose_estimation.py: -------------------------------------------------------------------------------- 1 | import copy 2 | import numpy as np 3 | 4 | from chainercv.visualizations.colormap import voc_colormap 5 | 6 | import open3d 7 | 8 | 9 | flip_rot_matrix = np.array( 10 | [[1, 0, 0, 0], 11 | [0, -1, 0, 0], 12 | [0, 0, -1, 0], 13 | [0, 0, 0, 1]], 14 | dtype=np.float32) 15 | 16 | 17 | def vis_6d_pose_estimation(camera_pcd, object_pcds, pose): 18 | pcds = [] 19 | pcd = copy.deepcopy(camera_pcd) 20 | pcd.transform(flip_rot_matrix) 21 | pcds.append(pcd) 22 | 23 | obj_pcds = copy.deepcopy(object_pcds) 24 | colors = voc_colormap(list(range(1, len(pose) + 1))) 25 | for obj_pcd, pse, color in zip(obj_pcds, pose, colors): 26 | obj_pcd.paint_uniform_color(color) 27 | obj_pcd.transform(pse.transpose((1, 0))) 28 | obj_pcd.transform(flip_rot_matrix) 29 | pcds.append(obj_pcd) 30 | open3d.draw_geometries(pcds) 31 | -------------------------------------------------------------------------------- /examples/dense_fusion/README.md: -------------------------------------------------------------------------------- 1 | # 6D Pose Estimation with YCB Video Dataset 2 | 3 | ## Note 4 | 5 | You need to download data below manually. 6 | - Download [YCB Video Dataset](https://drive.google.com/uc?id=1if4VoEXNx9W3XCn0Y7Fp15B4GpcYbyYi) in `~/.chainer/dataset/pfnet/chainer-dense-fusion/ycb`. 7 | - Download [PoseCNN results](https://github.com/yuxng/YCB_Video_toolbox/raw/master/results_PoseCNN_RSS2018.zip) in `~/.chainer/dataset/pfnet/chainer-dense-fusion/YCB_Video_toolbox` 8 | 9 | ## Inference 10 | 11 | ### Converted Model 12 | Converted model of Dense Fusion can be dowloaded [here](https://github.com/knorth55/chainer-dense-fusion/releases/download/v0.0.1/dense_fusion_ycb_converted_2019_02_03.npz) and 13 | the one of PoseNet can be dowloaded [here](https://github.com/knorth55/chainer-dense-fusion/releases/download/v0.0.0/posenet_ycb_converted_2019_02_01.npz). 14 | 15 | This model is converted from a model trained with original repository. 16 | 17 | ### Command for Dense Fusion 18 | 19 | ```bash 20 | python demo.py --gpu --random 21 | ``` 22 | ![Example](../../_static/example.png) 23 | 24 | 25 | ### Command for PoseNet (No iterative refiner) 26 | 27 | You can try Dense Fusion with no iterative refiner with command below. 28 | 29 | ```bash 30 | python demo.py --gpu --random --no-refiner 31 | ``` 32 | ![Example](../../_static/example_no_refine.png) 33 | 34 | 35 | ## Model conversion 36 | 37 | Convert PyTorch model to chainer model. 38 | 39 | ### Dense Fusion 40 | 41 | ```bash 42 | python pth2npz.py --out 43 | ``` 44 | 45 | ### PoseNet (No iterative refiner) 46 | 47 | ```bash 48 | python pth2npz_posenet.py --out 49 | ``` 50 | -------------------------------------------------------------------------------- /examples/dense_fusion/demo.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import random 3 | 4 | from chainer.backends import cuda 5 | 6 | from chainer_dense_fusion.datasets.ycb import YCBVideoDatasetPoseCNNSegmented 7 | from chainer_dense_fusion.links.model import DenseFusion 8 | from chainer_dense_fusion.links.model import PoseNet 9 | from chainer_dense_fusion.visualizations import vis_6d_pose_estimation 10 | 11 | 12 | def main(): 13 | parser = argparse.ArgumentParser() 14 | parser.add_argument('--no-refiner', action='store_true') 15 | parser.add_argument('--pretrained-model') 16 | parser.add_argument('--random', action='store_true') 17 | parser.add_argument('--gpu', type=int, default=0) 18 | args = parser.parse_args() 19 | 20 | # dataset 21 | dataset = YCBVideoDatasetPoseCNNSegmented(split='val') 22 | ids = list(range(len(dataset))) 23 | if args.random: 24 | random.shuffle(ids) 25 | 26 | # model 27 | if args.pretrained_model is None: 28 | args.pretrained_model = 'ycb_converted' 29 | if args.no_refiner: 30 | model = PoseNet( 31 | pretrained_model=args.pretrained_model, 32 | n_fg_class=len(dataset.label_names), 33 | n_point=1000) 34 | else: 35 | model = DenseFusion( 36 | pretrained_model=args.pretrained_model, 37 | n_fg_class=len(dataset.label_names), 38 | n_point=1000, n_iter=2) 39 | 40 | if args.gpu >= 0: 41 | cuda.get_device_from_id(args.gpu).use() 42 | model.to_gpu() 43 | 44 | for i in ids: 45 | img, depth, lbl_img, bbox, bbox_label, _, _, intrinsic = dataset[i] 46 | poses, labels, _ = model.predict( 47 | [img], [depth], [lbl_img], [bbox], [bbox_label], [intrinsic]) 48 | pose = poses[0] 49 | label = labels[0] 50 | 51 | camera_pcd = dataset.get_camera_pcd(i) 52 | object_pcds = [] 53 | for lbl in label: 54 | object_pcds.append(dataset.get_object_pcd(lbl)) 55 | vis_6d_pose_estimation( 56 | camera_pcd, object_pcds, pose) 57 | 58 | 59 | if __name__ == '__main__': 60 | main() 61 | -------------------------------------------------------------------------------- /examples/dense_fusion/pth2npz.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import warnings 3 | 4 | import chainer 5 | import torch 6 | 7 | from chainer_dense_fusion.links.model import DenseFusion 8 | 9 | from pth2npz_posenet import copy_layer 10 | from pth2npz_posenet import posenet_torch2chainer 11 | 12 | 13 | def refiner_torch2chainer(model, params): 14 | rtc_dict = {'r': 'rot', 't': 'trans', 'c': 'conf'} 15 | emb_dict = {'e_conv': 'img', 'conv': 'pcd'} 16 | param_names = list(params.keys()) 17 | uncopied_param_names = param_names.copy() 18 | for param_name in param_names: 19 | # pose net conv 20 | if param_name.startswith('conv'): 21 | param_layer_name, param_type = param_name.split('.') 22 | layer_num = int(param_layer_name[4]) 23 | layer_type = rtc_dict[param_layer_name[-1]] 24 | layer = getattr(model, 'conv{}_{}'.format(layer_num, layer_type)) 25 | copy_layer(layer, params, param_name, param_type) 26 | uncopied_param_names.remove(param_name) 27 | # pose refine net extractor 28 | if param_name.startswith('feat'): 29 | param_layer_name, param_type = param_name.split('.')[1:] 30 | layer_num = int(param_layer_name[-1]) 31 | if layer_num in [1, 2]: 32 | layer_type = emb_dict[param_layer_name[:-1]] 33 | layer_name = 'conv{}_{}'.format(layer_num, layer_type) 34 | elif layer_num in [5, 6]: 35 | layer_name = 'conv{}'.format(layer_num - 2) 36 | else: 37 | raise ValueError( 38 | 'param: {} is not supported'.format(param_name)) 39 | layer = getattr(model.extractor, layer_name) 40 | copy_layer(layer, params, param_name, param_type) 41 | uncopied_param_names.remove(param_name) 42 | 43 | if len(uncopied_param_names) > 0: 44 | warnings.warn('Some params are not copied:') 45 | for param_name in uncopied_param_names: 46 | print('param_name: {} not copied'.format(param_name)) 47 | else: 48 | print('All valid parameter are copied.') 49 | 50 | 51 | def main(): 52 | parser = argparse.ArgumentParser() 53 | parser.add_argument('--out', '-o', type=str, default=None) 54 | parser.add_argument('estimator_pthfile', type=str) 55 | parser.add_argument('refiner_pthfile', type=str) 56 | args = parser.parse_args() 57 | 58 | chainer_model = DenseFusion( 59 | n_fg_class=21, n_point=1000) 60 | print('start loading estimator params') 61 | estimator_torch_params = torch.load(args.estimator_pthfile) 62 | print('finish loading estimator params') 63 | print('start copying estimator params') 64 | posenet_torch2chainer( 65 | chainer_model.posenet, estimator_torch_params) 66 | print('finish copying estimator params') 67 | print('start loading estimator params') 68 | refiner_torch_params = torch.load(args.refiner_pthfile) 69 | print('finish loading refiner params') 70 | print('start copying refiner params') 71 | refiner_torch2chainer( 72 | chainer_model.refiner, refiner_torch_params) 73 | print('finish copying refiner params') 74 | if args.out is None: 75 | args.out = 'dense_fusion_ycb_converted.npz' 76 | 77 | print('start saving npz') 78 | chainer.serializers.save_npz(args.out, chainer_model) 79 | print('finish saving npz') 80 | 81 | 82 | if __name__ == '__main__': 83 | main() 84 | -------------------------------------------------------------------------------- /examples/dense_fusion/pth2npz_posenet.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import numpy as np 3 | import warnings 4 | 5 | import chainer 6 | import torch 7 | 8 | from chainer_dense_fusion.links.model import PoseNet 9 | 10 | 11 | def copy_layer(layer, params, param_name, param_type): 12 | param = np.asarray(params[param_name]) 13 | if param_type == 'weight': 14 | assert layer.W.array.shape == param.shape, param_name 15 | layer.W.array[:] = param 16 | elif param_type == 'bias': 17 | assert layer.b.array.shape == param.shape, param_name 18 | layer.b.array[:] = param 19 | else: 20 | raise ValueError( 21 | 'param_name: {} is not supported'.format(param_name)) 22 | # print('param_name: {} copied'.format(param_name)) 23 | 24 | 25 | def posenet_torch2chainer(model, params): 26 | rtc_dict = {'r': 'rot', 't': 'trans', 'c': 'conf'} 27 | emb_dict = {'e_conv': 'img', 'conv': 'pcd'} 28 | param_names = list(params.keys()) 29 | uncopied_param_names = param_names.copy() 30 | for param_name in param_names: 31 | # pose net conv 32 | if param_name.startswith('conv'): 33 | param_layer_name, param_type = param_name.split('.') 34 | layer_num = int(param_layer_name[4]) 35 | layer_type = rtc_dict[param_layer_name[-1]] 36 | layer = getattr(model, 'conv{}_{}'.format(layer_num, layer_type)) 37 | copy_layer(layer, params, param_name, param_type) 38 | uncopied_param_names.remove(param_name) 39 | # pose net extractor 40 | elif param_name.startswith('feat'): 41 | param_layer_name, param_type = param_name.split('.')[1:] 42 | layer_num = int(param_layer_name[-1]) 43 | if layer_num in [1, 2]: 44 | layer_type = emb_dict[param_layer_name[:-1]] 45 | layer_name = 'conv{}_{}'.format(layer_num, layer_type) 46 | elif layer_num in [5, 6]: 47 | layer_name = 'conv{}'.format(layer_num - 2) 48 | else: 49 | raise ValueError( 50 | 'param: {} is not supported'.format(param_name)) 51 | layer = getattr(model.posenet_extractor, layer_name) 52 | copy_layer(layer, params, param_name, param_type) 53 | uncopied_param_names.remove(param_name) 54 | # pspnet classifier 55 | elif param_name.startswith('cnn.model.module.classifier'): 56 | uncopied_param_names.remove(param_name) 57 | # pspnet conv1 58 | elif param_name.startswith('cnn.model.module.final'): 59 | layer = model.pspnet_extractor.conv1 60 | param_type = param_name.split('.')[-1] 61 | copy_layer(layer, params, param_name, param_type) 62 | uncopied_param_names.remove(param_name) 63 | # pspnet upsample 64 | elif param_name.startswith('cnn.model.module.up'): 65 | param_module_name, _, layer_num, param_type = \ 66 | param_name.split('.')[3:] 67 | module_num = int(param_module_name[-1]) 68 | module_name = 'up{}'.format(module_num) 69 | layer_num = int(layer_num) 70 | if layer_num == 1: 71 | layer_name = 'conv' 72 | layer = getattr( 73 | getattr(model.pspnet_extractor, module_name), layer_name) 74 | copy_layer(layer, params, param_name, param_type) 75 | uncopied_param_names.remove(param_name) 76 | elif layer_num == 2: 77 | layer_name = 'prelu' 78 | layer = getattr( 79 | getattr(model.pspnet_extractor, module_name), layer_name) 80 | param = np.asarray(params[param_name]) 81 | layer.W.array = np.array(param[0], dtype=np.float32) 82 | uncopied_param_names.remove(param_name) 83 | else: 84 | raise ValueError( 85 | 'param: {} is not supported'.format(param_name)) 86 | # pspnet bottleneck 87 | elif param_name.startswith('cnn.model.module.psp.bottleneck'): 88 | param_type = param_name.split('.')[-1] 89 | layer = model.pspnet_extractor.psp.bottleneck 90 | copy_layer(layer, params, param_name, param_type) 91 | uncopied_param_names.remove(param_name) 92 | # pspnet stages 93 | elif param_name.startswith('cnn.model.module.psp.stages'): 94 | layer_num, _, param_type = param_name.split('.')[5:] 95 | layer_num = int(layer_num) + 1 96 | layer = getattr( 97 | model.pspnet_extractor.psp, 'conv{}'.format(layer_num)) 98 | copy_layer(layer, params, param_name, param_type) 99 | uncopied_param_names.remove(param_name) 100 | # pspnet resnet conv1 101 | elif param_name.startswith('cnn.model.module.feats.conv1'): 102 | param_type = param_name.split('.')[-1] 103 | layer = model.resnet_extractor.conv1 104 | copy_layer(layer, params, param_name, param_type) 105 | uncopied_param_names.remove(param_name) 106 | # pspnet resnet2-5 107 | elif param_name.startswith('cnn.model.module.feats.layer'): 108 | if param_name.split('.')[6].startswith('conv'): 109 | param_resblock_name, block_num, layer_name, param_type = \ 110 | param_name.split('.')[4:] 111 | elif param_name.split('.')[6].startswith('downsample'): 112 | param_resblock_name, block_num, _, _, param_type = \ 113 | param_name.split('.')[4:] 114 | layer_name = 'residual_conv' 115 | else: 116 | raise ValueError( 117 | 'param: {} is not supported'.format(param_name)) 118 | resblock_num = int(param_resblock_name[-1]) + 1 119 | resblock = getattr( 120 | model.resnet_extractor, 'res{}'.format(resblock_num)) 121 | block_num = int(block_num) 122 | if block_num == 0: 123 | block_name = 'a' 124 | else: 125 | block_name = 'b{}'.format(block_num) 126 | block = getattr(resblock, block_name) 127 | layer = getattr(block, layer_name) 128 | copy_layer(layer, params, param_name, param_type) 129 | uncopied_param_names.remove(param_name) 130 | 131 | if len(uncopied_param_names) > 0: 132 | warnings.warn('Some params are not copied:') 133 | for param_name in uncopied_param_names: 134 | print('param_name: {} not copied'.format(param_name)) 135 | else: 136 | print('All valid parameter are copied.') 137 | 138 | 139 | def main(): 140 | parser = argparse.ArgumentParser() 141 | parser.add_argument('--out', '-o', type=str, default=None) 142 | parser.add_argument('pthfile', type=str) 143 | args = parser.parse_args() 144 | 145 | chainer_model = PoseNet( 146 | n_fg_class=21, n_point=1000) 147 | print('start loading params') 148 | torch_params = torch.load(args.pthfile) 149 | print('finish loading params') 150 | print('start copying params') 151 | posenet_torch2chainer(chainer_model, torch_params) 152 | print('finish copying params') 153 | if args.out is None: 154 | outpath = 'posenet_ycb_converted.npz' 155 | else: 156 | outpath = args.out 157 | print('start saving npz') 158 | chainer.serializers.save_npz(outpath, chainer_model) 159 | print('finish saving npz') 160 | 161 | 162 | if __name__ == '__main__': 163 | main() 164 | -------------------------------------------------------------------------------- /examples/ycb/README.md: -------------------------------------------------------------------------------- 1 | # YCB Video Dataset 2 | 3 | ## Visualize dataset 4 | 5 | ```bash 6 | $ python visualize_dataset.py --help 7 | usage: visualize_dataset.py [-h] [--random] [--cad] 8 | 9 | optional arguments: 10 | -h, --help show this help message and exit 11 | --random 12 | --cad 13 | ``` 14 | -------------------------------------------------------------------------------- /examples/ycb/visualize_dataset.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import random 3 | 4 | from chainer_dense_fusion.datasets.ycb import YCBVideoDataset 5 | 6 | 7 | def main(): 8 | parser = argparse.ArgumentParser() 9 | parser.add_argument('--random', action='store_true') 10 | parser.add_argument('--cad', action='store_true') 11 | args = parser.parse_args() 12 | 13 | dataset = YCBVideoDataset(split='val') 14 | ids = list(range(len(dataset))) 15 | if args.random: 16 | random.shuffle(ids) 17 | 18 | for i in ids: 19 | if args.cad: 20 | dataset.visualize_3d(i) 21 | else: 22 | dataset.visualize(i) 23 | 24 | 25 | if __name__ == '__main__': 26 | main() 27 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | chainer 2 | chainercv 3 | cython 4 | numpy 5 | open3d-python 6 | scipy 7 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import find_packages 2 | from setuptools import setup 3 | 4 | 5 | version = '0.0.0' 6 | 7 | 8 | setup( 9 | name='chainer_dense_fusion', 10 | version=version, 11 | packages=find_packages(), 12 | install_requires=open('requirements.txt').readlines(), 13 | description='', 14 | long_description=open('README.md').read(), 15 | author='Shingo Kitagawa', 16 | author_email='shingogo.5511@gmail.com', 17 | url='https://github.com/knorth55/chainer-dense-fusion', 18 | license='MIT', 19 | keywords='machine-learning', 20 | ) 21 | --------------------------------------------------------------------------------