├── .gitignore ├── 300000.pth ├── LICENSE ├── README.md ├── data └── nerf_synthetic │ └── lego │ ├── train │ ├── r_0.png │ ├── r_1.png │ ├── r_10.png │ ├── r_11.png │ ├── r_12.png │ ├── r_13.png │ ├── r_14.png │ ├── r_15.png │ ├── r_16.png │ ├── r_17.png │ ├── r_18.png │ ├── r_19.png │ ├── r_2.png │ ├── r_20.png │ ├── r_21.png │ ├── r_22.png │ ├── r_23.png │ ├── r_24.png │ ├── r_25.png │ ├── r_26.png │ ├── r_27.png │ ├── r_28.png │ ├── r_29.png │ ├── r_3.png │ ├── r_30.png │ ├── r_31.png │ ├── r_32.png │ ├── r_33.png │ ├── r_34.png │ ├── r_35.png │ ├── r_36.png │ ├── r_37.png │ ├── r_38.png │ ├── r_39.png │ ├── r_4.png │ ├── r_40.png │ ├── r_41.png │ ├── r_42.png │ ├── r_43.png │ ├── r_44.png │ ├── r_45.png │ ├── r_46.png │ ├── r_47.png │ ├── r_48.png │ ├── r_49.png │ ├── r_5.png │ ├── r_50.png │ ├── r_51.png │ ├── r_52.png │ ├── r_53.png │ ├── r_54.png │ ├── r_55.png │ ├── r_56.png │ ├── r_57.png │ ├── r_58.png │ ├── r_59.png │ ├── r_6.png │ ├── r_60.png │ ├── r_61.png │ ├── r_62.png │ ├── r_63.png │ ├── r_64.png │ ├── r_65.png │ ├── r_66.png │ ├── r_67.png │ ├── r_68.png │ ├── r_69.png │ ├── r_7.png │ ├── r_70.png │ ├── r_71.png │ ├── r_72.png │ ├── r_73.png │ ├── r_74.png │ ├── r_75.png │ ├── r_76.png │ ├── r_77.png │ ├── r_78.png │ ├── r_79.png │ ├── r_8.png │ ├── r_80.png │ ├── r_81.png │ ├── r_82.png │ ├── r_83.png │ ├── r_84.png │ ├── r_85.png │ ├── r_86.png │ ├── r_87.png │ ├── r_88.png │ ├── r_89.png │ ├── r_9.png │ ├── r_90.png │ ├── r_91.png │ ├── r_92.png │ ├── r_93.png │ ├── r_94.png │ ├── r_95.png │ ├── r_96.png │ ├── r_97.png │ ├── r_98.png │ └── r_99.png │ └── transforms_train.json ├── imgs-full-demo ├── 1000.png ├── 10000.png ├── 100000.png ├── 1500.png ├── 15000.png ├── 20000.png ├── 200000.png ├── 300000.png ├── 500.png ├── 5000.png └── 50000.png ├── rotate360 ├── 000.png ├── 001.png ├── 007.png ├── 008.png ├── 015.png ├── 022.png └── 023.png └── train-nerf.py /.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 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | /videos 131 | /imgs 132 | /ckpt -------------------------------------------------------------------------------- /300000.pth: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/300000.pth -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 手写AI 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 | # Get Start 2 | 1. Run train `python train-nerf.py --half-resolution` 3 | 4 | # Run Demo 5 | 1. Run `python train-nerf.py --make-video360` 6 | - Produce a video with 360 degree rendering 7 | 8 | # Demo 9 | ![](rotate360/008.png) 10 | 11 | # Reference 12 | 1. https://github.com/bmild/nerf 13 | 2. https://github.com/yenchenlin/nerf-pytorch 14 | -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_0.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_1.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_10.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_11.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_12.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_13.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_14.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_15.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_16.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_17.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_18.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_19.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_2.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_20.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_21.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_22.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_23.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_24.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_25.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_26.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_27.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_28.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_29.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_3.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_30.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_31.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_32.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_33.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_34.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_35.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_36.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_37.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_38.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_39.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_4.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_40.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_41.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_42.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_43.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_44.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_45.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_46.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_47.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_48.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_49.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_5.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_50.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_51.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_52.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_53.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_54.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_55.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_56.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_57.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_58.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_59.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_6.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_60.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_61.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_62.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_63.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_64.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_65.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_65.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_66.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_67.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_68.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_68.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_69.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_7.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_70.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_71.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_72.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_73.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_74.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_75.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_76.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_77.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_78.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_78.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_79.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_8.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_80.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_81.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_82.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_82.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_83.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_84.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_84.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_85.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_86.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_87.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_88.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_89.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_89.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_9.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_90.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_91.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_92.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_93.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_93.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_94.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_94.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_95.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_95.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_96.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_97.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_97.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_98.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/train/r_99.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/data/nerf_synthetic/lego/train/r_99.png -------------------------------------------------------------------------------- /data/nerf_synthetic/lego/transforms_train.json: -------------------------------------------------------------------------------- 1 | { 2 | "camera_angle_x": 0.6911112070083618, 3 | "frames": [ 4 | { 5 | "file_path": "./train/r_0", 6 | "rotation": 0.012566370614359171, 7 | "transform_matrix": [ 8 | [ 9 | -0.9999021887779236, 10 | 0.004192245192825794, 11 | -0.013345719315111637, 12 | -0.05379832163453102 13 | ], 14 | [ 15 | -0.013988681137561798, 16 | -0.2996590733528137, 17 | 0.95394366979599, 18 | 3.845470428466797 19 | ], 20 | [ 21 | -4.656612873077393e-10, 22 | 0.9540371894836426, 23 | 0.29968830943107605, 24 | 1.2080823183059692 25 | ], 26 | [ 27 | 0.0, 28 | 0.0, 29 | 0.0, 30 | 1.0 31 | ] 32 | ] 33 | }, 34 | { 35 | "file_path": "./train/r_1", 36 | "rotation": 0.012566370614359171, 37 | "transform_matrix": [ 38 | [ 39 | -0.9305422306060791, 40 | 0.11707554012537003, 41 | -0.34696459770202637, 42 | -1.398659110069275 43 | ], 44 | [ 45 | -0.3661845624446869, 46 | -0.29751041531562805, 47 | 0.8817007541656494, 48 | 3.5542497634887695 49 | ], 50 | [ 51 | 7.450580596923828e-09, 52 | 0.9475130438804626, 53 | 0.3197172284126282, 54 | 1.2888214588165283 55 | ], 56 | [ 57 | 0.0, 58 | 0.0, 59 | 0.0, 60 | 1.0 61 | ] 62 | ] 63 | }, 64 | { 65 | "file_path": "./train/r_2", 66 | "rotation": 0.012566370614359171, 67 | "transform_matrix": [ 68 | [ 69 | 0.4429636299610138, 70 | 0.31377720832824707, 71 | -0.8398374915122986, 72 | -3.385493516921997 73 | ], 74 | [ 75 | -0.8965396881103516, 76 | 0.1550314873456955, 77 | -0.41494810581207275, 78 | -1.6727094650268555 79 | ], 80 | [ 81 | 0.0, 82 | 0.936754584312439, 83 | 0.3499869406223297, 84 | 1.4108426570892334 85 | ], 86 | [ 87 | 0.0, 88 | 0.0, 89 | 0.0, 90 | 1.0 91 | ] 92 | ] 93 | }, 94 | { 95 | "file_path": "./train/r_3", 96 | "rotation": 0.012566370614359171, 97 | "transform_matrix": [ 98 | [ 99 | 0.7956318259239197, 100 | 0.5209260582923889, 101 | -0.3092023432254791, 102 | -1.2464345693588257 103 | ], 104 | [ 105 | -0.6057805418968201, 106 | 0.6841840147972107, 107 | -0.40610620379447937, 108 | -1.6370664834976196 109 | ], 110 | [ 111 | -1.4901161193847656e-08, 112 | 0.5104197859764099, 113 | 0.859925389289856, 114 | 3.4664700031280518 115 | ], 116 | [ 117 | 0.0, 118 | 0.0, 119 | 0.0, 120 | 1.0 121 | ] 122 | ] 123 | }, 124 | { 125 | "file_path": "./train/r_4", 126 | "rotation": 0.012566370614359171, 127 | "transform_matrix": [ 128 | [ 129 | -0.6566542387008667, 130 | -0.2367822825908661, 131 | 0.7160581946372986, 132 | 2.8865230083465576 133 | ], 134 | [ 135 | 0.7541918158531189, 136 | -0.20615987479686737, 137 | 0.623452365398407, 138 | 2.513216972351074 139 | ], 140 | [ 141 | -1.4901162970204496e-08, 142 | 0.9494377970695496, 143 | 0.31395500898361206, 144 | 1.26559317111969 145 | ], 146 | [ 147 | 0.0, 148 | 0.0, 149 | 0.0, 150 | 1.0 151 | ] 152 | ] 153 | }, 154 | { 155 | "file_path": "./train/r_5", 156 | "rotation": 0.012566370614359171, 157 | "transform_matrix": [ 158 | [ 159 | -0.12173833698034286, 160 | 0.6862695217132568, 161 | -0.7170870900154114, 162 | -2.8906705379486084 163 | ], 164 | [ 165 | -0.9925621747970581, 166 | -0.084171362221241, 167 | 0.08795115351676941, 168 | 0.35454243421554565 169 | ], 170 | [ 171 | 0.0, 172 | 0.7224606275558472, 173 | 0.691412091255188, 174 | 2.7871713638305664 175 | ], 176 | [ 177 | 0.0, 178 | 0.0, 179 | 0.0, 180 | 1.0 181 | ] 182 | ] 183 | }, 184 | { 185 | "file_path": "./train/r_6", 186 | "rotation": 0.012566370614359171, 187 | "transform_matrix": [ 188 | [ 189 | 0.6570732593536377, 190 | -0.5113321542739868, 191 | 0.5538899898529053, 192 | 2.232801914215088 193 | ], 194 | [ 195 | 0.7538267374038696, 196 | 0.44570285081863403, 197 | -0.48279836773872375, 198 | -1.9462224245071411 199 | ], 200 | [ 201 | -1.4901161193847656e-08, 202 | 0.7347709536552429, 203 | 0.6783152222633362, 204 | 2.7343761920928955 205 | ], 206 | [ 207 | 0.0, 208 | 0.0, 209 | 0.0, 210 | 1.0 211 | ] 212 | ] 213 | }, 214 | { 215 | "file_path": "./train/r_7", 216 | "rotation": 0.012566370614359171, 217 | "transform_matrix": [ 218 | [ 219 | 0.9045065641403198, 220 | 0.42524266242980957, 221 | -0.03219788148999214, 222 | -0.12979382276535034 223 | ], 224 | [ 225 | -0.426459938287735, 226 | 0.9019248485565186, 227 | -0.0682905837893486, 228 | -0.2752881646156311 229 | ], 230 | [ 231 | 0.0, 232 | 0.07550014555454254, 233 | 0.9971457123756409, 234 | 4.019623279571533 235 | ], 236 | [ 237 | 0.0, 238 | 0.0, 239 | 0.0, 240 | 1.0 241 | ] 242 | ] 243 | }, 244 | { 245 | "file_path": "./train/r_8", 246 | "rotation": 0.012566370614359171, 247 | "transform_matrix": [ 248 | [ 249 | 0.159989595413208, 250 | 0.33046624064445496, 251 | -0.930158793926239, 252 | -3.7495899200439453 253 | ], 254 | [ 255 | -0.9871187806129456, 256 | 0.053561095148324966, 257 | -0.15075767040252686, 258 | -0.607723593711853 259 | ], 260 | [ 261 | 0.0, 262 | 0.9422966837882996, 263 | 0.33477866649627686, 264 | 1.3495359420776367 265 | ], 266 | [ 267 | 0.0, 268 | 0.0, 269 | 0.0, 270 | 1.0 271 | ] 272 | ] 273 | }, 274 | { 275 | "file_path": "./train/r_9", 276 | "rotation": 0.012566370614359171, 277 | "transform_matrix": [ 278 | [ 279 | -0.23337772488594055, 280 | 0.44256603717803955, 281 | -0.8658348917961121, 282 | -3.4902923107147217 283 | ], 284 | [ 285 | -0.9723862409591675, 286 | -0.1062181368470192, 287 | 0.2078048586845398, 288 | 0.8376882672309875 289 | ], 290 | [ 291 | 7.450581485102248e-09, 292 | 0.8904228806495667, 293 | 0.45513397455215454, 294 | 1.834703803062439 295 | ], 296 | [ 297 | 0.0, 298 | 0.0, 299 | 0.0, 300 | 1.0 301 | ] 302 | ] 303 | }, 304 | { 305 | "file_path": "./train/r_10", 306 | "rotation": 0.012566370614359171, 307 | "transform_matrix": [ 308 | [ 309 | 0.5218667387962341, 310 | 0.18684424459934235, 311 | -0.8323126435279846, 312 | -3.3551595211029053 313 | ], 314 | [ 315 | -0.8530270457267761, 316 | 0.1143079623579979, 317 | -0.509194016456604, 318 | -2.052626848220825 319 | ], 320 | [ 321 | -7.450580596923828e-09, 322 | 0.9757166504859924, 323 | 0.21903668344020844, 324 | 0.882965087890625 325 | ], 326 | [ 327 | 0.0, 328 | 0.0, 329 | 0.0, 330 | 1.0 331 | ] 332 | ] 333 | }, 334 | { 335 | "file_path": "./train/r_11", 336 | "rotation": 0.012566370614359171, 337 | "transform_matrix": [ 338 | [ 339 | -0.9757387638092041, 340 | -0.17523755133152008, 341 | 0.13124708831310272, 342 | 0.52907395362854 343 | ], 344 | [ 345 | 0.21893838047981262, 346 | -0.7809780836105347, 347 | 0.5849266052246094, 348 | 2.357914447784424 349 | ], 350 | [ 351 | -7.450581485102248e-09, 352 | 0.5994703769683838, 353 | 0.8003968596458435, 354 | 3.2265028953552246 355 | ], 356 | [ 357 | 0.0, 358 | 0.0, 359 | 0.0, 360 | 1.0 361 | ] 362 | ] 363 | }, 364 | { 365 | "file_path": "./train/r_12", 366 | "rotation": 0.012566370614359171, 367 | "transform_matrix": [ 368 | [ 369 | -0.9713073372840881, 370 | 0.20477895438671112, 371 | -0.12094451487064362, 372 | -0.48754292726516724 373 | ], 374 | [ 375 | -0.23782765865325928, 376 | -0.8363337516784668, 377 | 0.4939471483230591, 378 | 1.9911646842956543 379 | ], 380 | [ 381 | 7.450580596923828e-09, 382 | 0.5085384249687195, 383 | 0.8610392212867737, 384 | 3.4709601402282715 385 | ], 386 | [ 387 | 0.0, 388 | 0.0, 389 | 0.0, 390 | 1.0 391 | ] 392 | ] 393 | }, 394 | { 395 | "file_path": "./train/r_13", 396 | "rotation": 0.012566370614359171, 397 | "transform_matrix": [ 398 | [ 399 | 0.842908501625061, 400 | -0.09502744674682617, 401 | 0.5295989513397217, 402 | 2.1348819732666016 403 | ], 404 | [ 405 | 0.5380570292472839, 406 | 0.14886793494224548, 407 | -0.8296582698822021, 408 | -3.3444597721099854 409 | ], 410 | [ 411 | 7.450582373280668e-09, 412 | 0.9842804074287415, 413 | 0.17661221325397491, 414 | 0.7119466662406921 415 | ], 416 | [ 417 | 0.0, 418 | 0.0, 419 | 0.0, 420 | 1.0 421 | ] 422 | ] 423 | }, 424 | { 425 | "file_path": "./train/r_14", 426 | "rotation": 0.012566370614359171, 427 | "transform_matrix": [ 428 | [ 429 | -0.06348517537117004, 430 | 0.8717355132102966, 431 | -0.48584654927253723, 432 | -1.9585098028182983 433 | ], 434 | [ 435 | -0.9979828596115112, 436 | -0.05545414239168167, 437 | 0.030906395986676216, 438 | 0.12458765506744385 439 | ], 440 | [ 441 | 0.0, 442 | 0.4868285059928894, 443 | 0.8734976053237915, 444 | 3.521181106567383 445 | ], 446 | [ 447 | 0.0, 448 | 0.0, 449 | 0.0, 450 | 1.0 451 | ] 452 | ] 453 | }, 454 | { 455 | "file_path": "./train/r_15", 456 | "rotation": 0.012566370614359171, 457 | "transform_matrix": [ 458 | [ 459 | -0.6865485906600952, 460 | -0.3086281418800354, 461 | 0.6583309769630432, 462 | 2.6538169384002686 463 | ], 464 | [ 465 | 0.7270838618278503, 466 | -0.2914219796657562, 467 | 0.6216287612915039, 468 | 2.5058655738830566 469 | ], 470 | [ 471 | 0.0, 472 | 0.9054401516914368, 473 | 0.42447394132614136, 474 | 1.7111091613769531 475 | ], 476 | [ 477 | 0.0, 478 | 0.0, 479 | 0.0, 480 | 1.0 481 | ] 482 | ] 483 | }, 484 | { 485 | "file_path": "./train/r_16", 486 | "rotation": 0.012566370614359171, 487 | "transform_matrix": [ 488 | [ 489 | 0.1303573101758957, 490 | 0.5973315834999084, 491 | -0.7913291454315186, 492 | -3.1899499893188477 493 | ], 494 | [ 495 | -0.9914670586585999, 496 | 0.07853669673204422, 497 | -0.10404333472251892, 498 | -0.41941213607788086 499 | ], 500 | [ 501 | 7.4505797087454084e-09, 502 | 0.7981396317481995, 503 | 0.6024724841117859, 504 | 2.4286444187164307 505 | ], 506 | [ 507 | 0.0, 508 | 0.0, 509 | 0.0, 510 | 1.0 511 | ] 512 | ] 513 | }, 514 | { 515 | "file_path": "./train/r_17", 516 | "rotation": 0.012566370614359171, 517 | "transform_matrix": [ 518 | [ 519 | 0.28662192821502686, 520 | -0.25357696413993835, 521 | 0.9238758683204651, 522 | 3.7242627143859863 523 | ], 524 | [ 525 | 0.95804363489151, 526 | 0.07586367428302765, 527 | -0.27639979124069214, 528 | -1.1142032146453857 529 | ], 530 | [ 531 | 0.0, 532 | 0.9643357992172241, 533 | 0.26468199491500854, 534 | 1.066967248916626 535 | ], 536 | [ 537 | 0.0, 538 | 0.0, 539 | 0.0, 540 | 1.0 541 | ] 542 | ] 543 | }, 544 | { 545 | "file_path": "./train/r_18", 546 | "rotation": 0.012566370614359171, 547 | "transform_matrix": [ 548 | [ 549 | -0.09750017523765564, 550 | -0.9662679433822632, 551 | 0.23836953938007355, 552 | 0.9608983993530273 553 | ], 554 | [ 555 | 0.9952355623245239, 556 | -0.09466230124235153, 557 | 0.023352332413196564, 558 | 0.09413626790046692 559 | ], 560 | [ 561 | -1.862645371275562e-09, 562 | 0.23951061069965363, 563 | 0.9708936214447021, 564 | 3.913797616958618 565 | ], 566 | [ 567 | 0.0, 568 | 0.0, 569 | 0.0, 570 | 1.0 571 | ] 572 | ] 573 | }, 574 | { 575 | "file_path": "./train/r_19", 576 | "rotation": 0.012566370614359171, 577 | "transform_matrix": [ 578 | [ 579 | 0.5655173063278198, 580 | -0.2501452565193176, 581 | 0.7858863472938538, 582 | 3.1680095195770264 583 | ], 584 | [ 585 | 0.8247364163398743, 586 | 0.17152325809001923, 587 | -0.5388780236244202, 588 | -2.1722869873046875 589 | ], 590 | [ 591 | 0.0, 592 | 0.9528940916061401, 593 | 0.30330324172973633, 594 | 1.2226545810699463 595 | ], 596 | [ 597 | 0.0, 598 | 0.0, 599 | 0.0, 600 | 1.0 601 | ] 602 | ] 603 | }, 604 | { 605 | "file_path": "./train/r_20", 606 | "rotation": 0.012566370614359171, 607 | "transform_matrix": [ 608 | [ 609 | 0.8422731161117554, 610 | -0.25616011023521423, 611 | 0.47429734468460083, 612 | 1.9119539260864258 613 | ], 614 | [ 615 | 0.5390509963035583, 616 | 0.40025293827056885, 617 | -0.7410947680473328, 618 | -2.9874486923217773 619 | ], 620 | [ 621 | 1.4901161193847656e-08, 622 | 0.8798747658729553, 623 | 0.475205659866333, 624 | 1.915615439414978 625 | ], 626 | [ 627 | 0.0, 628 | 0.0, 629 | 0.0, 630 | 1.0 631 | ] 632 | ] 633 | }, 634 | { 635 | "file_path": "./train/r_21", 636 | "rotation": 0.012566370614359171, 637 | "transform_matrix": [ 638 | [ 639 | 0.9048085808753967, 640 | 0.3769117295742035, 641 | -0.19813843071460724, 642 | -0.7987216114997864 643 | ], 644 | [ 645 | -0.4258183538913727, 646 | 0.8008883595466614, 647 | -0.4210183620452881, 648 | -1.6971794366836548 649 | ], 650 | [ 651 | 0.0, 652 | 0.4653121531009674, 653 | 0.8851466178894043, 654 | 3.5681405067443848 655 | ], 656 | [ 657 | 0.0, 658 | 0.0, 659 | 0.0, 660 | 1.0 661 | ] 662 | ] 663 | }, 664 | { 665 | "file_path": "./train/r_22", 666 | "rotation": 0.012566370614359171, 667 | "transform_matrix": [ 668 | [ 669 | -0.4602559208869934, 670 | -0.5367125868797302, 671 | 0.7071803212165833, 672 | 2.8507351875305176 673 | ], 674 | [ 675 | 0.887786328792572, 676 | -0.2782484292984009, 677 | 0.3666241765022278, 678 | 1.4779094457626343 679 | ], 680 | [ 681 | 0.0, 682 | 0.7965658903121948, 683 | 0.6045514941215515, 684 | 2.437025308609009 685 | ], 686 | [ 687 | 0.0, 688 | 0.0, 689 | 0.0, 690 | 1.0 691 | ] 692 | ] 693 | }, 694 | { 695 | "file_path": "./train/r_23", 696 | "rotation": 0.012566370614359171, 697 | "transform_matrix": [ 698 | [ 699 | -0.4675160050392151, 700 | 0.5285975337028503, 701 | -0.7085289359092712, 702 | -2.8561718463897705 703 | ], 704 | [ 705 | -0.8839846849441528, 706 | -0.27956119179725647, 707 | 0.37472212314605713, 708 | 1.5105533599853516 709 | ], 710 | [ 711 | 0.0, 712 | 0.8015173077583313, 713 | 0.5979713797569275, 714 | 2.4105000495910645 715 | ], 716 | [ 717 | 0.0, 718 | 0.0, 719 | 0.0, 720 | 1.0 721 | ] 722 | ] 723 | }, 724 | { 725 | "file_path": "./train/r_24", 726 | "rotation": 0.012566370614359171, 727 | "transform_matrix": [ 728 | [ 729 | 0.7739522457122803, 730 | 0.35971799492836, 731 | -0.5211533904075623, 732 | -2.1008365154266357 733 | ], 734 | [ 735 | -0.633243978023529, 736 | 0.4396481513977051, 737 | -0.6369548439979553, 738 | -2.5676472187042236 739 | ], 740 | [ 741 | 0.0, 742 | 0.8229899406433105, 743 | 0.5680559277534485, 744 | 2.2899067401885986 745 | ], 746 | [ 747 | 0.0, 748 | 0.0, 749 | 0.0, 750 | 1.0 751 | ] 752 | ] 753 | }, 754 | { 755 | "file_path": "./train/r_25", 756 | "rotation": 0.012566370614359171, 757 | "transform_matrix": [ 758 | [ 759 | -0.1613457202911377, 760 | -0.3997095823287964, 761 | 0.9023301005363464, 762 | 3.637409210205078 763 | ], 764 | [ 765 | 0.9868979454040527, 766 | -0.06534761935472488, 767 | 0.14751990139484406, 768 | 0.5946717858314514 769 | ], 770 | [ 771 | 3.725290298461914e-09, 772 | 0.914309561252594, 773 | 0.40501612424850464, 774 | 1.6326723098754883 775 | ], 776 | [ 777 | 0.0, 778 | 0.0, 779 | 0.0, 780 | 1.0 781 | ] 782 | ] 783 | }, 784 | { 785 | "file_path": "./train/r_26", 786 | "rotation": 0.012566370614359171, 787 | "transform_matrix": [ 788 | [ 789 | -0.9752575159072876, 790 | -0.03920060396194458, 791 | 0.21756872534751892, 792 | 0.8770476579666138 793 | ], 794 | [ 795 | 0.22107206284999847, 796 | -0.17293314635753632, 797 | 0.9598026275634766, 798 | 3.8690884113311768 799 | ], 800 | [ 801 | 3.725290742551124e-09, 802 | 0.9841530919075012, 803 | 0.1773204803466797, 804 | 0.7148017883300781 805 | ], 806 | [ 807 | 0.0, 808 | 0.0, 809 | 0.0, 810 | 1.0 811 | ] 812 | ] 813 | }, 814 | { 815 | "file_path": "./train/r_27", 816 | "rotation": 0.012566370614359171, 817 | "transform_matrix": [ 818 | [ 819 | -0.9902960658073425, 820 | 0.09176140278577805, 821 | -0.10437164455652237, 822 | -0.42073559761047363 823 | ], 824 | [ 825 | -0.13897335529327393, 826 | -0.6538731455802917, 827 | 0.7437312006950378, 828 | 2.9980766773223877 829 | ], 830 | [ 831 | 0.0, 832 | 0.7510190606117249, 833 | 0.6602804064750671, 834 | 2.6616756916046143 835 | ], 836 | [ 837 | 0.0, 838 | 0.0, 839 | 0.0, 840 | 1.0 841 | ] 842 | ] 843 | }, 844 | { 845 | "file_path": "./train/r_28", 846 | "rotation": 0.012566370614359171, 847 | "transform_matrix": [ 848 | [ 849 | 0.7852338552474976, 850 | -0.33010709285736084, 851 | 0.5238673686981201, 852 | 2.111776828765869 853 | ], 854 | [ 855 | 0.619199275970459, 856 | 0.4186233878135681, 857 | -0.6643393039703369, 858 | -2.678037405014038 859 | ], 860 | [ 861 | -1.4901161193847656e-08, 862 | 0.8460399508476257, 863 | 0.5331193804740906, 864 | 2.1490728855133057 865 | ], 866 | [ 867 | 0.0, 868 | 0.0, 869 | 0.0, 870 | 1.0 871 | ] 872 | ] 873 | }, 874 | { 875 | "file_path": "./train/r_29", 876 | "rotation": 0.012566370614359171, 877 | "transform_matrix": [ 878 | [ 879 | 0.8931812047958374, 880 | 0.20586314797401428, 881 | -0.3998093008995056, 882 | -1.6116830110549927 883 | ], 884 | [ 885 | -0.44969668984413147, 886 | 0.4088824987411499, 887 | -0.7940956354141235, 888 | -3.2011020183563232 889 | ], 890 | [ 891 | 0.0, 892 | 0.889064371585846, 893 | 0.45778220891952515, 894 | 1.8453792333602905 895 | ], 896 | [ 897 | 0.0, 898 | 0.0, 899 | 0.0, 900 | 1.0 901 | ] 902 | ] 903 | }, 904 | { 905 | "file_path": "./train/r_30", 906 | "rotation": 0.012566370614359171, 907 | "transform_matrix": [ 908 | [ 909 | -0.28673890233039856, 910 | -0.8562213182449341, 911 | 0.42972761392593384, 912 | 1.7322875261306763 913 | ], 914 | [ 915 | 0.9580087661743164, 916 | -0.25627318024635315, 917 | 0.12862055003643036, 918 | 0.5184860825538635 919 | ], 920 | [ 921 | 0.0, 922 | 0.44856342673301697, 923 | 0.8937509655952454, 924 | 3.60282564163208 925 | ], 926 | [ 927 | 0.0, 928 | 0.0, 929 | 0.0, 930 | 1.0 931 | ] 932 | ] 933 | }, 934 | { 935 | "file_path": "./train/r_31", 936 | "rotation": 0.012566370614359171, 937 | "transform_matrix": [ 938 | [ 939 | -0.15501070022583008, 940 | 0.9340341687202454, 941 | -0.32179465889930725, 942 | -1.2971957921981812 943 | ], 944 | [ 945 | -0.9879127740859985, 946 | -0.1465567648410797, 947 | 0.050491925328969955, 948 | 0.20353946089744568 949 | ], 950 | [ 951 | 0.0, 952 | 0.3257317543029785, 953 | 0.945462167263031, 954 | 3.8112800121307373 955 | ], 956 | [ 957 | 0.0, 958 | 0.0, 959 | 0.0, 960 | 1.0 961 | ] 962 | ] 963 | }, 964 | { 965 | "file_path": "./train/r_32", 966 | "rotation": 0.012566370614359171, 967 | "transform_matrix": [ 968 | [ 969 | 6.262858369154856e-05, 970 | 0.21157889068126678, 971 | -0.9773608446121216, 972 | -3.9398677349090576 973 | ], 974 | [ 975 | -1.0, 976 | 1.3250886695459485e-05, 977 | -6.121072510723025e-05, 978 | -0.0002467483573127538 979 | ], 980 | [ 981 | 0.0, 982 | 0.9773607850074768, 983 | 0.21157889068126678, 984 | 0.8529018759727478 985 | ], 986 | [ 987 | 0.0, 988 | 0.0, 989 | 0.0, 990 | 1.0 991 | ] 992 | ] 993 | }, 994 | { 995 | "file_path": "./train/r_33", 996 | "rotation": 0.012566370614359171, 997 | "transform_matrix": [ 998 | [ 999 | 0.7431973218917847, 1000 | -0.5280798077583313, 1001 | 0.41083991527557373, 1002 | 1.6561487913131714 1003 | ], 1004 | [ 1005 | 0.6690723896026611, 1006 | 0.5865845680236816, 1007 | -0.4563559293746948, 1008 | -1.8396297693252563 1009 | ], 1010 | [ 1011 | 0.0, 1012 | 0.6140441298484802, 1013 | 0.7892715930938721, 1014 | 3.1816558837890625 1015 | ], 1016 | [ 1017 | 0.0, 1018 | 0.0, 1019 | 0.0, 1020 | 1.0 1021 | ] 1022 | ] 1023 | }, 1024 | { 1025 | "file_path": "./train/r_34", 1026 | "rotation": 0.012566370614359171, 1027 | "transform_matrix": [ 1028 | [ 1029 | -0.7566120028495789, 1030 | 0.34157976508140564, 1031 | -0.5575495362281799, 1032 | -2.247554063796997 1033 | ], 1034 | [ 1035 | -0.6538640856742859, 1036 | -0.39525550603866577, 1037 | 0.6451627016067505, 1038 | 2.600733995437622 1039 | ], 1040 | [ 1041 | 0.0, 1042 | 0.8526995182037354, 1043 | 0.5224018096923828, 1044 | 2.1058690547943115 1045 | ], 1046 | [ 1047 | 0.0, 1048 | 0.0, 1049 | 0.0, 1050 | 1.0 1051 | ] 1052 | ] 1053 | }, 1054 | { 1055 | "file_path": "./train/r_35", 1056 | "rotation": 0.012566370614359171, 1057 | "transform_matrix": [ 1058 | [ 1059 | -0.3977896273136139, 1060 | 0.3703862130641937, 1061 | -0.8393910527229309, 1062 | -3.3836936950683594 1063 | ], 1064 | [ 1065 | -0.9174765944480896, 1066 | -0.1605880707502365, 1067 | 0.36393412947654724, 1068 | 1.4670655727386475 1069 | ], 1070 | [ 1071 | 0.0, 1072 | 0.9148910045623779, 1073 | 0.40370094776153564, 1074 | 1.6273707151412964 1075 | ], 1076 | [ 1077 | 0.0, 1078 | 0.0, 1079 | 0.0, 1080 | 1.0 1081 | ] 1082 | ] 1083 | }, 1084 | { 1085 | "file_path": "./train/r_36", 1086 | "rotation": 0.012566370614359171, 1087 | "transform_matrix": [ 1088 | [ 1089 | 0.7656702995300293, 1090 | -0.4731244146823883, 1091 | 0.4357779026031494, 1092 | 1.7566769123077393 1093 | ], 1094 | [ 1095 | 0.6432332396507263, 1096 | 0.5631818175315857, 1097 | -0.5187265872955322, 1098 | -2.0910537242889404 1099 | ], 1100 | [ 1101 | 2.9802320611338473e-08, 1102 | 0.6774803400039673, 1103 | 0.7355409264564514, 1104 | 2.965060234069824 1105 | ], 1106 | [ 1107 | 0.0, 1108 | 0.0, 1109 | 0.0, 1110 | 1.0 1111 | ] 1112 | ] 1113 | }, 1114 | { 1115 | "file_path": "./train/r_37", 1116 | "rotation": 0.012566370614359171, 1117 | "transform_matrix": [ 1118 | [ 1119 | -0.46346595883369446, 1120 | -0.8589088916778564, 1121 | 0.21788737177848816, 1122 | 0.8783321380615234 1123 | ], 1124 | [ 1125 | 0.886114776134491, 1126 | -0.4492363929748535, 1127 | 0.11396195739507675, 1128 | 0.4593953788280487 1129 | ], 1130 | [ 1131 | 0.0, 1132 | 0.24589067697525024, 1133 | 0.969297468662262, 1134 | 3.9073634147644043 1135 | ], 1136 | [ 1137 | 0.0, 1138 | 0.0, 1139 | 0.0, 1140 | 1.0 1141 | ] 1142 | ] 1143 | }, 1144 | { 1145 | "file_path": "./train/r_38", 1146 | "rotation": 0.012566370614359171, 1147 | "transform_matrix": [ 1148 | [ 1149 | -0.8262399435043335, 1150 | 0.21388964354991913, 1151 | -0.5211319923400879, 1152 | -2.10075044631958 1153 | ], 1154 | [ 1155 | -0.5633181929588318, 1156 | -0.3137199878692627, 1157 | 0.7643639445304871, 1158 | 3.081249952316284 1159 | ], 1160 | [ 1161 | 1.4901159417490817e-08, 1162 | 0.9251114130020142, 1163 | 0.3796958923339844, 1164 | 1.5306031703948975 1165 | ], 1166 | [ 1167 | 0.0, 1168 | 0.0, 1169 | 0.0, 1170 | 1.0 1171 | ] 1172 | ] 1173 | }, 1174 | { 1175 | "file_path": "./train/r_39", 1176 | "rotation": 0.012566370614359171, 1177 | "transform_matrix": [ 1178 | [ 1179 | -0.9966232776641846, 1180 | 0.07444921880960464, 1181 | -0.034631188958883286, 1182 | -0.13960279524326324 1183 | ], 1184 | [ 1185 | -0.0821097195148468, 1186 | -0.9036424160003662, 1187 | 0.4203430414199829, 1188 | 1.6944570541381836 1189 | ], 1190 | [ 1191 | 0.0, 1192 | 0.4217672646045685, 1193 | 0.9067041277885437, 1194 | 3.655041217803955 1195 | ], 1196 | [ 1197 | 0.0, 1198 | 0.0, 1199 | 0.0, 1200 | 1.0 1201 | ] 1202 | ] 1203 | }, 1204 | { 1205 | "file_path": "./train/r_40", 1206 | "rotation": 0.012566370614359171, 1207 | "transform_matrix": [ 1208 | [ 1209 | -0.4379815459251404, 1210 | 0.34720176458358765, 1211 | -0.8292304277420044, 1212 | -3.3427348136901855 1213 | ], 1214 | [ 1215 | -0.8989839553833008, 1216 | -0.16915537416934967, 1217 | 0.40399786829948425, 1218 | 1.6285674571990967 1219 | ], 1220 | [ 1221 | -1.4901161193847656e-08, 1222 | 0.922408401966095, 1223 | 0.3862157464027405, 1224 | 1.5568854808807373 1225 | ], 1226 | [ 1227 | 0.0, 1228 | 0.0, 1229 | 0.0, 1230 | 1.0 1231 | ] 1232 | ] 1233 | }, 1234 | { 1235 | "file_path": "./train/r_41", 1236 | "rotation": 0.012566370614359171, 1237 | "transform_matrix": [ 1238 | [ 1239 | -0.994414210319519, 1240 | 0.02083449251949787, 1241 | -0.10347140580415726, 1242 | -0.41710659861564636 1243 | ], 1244 | [ 1245 | -0.10554812848567963, 1246 | -0.19629065692424774, 1247 | 0.9748484492301941, 1248 | 3.9297399520874023 1249 | ], 1250 | [ 1251 | 3.7252898543727042e-09, 1252 | 0.9803244471549988, 1253 | 0.1973932385444641, 1254 | 0.7957176566123962 1255 | ], 1256 | [ 1257 | 0.0, 1258 | 0.0, 1259 | 0.0, 1260 | 1.0 1261 | ] 1262 | ] 1263 | }, 1264 | { 1265 | "file_path": "./train/r_42", 1266 | "rotation": 0.012566370614359171, 1267 | "transform_matrix": [ 1268 | [ 1269 | -0.9928660988807678, 1270 | -0.019224023446440697, 1271 | 0.11767476797103882, 1272 | 0.47436219453811646 1273 | ], 1274 | [ 1275 | 0.11923471093177795, 1276 | -0.160078227519989, 1277 | 0.9798764586448669, 1278 | 3.9500086307525635 1279 | ], 1280 | [ 1281 | 0.0, 1282 | 0.9869171380996704, 1283 | 0.16122838854789734, 1284 | 0.6499325037002563 1285 | ], 1286 | [ 1287 | 0.0, 1288 | 0.0, 1289 | 0.0, 1290 | 1.0 1291 | ] 1292 | ] 1293 | }, 1294 | { 1295 | "file_path": "./train/r_43", 1296 | "rotation": 0.012566370614359171, 1297 | "transform_matrix": [ 1298 | [ 1299 | 0.6021551489830017, 1300 | -0.635220468044281, 1301 | 0.48363634943962097, 1302 | 1.9496005773544312 1303 | ], 1304 | [ 1305 | 0.7983791828155518, 1306 | 0.47909730672836304, 1307 | -0.36476919054985046, 1308 | -1.4704318046569824 1309 | ], 1310 | [ 1311 | -1.4901162970204496e-08, 1312 | 0.6057727932929993, 1313 | 0.7956376075744629, 1314 | 3.207318067550659 1315 | ], 1316 | [ 1317 | 0.0, 1318 | 0.0, 1319 | 0.0, 1320 | 1.0 1321 | ] 1322 | ] 1323 | }, 1324 | { 1325 | "file_path": "./train/r_44", 1326 | "rotation": 0.012566370614359171, 1327 | "transform_matrix": [ 1328 | [ 1329 | 0.49585968255996704, 1330 | 0.7388697266578674, 1331 | -0.45628345012664795, 1332 | -1.8393374681472778 1333 | ], 1334 | [ 1335 | -0.8684027194976807, 1336 | 0.4218961298465729, 1337 | -0.260538786649704, 1338 | -1.0502654314041138 1339 | ], 1340 | [ 1341 | 0.0, 1342 | 0.5254284143447876, 1343 | 0.850837767124176, 1344 | 3.4298367500305176 1345 | ], 1346 | [ 1347 | 0.0, 1348 | 0.0, 1349 | 0.0, 1350 | 1.0 1351 | ] 1352 | ] 1353 | }, 1354 | { 1355 | "file_path": "./train/r_45", 1356 | "rotation": 0.012566370614359171, 1357 | "transform_matrix": [ 1358 | [ 1359 | -0.5594504475593567, 1360 | 0.5238707065582275, 1361 | -0.6423196196556091, 1362 | -2.589273452758789 1363 | ], 1364 | [ 1365 | -0.8288636207580566, 1366 | -0.3535921573638916, 1367 | 0.43354055285453796, 1368 | 1.7476580142974854 1369 | ], 1370 | [ 1371 | 0.0, 1372 | 0.774940013885498, 1373 | 0.6320346593856812, 1374 | 2.5478134155273438 1375 | ], 1376 | [ 1377 | 0.0, 1378 | 0.0, 1379 | 0.0, 1380 | 1.0 1381 | ] 1382 | ] 1383 | }, 1384 | { 1385 | "file_path": "./train/r_46", 1386 | "rotation": 0.012566370614359171, 1387 | "transform_matrix": [ 1388 | [ 1389 | 0.9999964833259583, 1390 | -0.0018918740097433329, 1391 | 0.0018659689230844378, 1392 | 0.007521961349993944 1393 | ], 1394 | [ 1395 | 0.0026572593487799168, 1396 | 0.7119618654251099, 1397 | -0.7022131085395813, 1398 | -2.830711603164673 1399 | ], 1400 | [ 1401 | 0.0, 1402 | 0.7022156119346619, 1403 | 0.7119643688201904, 1404 | 2.8700201511383057 1405 | ], 1406 | [ 1407 | 0.0, 1408 | 0.0, 1409 | 0.0, 1410 | 1.0 1411 | ] 1412 | ] 1413 | }, 1414 | { 1415 | "file_path": "./train/r_47", 1416 | "rotation": 0.012566370614359171, 1417 | "transform_matrix": [ 1418 | [ 1419 | -0.9168165326118469, 1420 | -0.3853738605976105, 1421 | 0.1045677587389946, 1422 | 0.42152610421180725 1423 | ], 1424 | [ 1425 | 0.3993086814880371, 1426 | -0.8848220705986023, 1427 | 0.2400885820388794, 1428 | 0.9678280353546143 1429 | ], 1430 | [ 1431 | -7.450580596923828e-09, 1432 | 0.26187196373939514, 1433 | 0.9651026129722595, 1434 | 3.8904531002044678 1435 | ], 1436 | [ 1437 | 0.0, 1438 | 0.0, 1439 | 0.0, 1440 | 1.0 1441 | ] 1442 | ] 1443 | }, 1444 | { 1445 | "file_path": "./train/r_48", 1446 | "rotation": 0.012566370614359171, 1447 | "transform_matrix": [ 1448 | [ 1449 | 0.9999156594276428, 1450 | -0.012454097159206867, 1451 | 0.003698349464684725, 1452 | 0.014908524230122566 1453 | ], 1454 | [ 1455 | 0.012991628609597683, 1456 | 0.9585440158843994, 1457 | -0.28464773297309875, 1458 | -1.1474518775939941 1459 | ], 1460 | [ 1461 | 0.0, 1462 | 0.2846718430519104, 1463 | 0.9586249589920044, 1464 | 3.8643410205841064 1465 | ], 1466 | [ 1467 | 0.0, 1468 | 0.0, 1469 | 0.0, 1470 | 1.0 1471 | ] 1472 | ] 1473 | }, 1474 | { 1475 | "file_path": "./train/r_49", 1476 | "rotation": 0.012566370614359171, 1477 | "transform_matrix": [ 1478 | [ 1479 | 0.3739576041698456, 1480 | -0.8564795851707458, 1481 | 0.35580646991729736, 1482 | 1.434301733970642 1483 | ], 1484 | [ 1485 | 0.9274457693099976, 1486 | 0.3453431725502014, 1487 | -0.1434655785560608, 1488 | -0.5783282518386841 1489 | ], 1490 | [ 1491 | 0.0, 1492 | 0.38364121317863464, 1493 | 0.9234821796417236, 1494 | 3.7226758003234863 1495 | ], 1496 | [ 1497 | 0.0, 1498 | 0.0, 1499 | 0.0, 1500 | 1.0 1501 | ] 1502 | ] 1503 | }, 1504 | { 1505 | "file_path": "./train/r_50", 1506 | "rotation": 0.012566370614359171, 1507 | "transform_matrix": [ 1508 | [ 1509 | -0.9326563477516174, 1510 | -0.22499778866767883, 1511 | 0.282007098197937, 1512 | 1.1368069648742676 1513 | ], 1514 | [ 1515 | 0.36076587438583374, 1516 | -0.5816670060157776, 1517 | 0.7290481925010681, 1518 | 2.938887357711792 1519 | ], 1520 | [ 1521 | 0.0, 1522 | 0.7816900014877319, 1523 | 0.6236670613288879, 1524 | 2.514082431793213 1525 | ], 1526 | [ 1527 | 0.0, 1528 | 0.0, 1529 | 0.0, 1530 | 1.0 1531 | ] 1532 | ] 1533 | }, 1534 | { 1535 | "file_path": "./train/r_51", 1536 | "rotation": 0.012566370614359171, 1537 | "transform_matrix": [ 1538 | [ 1539 | -0.8471797108650208, 1540 | 0.14040516316890717, 1541 | -0.5124186873435974, 1542 | -2.0656259059906006 1543 | ], 1544 | [ 1545 | -0.5313065052032471, 1546 | -0.22387906908988953, 1547 | 0.8170626759529114, 1548 | 3.2936851978302 1549 | ], 1550 | [ 1551 | 7.450580596923828e-09, 1552 | 0.9644504189491272, 1553 | 0.26426392793655396, 1554 | 1.0652819871902466 1555 | ], 1556 | [ 1557 | 0.0, 1558 | 0.0, 1559 | 0.0, 1560 | 1.0 1561 | ] 1562 | ] 1563 | }, 1564 | { 1565 | "file_path": "./train/r_52", 1566 | "rotation": 0.012566370614359171, 1567 | "transform_matrix": [ 1568 | [ 1569 | 0.5719918608665466, 1570 | 0.34370848536491394, 1571 | -0.7447749376296997, 1572 | -3.002284049987793 1573 | ], 1574 | [ 1575 | -0.8202592730522156, 1576 | 0.23967842757701874, 1577 | -0.5193543434143066, 1578 | -2.0935845375061035 1579 | ], 1580 | [ 1581 | -1.4901160305669237e-08, 1582 | 0.9079751372337341, 1583 | 0.41902410984039307, 1584 | 1.6891403198242188 1585 | ], 1586 | [ 1587 | 0.0, 1588 | 0.0, 1589 | 0.0, 1590 | 1.0 1591 | ] 1592 | ] 1593 | }, 1594 | { 1595 | "file_path": "./train/r_53", 1596 | "rotation": 0.012566370614359171, 1597 | "transform_matrix": [ 1598 | [ 1599 | 0.2079109102487564, 1600 | 0.16523794829845428, 1601 | -0.9640898704528809, 1602 | -3.886370897293091 1603 | ], 1604 | [ 1605 | -0.9781477451324463, 1606 | 0.03512227535247803, 1607 | -0.2049228399991989, 1608 | -0.8260704278945923 1609 | ], 1610 | [ 1611 | 0.0, 1612 | 0.9856281876564026, 1613 | 0.16892939805984497, 1614 | 0.6809762716293335 1615 | ], 1616 | [ 1617 | 0.0, 1618 | 0.0, 1619 | 0.0, 1620 | 1.0 1621 | ] 1622 | ] 1623 | }, 1624 | { 1625 | "file_path": "./train/r_54", 1626 | "rotation": 0.012566370614359171, 1627 | "transform_matrix": [ 1628 | [ 1629 | -0.30069297552108765, 1630 | 0.47792530059814453, 1631 | -0.8253308534622192, 1632 | -3.3270153999328613 1633 | ], 1634 | [ 1635 | -0.9537209868431091, 1636 | -0.15068219602108002, 1637 | 0.26021361351013184, 1638 | 1.048954725265503 1639 | ], 1640 | [ 1641 | 7.450580596923828e-09, 1642 | 0.8653798699378967, 1643 | 0.5011163353919983, 1644 | 2.0200648307800293 1645 | ], 1646 | [ 1647 | 0.0, 1648 | 0.0, 1649 | 0.0, 1650 | 1.0 1651 | ] 1652 | ] 1653 | }, 1654 | { 1655 | "file_path": "./train/r_55", 1656 | "rotation": 0.012566370614359171, 1657 | "transform_matrix": [ 1658 | [ 1659 | 0.933196485042572, 1660 | -0.07844070345163345, 1661 | 0.3507015109062195, 1662 | 1.413723111152649 1663 | ], 1664 | [ 1665 | 0.35936683416366577, 1666 | 0.2036931961774826, 1667 | -0.9106944799423218, 1668 | -3.6711270809173584 1669 | ], 1670 | [ 1671 | 0.0, 1672 | 0.9758873581886292, 1673 | 0.21827472746372223, 1674 | 0.8798936009407043 1675 | ], 1676 | [ 1677 | 0.0, 1678 | 0.0, 1679 | 0.0, 1680 | 1.0 1681 | ] 1682 | ] 1683 | }, 1684 | { 1685 | "file_path": "./train/r_56", 1686 | "rotation": 0.012566370614359171, 1687 | "transform_matrix": [ 1688 | [ 1689 | -0.5703680515289307, 1690 | 0.8067229390144348, 1691 | -0.15452639758586884, 1692 | -0.6229158639907837 1693 | ], 1694 | [ 1695 | -0.8213893175125122, 1696 | -0.5601838231086731, 1697 | 0.10730224847793579, 1698 | 0.43254923820495605 1699 | ], 1700 | [ 1701 | -7.450581485102248e-09, 1702 | 0.18812799453735352, 1703 | 0.9821444153785706, 1704 | 3.959151029586792 1705 | ], 1706 | [ 1707 | 0.0, 1708 | 0.0, 1709 | 0.0, 1710 | 1.0 1711 | ] 1712 | ] 1713 | }, 1714 | { 1715 | "file_path": "./train/r_57", 1716 | "rotation": 0.012566370614359171, 1717 | "transform_matrix": [ 1718 | [ 1719 | -0.9822137951850891, 1720 | -0.1677587777376175, 1721 | 0.08433839678764343, 1722 | 0.339978963136673 1723 | ], 1724 | [ 1725 | 0.1877657175064087, 1726 | -0.8775562047958374, 1727 | 0.44117921590805054, 1728 | 1.7784502506256104 1729 | ], 1730 | [ 1731 | 0.0, 1732 | 0.4491681754589081, 1733 | 0.89344722032547, 1734 | 3.6016008853912354 1735 | ], 1736 | [ 1737 | 0.0, 1738 | 0.0, 1739 | 0.0, 1740 | 1.0 1741 | ] 1742 | ] 1743 | }, 1744 | { 1745 | "file_path": "./train/r_58", 1746 | "rotation": 0.012566370614359171, 1747 | "transform_matrix": [ 1748 | [ 1749 | -0.33302783966064453, 1750 | 0.7478148937225342, 1751 | -0.5743390917778015, 1752 | -2.315235137939453 1753 | ], 1754 | [ 1755 | -0.942916989326477, 1756 | -0.2641199231147766, 1757 | 0.20285022258758545, 1758 | 0.8177154660224915 1759 | ], 1760 | [ 1761 | 1.4901161193847656e-08, 1762 | 0.6091088652610779, 1763 | 0.7930864691734314, 1764 | 3.1970341205596924 1765 | ], 1766 | [ 1767 | 0.0, 1768 | 0.0, 1769 | 0.0, 1770 | 1.0 1771 | ] 1772 | ] 1773 | }, 1774 | { 1775 | "file_path": "./train/r_59", 1776 | "rotation": 0.012566370614359171, 1777 | "transform_matrix": [ 1778 | [ 1779 | -0.28166845440864563, 1780 | -0.5504832863807678, 1781 | 0.7858948707580566, 1782 | 3.168043851852417 1783 | ], 1784 | [ 1785 | 0.9595118761062622, 1786 | -0.16159653663635254, 1787 | 0.2307025045156479, 1788 | 0.929991602897644 1789 | ], 1790 | [ 1791 | 2.980232594040899e-08, 1792 | 0.819057047367096, 1793 | 0.5737119317054749, 1794 | 2.31270694732666 1795 | ], 1796 | [ 1797 | 0.0, 1798 | 0.0, 1799 | 0.0, 1800 | 1.0 1801 | ] 1802 | ] 1803 | }, 1804 | { 1805 | "file_path": "./train/r_60", 1806 | "rotation": 0.012566370614359171, 1807 | "transform_matrix": [ 1808 | [ 1809 | -0.7199268341064453, 1810 | 0.1475599855184555, 1811 | -0.6781823635101318, 1812 | -2.7338404655456543 1813 | ], 1814 | [ 1815 | -0.6940498948097229, 1816 | -0.1530616134405136, 1817 | 0.7034677267074585, 1818 | 2.8357691764831543 1819 | ], 1820 | [ 1821 | 0.0, 1822 | 0.9771378040313721, 1823 | 0.21260714530944824, 1824 | 0.8570468425750732 1825 | ], 1826 | [ 1827 | 0.0, 1828 | 0.0, 1829 | 0.0, 1830 | 1.0 1831 | ] 1832 | ] 1833 | }, 1834 | { 1835 | "file_path": "./train/r_61", 1836 | "rotation": 0.012566370614359171, 1837 | "transform_matrix": [ 1838 | [ 1839 | -0.999970555305481, 1840 | 0.0056571876630187035, 1841 | -0.00517683569341898, 1842 | -0.020868491381406784 1843 | ], 1844 | [ 1845 | -0.007668337319046259, 1846 | -0.7377116084098816, 1847 | 0.675072431564331, 1848 | 2.721303939819336 1849 | ], 1850 | [ 1851 | -4.6566125955216364e-10, 1852 | 0.675092339515686, 1853 | 0.7377332448959351, 1854 | 2.973897933959961 1855 | ], 1856 | [ 1857 | 0.0, 1858 | 0.0, 1859 | 0.0, 1860 | 1.0 1861 | ] 1862 | ] 1863 | }, 1864 | { 1865 | "file_path": "./train/r_62", 1866 | "rotation": 0.012566370614359171, 1867 | "transform_matrix": [ 1868 | [ 1869 | -0.26151391863822937, 1870 | 0.9203336238861084, 1871 | -0.2908549904823303, 1872 | -1.1724741458892822 1873 | ], 1874 | [ 1875 | -0.9651997685432434, 1876 | -0.24935775995254517, 1877 | 0.07880505919456482, 1878 | 0.31767338514328003 1879 | ], 1880 | [ 1881 | 0.0, 1882 | 0.3013418912887573, 1883 | 0.9535161256790161, 1884 | 3.8437466621398926 1885 | ], 1886 | [ 1887 | 0.0, 1888 | 0.0, 1889 | 0.0, 1890 | 1.0 1891 | ] 1892 | ] 1893 | }, 1894 | { 1895 | "file_path": "./train/r_63", 1896 | "rotation": 0.012566370614359171, 1897 | "transform_matrix": [ 1898 | [ 1899 | 0.7933609485626221, 1900 | -0.19958899915218353, 1901 | 0.5751022100448608, 1902 | 2.3183114528656006 1903 | ], 1904 | [ 1905 | 0.6087514758110046, 1906 | 0.2601161599159241, 1907 | -0.7495071887969971, 1908 | -3.021360397338867 1909 | ], 1910 | [ 1911 | 0.0, 1912 | 0.9447241425514221, 1913 | 0.3278660774230957, 1914 | 1.3216705322265625 1915 | ], 1916 | [ 1917 | 0.0, 1918 | 0.0, 1919 | 0.0, 1920 | 1.0 1921 | ] 1922 | ] 1923 | }, 1924 | { 1925 | "file_path": "./train/r_64", 1926 | "rotation": 0.012566370614359171, 1927 | "transform_matrix": [ 1928 | [ 1929 | -0.9780508875846863, 1930 | 0.035429153591394424, 1931 | -0.2053319364786148, 1932 | -0.8277195692062378 1933 | ], 1934 | [ 1935 | -0.20836611092090607, 1936 | -0.16630110144615173, 1937 | 0.9638087749481201, 1938 | 3.885237693786621 1939 | ], 1940 | [ 1941 | 0.0, 1942 | 0.9854384064674377, 1943 | 0.17003315687179565, 1944 | 0.6854256391525269 1945 | ], 1946 | [ 1947 | 0.0, 1948 | 0.0, 1949 | 0.0, 1950 | 1.0 1951 | ] 1952 | ] 1953 | }, 1954 | { 1955 | "file_path": "./train/r_65", 1956 | "rotation": 0.012566370614359171, 1957 | "transform_matrix": [ 1958 | [ 1959 | 0.9800372123718262, 1960 | -0.039007220417261124, 1961 | 0.1949501782655716, 1962 | 0.7858693599700928 1963 | ], 1964 | [ 1965 | 0.19881436228752136, 1966 | 0.1922825276851654, 1967 | -0.9609891176223755, 1968 | -3.873871326446533 1969 | ], 1970 | [ 1971 | 0.0, 1972 | 0.9805640578269958, 1973 | 0.1961991935968399, 1974 | 0.7909042835235596 1975 | ], 1976 | [ 1977 | 0.0, 1978 | 0.0, 1979 | 0.0, 1980 | 1.0 1981 | ] 1982 | ] 1983 | }, 1984 | { 1985 | "file_path": "./train/r_66", 1986 | "rotation": 0.012566370614359171, 1987 | "transform_matrix": [ 1988 | [ 1989 | -0.7107511758804321, 1990 | 0.5660614967346191, 1991 | -0.41762080788612366, 1992 | -1.683483362197876 1993 | ], 1994 | [ 1995 | -0.7034434676170349, 1996 | -0.5719420313835144, 1997 | 0.42195925116539, 1998 | 1.7009721994400024 1999 | ], 2000 | [ 2001 | -1.4901160305669237e-08, 2002 | 0.5936806797981262, 2003 | 0.8047007322311401, 2004 | 3.243852376937866 2005 | ], 2006 | [ 2007 | 0.0, 2008 | 0.0, 2009 | 0.0, 2010 | 1.0 2011 | ] 2012 | ] 2013 | }, 2014 | { 2015 | "file_path": "./train/r_67", 2016 | "rotation": 0.012566370614359171, 2017 | "transform_matrix": [ 2018 | [ 2019 | -0.9999840259552002, 2020 | 0.002792684594169259, 2021 | -0.004916718695312738, 2022 | -0.019819926470518112 2023 | ], 2024 | [ 2025 | -0.005654485896229744, 2026 | -0.4938804805278778, 2027 | 0.8695114254951477, 2028 | 3.505112648010254 2029 | ], 2030 | [ 2031 | -2.3283064365386963e-10, 2032 | 0.8695253133773804, 2033 | 0.49388840794563293, 2034 | 1.990927815437317 2035 | ], 2036 | [ 2037 | 0.0, 2038 | 0.0, 2039 | 0.0, 2040 | 1.0 2041 | ] 2042 | ] 2043 | }, 2044 | { 2045 | "file_path": "./train/r_68", 2046 | "rotation": 0.012566370614359171, 2047 | "transform_matrix": [ 2048 | [ 2049 | 0.5215556025505066, 2050 | -0.4440380930900574, 2051 | 0.7285671234130859, 2052 | 2.9369475841522217 2053 | ], 2054 | [ 2055 | 0.8532173037528992, 2056 | 0.2714320719242096, 2057 | -0.4453592896461487, 2058 | -1.7953004837036133 2059 | ], 2060 | [ 2061 | 0.0, 2062 | 0.8539056777954102, 2063 | 0.520427942276001, 2064 | 2.097911834716797 2065 | ], 2066 | [ 2067 | 0.0, 2068 | 0.0, 2069 | 0.0, 2070 | 1.0 2071 | ] 2072 | ] 2073 | }, 2074 | { 2075 | "file_path": "./train/r_69", 2076 | "rotation": 0.012566370614359171, 2077 | "transform_matrix": [ 2078 | [ 2079 | 0.23253430426120758, 2080 | 0.1524328589439392, 2081 | -0.9605684876441956, 2082 | -3.872175693511963 2083 | ], 2084 | [ 2085 | -0.9725881814956665, 2086 | 0.03644489124417305, 2087 | -0.2296605408191681, 2088 | -0.925791323184967 2089 | ], 2090 | [ 2091 | 0.0, 2092 | 0.9876416325569153, 2093 | 0.1567290723323822, 2094 | 0.6317951679229736 2095 | ], 2096 | [ 2097 | 0.0, 2098 | 0.0, 2099 | 0.0, 2100 | 1.0 2101 | ] 2102 | ] 2103 | }, 2104 | { 2105 | "file_path": "./train/r_70", 2106 | "rotation": 0.012566370614359171, 2107 | "transform_matrix": [ 2108 | [ 2109 | 0.9624335765838623, 2110 | -0.0828590914607048, 2111 | 0.2585652470588684, 2112 | 1.0423099994659424 2113 | ], 2114 | [ 2115 | 0.271517276763916, 2116 | 0.29370641708374023, 2117 | -0.9165232181549072, 2118 | -3.6946234703063965 2119 | ], 2120 | [ 2121 | 7.450580596923828e-09, 2122 | 0.9522977471351624, 2123 | 0.30517053604125977, 2124 | 1.2301819324493408 2125 | ], 2126 | [ 2127 | 0.0, 2128 | 0.0, 2129 | 0.0, 2130 | 1.0 2131 | ] 2132 | ] 2133 | }, 2134 | { 2135 | "file_path": "./train/r_71", 2136 | "rotation": 0.012566370614359171, 2137 | "transform_matrix": [ 2138 | [ 2139 | 0.9513999223709106, 2140 | 0.208729088306427, 2141 | -0.22642995417118073, 2142 | -0.9127683639526367 2143 | ], 2144 | [ 2145 | -0.30795836448669434, 2146 | 0.6448431015014648, 2147 | -0.6995278000831604, 2148 | -2.8198866844177246 2149 | ], 2150 | [ 2151 | 0.0, 2152 | 0.7352616190910339, 2153 | 0.6777834296226501, 2154 | 2.7322323322296143 2155 | ], 2156 | [ 2157 | 0.0, 2158 | 0.0, 2159 | 0.0, 2160 | 1.0 2161 | ] 2162 | ] 2163 | }, 2164 | { 2165 | "file_path": "./train/r_72", 2166 | "rotation": 0.012566370614359171, 2167 | "transform_matrix": [ 2168 | [ 2169 | 0.327425479888916, 2170 | -0.32604190707206726, 2171 | 0.8868421912193298, 2172 | 3.5749754905700684 2173 | ], 2174 | [ 2175 | 0.9448769688606262, 2176 | 0.1129823625087738, 2177 | -0.3073148727416992, 2178 | -1.238826036453247 2179 | ], 2180 | [ 2181 | 7.450580596923828e-09, 2182 | 0.9385795593261719, 2183 | 0.3450627624988556, 2184 | 1.3909926414489746 2185 | ], 2186 | [ 2187 | 0.0, 2188 | 0.0, 2189 | 0.0, 2190 | 1.0 2191 | ] 2192 | ] 2193 | }, 2194 | { 2195 | "file_path": "./train/r_73", 2196 | "rotation": 0.012566370614359171, 2197 | "transform_matrix": [ 2198 | [ 2199 | 0.6466457843780518, 2200 | -0.4112951159477234, 2201 | 0.6424060463905334, 2202 | 2.5896217823028564 2203 | ], 2204 | [ 2205 | 0.7627904415130615, 2206 | 0.3486701548099518, 2207 | -0.5445914268493652, 2208 | -2.1953184604644775 2209 | ], 2210 | [ 2211 | -1.4901161193847656e-08, 2212 | 0.842179000377655, 2213 | 0.5391979217529297, 2214 | 2.173576593399048 2215 | ], 2216 | [ 2217 | 0.0, 2218 | 0.0, 2219 | 0.0, 2220 | 1.0 2221 | ] 2222 | ] 2223 | }, 2224 | { 2225 | "file_path": "./train/r_74", 2226 | "rotation": 0.012566370614359171, 2227 | "transform_matrix": [ 2228 | [ 2229 | -0.7232142090797424, 2230 | -0.2793499827384949, 2231 | 0.6316049695014954, 2232 | 2.546081066131592 2233 | ], 2234 | [ 2235 | 0.6906238794326782, 2236 | -0.29253241419792175, 2237 | 0.6614102125167847, 2238 | 2.666229724884033 2239 | ], 2240 | [ 2241 | -1.4901161193847656e-08, 2242 | 0.9145427346229553, 2243 | 0.4044893682003021, 2244 | 1.6305487155914307 2245 | ], 2246 | [ 2247 | 0.0, 2248 | 0.0, 2249 | 0.0, 2250 | 1.0 2251 | ] 2252 | ] 2253 | }, 2254 | { 2255 | "file_path": "./train/r_75", 2256 | "rotation": 0.012566370614359171, 2257 | "transform_matrix": [ 2258 | [ 2259 | -0.9798775315284729, 2260 | 0.03400515764951706, 2261 | -0.19668211042881012, 2262 | -0.7928509712219238 2263 | ], 2264 | [ 2265 | -0.19960013031959534, 2266 | -0.16693821549415588, 2267 | 0.9655523896217346, 2268 | 3.892266273498535 2269 | ], 2270 | [ 2271 | 3.725290742551124e-09, 2272 | 0.9853807687759399, 2273 | 0.17036642134189606, 2274 | 0.6867690086364746 2275 | ], 2276 | [ 2277 | 0.0, 2278 | 0.0, 2279 | 0.0, 2280 | 1.0 2281 | ] 2282 | ] 2283 | }, 2284 | { 2285 | "file_path": "./train/r_76", 2286 | "rotation": 0.012566370614359171, 2287 | "transform_matrix": [ 2288 | [ 2289 | 0.9977991580963135, 2290 | 0.025931671261787415, 2291 | -0.061029236763715744, 2292 | -0.246016725897789 2293 | ], 2294 | [ 2295 | -0.06631003320217133, 2296 | 0.39020639657974243, 2297 | -0.9183364510536194, 2298 | -3.701932668685913 2299 | ], 2300 | [ 2301 | 0.0, 2302 | 0.920362114906311, 2303 | 0.39106711745262146, 2304 | 1.576442003250122 2305 | ], 2306 | [ 2307 | 0.0, 2308 | 0.0, 2309 | 0.0, 2310 | 1.0 2311 | ] 2312 | ] 2313 | }, 2314 | { 2315 | "file_path": "./train/r_77", 2316 | "rotation": 0.012566370614359171, 2317 | "transform_matrix": [ 2318 | [ 2319 | -0.30372685194015503, 2320 | -0.8604696989059448, 2321 | 0.40907466411590576, 2322 | 1.649032473564148 2323 | ], 2324 | [ 2325 | 0.9527590870857239, 2326 | -0.27430620789527893, 2327 | 0.13040752708911896, 2328 | 0.5256894826889038 2329 | ], 2330 | [ 2331 | -7.4505792646561986e-09, 2332 | 0.4293578565120697, 2333 | 0.9031345248222351, 2334 | 3.640651226043701 2335 | ], 2336 | [ 2337 | 0.0, 2338 | 0.0, 2339 | 0.0, 2340 | 1.0 2341 | ] 2342 | ] 2343 | }, 2344 | { 2345 | "file_path": "./train/r_78", 2346 | "rotation": 0.012566370614359171, 2347 | "transform_matrix": [ 2348 | [ 2349 | -0.6693150401115417, 2350 | 0.18098634481430054, 2351 | -0.7205979228019714, 2352 | -2.904823064804077 2353 | ], 2354 | [ 2355 | -0.7429786920547485, 2356 | -0.16304218769073486, 2357 | 0.6491532325744629, 2358 | 2.6168203353881836 2359 | ], 2360 | [ 2361 | 7.450580152834618e-09, 2362 | 0.9698768854141235, 2363 | 0.24359561502933502, 2364 | 0.9819653034210205 2365 | ], 2366 | [ 2367 | 0.0, 2368 | 0.0, 2369 | 0.0, 2370 | 1.0 2371 | ] 2372 | ] 2373 | }, 2374 | { 2375 | "file_path": "./train/r_79", 2376 | "rotation": 0.012566370614359171, 2377 | "transform_matrix": [ 2378 | [ 2379 | -0.9993038773536682, 2380 | -0.0326223149895668, 2381 | 0.018094748258590698, 2382 | 0.07294226437807083 2383 | ], 2384 | [ 2385 | 0.037304628640413284, 2386 | -0.8738756775856018, 2387 | 0.4847160875797272, 2388 | 1.9539530277252197 2389 | ], 2390 | [ 2391 | 0.0, 2392 | 0.48505374789237976, 2393 | 0.8744843602180481, 2394 | 3.5251591205596924 2395 | ], 2396 | [ 2397 | 0.0, 2398 | 0.0, 2399 | 0.0, 2400 | 1.0 2401 | ] 2402 | ] 2403 | }, 2404 | { 2405 | "file_path": "./train/r_80", 2406 | "rotation": 0.012566370614359171, 2407 | "transform_matrix": [ 2408 | [ 2409 | 0.3921033442020416, 2410 | -0.6728718876838684, 2411 | 0.6272944808006287, 2412 | 2.52870512008667 2413 | ], 2414 | [ 2415 | 0.9199212193489075, 2416 | 0.2868020832538605, 2417 | -0.2673753499984741, 2418 | -1.077824592590332 2419 | ], 2420 | [ 2421 | 0.0, 2422 | 0.6819003224372864, 2423 | 0.7314450144767761, 2424 | 2.948549509048462 2425 | ], 2426 | [ 2427 | 0.0, 2428 | 0.0, 2429 | 0.0, 2430 | 1.0 2431 | ] 2432 | ] 2433 | }, 2434 | { 2435 | "file_path": "./train/r_81", 2436 | "rotation": 0.012566370614359171, 2437 | "transform_matrix": [ 2438 | [ 2439 | -0.8941853642463684, 2440 | 0.14062994718551636, 2441 | -0.4250360429286957, 2442 | -1.7133750915527344 2443 | ], 2444 | [ 2445 | -0.4476967751979828, 2446 | -0.2808804214000702, 2447 | 0.8489250540733337, 2448 | 3.422126293182373 2449 | ], 2450 | [ 2451 | -1.4901160305669237e-08, 2452 | 0.9493837356567383, 2453 | 0.31411871314048767, 2454 | 1.2662529945373535 2455 | ], 2456 | [ 2457 | 0.0, 2458 | 0.0, 2459 | 0.0, 2460 | 1.0 2461 | ] 2462 | ] 2463 | }, 2464 | { 2465 | "file_path": "./train/r_82", 2466 | "rotation": 0.012566370614359171, 2467 | "transform_matrix": [ 2468 | [ 2469 | -0.9460079073905945, 2470 | 0.30761945247650146, 2471 | -0.10217288136482239, 2472 | -0.4118720591068268 2473 | ], 2474 | [ 2475 | -0.32414352893829346, 2476 | -0.8977826833724976, 2477 | 0.2981899678707123, 2478 | 1.2020422220230103 2479 | ], 2480 | [ 2481 | -7.450580596923828e-09, 2482 | 0.31520867347717285, 2483 | 0.9490223526954651, 2484 | 3.8256313800811768 2485 | ], 2486 | [ 2487 | 0.0, 2488 | 0.0, 2489 | 0.0, 2490 | 1.0 2491 | ] 2492 | ] 2493 | }, 2494 | { 2495 | "file_path": "./train/r_83", 2496 | "rotation": 0.012566370614359171, 2497 | "transform_matrix": [ 2498 | [ 2499 | -0.048472680151462555, 2500 | 0.48035264015197754, 2501 | -0.8757349252700806, 2502 | -3.530200481414795 2503 | ], 2504 | [ 2505 | -0.9988245964050293, 2506 | -0.023311378434300423, 2507 | 0.04249916970729828, 2508 | 0.1713196337223053 2509 | ], 2510 | [ 2511 | 0.0, 2512 | 0.8767656087875366, 2513 | 0.48091796040534973, 2514 | 1.9386422634124756 2515 | ], 2516 | [ 2517 | 0.0, 2518 | 0.0, 2519 | 0.0, 2520 | 1.0 2521 | ] 2522 | ] 2523 | }, 2524 | { 2525 | "file_path": "./train/r_84", 2526 | "rotation": 0.012566370614359171, 2527 | "transform_matrix": [ 2528 | [ 2529 | 0.9660431146621704, 2530 | -0.19308900833129883, 2531 | 0.17168912291526794, 2532 | 0.692101001739502 2533 | ], 2534 | [ 2535 | 0.25838056206703186, 2536 | 0.721928596496582, 2537 | -0.641917884349823, 2538 | -2.587653875350952 2539 | ], 2540 | [ 2541 | 0.0, 2542 | 0.6644815802574158, 2543 | 0.7473046779632568, 2544 | 3.012481451034546 2545 | ], 2546 | [ 2547 | 0.0, 2548 | 0.0, 2549 | 0.0, 2550 | 1.0 2551 | ] 2552 | ] 2553 | }, 2554 | { 2555 | "file_path": "./train/r_85", 2556 | "rotation": 0.012566370614359171, 2557 | "transform_matrix": [ 2558 | [ 2559 | -0.14186327159404755, 2560 | 0.16584104299545288, 2561 | -0.9758952260017395, 2562 | -3.933959484100342 2563 | ], 2564 | [ 2565 | -0.9898862242698669, 2566 | -0.023767130449414253, 2567 | 0.1398581862449646, 2568 | 0.5637863874435425 2569 | ], 2570 | [ 2571 | -1.8626450382086546e-09, 2572 | 0.9858660101890564, 2573 | 0.1675354689359665, 2574 | 0.6753571033477783 2575 | ], 2576 | [ 2577 | 0.0, 2578 | 0.0, 2579 | 0.0, 2580 | 1.0 2581 | ] 2582 | ] 2583 | }, 2584 | { 2585 | "file_path": "./train/r_86", 2586 | "rotation": 0.012566370614359171, 2587 | "transform_matrix": [ 2588 | [ 2589 | 0.7959837317466736, 2590 | -0.5319463610649109, 2591 | 0.28886470198631287, 2592 | 1.1644508838653564 2593 | ], 2594 | [ 2595 | 0.6053178310394287, 2596 | 0.6995013952255249, 2597 | -0.3798527419567108, 2598 | -1.5312353372573853 2599 | ], 2600 | [ 2601 | 1.4901159417490817e-08, 2602 | 0.4772116243839264, 2603 | 0.878788411617279, 2604 | 3.5425093173980713 2605 | ], 2606 | [ 2607 | 0.0, 2608 | 0.0, 2609 | 0.0, 2610 | 1.0 2611 | ] 2612 | ] 2613 | }, 2614 | { 2615 | "file_path": "./train/r_87", 2616 | "rotation": 0.012566370614359171, 2617 | "transform_matrix": [ 2618 | [ 2619 | 0.44463157653808594, 2620 | 0.7389402389526367, 2621 | -0.5062312483787537, 2622 | -2.0406837463378906 2623 | ], 2624 | [ 2625 | -0.8957135677337646, 2626 | 0.3668093979358673, 2627 | -0.2512928247451782, 2628 | -1.0129939317703247 2629 | ], 2630 | [ 2631 | 0.0, 2632 | 0.5651710033416748, 2633 | 0.8249737024307251, 2634 | 3.325575590133667 2635 | ], 2636 | [ 2637 | 0.0, 2638 | 0.0, 2639 | 0.0, 2640 | 1.0 2641 | ] 2642 | ] 2643 | }, 2644 | { 2645 | "file_path": "./train/r_88", 2646 | "rotation": 0.012566370614359171, 2647 | "transform_matrix": [ 2648 | [ 2649 | -0.9978623390197754, 2650 | 0.06534235179424286, 2651 | -0.0011283498024567962, 2652 | -0.00454852357506752 2653 | ], 2654 | [ 2655 | -0.06535211205482483, 2656 | -0.9977134466171265, 2657 | 0.01722879149019718, 2658 | 0.0694514811038971 2659 | ], 2660 | [ 2661 | 1.1641533570472262e-10, 2662 | 0.01726444624364376, 2663 | 0.9998509287834167, 2664 | 4.0305280685424805 2665 | ], 2666 | [ 2667 | 0.0, 2668 | 0.0, 2669 | 0.0, 2670 | 1.0 2671 | ] 2672 | ] 2673 | }, 2674 | { 2675 | "file_path": "./train/r_89", 2676 | "rotation": 0.012566370614359171, 2677 | "transform_matrix": [ 2678 | [ 2679 | 0.9958323836326599, 2680 | 0.01890719123184681, 2681 | -0.08922122418880463, 2682 | -0.359662264585495 2683 | ], 2684 | [ 2685 | -0.09120257198810577, 2686 | 0.2064458727836609, 2687 | -0.9741982221603394, 2688 | -3.9271185398101807 2689 | ], 2690 | [ 2691 | 1.862645149230957e-09, 2692 | 0.9782753586769104, 2693 | 0.20730985701084137, 2694 | 0.8356927633285522 2695 | ], 2696 | [ 2697 | 0.0, 2698 | 0.0, 2699 | 0.0, 2700 | 1.0 2701 | ] 2702 | ] 2703 | }, 2704 | { 2705 | "file_path": "./train/r_90", 2706 | "rotation": 0.012566370614359171, 2707 | "transform_matrix": [ 2708 | [ 2709 | 0.08438806980848312, 2710 | 0.515834391117096, 2711 | -0.8525218367576599, 2712 | -3.4366254806518555 2713 | ], 2714 | [ 2715 | -0.9964329600334167, 2716 | 0.04368609935045242, 2717 | -0.0722002163529396, 2718 | -0.2910483777523041 2719 | ], 2720 | [ 2721 | 0.0, 2722 | 0.8555737137794495, 2723 | 0.5176809430122375, 2724 | 2.086838722229004 2725 | ], 2726 | [ 2727 | 0.0, 2728 | 0.0, 2729 | 0.0, 2730 | 1.0 2731 | ] 2732 | ] 2733 | }, 2734 | { 2735 | "file_path": "./train/r_91", 2736 | "rotation": 0.012566370614359171, 2737 | "transform_matrix": [ 2738 | [ 2739 | 0.9833629727363586, 2740 | -0.17399616539478302, 2741 | 0.0521787591278553, 2742 | 0.21033930778503418 2743 | ], 2744 | [ 2745 | 0.1816515475511551, 2746 | 0.941920816898346, 2747 | -0.2824675142765045, 2748 | -1.1386629343032837 2749 | ], 2750 | [ 2751 | 7.450580152834618e-09, 2752 | 0.2872464954853058, 2753 | 0.9578567147254944, 2754 | 3.861243963241577 2755 | ], 2756 | [ 2757 | 0.0, 2758 | 0.0, 2759 | 0.0, 2760 | 1.0 2761 | ] 2762 | ] 2763 | }, 2764 | { 2765 | "file_path": "./train/r_92", 2766 | "rotation": 0.012566370614359171, 2767 | "transform_matrix": [ 2768 | [ 2769 | 0.8475823402404785, 2770 | 0.40216803550720215, 2771 | -0.3462150990962982, 2772 | -1.3956377506256104 2773 | ], 2774 | [ 2775 | -0.5306636691093445, 2776 | 0.6423475742340088, 2777 | -0.5529788732528687, 2778 | -2.2291290760040283 2779 | ], 2780 | [ 2781 | 0.0, 2782 | 0.6524189114570618, 2783 | 0.7578585147857666, 2784 | 3.055025339126587 2785 | ], 2786 | [ 2787 | 0.0, 2788 | 0.0, 2789 | 0.0, 2790 | 1.0 2791 | ] 2792 | ] 2793 | }, 2794 | { 2795 | "file_path": "./train/r_93", 2796 | "rotation": 0.012566370614359171, 2797 | "transform_matrix": [ 2798 | [ 2799 | 0.47693684697151184, 2800 | 0.7483182549476624, 2801 | -0.4610324800014496, 2802 | -1.8584816455841064 2803 | ], 2804 | [ 2805 | -0.8789376616477966, 2806 | 0.40605902671813965, 2807 | -0.2501695156097412, 2808 | -1.0084656476974487 2809 | ], 2810 | [ 2811 | -1.4901162970204496e-08, 2812 | 0.5245338678359985, 2813 | 0.8513894081115723, 2814 | 3.432060956954956 2815 | ], 2816 | [ 2817 | 0.0, 2818 | 0.0, 2819 | 0.0, 2820 | 1.0 2821 | ] 2822 | ] 2823 | }, 2824 | { 2825 | "file_path": "./train/r_94", 2826 | "rotation": 0.012566370614359171, 2827 | "transform_matrix": [ 2828 | [ 2829 | -0.47700220346450806, 2830 | 0.4823406934738159, 2831 | -0.7347218990325928, 2832 | -2.961758852005005 2833 | ], 2834 | [ 2835 | -0.8789020776748657, 2836 | -0.2617783844470978, 2837 | 0.39875200390815735, 2838 | 1.6074209213256836 2839 | ], 2840 | [ 2841 | 1.4901161193847656e-08, 2842 | 0.8359542489051819, 2843 | 0.5487990379333496, 2844 | 2.212280035018921 2845 | ], 2846 | [ 2847 | 0.0, 2848 | 0.0, 2849 | 0.0, 2850 | 1.0 2851 | ] 2852 | ] 2853 | }, 2854 | { 2855 | "file_path": "./train/r_95", 2856 | "rotation": 0.012566370614359171, 2857 | "transform_matrix": [ 2858 | [ 2859 | 0.4534713923931122, 2860 | -0.11268524080514908, 2861 | 0.8841186165809631, 2862 | 3.5639960765838623 2863 | ], 2864 | [ 2865 | 0.8912708163261414, 2866 | 0.057333339005708694, 2867 | -0.44983240962028503, 2868 | -1.813332438468933 2869 | ], 2870 | [ 2871 | 0.0, 2872 | 0.9919751882553101, 2873 | 0.12643210589885712, 2874 | 0.5096641182899475 2875 | ], 2876 | [ 2877 | 0.0, 2878 | 0.0, 2879 | 0.0, 2880 | 1.0 2881 | ] 2882 | ] 2883 | }, 2884 | { 2885 | "file_path": "./train/r_96", 2886 | "rotation": 0.012566370614359171, 2887 | "transform_matrix": [ 2888 | [ 2889 | -0.5146697163581848, 2890 | 0.42225345969200134, 2891 | -0.746201753616333, 2892 | -3.008035659790039 2893 | ], 2894 | [ 2895 | -0.8573886156082153, 2896 | -0.2534685730934143, 2897 | 0.44792693853378296, 2898 | 1.805651307106018 2899 | ], 2900 | [ 2901 | 0.0, 2902 | 0.8703193664550781, 2903 | 0.4924877882003784, 2904 | 1.9852819442749023 2905 | ], 2906 | [ 2907 | 0.0, 2908 | 0.0, 2909 | 0.0, 2910 | 1.0 2911 | ] 2912 | ] 2913 | }, 2914 | { 2915 | "file_path": "./train/r_97", 2916 | "rotation": 0.012566370614359171, 2917 | "transform_matrix": [ 2918 | [ 2919 | -0.08526185154914856, 2920 | 0.49009639024734497, 2921 | -0.8674882650375366, 2922 | -3.4969570636749268 2923 | ], 2924 | [ 2925 | -0.9963586330413818, 2926 | -0.04193924367427826, 2927 | 0.07423397898674011, 2928 | 0.29924672842025757 2929 | ], 2930 | [ 2931 | 0.0, 2932 | 0.8706587553024292, 2933 | 0.49188753962516785, 2934 | 1.982862114906311 2935 | ], 2936 | [ 2937 | 0.0, 2938 | 0.0, 2939 | 0.0, 2940 | 1.0 2941 | ] 2942 | ] 2943 | }, 2944 | { 2945 | "file_path": "./train/r_98", 2946 | "rotation": 0.012566370614359171, 2947 | "transform_matrix": [ 2948 | [ 2949 | 0.9965562224388123, 2950 | 0.03072895109653473, 2951 | -0.07701651006937027, 2952 | -0.31046348810195923 2953 | ], 2954 | [ 2955 | -0.08292051404714584, 2956 | 0.3693070113658905, 2957 | -0.9256006479263306, 2958 | -3.731215476989746 2959 | ], 2960 | [ 2961 | 0.0, 2962 | 0.9287990927696228, 2963 | 0.37058329582214355, 2964 | 1.4938690662384033 2965 | ], 2966 | [ 2967 | 0.0, 2968 | 0.0, 2969 | 0.0, 2970 | 1.0 2971 | ] 2972 | ] 2973 | }, 2974 | { 2975 | "file_path": "./train/r_99", 2976 | "rotation": 0.012566370614359171, 2977 | "transform_matrix": [ 2978 | [ 2979 | 0.4406329095363617, 2980 | -0.730517566204071, 2981 | 0.5217151641845703, 2982 | 2.1031012535095215 2983 | ], 2984 | [ 2985 | 0.8976874351501465, 2986 | 0.35857704281806946, 2987 | -0.25608566403388977, 2988 | -1.032314419746399 2989 | ], 2990 | [ 2991 | -1.4901161193847656e-08, 2992 | 0.5811769366264343, 2993 | 0.8137771487236023, 2994 | 3.2804408073425293 2995 | ], 2996 | [ 2997 | 0.0, 2998 | 0.0, 2999 | 0.0, 3000 | 1.0 3001 | ] 3002 | ] 3003 | } 3004 | ] 3005 | } 3006 | -------------------------------------------------------------------------------- /imgs-full-demo/1000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/imgs-full-demo/1000.png -------------------------------------------------------------------------------- /imgs-full-demo/10000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/imgs-full-demo/10000.png -------------------------------------------------------------------------------- /imgs-full-demo/100000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/imgs-full-demo/100000.png -------------------------------------------------------------------------------- /imgs-full-demo/1500.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/imgs-full-demo/1500.png -------------------------------------------------------------------------------- /imgs-full-demo/15000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/imgs-full-demo/15000.png -------------------------------------------------------------------------------- /imgs-full-demo/20000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/imgs-full-demo/20000.png -------------------------------------------------------------------------------- /imgs-full-demo/200000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/imgs-full-demo/200000.png -------------------------------------------------------------------------------- /imgs-full-demo/300000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/imgs-full-demo/300000.png -------------------------------------------------------------------------------- /imgs-full-demo/500.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/imgs-full-demo/500.png -------------------------------------------------------------------------------- /imgs-full-demo/5000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/imgs-full-demo/5000.png -------------------------------------------------------------------------------- /imgs-full-demo/50000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/imgs-full-demo/50000.png -------------------------------------------------------------------------------- /rotate360/000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/rotate360/000.png -------------------------------------------------------------------------------- /rotate360/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/rotate360/001.png -------------------------------------------------------------------------------- /rotate360/007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/rotate360/007.png -------------------------------------------------------------------------------- /rotate360/008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/rotate360/008.png -------------------------------------------------------------------------------- /rotate360/015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/rotate360/015.png -------------------------------------------------------------------------------- /rotate360/022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/rotate360/022.png -------------------------------------------------------------------------------- /rotate360/023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shouxieai/nerf/c56f8179fca38c84200e230e7cb1133f765ec998/rotate360/023.png -------------------------------------------------------------------------------- /train-nerf.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import torch 3 | import torch.nn as nn 4 | import torch.optim as optim 5 | from tqdm import tqdm 6 | import cv2 7 | import os 8 | import json 9 | import argparse 10 | import imageio 11 | 12 | # 主要知识点 13 | # 1. 位置编码,Positional Encoding 14 | # - 对于输入的x、y、z坐标,因为是连续的无法进行区分,因此采用ff特征,即傅立叶特征进行编码 15 | # - 编码为cos、sin不同频率的叠加,使得连续值可以具有足够的区分性 16 | # 2. 视图独立性,View Dependent 17 | # - 输入不仅仅是光线采样点的x、y、z坐标,加上了视图依赖,即x、y、z、theta、pi,5d输入,此时多了射线所在视图 18 | # 3. 分层采样,Hierarchical sampling 19 | # - 将渲染分为两级,由于第一级别的模型是均匀采样,而实际会有很多无效的采样(即对颜色没有贡献的区域会占比太多),在模型 20 | # 中看来,就是某些点的梯度为0,对模型训练没有贡献 21 | # - 因此采用两级模型,model、fine,model模型使用均匀采样,推断后得到weights的分布,通过对weights分布进行重采样,使得采样点 22 | # 更加集中在更重要的区域,今儿使得参与训练的点大都是有效的点。所以model作为一级推理,fine则推理重采样后的点 23 | # 24 | # x. 拓展,对于射线的方向和原点的理解,需要具有基本的3d变换知识,建议看GAMES101的前5章补充知识 25 | # PSNR是峰值信噪比,表示重建的逼真程度 26 | # 这三个环节有了,效果就会非常逼真,但是某些细节上还是存在不足。另外训练时间非常关键 27 | 28 | class BlenderProvider: 29 | def __init__(self, root, transforms_file, half_resolution=True): 30 | 31 | self.meta = json.load(open(os.path.join(root, transforms_file), "r")) 32 | self.root = root 33 | self.frames = self.meta["frames"] 34 | self.images = [] 35 | self.poses = [] 36 | self.camera_angle_x = self.meta["camera_angle_x"] 37 | 38 | for frame in self.frames: 39 | image_file = os.path.join(self.root, frame["file_path"] + ".png") 40 | image = imageio.imread(image_file) 41 | 42 | if half_resolution: 43 | image = cv2.resize(image, dsize=None, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA) 44 | 45 | self.images.append(image) 46 | self.poses.append(frame["transform_matrix"]) 47 | 48 | self.poses = np.stack(self.poses) 49 | self.images = (np.stack(self.images) / 255.0).astype(np.float32) 50 | self.width = self.images.shape[2] 51 | self.height = self.images.shape[1] 52 | self.focal = 0.5 * self.width / np.tan(0.5 * self.camera_angle_x) 53 | 54 | alpha = self.images[..., [3]] 55 | rgb = self.images[..., :3] 56 | self.images = rgb * alpha + (1 - alpha) 57 | 58 | 59 | class NeRFDataset: 60 | def __init__(self, provider, batch_size=1024, device="cuda"): 61 | 62 | self.images = provider.images 63 | self.poses = provider.poses 64 | self.focal = provider.focal 65 | self.width = provider.width 66 | self.height = provider.height 67 | self.batch_size = batch_size 68 | self.num_image = len(self.images) 69 | self.precrop_iters = 500 70 | self.precrop_frac = 0.5 71 | self.niter = 0 72 | self.device = device 73 | self.initialize() 74 | 75 | 76 | def initialize(self): 77 | 78 | warange = torch.arange(self.width, dtype=torch.float32, device=self.device) 79 | harange = torch.arange(self.height, dtype=torch.float32, device=self.device) 80 | y, x = torch.meshgrid(harange, warange) 81 | 82 | self.transformed_x = (x - self.width * 0.5) / self.focal 83 | self.transformed_y = (y - self.height * 0.5) / self.focal 84 | 85 | # pre center crop 86 | self.precrop_index = torch.arange(self.width * self.height).view(self.height, self.width) 87 | 88 | dH = int(self.height // 2 * self.precrop_frac) 89 | dW = int(self.width // 2 * self.precrop_frac) 90 | self.precrop_index = self.precrop_index[ 91 | self.height // 2 - dH:self.height // 2 + dH, 92 | self.width // 2 - dW:self.width // 2 + dW 93 | ].reshape(-1) 94 | 95 | poses = torch.cuda.FloatTensor(self.poses, device=self.device) 96 | all_ray_dirs, all_ray_origins = [], [] 97 | 98 | for i in range(len(self.images)): 99 | ray_dirs, ray_origins = self.make_rays(self.transformed_x, self.transformed_y, poses[i]) 100 | all_ray_dirs.append(ray_dirs) 101 | all_ray_origins.append(ray_origins) 102 | 103 | self.all_ray_dirs = torch.stack(all_ray_dirs, dim=0) 104 | self.all_ray_origins = torch.stack(all_ray_origins, dim=0) 105 | self.images = torch.cuda.FloatTensor(self.images, device=self.device).view(self.num_image, -1, 3) 106 | 107 | 108 | def __getitem__(self, index): 109 | self.niter += 1 110 | 111 | ray_dirs = self.all_ray_dirs[index] 112 | ray_oris = self.all_ray_origins[index] 113 | img_pixels = self.images[index] 114 | if self.niter < self.precrop_iters: 115 | ray_dirs = ray_dirs[self.precrop_index] 116 | ray_oris = ray_oris[self.precrop_index] 117 | img_pixels = img_pixels[self.precrop_index] 118 | 119 | nrays = self.batch_size 120 | select_inds = np.random.choice(ray_dirs.shape[0], size=[nrays], replace=False) 121 | ray_dirs = ray_dirs[select_inds] 122 | ray_oris = ray_oris[select_inds] 123 | img_pixels = img_pixels[select_inds] 124 | 125 | # dirs是指:direction 126 | # ori是指: origin 127 | return ray_dirs, ray_oris, img_pixels 128 | 129 | 130 | def __len__(self): 131 | return self.num_image 132 | 133 | 134 | def make_rays(self, x, y, pose): 135 | 136 | # 100, 100, 3 137 | # 坐标系在-y,-z方向上 138 | directions = torch.stack([x, -y, -torch.ones_like(x)], dim=-1) 139 | camera_matrix = pose[:3, :3] 140 | 141 | # 10000 x 3 142 | ray_dirs = directions.reshape(-1, 3) @ camera_matrix.T 143 | ray_origin = pose[:3, 3].view(1, 3).repeat(len(ray_dirs), 1) 144 | return ray_dirs, ray_origin 145 | 146 | 147 | def get_test_item(self, index=0): 148 | 149 | ray_dirs = self.all_ray_dirs[index] 150 | ray_oris = self.all_ray_origins[index] 151 | img_pixels = self.images[index] 152 | 153 | for i in range(0, len(ray_dirs), self.batch_size): 154 | yield ray_dirs[i:i+self.batch_size], ray_oris[i:i+self.batch_size], img_pixels[i:i+self.batch_size] 155 | 156 | 157 | def get_rotate_360_rays(self): 158 | def trans_t(t): 159 | return np.array([ 160 | [1,0,0,0], 161 | [0,1,0,0], 162 | [0,0,1,t], 163 | [0,0,0,1], 164 | ], dtype=np.float32) 165 | 166 | def rot_phi(phi): 167 | return np.array([ 168 | [1,0,0,0], 169 | [0,np.cos(phi),-np.sin(phi),0], 170 | [0,np.sin(phi), np.cos(phi),0], 171 | [0,0,0,1], 172 | ], dtype=np.float32) 173 | 174 | def rot_theta(th) : 175 | return np.array([ 176 | [np.cos(th),0,-np.sin(th),0], 177 | [0,1,0,0], 178 | [np.sin(th),0, np.cos(th),0], 179 | [0,0,0,1], 180 | ], dtype=np.float32) 181 | 182 | def pose_spherical(theta, phi, radius): 183 | c2w = trans_t(radius) 184 | c2w = rot_phi(phi/180.*np.pi) @ c2w 185 | c2w = rot_theta(theta/180.*np.pi) @ c2w 186 | c2w = np.array([[-1,0,0,0],[0,0,1,0],[0,1,0,0],[0,0,0,1]]) @ c2w 187 | return c2w 188 | 189 | for th in np.linspace(-180., 180., 41, endpoint=False): 190 | pose = torch.cuda.FloatTensor(pose_spherical(th, -30., 4.), device=self.device) 191 | 192 | def genfunc(): 193 | ray_dirs, ray_origins = self.make_rays(self.transformed_x, self.transformed_y, pose) 194 | for i in range(0, len(ray_dirs), 1024): 195 | yield ray_dirs[i:i+1024], ray_origins[i:i+1024] 196 | 197 | yield genfunc 198 | 199 | 200 | # Hierarchical sampling (section 5.2) 201 | def sample_pdf(bins, weights, N_samples, det=False): 202 | # Get pdf 203 | device = weights.device 204 | weights = weights + 1e-5 # prevent nans 205 | pdf = weights / torch.sum(weights, -1, keepdim=True) 206 | cdf = torch.cumsum(pdf, -1) 207 | cdf = torch.cat([torch.zeros_like(cdf[...,:1]), cdf], -1) # (batch, len(bins)) 208 | 209 | # Take uniform samples 210 | if det: 211 | u = torch.linspace(0., 1., steps=N_samples, device=device) 212 | u = u.expand(list(cdf.shape[:-1]) + [N_samples]) 213 | else: 214 | u = torch.rand(list(cdf.shape[:-1]) + [N_samples]) 215 | 216 | # Invert CDF 217 | u = u.contiguous() 218 | inds = torch.searchsorted(cdf, u, right=True) 219 | below = torch.max(torch.zeros_like(inds-1), inds-1) 220 | above = torch.min((cdf.shape[-1]-1) * torch.ones_like(inds), inds) 221 | inds_g = torch.stack([below, above], -1) # (batch, N_samples, 2) 222 | 223 | # cdf_g = tf.gather(cdf, inds_g, axis=-1, batch_dims=len(inds_g.shape)-2) 224 | # bins_g = tf.gather(bins, inds_g, axis=-1, batch_dims=len(inds_g.shape)-2) 225 | matched_shape = [inds_g.shape[0], inds_g.shape[1], cdf.shape[-1]] 226 | cdf_g = torch.gather(cdf.unsqueeze(1).expand(matched_shape), 2, inds_g) 227 | bins_g = torch.gather(bins.unsqueeze(1).expand(matched_shape), 2, inds_g) 228 | 229 | denom = (cdf_g[...,1]-cdf_g[...,0]) 230 | denom = torch.where(denom<1e-5, torch.ones_like(denom), denom) 231 | t = (u-cdf_g[...,0])/denom 232 | samples = bins_g[...,0] + t * (bins_g[...,1]-bins_g[...,0]) 233 | return samples 234 | 235 | 236 | def sample_rays(ray_directions, ray_origins, sample_z_vals): 237 | 238 | nrays = len(ray_origins) 239 | sample_z_vals = sample_z_vals.repeat(nrays, 1) 240 | rays = ray_origins[:, None, :] + ray_directions[:, None, :] * sample_z_vals[..., None] 241 | return rays, sample_z_vals 242 | 243 | 244 | def sample_viewdirs(ray_directions): 245 | return ray_directions / torch.norm(ray_directions, dim=-1, keepdim=True) 246 | 247 | 248 | def predict_to_rgb(sigma, rgb, z_vals, raydirs, white_background=False): 249 | 250 | device = sigma.device 251 | delta_prefix = z_vals[..., 1:] - z_vals[..., :-1] 252 | delta_addition = torch.full((z_vals.size(0), 1), 1e10, device=device) 253 | delta = torch.cat([delta_prefix, delta_addition], dim=-1) 254 | delta = delta * torch.norm(raydirs[..., None, :], dim=-1) 255 | 256 | alpha = 1.0 - torch.exp(-sigma * delta) 257 | exp_term = 1.0 - alpha 258 | epsilon = 1e-10 259 | exp_addition = torch.ones(exp_term.size(0), 1, device=device) 260 | exp_term = torch.cat([exp_addition, exp_term + epsilon], dim=-1) 261 | transmittance = torch.cumprod(exp_term, axis=-1)[..., :-1] 262 | 263 | weights = alpha * transmittance 264 | rgb = torch.sum(weights[..., None] * rgb, dim=-2) 265 | depth = torch.sum(weights * z_vals, dim=-1) 266 | acc_map = torch.sum(weights, -1) 267 | 268 | if white_background: 269 | rgb = rgb + (1.0 - acc_map[..., None]) 270 | return rgb, depth, acc_map, weights 271 | 272 | 273 | def render_rays(model, fine, raydirs, rayoris, sample_z_vals, importance=0, white_background=False): 274 | 275 | rays, z_vals = sample_rays(raydirs, rayoris, sample_z_vals) 276 | view_dirs = sample_viewdirs(raydirs) 277 | 278 | sigma, rgb = model(rays, view_dirs) 279 | sigma = sigma.squeeze(dim=-1) 280 | rgb1, depth1, acc_map1, weights1 = predict_to_rgb(sigma, rgb, z_vals, raydirs, white_background) 281 | 282 | # 使用weights1进行重采样 283 | z_vals_mid = .5 * (z_vals[...,1:] + z_vals[...,:-1]) 284 | z_samples = sample_pdf(z_vals_mid, weights1[...,1:-1], importance, det=True) 285 | z_samples = z_samples.detach() 286 | 287 | z_vals, _ = torch.sort(torch.cat([z_vals, z_samples], -1), -1) 288 | rays = rayoris[...,None,:] + raydirs[...,None,:] * z_vals[...,:,None] # [N_rays, N_samples + N_importance, 3] 289 | sigma, rgb = fine(rays, view_dirs) 290 | sigma = sigma.squeeze(dim=-1) 291 | 292 | # 第二次重采样的预测才是最终结果,这是论文中,分层采样环节(Hierarchical sampling) 293 | rgb2, depth2, acc_map2, weights2 = predict_to_rgb(sigma, rgb, z_vals, raydirs, white_background) 294 | return rgb1, rgb2 295 | 296 | # 无视图独立性的head 297 | class NoViewDirHead(nn.Module): 298 | def __init__(self, ninput, noutput): 299 | super().__init__() 300 | 301 | self.head = nn.Linear(ninput, noutput) 302 | 303 | def forward(self, x, view_dirs): 304 | 305 | x = self.head(x) 306 | rgb = x[..., :3].sigmoid() 307 | sigma = x[..., 3].relu() 308 | return sigma, rgb 309 | 310 | # 视图独立性的head 311 | class ViewDenepdentHead(nn.Module): 312 | def __init__(self, ninput, nview): 313 | super().__init__() 314 | 315 | self.feature = nn.Linear(ninput, ninput) 316 | self.view_fc = nn.Linear(ninput + nview, ninput // 2) 317 | self.alpha = nn.Linear(ninput, 1) 318 | self.rgb = nn.Linear(ninput // 2, 3) 319 | 320 | def forward(self, x, view_dirs): 321 | 322 | feature = self.feature(x) 323 | sigma = self.alpha(x).relu() 324 | feature = torch.cat([feature, view_dirs], dim=-1) 325 | feature = self.view_fc(feature).relu() 326 | rgb = self.rgb(feature).sigmoid() 327 | return sigma, rgb 328 | 329 | # 位置编码实现 330 | class Embedder(nn.Module): 331 | def __init__(self, positional_encoding_dim): 332 | super().__init__() 333 | self.positional_encoding_dim = positional_encoding_dim 334 | 335 | def forward(self, x): 336 | 337 | positions = [x] 338 | for i in range(self.positional_encoding_dim): 339 | for fn in [torch.sin, torch.cos]: 340 | positions.append(fn((2.0 ** i) * x)) 341 | 342 | return torch.cat(positions, dim=-1) 343 | 344 | # 基本模型结构 345 | class NeRF(nn.Module): 346 | def __init__(self, x_pedim=10, nwidth=256, ndepth=8, view_pedim=4): 347 | super().__init__() 348 | 349 | xdim = (x_pedim * 2 + 1) * 3 350 | 351 | layers = [] 352 | layers_in = [nwidth] * ndepth 353 | layers_in[0] = xdim 354 | layers_in[5] = nwidth + xdim 355 | 356 | # 模型中特定层[5]会存在concat 357 | for i in range(ndepth): 358 | layers.append(nn.Linear(layers_in[i], nwidth)) 359 | 360 | if view_pedim > 0: 361 | view_dim = (view_pedim * 2 + 1) * 3 362 | self.view_embed = Embedder(view_pedim) 363 | self.head = ViewDenepdentHead(nwidth, view_dim) 364 | else: 365 | self.head = NoViewDirHead(nwidth, 4) 366 | 367 | self.xembed = Embedder(x_pedim) 368 | self.layers = nn.Sequential(*layers) 369 | 370 | 371 | def forward(self, x, view_dirs): 372 | 373 | xshape = x.shape 374 | x = self.xembed(x) 375 | if self.view_embed is not None: 376 | view_dirs = view_dirs[:, None].expand(xshape) 377 | view_dirs = self.view_embed(view_dirs) 378 | 379 | raw_x = x 380 | for i, layer in enumerate(self.layers): 381 | x = torch.relu(layer(x)) 382 | 383 | if i == 4: 384 | x = torch.cat([x, raw_x], axis=-1) 385 | 386 | return self.head(x, view_dirs) 387 | 388 | 389 | def train(): 390 | 391 | pbar = tqdm(range(1, maxiters)) 392 | for global_step in pbar: 393 | 394 | idx = np.random.randint(0, len(trainset)) 395 | raydirs, rayoris, imagepixels = trainset[idx] 396 | 397 | rgb1, rgb2 = render_rays(model, fine, raydirs, rayoris, sample_z_vals, importance, white_background) 398 | loss1 = ((rgb1 - imagepixels)**2).mean() 399 | loss2 = ((rgb2 - imagepixels)**2).mean() 400 | psnr = -10. * torch.log(loss2.detach()) / np.log(10.) 401 | loss = loss1 + loss2 402 | 403 | optimizer.zero_grad() 404 | loss.backward() 405 | optimizer.step() 406 | pbar.set_description(f"{global_step} / {maxiters}, Loss: {loss.item():.6f}, PSNR: {psnr.item():.6f}") 407 | 408 | decay_rate = 0.1 409 | new_lrate = lrate * (decay_rate ** (global_step / lrate_decay)) 410 | for param_group in optimizer.param_groups: 411 | param_group['lr'] = new_lrate 412 | 413 | if global_step % 5000 == 0 or global_step == 500: 414 | 415 | imgpath = f"imgs/{global_step:02d}.png" 416 | pthpath = f"ckpt/{global_step:02d}.pth" 417 | model.eval() 418 | with torch.no_grad(): 419 | rgbs, imgpixels = [], [] 420 | for raydirs, rayoris, imagepixels in trainset.get_test_item(): 421 | 422 | rgb1, rgb2 = render_rays(model, fine, raydirs, rayoris, sample_z_vals, importance, white_background) 423 | rgbs.append(rgb2) 424 | imgpixels.append(imagepixels) 425 | 426 | rgb = torch.cat(rgbs, dim=0) 427 | imgpixels = torch.cat(imgpixels, dim=0) 428 | loss = ((rgb - imgpixels)**2).mean() 429 | psnr = -10. * torch.log(loss) / np.log(10.) 430 | 431 | print(f"Save image {imgpath}, Loss: {loss.item():.6f}, PSNR: {psnr.item():.6f}") 432 | model.train() 433 | 434 | temp_image = (rgb.view(height, width, 3).cpu().numpy() * 255).astype(np.uint8) 435 | cv2.imwrite(imgpath, temp_image[..., ::-1]) 436 | torch.save([model.state_dict(), fine.state_dict()], pthpath) 437 | 438 | 439 | def make_video360(): 440 | 441 | mstate, fstate = torch.load(args.ckpt, map_location="cpu") 442 | model.load_state_dict(mstate) 443 | fine.load_state_dict(fstate) 444 | model.eval() 445 | fine.eval() 446 | imagelist = [] 447 | 448 | for i, gfn in tqdm(enumerate(trainset.get_rotate_360_rays()), desc="Rendering"): 449 | 450 | with torch.no_grad(): 451 | rgbs = [] 452 | for raydirs, rayoris in gfn(): 453 | rgb1, rgb2 = render_rays(model, fine, raydirs, rayoris, sample_z_vals, importance, white_background) 454 | rgbs.append(rgb2) 455 | 456 | rgb = torch.cat(rgbs, dim=0) 457 | 458 | rgb = (rgb.view(height, width, 3).cpu().numpy() * 255).astype(np.uint8) 459 | file = f"rotate360/{i:03d}.png" 460 | 461 | print(f"Rendering to {file}") 462 | cv2.imwrite(file, rgb[..., ::-1]) 463 | imagelist.append(rgb) 464 | 465 | video_file = f"videos/rotate360.mp4" 466 | print(f"Write imagelist to video file {video_file}") 467 | imageio.mimwrite(video_file, imagelist, fps=30, quality=10) 468 | 469 | 470 | if __name__ == "__main__": 471 | 472 | parser = argparse.ArgumentParser() 473 | parser.add_argument("--datadir", type=str, default='data/nerf_synthetic/lego', help='input data directory') 474 | parser.add_argument("--make-video360", action="store_true", help="make 360 rotation video") 475 | parser.add_argument("--half-resolution", action="store_true", help="use half resolution") 476 | parser.add_argument("--ckpt", default="300000.pth", type=str, help="model file used to make 360 rotation video") 477 | args = parser.parse_args() 478 | 479 | device = "cuda:0" 480 | maxiters = 100000 + 1 481 | batch_size = 1024 482 | lrate_decay = 500 * 1000 483 | lrate = 5e-4 484 | importance = 128 485 | num_samples = 64 # 每个光线的采样数量 486 | positional_encoding_dim = 10 # 位置编码维度 487 | view_encoding_dim = 4 # View Dependent对应的位置编码维度 488 | white_background = True # 图片背景是白色的 489 | half_resolution = args.half_resolution # 只进行一半分辨率的重建(400x400),False表示(800x800)分辨率 490 | sample_z_vals = torch.linspace(2.0, 6.0, num_samples, device=device).view(1, num_samples) 491 | 492 | model = NeRF( 493 | x_pedim = positional_encoding_dim, 494 | view_pedim = view_encoding_dim 495 | ).to(device) 496 | params = list(model.parameters()) 497 | 498 | # 使用model产生的权重进行重采样,然后再推理,所以这个才是效果更好的模型 499 | fine = NeRF( 500 | x_pedim = positional_encoding_dim, 501 | view_pedim = view_encoding_dim 502 | ).to(device) 503 | params.extend(list(fine.parameters())) 504 | 505 | optimizer = optim.Adam(params, lrate) 506 | os.makedirs("imgs", exist_ok=True) 507 | os.makedirs("rotate360", exist_ok=True) 508 | os.makedirs("videos", exist_ok=True) 509 | os.makedirs("ckpt", exist_ok=True) 510 | 511 | print(model) 512 | 513 | provider = BlenderProvider("data/nerf_synthetic/lego", "transforms_train.json", half_resolution) 514 | trainset = NeRFDataset(provider, batch_size, device) 515 | width = trainset.width 516 | height = trainset.height 517 | 518 | if args.make_video360: 519 | make_video360() 520 | else: 521 | train() 522 | 523 | print("Program done.") --------------------------------------------------------------------------------