From bcb670095eefaf798d1cdde4592f2658a6b31085 Mon Sep 17 00:00:00 2001 From: bmild Date: Thu, 19 Mar 2020 23:43:48 +0000 Subject: [PATCH] v0.1 release to public --- .gitignore | 9 + .gitmodules | 0 LICENSE | 21 + README.md | 164 ++++ configs/config_fern.txt | 15 + configs/config_flower.txt | 15 + configs/config_fortress.txt | 15 + configs/config_horns.txt | 15 + configs/config_lego.txt | 15 + configs/config_trex.txt | 15 + download_example_data.sh | 6 + imgs/pipeline.jpg | Bin 0 -> 350277 bytes load_blender.py | 91 +++ load_deepvoxels.py | 110 +++ load_llff.py | 319 ++++++++ requirements.txt | 6 + run_nerf.py | 736 ++++++++++++++++++ run_nerf_helpers.py | 242 ++++++ torchsearchsorted/.gitignore | 158 ++++ torchsearchsorted/LICENSE | 29 + torchsearchsorted/README.md | 89 +++ torchsearchsorted/examples/benchmark.py | 71 ++ torchsearchsorted/examples/test.py | 66 ++ torchsearchsorted/setup.py | 41 + .../src/cpu/searchsorted_cpu_wrapper.cpp | 126 +++ .../src/cpu/searchsorted_cpu_wrapper.h | 12 + .../src/cuda/searchsorted_cuda_kernel.cu | 142 ++++ .../src/cuda/searchsorted_cuda_kernel.h | 12 + .../src/cuda/searchsorted_cuda_wrapper.cpp | 20 + .../src/cuda/searchsorted_cuda_wrapper.h | 13 + .../src/torchsearchsorted/__init__.py | 2 + .../src/torchsearchsorted/searchsorted.py | 53 ++ .../src/torchsearchsorted/utils.py | 15 + torchsearchsorted/test/conftest.py | 11 + torchsearchsorted/test/test_searchsorted.py | 44 ++ 35 files changed, 2698 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 LICENSE create mode 100644 README.md create mode 100644 configs/config_fern.txt create mode 100644 configs/config_flower.txt create mode 100644 configs/config_fortress.txt create mode 100644 configs/config_horns.txt create mode 100644 configs/config_lego.txt create mode 100644 configs/config_trex.txt create mode 100644 download_example_data.sh create mode 100644 imgs/pipeline.jpg create mode 100644 load_blender.py create mode 100644 load_deepvoxels.py create mode 100644 load_llff.py create mode 100644 requirements.txt create mode 100644 run_nerf.py create mode 100644 run_nerf_helpers.py create mode 100644 torchsearchsorted/.gitignore create mode 100644 torchsearchsorted/LICENSE create mode 100644 torchsearchsorted/README.md create mode 100644 torchsearchsorted/examples/benchmark.py create mode 100644 torchsearchsorted/examples/test.py create mode 100644 torchsearchsorted/setup.py create mode 100644 torchsearchsorted/src/cpu/searchsorted_cpu_wrapper.cpp create mode 100644 torchsearchsorted/src/cpu/searchsorted_cpu_wrapper.h create mode 100644 torchsearchsorted/src/cuda/searchsorted_cuda_kernel.cu create mode 100644 torchsearchsorted/src/cuda/searchsorted_cuda_kernel.h create mode 100644 torchsearchsorted/src/cuda/searchsorted_cuda_wrapper.cpp create mode 100644 torchsearchsorted/src/cuda/searchsorted_cuda_wrapper.h create mode 100644 torchsearchsorted/src/torchsearchsorted/__init__.py create mode 100644 torchsearchsorted/src/torchsearchsorted/searchsorted.py create mode 100644 torchsearchsorted/src/torchsearchsorted/utils.py create mode 100644 torchsearchsorted/test/conftest.py create mode 100644 torchsearchsorted/test/test_searchsorted.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..be8a80c --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +**/.ipynb_checkpoints +**/__pycache__ +*.png +*.mp4 +*.npy +*.npz +*.dae +data/* +logs/* \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..e69de29 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..560252e --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 bmild + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..5d87d23 --- /dev/null +++ b/README.md @@ -0,0 +1,164 @@ +# NeRF-pytorch + + +[NeRF](http://www.matthewtancik.com/nerf) is a method that achieves state-of-the-art results for synthesizing novel views of complex scenes. Here are some videos generated by this repository (pre-trained models are provided below): + +![](https://user-images.githubusercontent.com/7057863/78472232-cf374a00-7769-11ea-8871-0bc710951839.gif) +![](https://user-images.githubusercontent.com/7057863/78472235-d1010d80-7769-11ea-9be9-51365180e063.gif) + +This project is a faithful PyTorch implementation of [NeRF](http://www.matthewtancik.com/nerf) that **reproduces** the results while running **1.3 times faster**. The code is tested to match authors' Tensorflow implementation [here](https://github.com/bmild/nerf) numerically. + +## Installation + +``` +git clone https://github.com/yenchenlin/nerf-pytorch.git +cd nerf-pytorch +pip install -r requirements.txt +cd torchsearchsorted +pip install . +cd ../ +``` + +
+ Dependencies (click to expand) + + ## Dependencies + - PyTorch 1.4 + - matplotlib + - numpy + - imageio + - imageio-ffmpeg + - configargparse + +The LLFF data loader requires ImageMagick. + +You will also need the [LLFF code](http://github.com/fyusion/llff) (and COLMAP) set up to compute poses if you want to run on your own real data. + +
+ +## How To Run? + +### Quick Start + +Download data for two example datasets: `lego` and `fern` +``` +bash download_example_data.sh +``` + +To train a low-res `lego` NeRF: +``` +python run_nerf_torch.py --config configs/config_lego.txt +``` +After training for 100k iterations (~4 hours on a single 2080 Ti), you can find the following video at `logs/lego_test/lego_test_spiral_100000_rgb.mp4`. + +![](https://user-images.githubusercontent.com/7057863/78473103-9353b300-7770-11ea-98ed-6ba2d877b62c.gif) + +--- + +To train a low-res `fern` NeRF: +``` +python run_nerf_torch.py --config configs/config_fern.txt +``` +After training for 200k iterations (~8 hours on a single 2080 Ti), you can find the following video at `logs/fern_test/fern_test_spiral_200000_rgb.mp4` and `logs/fern_test/fern_test_spiral_200000_disp.mp4` + +![](https://user-images.githubusercontent.com/7057863/78473081-58ea1600-7770-11ea-92ce-2bbf6a3f9add.gif) + +--- + +### More Datasets +To play with other scenes presented in the paper, download the data [here](https://drive.google.com/drive/folders/128yBriW1IG_3NJ5Rp7APSTZsJqdJdfc1). Place the downloaded dataset according to the following directory structure: +``` +├── configs +│   ├── ... +│   +├── data +│   ├── nerf_llff_data +│   │   └── fern +│   │  └── flower # downloaded llff dataset +│   │  └── horns # downloaded llff dataset +| | └── ... +| ├── nerf_synthetic +| | └── lego +| | └── ship # downloaded synthetic dataset +| | └── ... +``` + +--- + +To train NeRF on different datasets: + +``` +python run_nerf_torch.py --config configs/config_{DATASET}.txt +``` + +replace `{DATASET}` with `trex` | `horns` | `flower` | `fortress` | `lego` | etc. + +--- + +To test NeRF trained on different datasets: + +``` +python run_nerf_torch.py --config configs/config_{DATASET}.txt --render_only +``` + +replace `{DATASET}` with `trex` | `horns` | `flower` | `fortress` | `lego` | etc. + + +### Pre-trained Models + +You can download the pre-trained models [here](https://drive.google.com/drive/folders/1jIr8dkvefrQmv737fFm2isiT6tqpbTbv?usp=sharing). Place the downloaded directory in `./logs` in order to test it later. See the following directory structure for an example: + +``` +├── logs +│   ├── fern_test +│   ├── flower_test # downloaded logs +│ ├── trex_test # downloaded logs +``` + +### Reproducibility + +Tests that ensure the results of all functions and training loop match the official implentation are contained in a different branch `reproduce`. One can check it out and run the tests: +``` +git checkout reproduce +py.test +``` + +## Method + +[NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis](http://tancik.com/nerf) + [Ben Mildenhall](https://people.eecs.berkeley.edu/~bmild/)\*1, + [Pratul P. Srinivasan](https://people.eecs.berkeley.edu/~pratul/)\*1, + [Matthew Tancik](http://tancik.com/)\*1, + [Jonathan T. Barron](http://jonbarron.info/)2, + [Ravi Ramamoorthi](http://cseweb.ucsd.edu/~ravir/)3, + [Ren Ng](https://www2.eecs.berkeley.edu/Faculty/Homepages/yirenng.html)1
+ 1UC Berkeley, 2Google Research, 3UC San Diego + \*denotes equal contribution + + + +> A neural radiance field is a simple fully connected network (weights are ~5MB) trained to reproduce input views of a single scene using a rendering loss. The network directly maps from spatial location and viewing direction (5D input) to color and opacity (4D output), acting as the "volume" so we can use volume rendering to differentiably render new views + + +## Citation +Kudos to the authors for their amazing results: +``` +@misc{mildenhall2020nerf, + title={NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis}, + author={Ben Mildenhall and Pratul P. Srinivasan and Matthew Tancik and Jonathan T. Barron and Ravi Ramamoorthi and Ren Ng}, + year={2020}, + eprint={2003.08934}, + archivePrefix={arXiv}, + primaryClass={cs.CV} +} +``` + +However, if you find this implementation or pre-trained models helpful, please consider to cite: +``` +@misc{lin2020nerfpytorch, + title={NeRF-pytorch}, + author={Yen-Chen, Lin}, + howpublished={\url{https://github.com/yenchenlin/nerf-pytorch/}}, + year={2020} +} +``` diff --git a/configs/config_fern.txt b/configs/config_fern.txt new file mode 100644 index 0000000..a044d2b --- /dev/null +++ b/configs/config_fern.txt @@ -0,0 +1,15 @@ +expname = fern_test +basedir = ./logs +datadir = ./data/nerf_llff_data/fern +dataset_type = llff + +factor = 8 +llffhold = 8 + +N_rand = 1024 +N_samples = 64 +N_importance = 64 + +use_viewdirs = True +raw_noise_std = 1e0 + diff --git a/configs/config_flower.txt b/configs/config_flower.txt new file mode 100644 index 0000000..43db6a8 --- /dev/null +++ b/configs/config_flower.txt @@ -0,0 +1,15 @@ +expname = flower_test +basedir = ./logs +datadir = ./data/nerf_llff_data/flower +dataset_type = llff + +factor = 8 +llffhold = 8 + +N_rand = 1024 +N_samples = 64 +N_importance = 64 + +use_viewdirs = True +raw_noise_std = 1e0 + diff --git a/configs/config_fortress.txt b/configs/config_fortress.txt new file mode 100644 index 0000000..1cf415e --- /dev/null +++ b/configs/config_fortress.txt @@ -0,0 +1,15 @@ +expname = fortress_test +basedir = ./logs +datadir = ./data/nerf_llff_data/fortress +dataset_type = llff + +factor = 8 +llffhold = 8 + +N_rand = 1024 +N_samples = 64 +N_importance = 64 + +use_viewdirs = True +raw_noise_std = 1e0 + diff --git a/configs/config_horns.txt b/configs/config_horns.txt new file mode 100644 index 0000000..3f7d64b --- /dev/null +++ b/configs/config_horns.txt @@ -0,0 +1,15 @@ +expname = horns_test +basedir = ./logs +datadir = ./data/nerf_llff_data/horns +dataset_type = llff + +factor = 8 +llffhold = 8 + +N_rand = 1024 +N_samples = 64 +N_importance = 64 + +use_viewdirs = True +raw_noise_std = 1e0 + diff --git a/configs/config_lego.txt b/configs/config_lego.txt new file mode 100644 index 0000000..20e0f42 --- /dev/null +++ b/configs/config_lego.txt @@ -0,0 +1,15 @@ +expname = lego_test +basedir = ./logs +datadir = ./data/nerf_synthetic/lego +dataset_type = blender + +half_res = True + +N_samples = 64 +N_importance = 64 + +use_viewdirs = True + +white_bkgd = True + +N_rand = 1024 \ No newline at end of file diff --git a/configs/config_trex.txt b/configs/config_trex.txt new file mode 100644 index 0000000..cb5c717 --- /dev/null +++ b/configs/config_trex.txt @@ -0,0 +1,15 @@ +expname = trex_test +basedir = ./logs +datadir = ./data/nerf_llff_data/trex +dataset_type = llff + +factor = 8 +llffhold = 8 + +N_rand = 1024 +N_samples = 64 +N_importance = 64 + +use_viewdirs = True +raw_noise_std = 1e0 + diff --git a/download_example_data.sh b/download_example_data.sh new file mode 100644 index 0000000..2487811 --- /dev/null +++ b/download_example_data.sh @@ -0,0 +1,6 @@ +wget https://people.eecs.berkeley.edu/~bmild/nerf/tiny_nerf_data.npz +mkdir -p data +cd data +wget https://people.eecs.berkeley.edu/~bmild/nerf/nerf_example_data.zip +unzip nerf_example_data.zip +cd .. diff --git a/imgs/pipeline.jpg b/imgs/pipeline.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab8bb735dafd3a3977a43252384cbf8487c20916 GIT binary patch literal 350277 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%0A;*5i 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 X^ee#l4QG5%Q-76Z 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­lTnd0{QsKjo{ZHSCat412#2IB;Z8O7i4Lq;rqZ` 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⪚_1H&jMVZAlCcqC+s)WXy=i1jD-$*TWBE$C0j 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 literal 0 HcmV?d00001 diff --git a/load_blender.py b/load_blender.py new file mode 100644 index 0000000..1caa8e5 --- /dev/null +++ b/load_blender.py @@ -0,0 +1,91 @@ +import os +import torch +import numpy as np +import imageio +import json +import torch.nn.functional as F +import cv2 + + +trans_t = lambda t : torch.Tensor([ + [1,0,0,0], + [0,1,0,0], + [0,0,1,t], + [0,0,0,1]]).float() + +rot_phi = lambda phi : torch.Tensor([ + [1,0,0,0], + [0,np.cos(phi),-np.sin(phi),0], + [0,np.sin(phi), np.cos(phi),0], + [0,0,0,1]]).float() + +rot_theta = lambda th : torch.Tensor([ + [np.cos(th),0,-np.sin(th),0], + [0,1,0,0], + [np.sin(th),0, np.cos(th),0], + [0,0,0,1]]).float() + + +def pose_spherical(theta, phi, radius): + c2w = trans_t(radius) + c2w = rot_phi(phi/180.*np.pi) @ c2w + c2w = rot_theta(theta/180.*np.pi) @ c2w + c2w = torch.Tensor(np.array([[-1,0,0,0],[0,0,1,0],[0,1,0,0],[0,0,0,1]])) @ c2w + return c2w + + +def load_blender_data(basedir, half_res=False, testskip=1): + splits = ['train', 'val', 'test'] + metas = {} + for s in splits: + with open(os.path.join(basedir, 'transforms_{}.json'.format(s)), 'r') as fp: + metas[s] = json.load(fp) + + all_imgs = [] + all_poses = [] + counts = [0] + for s in splits: + meta = metas[s] + imgs = [] + poses = [] + if s=='train' or testskip==0: + skip = 1 + else: + skip = testskip + + for frame in meta['frames'][::skip]: + fname = os.path.join(basedir, frame['file_path'] + '.png') + imgs.append(imageio.imread(fname)) + poses.append(np.array(frame['transform_matrix'])) + imgs = (np.array(imgs) / 255.).astype(np.float32) # keep all 4 channels (RGBA) + poses = np.array(poses).astype(np.float32) + counts.append(counts[-1] + imgs.shape[0]) + all_imgs.append(imgs) + all_poses.append(poses) + + i_split = [np.arange(counts[i], counts[i+1]) for i in range(3)] + + imgs = np.concatenate(all_imgs, 0) + poses = np.concatenate(all_poses, 0) + + H, W = imgs[0].shape[:2] + camera_angle_x = float(meta['camera_angle_x']) + focal = .5 * W / np.tan(.5 * camera_angle_x) + + render_poses = torch.stack([pose_spherical(angle, -30.0, 4.0) for angle in np.linspace(-180,180,40+1)[:-1]], 0) + + if half_res: + H = H//2 + W = W//2 + focal = focal/2. + + imgs_half_res = np.zeros((imgs.shape[0], H, W, 4)) + for i, img in enumerate(imgs): + imgs_half_res[i] = cv2.resize(img, (H, W), interpolation=cv2.INTER_AREA) + imgs = imgs_half_res + # imgs = tf.image.resize_area(imgs, [400, 400]).numpy() + + + return imgs, poses, render_poses, [H, W, focal], i_split + + diff --git a/load_deepvoxels.py b/load_deepvoxels.py new file mode 100644 index 0000000..deb2a9c --- /dev/null +++ b/load_deepvoxels.py @@ -0,0 +1,110 @@ +import os +import numpy as np +import imageio + + +def load_dv_data(scene='cube', basedir='/data/deepvoxels', testskip=8): + + + def parse_intrinsics(filepath, trgt_sidelength, invert_y=False): + # Get camera intrinsics + with open(filepath, 'r') as file: + f, cx, cy = list(map(float, file.readline().split()))[:3] + grid_barycenter = np.array(list(map(float, file.readline().split()))) + near_plane = float(file.readline()) + scale = float(file.readline()) + height, width = map(float, file.readline().split()) + + try: + world2cam_poses = int(file.readline()) + except ValueError: + world2cam_poses = None + + if world2cam_poses is None: + world2cam_poses = False + + world2cam_poses = bool(world2cam_poses) + + print(cx,cy,f,height,width) + + cx = cx / width * trgt_sidelength + cy = cy / height * trgt_sidelength + f = trgt_sidelength / height * f + + fx = f + if invert_y: + fy = -f + else: + fy = f + + # Build the intrinsic matrices + full_intrinsic = np.array([[fx, 0., cx, 0.], + [0., fy, cy, 0], + [0., 0, 1, 0], + [0, 0, 0, 1]]) + + return full_intrinsic, grid_barycenter, scale, near_plane, world2cam_poses + + + def load_pose(filename): + assert os.path.isfile(filename) + nums = open(filename).read().split() + return np.array([float(x) for x in nums]).reshape([4,4]).astype(np.float32) + + + H = 512 + W = 512 + deepvoxels_base = '{}/train/{}/'.format(basedir, scene) + + full_intrinsic, grid_barycenter, scale, near_plane, world2cam_poses = parse_intrinsics(os.path.join(deepvoxels_base, 'intrinsics.txt'), H) + print(full_intrinsic, grid_barycenter, scale, near_plane, world2cam_poses) + focal = full_intrinsic[0,0] + print(H, W, focal) + + + def dir2poses(posedir): + poses = np.stack([load_pose(os.path.join(posedir, f)) for f in sorted(os.listdir(posedir)) if f.endswith('txt')], 0) + transf = np.array([ + [1,0,0,0], + [0,-1,0,0], + [0,0,-1,0], + [0,0,0,1.], + ]) + poses = poses @ transf + poses = poses[:,:3,:4].astype(np.float32) + return poses + + posedir = os.path.join(deepvoxels_base, 'pose') + poses = dir2poses(posedir) + testposes = dir2poses('{}/test/{}/pose'.format(basedir, scene)) + testposes = testposes[::testskip] + valposes = dir2poses('{}/validation/{}/pose'.format(basedir, scene)) + valposes = valposes[::testskip] + + imgfiles = [f for f in sorted(os.listdir(os.path.join(deepvoxels_base, 'rgb'))) if f.endswith('png')] + imgs = np.stack([imageio.imread(os.path.join(deepvoxels_base, 'rgb', f))/255. for f in imgfiles], 0).astype(np.float32) + + + testimgd = '{}/test/{}/rgb'.format(basedir, scene) + imgfiles = [f for f in sorted(os.listdir(testimgd)) if f.endswith('png')] + testimgs = np.stack([imageio.imread(os.path.join(testimgd, f))/255. for f in imgfiles[::testskip]], 0).astype(np.float32) + + valimgd = '{}/validation/{}/rgb'.format(basedir, scene) + imgfiles = [f for f in sorted(os.listdir(valimgd)) if f.endswith('png')] + valimgs = np.stack([imageio.imread(os.path.join(valimgd, f))/255. for f in imgfiles[::testskip]], 0).astype(np.float32) + + all_imgs = [imgs, valimgs, testimgs] + counts = [0] + [x.shape[0] for x in all_imgs] + counts = np.cumsum(counts) + i_split = [np.arange(counts[i], counts[i+1]) for i in range(3)] + + imgs = np.concatenate(all_imgs, 0) + poses = np.concatenate([poses, valposes, testposes], 0) + + render_poses = testposes + + print(poses.shape, imgs.shape) + + return imgs, poses, render_poses, [H,W,focal], i_split + + diff --git a/load_llff.py b/load_llff.py new file mode 100644 index 0000000..98b7916 --- /dev/null +++ b/load_llff.py @@ -0,0 +1,319 @@ +import numpy as np +import os, imageio + + +########## Slightly modified version of LLFF data loading code +########## see https://github.com/Fyusion/LLFF for original + +def _minify(basedir, factors=[], resolutions=[]): + needtoload = False + for r in factors: + imgdir = os.path.join(basedir, 'images_{}'.format(r)) + if not os.path.exists(imgdir): + needtoload = True + for r in resolutions: + imgdir = os.path.join(basedir, 'images_{}x{}'.format(r[1], r[0])) + if not os.path.exists(imgdir): + needtoload = True + if not needtoload: + return + + from shutil import copy + from subprocess import check_output + + imgdir = os.path.join(basedir, 'images') + imgs = [os.path.join(imgdir, f) for f in sorted(os.listdir(imgdir))] + imgs = [f for f in imgs if any([f.endswith(ex) for ex in ['JPG', 'jpg', 'png', 'jpeg', 'PNG']])] + imgdir_orig = imgdir + + wd = os.getcwd() + + for r in factors + resolutions: + if isinstance(r, int): + name = 'images_{}'.format(r) + resizearg = '{}%'.format(100./r) + else: + name = 'images_{}x{}'.format(r[1], r[0]) + resizearg = '{}x{}'.format(r[1], r[0]) + imgdir = os.path.join(basedir, name) + if os.path.exists(imgdir): + continue + + print('Minifying', r, basedir) + + os.makedirs(imgdir) + check_output('cp {}/* {}'.format(imgdir_orig, imgdir), shell=True) + + ext = imgs[0].split('.')[-1] + args = ' '.join(['mogrify', '-resize', resizearg, '-format', 'png', '*.{}'.format(ext)]) + print(args) + os.chdir(imgdir) + check_output(args, shell=True) + os.chdir(wd) + + if ext != 'png': + check_output('rm {}/*.{}'.format(imgdir, ext), shell=True) + print('Removed duplicates') + print('Done') + + + + +def _load_data(basedir, factor=None, width=None, height=None, load_imgs=True): + + poses_arr = np.load(os.path.join(basedir, 'poses_bounds.npy')) + poses = poses_arr[:, :-2].reshape([-1, 3, 5]).transpose([1,2,0]) + bds = poses_arr[:, -2:].transpose([1,0]) + + img0 = [os.path.join(basedir, 'images', f) for f in sorted(os.listdir(os.path.join(basedir, 'images'))) \ + if f.endswith('JPG') or f.endswith('jpg') or f.endswith('png')][0] + sh = imageio.imread(img0).shape + + sfx = '' + + if factor is not None: + sfx = '_{}'.format(factor) + _minify(basedir, factors=[factor]) + factor = factor + elif height is not None: + factor = sh[0] / float(height) + width = int(sh[1] / factor) + _minify(basedir, resolutions=[[height, width]]) + sfx = '_{}x{}'.format(width, height) + elif width is not None: + factor = sh[1] / float(width) + height = int(sh[0] / factor) + _minify(basedir, resolutions=[[height, width]]) + sfx = '_{}x{}'.format(width, height) + else: + factor = 1 + + imgdir = os.path.join(basedir, 'images' + sfx) + if not os.path.exists(imgdir): + print( imgdir, 'does not exist, returning' ) + return + + imgfiles = [os.path.join(imgdir, f) for f in sorted(os.listdir(imgdir)) if f.endswith('JPG') or f.endswith('jpg') or f.endswith('png')] + if poses.shape[-1] != len(imgfiles): + print( 'Mismatch between imgs {} and poses {} !!!!'.format(len(imgfiles), poses.shape[-1]) ) + return + + sh = imageio.imread(imgfiles[0]).shape + poses[:2, 4, :] = np.array(sh[:2]).reshape([2, 1]) + poses[2, 4, :] = poses[2, 4, :] * 1./factor + + if not load_imgs: + return poses, bds + + def imread(f): + if f.endswith('png'): + return imageio.imread(f, ignoregamma=True) + else: + return imageio.imread(f) + + imgs = imgs = [imread(f)[...,:3]/255. for f in imgfiles] + imgs = np.stack(imgs, -1) + + print('Loaded image data', imgs.shape, poses[:,-1,0]) + return poses, bds, imgs + + + + + + +def normalize(x): + return x / np.linalg.norm(x) + +def viewmatrix(z, up, pos): + vec2 = normalize(z) + vec1_avg = up + vec0 = normalize(np.cross(vec1_avg, vec2)) + vec1 = normalize(np.cross(vec2, vec0)) + m = np.stack([vec0, vec1, vec2, pos], 1) + return m + +def ptstocam(pts, c2w): + tt = np.matmul(c2w[:3,:3].T, (pts-c2w[:3,3])[...,np.newaxis])[...,0] + return tt + +def poses_avg(poses): + + hwf = poses[0, :3, -1:] + + center = poses[:, :3, 3].mean(0) + vec2 = normalize(poses[:, :3, 2].sum(0)) + up = poses[:, :3, 1].sum(0) + c2w = np.concatenate([viewmatrix(vec2, up, center), hwf], 1) + + return c2w + + + +def render_path_spiral(c2w, up, rads, focal, zdelta, zrate, rots, N): + render_poses = [] + rads = np.array(list(rads) + [1.]) + hwf = c2w[:,4:5] + + for theta in np.linspace(0., 2. * np.pi * rots, N+1)[:-1]: + c = np.dot(c2w[:3,:4], np.array([np.cos(theta), -np.sin(theta), -np.sin(theta*zrate), 1.]) * rads) + z = normalize(c - np.dot(c2w[:3,:4], np.array([0,0,-focal, 1.]))) + render_poses.append(np.concatenate([viewmatrix(z, up, c), hwf], 1)) + return render_poses + + + +def recenter_poses(poses): + + poses_ = poses+0 + bottom = np.reshape([0,0,0,1.], [1,4]) + c2w = poses_avg(poses) + c2w = np.concatenate([c2w[:3,:4], bottom], -2) + bottom = np.tile(np.reshape(bottom, [1,1,4]), [poses.shape[0],1,1]) + poses = np.concatenate([poses[:,:3,:4], bottom], -2) + + poses = np.linalg.inv(c2w) @ poses + poses_[:,:3,:4] = poses[:,:3,:4] + poses = poses_ + return poses + + +##################### + + +def spherify_poses(poses, bds): + + p34_to_44 = lambda p : np.concatenate([p, np.tile(np.reshape(np.eye(4)[-1,:], [1,1,4]), [p.shape[0], 1,1])], 1) + + rays_d = poses[:,:3,2:3] + rays_o = poses[:,:3,3:4] + + def min_line_dist(rays_o, rays_d): + A_i = np.eye(3) - rays_d * np.transpose(rays_d, [0,2,1]) + b_i = -A_i @ rays_o + pt_mindist = np.squeeze(-np.linalg.inv((np.transpose(A_i, [0,2,1]) @ A_i).mean(0)) @ (b_i).mean(0)) + return pt_mindist + + pt_mindist = min_line_dist(rays_o, rays_d) + + center = pt_mindist + up = (poses[:,:3,3] - center).mean(0) + + vec0 = normalize(up) + vec1 = normalize(np.cross([.1,.2,.3], vec0)) + vec2 = normalize(np.cross(vec0, vec1)) + pos = center + c2w = np.stack([vec1, vec2, vec0, pos], 1) + + poses_reset = np.linalg.inv(p34_to_44(c2w[None])) @ p34_to_44(poses[:,:3,:4]) + + rad = np.sqrt(np.mean(np.sum(np.square(poses_reset[:,:3,3]), -1))) + + sc = 1./rad + poses_reset[:,:3,3] *= sc + bds *= sc + rad *= sc + + centroid = np.mean(poses_reset[:,:3,3], 0) + zh = centroid[2] + radcircle = np.sqrt(rad**2-zh**2) + new_poses = [] + + for th in np.linspace(0.,2.*np.pi, 120): + + camorigin = np.array([radcircle * np.cos(th), radcircle * np.sin(th), zh]) + up = np.array([0,0,-1.]) + + vec2 = normalize(camorigin) + vec0 = normalize(np.cross(vec2, up)) + vec1 = normalize(np.cross(vec2, vec0)) + pos = camorigin + p = np.stack([vec0, vec1, vec2, pos], 1) + + new_poses.append(p) + + new_poses = np.stack(new_poses, 0) + + new_poses = np.concatenate([new_poses, np.broadcast_to(poses[0,:3,-1:], new_poses[:,:3,-1:].shape)], -1) + poses_reset = np.concatenate([poses_reset[:,:3,:4], np.broadcast_to(poses[0,:3,-1:], poses_reset[:,:3,-1:].shape)], -1) + + return poses_reset, new_poses, bds + + +def load_llff_data(basedir, factor=8, recenter=True, bd_factor=.75, spherify=False, path_zflat=False): + + + poses, bds, imgs = _load_data(basedir, factor=factor) # factor=8 downsamples original imgs by 8x + print('Loaded', basedir, bds.min(), bds.max()) + + # Correct rotation matrix ordering and move variable dim to axis 0 + poses = np.concatenate([poses[:, 1:2, :], -poses[:, 0:1, :], poses[:, 2:, :]], 1) + poses = np.moveaxis(poses, -1, 0).astype(np.float32) + imgs = np.moveaxis(imgs, -1, 0).astype(np.float32) + images = imgs + bds = np.moveaxis(bds, -1, 0).astype(np.float32) + + # Rescale if bd_factor is provided + sc = 1. if bd_factor is None else 1./(bds.min() * bd_factor) + poses[:,:3,3] *= sc + bds *= sc + + if recenter: + poses = recenter_poses(poses) + + if spherify: + poses, render_poses, bds = spherify_poses(poses, bds) + + else: + + c2w = poses_avg(poses) + print('recentered', c2w.shape) + print(c2w[:3,:4]) + + ## Get spiral + # Get average pose + up = normalize(poses[:, :3, 1].sum(0)) + + # Find a reasonable "focus depth" for this dataset + close_depth, inf_depth = bds.min()*.9, bds.max()*5. + dt = .75 + mean_dz = 1./(((1.-dt)/close_depth + dt/inf_depth)) + focal = mean_dz + + # Get radii for spiral path + shrink_factor = .8 + zdelta = close_depth * .2 + tt = poses[:,:3,3] # ptstocam(poses[:3,3,:].T, c2w).T + rads = np.percentile(np.abs(tt), 90, 0) + c2w_path = c2w + N_views = 120 + N_rots = 2 + if path_zflat: +# zloc = np.percentile(tt, 10, 0)[2] + zloc = -close_depth * .1 + c2w_path[:3,3] = c2w_path[:3,3] + zloc * c2w_path[:3,2] + rads[2] = 0. + N_rots = 1 + N_views/=2 + + # Generate poses for spiral path + render_poses = render_path_spiral(c2w_path, up, rads, focal, zdelta, zrate=.5, rots=N_rots, N=N_views) + + + render_poses = np.array(render_poses).astype(np.float32) + + c2w = poses_avg(poses) + print('Data:') + print(poses.shape, images.shape, bds.shape) + + dists = np.sum(np.square(c2w[:3,3] - poses[:,:3,3]), -1) + i_test = np.argmin(dists) + print('HOLDOUT view is', i_test) + + images = images.astype(np.float32) + poses = poses.astype(np.float32) + + return images, poses, bds, render_poses, i_test + + + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..cae9cdb --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +torch>=1.4.0 +torchvision>=0.2.1 +imageio +imageio-ffmpeg +matplotlib +configargparse diff --git a/run_nerf.py b/run_nerf.py new file mode 100644 index 0000000..e1c9b63 --- /dev/null +++ b/run_nerf.py @@ -0,0 +1,736 @@ +import os, sys +import numpy as np +import imageio +import json +import random +import time +import torch +import torch.nn as nn +import torch.nn.functional as F +from torch.utils.tensorboard import SummaryWriter +from tqdm import tqdm + +import matplotlib.pyplot as plt + +from run_nerf_helpers import * + +from load_llff import load_llff_data +from load_deepvoxels import load_dv_data +from load_blender import load_blender_data + + +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") +np.random.seed(0) +DEBUG = False + + +def batchify(fn, chunk): + if chunk is None: + return fn + def ret(inputs): + return torch.cat([fn(inputs[i:i+chunk]) for i in range(0, inputs.shape[0], chunk)], 0) + return ret + + +def run_network(inputs, viewdirs, fn, embed_fn, embeddirs_fn, netchunk=1024*64): + + inputs_flat = torch.reshape(inputs, [-1, inputs.shape[-1]]) + embedded = embed_fn(inputs_flat) + + if viewdirs is not None: + input_dirs = viewdirs[:,None].expand(inputs.shape) + input_dirs_flat = torch.reshape(input_dirs, [-1, input_dirs.shape[-1]]) + embedded_dirs = embeddirs_fn(input_dirs_flat) + embedded = torch.cat([embedded, embedded_dirs], -1) + + outputs_flat = batchify(fn, netchunk)(embedded) + outputs = torch.reshape(outputs_flat, list(inputs.shape[:-1]) + [outputs_flat.shape[-1]]) + return outputs + + +def batchify_rays(rays_flat, chunk=1024*32, **kwargs): + + all_ret = {} + for i in range(0, rays_flat.shape[0], chunk): + ret = render_rays(rays_flat[i:i+chunk], **kwargs) + for k in ret: + if k not in all_ret: + all_ret[k] = [] + all_ret[k].append(ret[k]) + + all_ret = {k : torch.cat(all_ret[k], 0) for k in all_ret} + return all_ret + + +def render(H, W, focal, chunk=1024*32, rays=None, c2w=None, ndc=True, + near=0., far=1., + use_viewdirs=False, c2w_staticcam=None, + **kwargs): + + if c2w is not None: + # special case to render full image + rays_o, rays_d = get_rays(H, W, focal, c2w) + else: + # use provided ray batch + rays_o, rays_d = rays + + if use_viewdirs: + # provide ray directions as input + viewdirs = rays_d + if c2w_staticcam is not None: + # special case to visualize effect of viewdirs + rays_o, rays_d = get_rays(H, W, focal, c2w_staticcam) + viewdirs = viewdirs / torch.norm(viewdirs, dim=-1, keepdim=True) + viewdirs = torch.reshape(viewdirs, [-1,3]).float() + + sh = rays_d.shape # [..., 3] + if ndc: + # for forward facing scenes + rays_o, rays_d = ndc_rays(H, W, focal, 1., rays_o, rays_d) + + # Create ray batch + rays_o = torch.reshape(rays_o, [-1,3]).float() + rays_d = torch.reshape(rays_d, [-1,3]).float() + + near, far = near * torch.ones_like(rays_d[...,:1]), far * torch.ones_like(rays_d[...,:1]) + rays = torch.cat([rays_o, rays_d, near, far], -1) + if use_viewdirs: + rays = torch.cat([rays, viewdirs], -1) + + # Render and reshape + all_ret = batchify_rays(rays, chunk, **kwargs) + for k in all_ret: + k_sh = list(sh[:-1]) + list(all_ret[k].shape[1:]) + all_ret[k] = torch.reshape(all_ret[k], k_sh) + + k_extract = ['rgb_map', 'disp_map', 'acc_map'] + ret_list = [all_ret[k] for k in k_extract] + ret_dict = {k : all_ret[k] for k in all_ret if k not in k_extract} + return ret_list + [ret_dict] + + +def render_path(render_poses, hwf, chunk, render_kwargs, gt_imgs=None, savedir=None, render_factor=0): + + H, W, focal = hwf + + if render_factor!=0: + # Render downsampled for speed + H = H//render_factor + W = W//render_factor + focal = focal/render_factor + + rgbs = [] + disps = [] + + t = time.time() + for i, c2w in enumerate(tqdm(render_poses)): + print(i, time.time() - t) + t = time.time() + rgb, disp, acc, _ = render(H, W, focal, chunk=chunk, c2w=c2w[:3,:4], **render_kwargs) + rgbs.append(rgb.cpu().numpy()) + disps.append(disp.cpu().numpy()) + if i==0: + print(rgb.shape, disp.shape) + + """ + if gt_imgs is not None and render_factor==0: + p = -10. * np.log10(np.mean(np.square(rgb.cpu().numpy() - gt_imgs[i]))) + print(p) + """ + + if savedir is not None: + rgb8 = to8b(rgbs[-1]) + filename = os.path.join(savedir, '{:03d}.png'.format(i)) + imageio.imwrite(filename, rgb8) + + + rgbs = np.stack(rgbs, 0) + disps = np.stack(disps, 0) + + return rgbs, disps + + +def create_nerf(args): + embed_fn, input_ch = get_embedder(args.multires, args.i_embed) + + input_ch_views = 0 + embeddirs_fn = None + if args.use_viewdirs: + embeddirs_fn, input_ch_views = get_embedder(args.multires_views, args.i_embed) + output_ch = 5 if args.N_importance > 0 else 4 + skips = [4] + model = NeRF(D=args.netdepth, W=args.netwidth, + input_ch=input_ch, output_ch=output_ch, skips=skips, + input_ch_views=input_ch_views, use_viewdirs=args.use_viewdirs).to(device) + grad_vars = list(model.parameters()) + + model_fine = None + if args.N_importance > 0: + model_fine = NeRF(D=args.netdepth_fine, W=args.netwidth_fine, + input_ch=input_ch, output_ch=output_ch, skips=skips, + input_ch_views=input_ch_views, use_viewdirs=args.use_viewdirs).to(device) + grad_vars += list(model_fine.parameters()) + + network_query_fn = lambda inputs, viewdirs, network_fn : run_network(inputs, viewdirs, network_fn, + embed_fn=embed_fn, + embeddirs_fn=embeddirs_fn, + netchunk=args.netchunk) + + # Create optimizer + optimizer = torch.optim.Adam(params=grad_vars, lr=args.lrate, betas=(0.9, 0.999)) + + start = 0 + basedir = args.basedir + expname = args.expname + + ########################## + + # Load checkpoints + if args.ft_path is not None and args.ft_path!='None': + ckpts = [args.ft_path] + else: + ckpts = [os.path.join(basedir, expname, f) for f in sorted(os.listdir(os.path.join(basedir, expname))) if 'tar' in f] + + print('Found ckpts', ckpts) + if len(ckpts) > 0 and not args.no_reload: + ckpt_path = ckpts[-1] + print('Reloading from', ckpt_path) + ckpt = torch.load(ckpt_path) + + start = ckpt['global_step'] + 1 + optimizer.load_state_dict(ckpt['optimizer_state_dict']) + + # Load model + model.load_state_dict(ckpt['network_fn_state_dict']) + if model_fine is not None: + model_fine.load_state_dict(ckpt['network_fine_state_dict']) + + ########################## + + render_kwargs_train = { + 'network_query_fn' : network_query_fn, + 'perturb' : args.perturb, + 'N_importance' : args.N_importance, + 'network_fine' : model_fine, + 'N_samples' : args.N_samples, + 'network_fn' : model, + 'use_viewdirs' : args.use_viewdirs, + 'white_bkgd' : args.white_bkgd, + 'raw_noise_std' : args.raw_noise_std, + } + + # NDC only good for LLFF-style forward facing data + if args.dataset_type != 'llff' or args.no_ndc: + print('Not ndc!') + render_kwargs_train['ndc'] = False + render_kwargs_train['lindisp'] = args.lindisp + + render_kwargs_test = {k : render_kwargs_train[k] for k in render_kwargs_train} + render_kwargs_test['perturb'] = False + render_kwargs_test['raw_noise_std'] = 0. + + return render_kwargs_train, render_kwargs_test, start, grad_vars, optimizer + + +def raw2outputs(raw, z_vals, rays_d, raw_noise_std=0, white_bkgd=False, pytest=False): + """ A helper function for `render_rays`. + """ + raw2alpha = lambda raw, dists, act_fn=F.relu: 1.-torch.exp(-act_fn(raw)*dists) + + dists = z_vals[...,1:] - z_vals[...,:-1] + dists = torch.cat([dists, torch.Tensor([1e10]).expand(dists[...,:1].shape)], -1) # [N_rays, N_samples] + + dists = dists * torch.norm(rays_d[...,None,:], dim=-1) + + rgb = torch.sigmoid(raw[...,:3]) # [N_rays, N_samples, 3] + noise = 0. + if raw_noise_std > 0.: + noise = torch.randn(raw[...,3].shape) * raw_noise_std + + # Overwrite randomly sampled data if pytest + if pytest: + np.random.seed(0) + noise = np.random.rand(*list(raw[...,3].shape)) * raw_noise_std + noise = torch.Tensor(noise) + + alpha = raw2alpha(raw[...,3] + noise, dists) # [N_rays, N_samples] + # weights = alpha * tf.math.cumprod(1.-alpha + 1e-10, -1, exclusive=True) + weights = alpha * torch.cumprod(torch.cat([torch.ones((alpha.shape[0], 1)), 1.-alpha + 1e-10], -1), -1)[:, :-1] + rgb_map = torch.sum(weights[...,None] * rgb, -2) # [N_rays, 3] + + depth_map = torch.sum(weights * z_vals, -1) + disp_map = 1./torch.max(1e-10 * torch.ones_like(depth_map), depth_map / torch.sum(weights, -1)) + acc_map = torch.sum(weights, -1) + + if white_bkgd: + rgb_map = rgb_map + (1.-acc_map[...,None]) + + return rgb_map, disp_map, acc_map, weights, depth_map + + +def render_rays(ray_batch, + network_fn, + network_query_fn, + N_samples, + retraw=False, + lindisp=False, + perturb=0., + N_importance=0, + network_fine=None, + white_bkgd=False, + raw_noise_std=0., + verbose=False, + pytest=False): + N_rays = ray_batch.shape[0] + rays_o, rays_d = ray_batch[:,0:3], ray_batch[:,3:6] # [N_rays, 3] each + viewdirs = ray_batch[:,-3:] if ray_batch.shape[-1] > 8 else None + bounds = torch.reshape(ray_batch[...,6:8], [-1,1,2]) + near, far = bounds[...,0], bounds[...,1] # [-1,1] + + t_vals = torch.linspace(0., 1., steps=N_samples) + if not lindisp: + z_vals = near * (1.-t_vals) + far * (t_vals) + else: + z_vals = 1./(1./near * (1.-t_vals) + 1./far * (t_vals)) + + z_vals = z_vals.expand([N_rays, N_samples]) + + if perturb > 0.: + # get intervals between samples + mids = .5 * (z_vals[...,1:] + z_vals[...,:-1]) + upper = torch.cat([mids, z_vals[...,-1:]], -1) + lower = torch.cat([z_vals[...,:1], mids], -1) + # stratified samples in those intervals + t_rand = torch.rand(z_vals.shape) + + # Pytest, overwrite u with numpy's fixed random numbers + if pytest: + np.random.seed(0) + t_rand = np.random.rand(*list(z_vals.shape)) + t_rand = torch.Tensor(t_rand) + + z_vals = lower + (upper - lower) * t_rand + + pts = rays_o[...,None,:] + rays_d[...,None,:] * z_vals[...,:,None] # [N_rays, N_samples, 3] + + +# raw = run_network(pts) + raw = network_query_fn(pts, viewdirs, network_fn) + rgb_map, disp_map, acc_map, weights, depth_map = raw2outputs(raw, z_vals, rays_d, raw_noise_std, white_bkgd, pytest=pytest) + + if N_importance > 0: + + rgb_map_0, disp_map_0, acc_map_0 = rgb_map, disp_map, acc_map + + z_vals_mid = .5 * (z_vals[...,1:] + z_vals[...,:-1]) + z_samples = sample_pdf(z_vals_mid, weights[...,1:-1], N_importance, det=(perturb==0.), pytest=pytest) + z_samples = z_samples.detach() + + z_vals, _ = torch.sort(torch.cat([z_vals, z_samples], -1), -1) + pts = rays_o[...,None,:] + rays_d[...,None,:] * z_vals[...,:,None] # [N_rays, N_samples + N_importance, 3] + + run_fn = network_fn if network_fine is None else network_fine +# raw = run_network(pts, fn=run_fn) + raw = network_query_fn(pts, viewdirs, run_fn) + + rgb_map, disp_map, acc_map, weights, depth_map = raw2outputs(raw, z_vals, rays_d, raw_noise_std, white_bkgd, pytest=pytest) + + ret = {'rgb_map' : rgb_map, 'disp_map' : disp_map, 'acc_map' : acc_map} + if retraw: + ret['raw'] = raw + if N_importance > 0: + ret['rgb0'] = rgb_map_0 + ret['disp0'] = disp_map_0 + ret['acc0'] = acc_map_0 + ret['z_std'] = torch.std(z_samples, dim=-1, unbiased=False) # [N_rays] + + for k in ret: + if (torch.isnan(ret[k]).any() or torch.isinf(ret[k]).any()) and DEBUG: + print(f"! [Numerical Error] {k} contains nan or inf.") + + return ret + + +def config_parser(): + + import configargparse + parser = configargparse.ArgumentParser() + parser.add_argument('--config', is_config_file=True, help='config file path') + parser.add_argument("--expname", type=str, help='experiment name') + parser.add_argument("--basedir", type=str, default='./logs/', help='where to store ckpts and logs') + parser.add_argument("--datadir", type=str, default='./data/llff/fern', help='input data directory') + + # training options + parser.add_argument("--netdepth", type=int, default=8, help='layers in network') + parser.add_argument("--netwidth", type=int, default=256, help='channels per layer') + parser.add_argument("--netdepth_fine", type=int, default=8, help='layers in fine network') + parser.add_argument("--netwidth_fine", type=int, default=256, help='channels per layer in fine network') + parser.add_argument("--N_rand", type=int, default=32*32*4, help='batch size (number of random rays per gradient step)') + parser.add_argument("--lrate", type=float, default=5e-4, help='learning rate') + parser.add_argument("--lrate_decay", type=int, default=250, help='exponential learning rate decay (in 1000 steps)') + parser.add_argument("--chunk", type=int, default=1024*32, help='number of rays processed in parallel, decrease if running out of memory') + parser.add_argument("--netchunk", type=int, default=1024*64, help='number of pts sent through network in parallel, decrease if running out of memory') + parser.add_argument("--no_batching", action='store_true', help='only take random rays from 1 image at a time') + parser.add_argument("--no_reload", action='store_true', help='do not reload weights from saved ckpt') + parser.add_argument("--ft_path", type=str, default=None, help='specific weights npy file to reload for coarse network') + + # rendering options + parser.add_argument("--N_samples", type=int, default=64, help='number of coarse samples per ray') + parser.add_argument("--N_importance", type=int, default=0, help='number of additional fine samples per ray') + parser.add_argument("--perturb", type=float, default=1., help='set to 0. for no jitter, 1. for jitter') + parser.add_argument("--use_viewdirs", action='store_true', help='use full 5D input instead of 3D') + parser.add_argument("--i_embed", type=int, default=0, help='set 0 for default positional encoding, -1 for none') + parser.add_argument("--multires", type=int, default=10, help='log2 of max freq for positional encoding (3D location)') + parser.add_argument("--multires_views", type=int, default=4, help='log2 of max freq for positional encoding (2D direction)') + parser.add_argument("--raw_noise_std", type=float, default=0., help='std dev of noise added to regularize sigma_a output, 1e0 recommended') + + parser.add_argument("--render_only", action='store_true', help='do not optimize, reload weights and render out render_poses path') + parser.add_argument("--render_test", action='store_true', help='render the test set instead of render_poses path') + parser.add_argument("--render_factor", type=int, default=0, help='downsampling factor to speed up rendering, set 4 or 8 for fast preview') + + # dataset options + parser.add_argument("--dataset_type", type=str, default='llff', help='options: llff / blender / deepvoxels') + parser.add_argument("--testskip", type=int, default=8, help='will load 1/N images from test/val sets, useful for large datasets like deepvoxels') + + ## deepvoxels flags + parser.add_argument("--shape", type=str, default='greek', help='options : armchair / cube / greek / vase') + + ## blender flags + parser.add_argument("--white_bkgd", action='store_true', help='set to render synthetic data on a white bkgd (always use for dvoxels)') + parser.add_argument("--half_res", action='store_true', help='load blender synthetic data at 400x400 instead of 800x800') + + ## llff flags + parser.add_argument("--factor", type=int, default=8, help='downsample factor for LLFF images') + parser.add_argument("--no_ndc", action='store_true', help='do not use normalized device coordinates (set for non-forward facing scenes)') + parser.add_argument("--lindisp", action='store_true', help='sampling linearly in disparity rather than depth') + parser.add_argument("--spherify", action='store_true', help='set for spherical 360 scenes') + parser.add_argument("--llffhold", type=int, default=8, help='will take every 1/N images as LLFF test set, paper uses 8') + + # logging/saving options + parser.add_argument("--i_print", type=int, default=100, help='frequency of console printout and metric loggin') + parser.add_argument("--i_img", type=int, default=500, help='frequency of tensorboard image logging') + parser.add_argument("--i_weights", type=int, default=10000, help='frequency of weight ckpt saving') + parser.add_argument("--i_testset", type=int, default=50000, help='frequency of testset saving') + parser.add_argument("--i_video", type=int, default=50000, help='frequency of render_poses video saving') + + return parser + + + +def train(): + + parser = config_parser() + args = parser.parse_args() + + + # Load data + + if args.dataset_type == 'llff': + images, poses, bds, render_poses, i_test = load_llff_data(args.datadir, args.factor, + recenter=True, bd_factor=.75, + spherify=args.spherify) + hwf = poses[0,:3,-1] + poses = poses[:,:3,:4] + print('Loaded llff', images.shape, render_poses.shape, hwf, args.datadir) + if not isinstance(i_test, list): + i_test = [i_test] + + if args.llffhold > 0: + print('Auto LLFF holdout,', args.llffhold) + i_test = np.arange(images.shape[0])[::args.llffhold] + + i_val = i_test + i_train = np.array([i for i in np.arange(int(images.shape[0])) if + (i not in i_test and i not in i_val)]) + + print('DEFINING BOUNDS') + if args.no_ndc: + near = torch.min(bds) * .9 + far = torch.max(bds) * 1. + else: + near = 0. + far = 1. + print('NEAR FAR', near, far) + + + elif args.dataset_type == 'blender': + images, poses, render_poses, hwf, i_split = load_blender_data(args.datadir, args.half_res, args.testskip) + print('Loaded blender', images.shape, render_poses.shape, hwf, args.datadir) + i_train, i_val, i_test = i_split + + near = 2. + far = 6. + + if args.white_bkgd: + images = images[...,:3]*images[...,-1:] + (1.-images[...,-1:]) + else: + images = images[...,:3] + + + elif args.dataset_type == 'deepvoxels': + + images, poses, render_poses, hwf, i_split = load_dv_data(scene=args.shape, + basedir=args.datadir, + testskip=args.testskip) + + print('Loaded deepvoxels', images.shape, render_poses.shape, hwf, args.datadir) + i_train, i_val, i_test = i_split + + hemi_R = np.mean(np.linalg.norm(poses[:,:3,-1], axis=-1)) + near = hemi_R-1. + far = hemi_R+1. + + + else: + print('Unknown dataset type', args.dataset_type, 'exiting') + return + + # Cast intrinsics to right types + H, W, focal = hwf + H, W = int(H), int(W) + hwf = [H, W, focal] + + if args.render_test: + render_poses = np.array(poses[i_test]) + + + # Create log dir and copy the config file + basedir = args.basedir + expname = args.expname + os.makedirs(os.path.join(basedir, expname), exist_ok=True) + f = os.path.join(basedir, expname, 'args.txt') + with open(f, 'w') as file: + for arg in sorted(vars(args)): + attr = getattr(args, arg) + file.write('{} = {}\n'.format(arg, attr)) + if args.config is not None: + f = os.path.join(basedir, expname, 'config.txt') + with open(f, 'w') as file: + file.write(open(args.config, 'r').read()) + + + # Create nerf model + render_kwargs_train, render_kwargs_test, start, grad_vars, optimizer = create_nerf(args) + global_step = start + + bds_dict = { + 'near' : near, + 'far' : far, + } + render_kwargs_train.update(bds_dict) + render_kwargs_test.update(bds_dict) + + # Move testing data to GPU + render_poses = torch.Tensor(render_poses).to(device) + + # Short circuit if only rendering out from trained model + if args.render_only: + print('RENDER ONLY') + with torch.no_grad(): + if args.render_test: + # render_test switches to test poses + images = images[i_test] + else: + # Default is smoother render_poses path + images = None + + testsavedir = os.path.join(basedir, expname, 'renderonly_{}_{:06d}'.format('test' if args.render_test else 'path', start)) + os.makedirs(testsavedir, exist_ok=True) + print('test poses shape', render_poses.shape) + + rgbs, _ = render_path(render_poses, hwf, args.chunk, render_kwargs_test, gt_imgs=images, savedir=testsavedir, render_factor=args.render_factor) + print('Done rendering', testsavedir) + imageio.mimwrite(os.path.join(testsavedir, 'video.mp4'), to8b(rgbs), fps=30, quality=8) + + return + + # Prepare raybatch tensor if batching random rays + N_rand = args.N_rand + use_batching = not args.no_batching + if use_batching: + # For random ray batching + print('get rays') + rays = np.stack([get_rays_np(H, W, focal, p) for p in poses[:,:3,:4]], 0) # [N, ro+rd, H, W, 3] + print('done, concats') + rays_rgb = np.concatenate([rays, images[:,None]], 1) # [N, ro+rd+rgb, H, W, 3] + rays_rgb = np.transpose(rays_rgb, [0,2,3,1,4]) # [N, H, W, ro+rd+rgb, 3] + rays_rgb = np.stack([rays_rgb[i] for i in i_train], 0) # train images only + rays_rgb = np.reshape(rays_rgb, [-1,3,3]) # [(N-1)*H*W, ro+rd+rgb, 3] + rays_rgb = rays_rgb.astype(np.float32) + print('shuffle rays') + np.random.shuffle(rays_rgb) + + print('done') + i_batch = 0 + + # Move training data to GPU + images = torch.Tensor(images).to(device) + poses = torch.Tensor(poses).to(device) + if use_batching: + rays_rgb = torch.Tensor(rays_rgb).to(device) + + + N_iters = 1000000 + print('Begin') + print('TRAIN views are', i_train) + print('TEST views are', i_test) + print('VAL views are', i_val) + + # Summary writers + # writer = SummaryWriter(os.path.join(basedir, 'summaries', expname)) + + for i in range(start, N_iters): + time0 = time.time() + + # Sample random ray batch + if use_batching: + # Random over all images + batch = rays_rgb[i_batch:i_batch+N_rand] # [B, 2+1, 3*?] + batch = torch.transpose(batch, 0, 1) + batch_rays, target_s = batch[:2], batch[2] + + i_batch += N_rand + if i_batch >= rays_rgb.shape[0]: + print("Shuffle data after an epoch!") + rand_idx = torch.randperm(rays_rgb.shape[0]) + rays_rgb = rays_rgb[rand_idx] + i_batch = 0 + + else: + # Random from one image + img_i = np.random.choice(i_train) + target = images[img_i] + pose = poses[img_i, :3,:4] + + if N_rand is not None: + rays_o, rays_d = get_rays(H, W, focal, torch.Tensor(pose)) # (H, W, 3), (H, W, 3) + coords = torch.stack(torch.meshgrid(torch.linspace(0, H-1, H), torch.linspace(0, W-1, W)), -1) # (H, W, 2) + coords = torch.reshape(coords, [-1,2]) # (H * W, 2) + select_inds = np.random.choice(coords.shape[0], size=[N_rand], replace=False) # (N_rand,) + select_coords = coords[select_inds].long() # (N_rand, 2) + rays_o = rays_o[select_coords[:, 0], select_coords[:, 1]] # (N_rand, 3) + rays_d = rays_d[select_coords[:, 0], select_coords[:, 1]] # (N_rand, 3) + batch_rays = torch.stack([rays_o, rays_d], 0) + target_s = target[select_coords[:, 0], select_coords[:, 1]] # (N_rand, 3) + + ##### Core optimization loop ##### + rgb, disp, acc, extras = render(H, W, focal, chunk=args.chunk, rays=batch_rays, + verbose=i < 10, retraw=True, + **render_kwargs_train) + + optimizer.zero_grad() + img_loss = img2mse(rgb, target_s) + trans = extras['raw'][...,-1] + loss = img_loss + psnr = mse2psnr(img_loss) + + if 'rgb0' in extras: + img_loss0 = img2mse(extras['rgb0'], target_s) + loss = loss + img_loss0 + psnr0 = mse2psnr(img_loss0) + + loss.backward() + + # NOTE: same as tf till here - 04/03/2020 + + optimizer.step() + + # NOTE: IMPORTANT! + ### update learning rate ### + decay_rate = 0.1 + decay_steps = args.lrate_decay * 1000 + new_lrate = args.lrate * (decay_rate ** (global_step / decay_steps)) + for param_group in optimizer.param_groups: + param_group['lr'] = new_lrate + ################################ + + dt = time.time()-time0 + print(f"Step: {global_step}, Loss: {loss}, Time: {dt}") + ##### end ##### + + # Rest is logging + if i%args.i_weights==0: + path = os.path.join(basedir, expname, '{:06d}.tar'.format(i)) + torch.save({ + 'global_step': global_step, + 'network_fn_state_dict': render_kwargs_train['network_fn'].state_dict(), + 'network_fine_state_dict': render_kwargs_train['network_fine'].state_dict(), + 'optimizer_state_dict': optimizer.state_dict(), + }, path) + print('Saved checkpoints at', path) + + if i%args.i_video==0 and i > 0: + # Turn on testing mode + with torch.no_grad(): + rgbs, disps = render_path(render_poses, hwf, args.chunk, render_kwargs_test) + print('Done, saving', rgbs.shape, disps.shape) + moviebase = os.path.join(basedir, expname, '{}_spiral_{:06d}_'.format(expname, i)) + imageio.mimwrite(moviebase + 'rgb.mp4', to8b(rgbs), fps=30, quality=8) + imageio.mimwrite(moviebase + 'disp.mp4', to8b(disps / np.max(disps)), fps=30, quality=8) + + # if args.use_viewdirs: + # render_kwargs_test['c2w_staticcam'] = render_poses[0][:3,:4] + # with torch.no_grad(): + # rgbs_still, _ = render_path(render_poses, hwf, args.chunk, render_kwargs_test) + # render_kwargs_test['c2w_staticcam'] = None + # imageio.mimwrite(moviebase + 'rgb_still.mp4', to8b(rgbs_still), fps=30, quality=8) + + if i%args.i_testset==0 and i > 0: + testsavedir = os.path.join(basedir, expname, 'testset_{:06d}'.format(i)) + os.makedirs(testsavedir, exist_ok=True) + print('test poses shape', poses[i_test].shape) + with torch.no_grad(): + render_path(torch.Tensor(poses[i_test]).to(device), hwf, args.chunk, render_kwargs_test, gt_imgs=images[i_test], savedir=testsavedir) + print('Saved test set') + + + """ + if i%args.i_print==0 or i < 10: + + print(expname, i, psnr.numpy(), loss.numpy(), global_step.numpy()) + print('iter time {:.05f}'.format(dt)) + with tf.contrib.summary.record_summaries_every_n_global_steps(args.i_print): + tf.contrib.summary.scalar('loss', loss) + tf.contrib.summary.scalar('psnr', psnr) + tf.contrib.summary.histogram('tran', trans) + if args.N_importance > 0: + tf.contrib.summary.scalar('psnr0', psnr0) + + + if i%args.i_img==0: + + # Log a rendered validation view to Tensorboard + img_i=np.random.choice(i_val) + target = images[img_i] + pose = poses[img_i, :3,:4] + with torch.no_grad(): + rgb, disp, acc, extras = render(H, W, focal, chunk=args.chunk, c2w=pose, + **render_kwargs_test) + + psnr = mse2psnr(img2mse(rgb, target)) + + with tf.contrib.summary.record_summaries_every_n_global_steps(args.i_img): + + tf.contrib.summary.image('rgb', to8b(rgb)[tf.newaxis]) + tf.contrib.summary.image('disp', disp[tf.newaxis,...,tf.newaxis]) + tf.contrib.summary.image('acc', acc[tf.newaxis,...,tf.newaxis]) + + tf.contrib.summary.scalar('psnr_holdout', psnr) + tf.contrib.summary.image('rgb_holdout', target[tf.newaxis]) + + + if args.N_importance > 0: + + with tf.contrib.summary.record_summaries_every_n_global_steps(args.i_img): + tf.contrib.summary.image('rgb0', to8b(extras['rgb0'])[tf.newaxis]) + tf.contrib.summary.image('disp0', extras['disp0'][tf.newaxis,...,tf.newaxis]) + tf.contrib.summary.image('z_std', extras['z_std'][tf.newaxis,...,tf.newaxis]) + """ + + global_step += 1 + + +if __name__=='__main__': + torch.set_default_tensor_type('torch.cuda.FloatTensor') + + train() diff --git a/run_nerf_helpers.py b/run_nerf_helpers.py new file mode 100644 index 0000000..70f2828 --- /dev/null +++ b/run_nerf_helpers.py @@ -0,0 +1,242 @@ +import torch +torch.autograd.set_detect_anomaly(True) +import torch.nn as nn +import torch.nn.functional as F +import numpy as np + +# TODO: remove this dependency +from torchsearchsorted import searchsorted + + +# Misc +img2mse = lambda x, y : torch.mean((x - y) ** 2) +mse2psnr = lambda x : -10. * torch.log(x) / torch.log(torch.Tensor([10.])) +to8b = lambda x : (255*np.clip(x,0,1)).astype(np.uint8) + + +# Positional encoding (section 5.1) +class Embedder: + def __init__(self, **kwargs): + self.kwargs = kwargs + self.create_embedding_fn() + + def create_embedding_fn(self): + embed_fns = [] + d = self.kwargs['input_dims'] + out_dim = 0 + if self.kwargs['include_input']: + embed_fns.append(lambda x : x) + out_dim += d + + max_freq = self.kwargs['max_freq_log2'] + N_freqs = self.kwargs['num_freqs'] + + if self.kwargs['log_sampling']: + freq_bands = 2.**torch.linspace(0., max_freq, steps=N_freqs) + else: + freq_bands = torch.linspace(2.**0., 2.**max_freq, steps=N_freqs) + + for freq in freq_bands: + for p_fn in self.kwargs['periodic_fns']: + embed_fns.append(lambda x, p_fn=p_fn, freq=freq : p_fn(x * freq)) + out_dim += d + + self.embed_fns = embed_fns + self.out_dim = out_dim + + def embed(self, inputs): + return torch.cat([fn(inputs) for fn in self.embed_fns], -1) + + +def get_embedder(multires, i=0): + if i == -1: + return nn.Identity(), 3 + + embed_kwargs = { + 'include_input' : True, + 'input_dims' : 3, + 'max_freq_log2' : multires-1, + 'num_freqs' : multires, + 'log_sampling' : True, + 'periodic_fns' : [torch.sin, torch.cos], + } + + embedder_obj = Embedder(**embed_kwargs) + embed = lambda x, eo=embedder_obj : eo.embed(x) + return embed, embedder_obj.out_dim + + +# Model +class NeRF(nn.Module): + def __init__(self, D=8, W=256, input_ch=3, input_ch_views=3, output_ch=4, skips=[4], use_viewdirs=False): + """ + """ + super(NeRF, self).__init__() + self.D = D + self.W = W + self.input_ch = input_ch + self.input_ch_views = input_ch_views + self.skips = skips + self.use_viewdirs = use_viewdirs + + self.pts_linears = nn.ModuleList( + [nn.Linear(input_ch, W)] + [nn.Linear(W, W) if i not in self.skips else nn.Linear(W + input_ch, W) for i in range(D-1)]) + + ### Implementation according to the official code release (https://github.com/bmild/nerf/blob/master/run_nerf_helpers.py#L104-L105) + self.views_linears = nn.ModuleList([nn.Linear(input_ch_views + W, W//2)]) + + ### Implementation according to the paper + # self.views_linears = nn.ModuleList( + # [nn.Linear(input_ch_views + W, W//2)] + [nn.Linear(W//2, W//2) for i in range(D//2)]) + + if use_viewdirs: + self.feature_linear = nn.Linear(W, W) + self.alpha_linear = nn.Linear(W, 1) + self.rgb_linear = nn.Linear(W//2, 3) + else: + self.output_linear = nn.Linear(W, output_ch) + + def forward(self, x): + input_pts, input_views = torch.split(x, [self.input_ch, self.input_ch_views], dim=-1) + h = input_pts + for i, l in enumerate(self.pts_linears): + h = self.pts_linears[i](h) + h = F.relu(h) + if i in self.skips: + h = torch.cat([input_pts, h], -1) + + if self.use_viewdirs: + alpha = self.alpha_linear(h) + feature = self.feature_linear(h) + h = torch.cat([feature, input_views], -1) + + for i, l in enumerate(self.views_linears): + h = self.views_linears[i](h) + h = F.relu(h) + + rgb = self.rgb_linear(h) + outputs = torch.cat([rgb, alpha], -1) + else: + outputs = self.output_linear(h) + + return outputs + + def load_weights_from_keras(self, weights): + assert self.use_viewdirs, "Not implemented if use_viewdirs=False" + + # Load pts_linears + for i in range(self.D): + idx_pts_linears = 2 * i + self.pts_linears[i].weight.data = torch.from_numpy(np.transpose(weights[idx_pts_linears])) + self.pts_linears[i].bias.data = torch.from_numpy(np.transpose(weights[idx_pts_linears+1])) + + # Load feature_linear + idx_feature_linear = 2 * self.D + self.feature_linear.weight.data = torch.from_numpy(np.transpose(weights[idx_feature_linear])) + self.feature_linear.bias.data = torch.from_numpy(np.transpose(weights[idx_feature_linear+1])) + + # Load views_linears + idx_views_linears = 2 * self.D + 2 + self.views_linears[0].weight.data = torch.from_numpy(np.transpose(weights[idx_views_linears])) + self.views_linears[0].bias.data = torch.from_numpy(np.transpose(weights[idx_views_linears+1])) + + # Load rgb_linear + idx_rbg_linear = 2 * self.D + 4 + self.rgb_linear.weight.data = torch.from_numpy(np.transpose(weights[idx_rbg_linear])) + self.rgb_linear.bias.data = torch.from_numpy(np.transpose(weights[idx_rbg_linear+1])) + + # Load alpha_linear + idx_alpha_linear = 2 * self.D + 6 + self.alpha_linear.weight.data = torch.from_numpy(np.transpose(weights[idx_alpha_linear])) + self.alpha_linear.bias.data = torch.from_numpy(np.transpose(weights[idx_alpha_linear+1])) + + + +# Ray helpers +def get_rays(H, W, focal, c2w): + i, j = torch.meshgrid(torch.linspace(0, W-1, W), torch.linspace(0, H-1, H)) # pytorch's meshgrid has indexing='ij' + i = i.t() + j = j.t() + dirs = torch.stack([(i-W*.5)/focal, -(j-H*.5)/focal, -torch.ones_like(i)], -1) + # Rotate ray directions from camera frame to the world frame + rays_d = torch.sum(dirs[..., np.newaxis, :] * c2w[:3,:3], -1) # dot product, equals to: [c2w.dot(dir) for dir in dirs] + # Translate camera frame's origin to the world frame. It is the origin of all rays. + rays_o = c2w[:3,-1].expand(rays_d.shape) + return rays_o, rays_d + + +def get_rays_np(H, W, focal, c2w): + i, j = np.meshgrid(np.arange(W, dtype=np.float32), np.arange(H, dtype=np.float32), indexing='xy') + dirs = np.stack([(i-W*.5)/focal, -(j-H*.5)/focal, -np.ones_like(i)], -1) + # Rotate ray directions from camera frame to the world frame + rays_d = np.sum(dirs[..., np.newaxis, :] * c2w[:3,:3], -1) # dot product, equals to: [c2w.dot(dir) for dir in dirs] + # Translate camera frame's origin to the world frame. It is the origin of all rays. + rays_o = np.broadcast_to(c2w[:3,-1], np.shape(rays_d)) + return rays_o, rays_d + + +def ndc_rays(H, W, focal, near, rays_o, rays_d): + # Shift ray origins to near plane + t = -(near + rays_o[...,2]) / rays_d[...,2] + rays_o = rays_o + t[...,None] * rays_d + + # Projection + o0 = -1./(W/(2.*focal)) * rays_o[...,0] / rays_o[...,2] + o1 = -1./(H/(2.*focal)) * rays_o[...,1] / rays_o[...,2] + o2 = 1. + 2. * near / rays_o[...,2] + + d0 = -1./(W/(2.*focal)) * (rays_d[...,0]/rays_d[...,2] - rays_o[...,0]/rays_o[...,2]) + d1 = -1./(H/(2.*focal)) * (rays_d[...,1]/rays_d[...,2] - rays_o[...,1]/rays_o[...,2]) + d2 = -2. * near / rays_o[...,2] + + rays_o = torch.stack([o0,o1,o2], -1) + rays_d = torch.stack([d0,d1,d2], -1) + + return rays_o, rays_d + + +# Hierarchical sampling (section 5.2) +def sample_pdf(bins, weights, N_samples, det=False, pytest=False): + # Get pdf + weights = weights + 1e-5 # prevent nans + pdf = weights / torch.sum(weights, -1, keepdim=True) + cdf = torch.cumsum(pdf, -1) + cdf = torch.cat([torch.zeros_like(cdf[...,:1]), cdf], -1) # (batch, len(bins)) + + # Take uniform samples + if det: + u = torch.linspace(0., 1., steps=N_samples) + u = u.expand(list(cdf.shape[:-1]) + [N_samples]) + else: + u = torch.rand(list(cdf.shape[:-1]) + [N_samples]) + + # Pytest, overwrite u with numpy's fixed random numbers + if pytest: + np.random.seed(0) + new_shape = list(cdf.shape[:-1]) + [N_samples] + if det: + u = np.linspace(0., 1., N_samples) + u = np.broadcast_to(u, new_shape) + else: + u = np.random.rand(*new_shape) + u = torch.Tensor(u) + + # Invert CDF + u = u.contiguous() + inds = searchsorted(cdf, u, side='right') + below = torch.max(torch.zeros_like(inds-1), inds-1) + above = torch.min(cdf.shape[-1]-1 * torch.ones_like(inds), inds) + inds_g = torch.stack([below, above], -1) # (batch, N_samples, 2) + + # cdf_g = tf.gather(cdf, inds_g, axis=-1, batch_dims=len(inds_g.shape)-2) + # bins_g = tf.gather(bins, inds_g, axis=-1, batch_dims=len(inds_g.shape)-2) + matched_shape = [inds_g.shape[0], inds_g.shape[1], cdf.shape[-1]] + cdf_g = torch.gather(cdf.unsqueeze(1).expand(matched_shape), 2, inds_g) + bins_g = torch.gather(bins.unsqueeze(1).expand(matched_shape), 2, inds_g) + + denom = (cdf_g[...,1]-cdf_g[...,0]) + denom = torch.where(denom<1e-5, torch.ones_like(denom), denom) + t = (u-cdf_g[...,0])/denom + samples = bins_g[...,0] + t * (bins_g[...,1]-bins_g[...,0]) + + return samples \ No newline at end of file diff --git a/torchsearchsorted/.gitignore b/torchsearchsorted/.gitignore new file mode 100644 index 0000000..f461cd0 --- /dev/null +++ b/torchsearchsorted/.gitignore @@ -0,0 +1,158 @@ +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf + + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ diff --git a/torchsearchsorted/LICENSE b/torchsearchsorted/LICENSE new file mode 100644 index 0000000..da6e359 --- /dev/null +++ b/torchsearchsorted/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2019, Inria (Antoine Liutkus) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/torchsearchsorted/README.md b/torchsearchsorted/README.md new file mode 100644 index 0000000..b98ac17 --- /dev/null +++ b/torchsearchsorted/README.md @@ -0,0 +1,89 @@ +# Pytorch Custom CUDA kernel for searchsorted + +This repository is an implementation of the searchsorted function to work for pytorch CUDA Tensors. Initially derived from the great [C extension tutorial](https://github.com/chrischoy/pytorch-custom-cuda-tutorial), but totally changed since then because building C extensions is not available anymore on pytorch 1.0. + + +> Warnings: +> * only works with pytorch > v1.3 and CUDA >= v10.1 +> * **NOTE** When using `searchsorted()` for practical applications, tensors need to be contiguous in memory. This can be easily achieved by calling `tensor.contiguous()` on the input tensors. Failing to do so _will_ lead to inconsistent results across applications. + +## Description + +Implements a function `searchsorted(a, v, out, side)` that works just like the [numpy version](https://docs.scipy.org/doc/numpy/reference/generated/numpy.searchsorted.html#numpy.searchsorted) except that `a` and `v` are matrices. +* `a` is of shape either `(1, ncols_a)` or `(nrows, ncols_a)`, and is contiguous in memory (do `a.contiguous()` to ensure this). +* `v` is of shape either `(1, ncols_v)` or `(nrows, ncols_v)`, and is contiguous in memory (do `v.contiguous()` to ensure this). +* `out` is either `None` or of shape `(nrows, ncols_v)`. If provided and of the right shape, the result is put there. This is to avoid costly memory allocations if the user already did it. If provided, `out` should be contiguous in memory too (do `out.contiguous()` to ensure this). +* `side` is either "left" or "right". See the [numpy doc](https://docs.scipy.org/doc/numpy/reference/generated/numpy.searchsorted.html#numpy.searchsorted). Please not that the current implementation *does not correctly handle this parameter*. Help welcome to improve the speed of [this PR](https://github.com/aliutkus/torchsearchsorted/pull/7) + +the output is of size as `(nrows, ncols_v)`. If all input tensors are on GPU, a cuda version will be called. Otherwise, it will be on CPU. + + +**Disclaimers** + +* This function has not been heavily tested. Use at your own risks +* When `a` is not sorted, the results vary from numpy's version. But I decided not to care about this because the function should not be called in this case. +* In some cases, the results vary from numpy's version. However, as far as I could see, this only happens when values are equal, which means we actually don't care about the order in which this value is added. I decided not to care about this also. +* vectors have to be contiguous for torchsearchsorted to give consistant results. use `.contiguous()` on all tensor arguments before calling + + +## Installation + +Just `pip install .`, in the root folder of this repo. This will compile +and install the torchsearchsorted module. + +be careful that sometimes, `nvcc` needs versions of `gcc` and `g++` that are older than those found by default on the system. If so, just create symbolic links to the right versions in your cuda/bin folder (where `nvcc` is) + +For instance, on my machine, I had `gcc` and `g++` v9 installed, but `nvcc` required v8. +So I had to do: + +> sudo apt-get install g++-8 gcc-8 +> sudo ln -s /usr/bin/gcc-8 /usr/local/cuda-10.1/bin/gcc +> sudo ln -s /usr/bin/g++-8 /usr/local/cuda-10.1/bin/g++ + +be careful that you need pytorch to be installed on your system. The code was tested on pytorch v1.3 + +## Usage + +Just import the torchsearchsorted package after installation. I typically do: + +``` +from torchsearchsorted import searchsorted +``` + + +## Testing + +Under the `examples` subfolder, you may: + +1. try `python test.py` with `torch` available. + + ``` +Looking for 50000x1000 values in 50000x300 entries +NUMPY: searchsorted in 4851.592ms +CPU: searchsorted in 4805.432ms + difference between CPU and NUMPY: 0.000 +GPU: searchsorted in 1.055ms + difference between GPU and NUMPY: 0.000 + +Looking for 50000x1000 values in 50000x300 entries +NUMPY: searchsorted in 4333.964ms +CPU: searchsorted in 4753.958ms + difference between CPU and NUMPY: 0.000 +GPU: searchsorted in 0.391ms + difference between GPU and NUMPY: 0.000 + ``` + The first run comprises the time of allocation, while the second one does not. + +2. You may also use the nice `benchmark.py` code written by [@baldassarreFe](https://github.com/baldassarreFe), that tests `searchsorted` on many runs: + + ``` +Benchmark searchsorted: +- a [5000 x 300] +- v [5000 x 100] +- reporting fastest time of 20 runs +- each run executes searchsorted 100 times + +Numpy: 4.6302046799100935 +CPU: 5.041533078998327 +CUDA: 0.0007955809123814106 + ``` diff --git a/torchsearchsorted/examples/benchmark.py b/torchsearchsorted/examples/benchmark.py new file mode 100644 index 0000000..b267c4f --- /dev/null +++ b/torchsearchsorted/examples/benchmark.py @@ -0,0 +1,71 @@ +import timeit + +import torch +import numpy as np +from torchsearchsorted import searchsorted, numpy_searchsorted + +B = 5_000 +A = 300 +V = 100 + +repeats = 20 +number = 100 + +print( + f'Benchmark searchsorted:', + f'- a [{B} x {A}]', + f'- v [{B} x {V}]', + f'- reporting fastest time of {repeats} runs', + f'- each run executes searchsorted {number} times', + sep='\n', + end='\n\n' +) + + +def get_arrays(): + a = np.sort(np.random.randn(B, A), axis=1) + v = np.random.randn(B, V) + out = np.empty_like(v, dtype=np.long) + return a, v, out + + +def get_tensors(device): + a = torch.sort(torch.randn(B, A, device=device), dim=1)[0] + v = torch.randn(B, V, device=device) + out = torch.empty(B, V, device=device, dtype=torch.long) + if torch.cuda.is_available(): + torch.cuda.synchronize() + return a, v, out + +def searchsorted_synchronized(a,v,out=None,side='left'): + out = searchsorted(a,v,out,side) + torch.cuda.synchronize() + return out + +numpy = timeit.repeat( + stmt="numpy_searchsorted(a, v, side='left')", + setup="a, v, out = get_arrays()", + globals=globals(), + repeat=repeats, + number=number +) +print('Numpy: ', min(numpy), sep='\t') + +cpu = timeit.repeat( + stmt="searchsorted(a, v, out, side='left')", + setup="a, v, out = get_tensors(device='cpu')", + globals=globals(), + repeat=repeats, + number=number +) +print('CPU: ', min(cpu), sep='\t') + +if torch.cuda.is_available(): + gpu = timeit.repeat( + stmt="searchsorted_synchronized(a, v, out, side='left')", + setup="a, v, out = get_tensors(device='cuda')", + globals=globals(), + repeat=repeats, + number=number + ) + print('CUDA: ', min(gpu), sep='\t') diff --git a/torchsearchsorted/examples/test.py b/torchsearchsorted/examples/test.py new file mode 100644 index 0000000..baba996 --- /dev/null +++ b/torchsearchsorted/examples/test.py @@ -0,0 +1,66 @@ +import torch +from torchsearchsorted import searchsorted, numpy_searchsorted +import time + +if __name__ == '__main__': + # defining the number of tests + ntests = 2 + + # defining the problem dimensions + nrows_a = 50000 + nrows_v = 50000 + nsorted_values = 300 + nvalues = 1000 + + # defines the variables. The first run will comprise allocation, the + # further ones will not + test_GPU = None + test_CPU = None + + for ntest in range(ntests): + print("\nLooking for %dx%d values in %dx%d entries" % (nrows_v, nvalues, + nrows_a, + nsorted_values)) + + side = 'right' + # generate a matrix with sorted rows + a = torch.randn(nrows_a, nsorted_values, device='cpu') + a = torch.sort(a, dim=1)[0] + # generate a matrix of values to searchsort + v = torch.randn(nrows_v, nvalues, device='cpu') + + # a = torch.tensor([[0., 1.]]) + # v = torch.tensor([[1.]]) + + t0 = time.time() + test_NP = torch.tensor(numpy_searchsorted(a, v, side)) + print('NUMPY: searchsorted in %0.3fms' % (1000*(time.time()-t0))) + t0 = time.time() + test_CPU = searchsorted(a, v, test_CPU, side) + print('CPU: searchsorted in %0.3fms' % (1000*(time.time()-t0))) + # compute the difference between both + error_CPU = torch.norm(test_NP.double() + - test_CPU.double()).numpy() + if error_CPU: + import ipdb; ipdb.set_trace() + print(' difference between CPU and NUMPY: %0.3f' % error_CPU) + + if not torch.cuda.is_available(): + print('CUDA is not available on this machine, cannot go further.') + continue + else: + # now do the CPU + a = a.to('cuda') + v = v.to('cuda') + torch.cuda.synchronize() + # launch searchsorted on those + t0 = time.time() + test_GPU = searchsorted(a, v, test_GPU, side) + torch.cuda.synchronize() + print('GPU: searchsorted in %0.3fms' % (1000*(time.time()-t0))) + + # compute the difference between both + error_CUDA = torch.norm(test_NP.to('cuda').double() + - test_GPU.double()).cpu().numpy() + + print(' difference between GPU and NUMPY: %0.3f' % error_CUDA) diff --git a/torchsearchsorted/setup.py b/torchsearchsorted/setup.py new file mode 100644 index 0000000..092bcd1 --- /dev/null +++ b/torchsearchsorted/setup.py @@ -0,0 +1,41 @@ +from setuptools import setup, find_packages +from torch.utils.cpp_extension import BuildExtension, CUDA_HOME +from torch.utils.cpp_extension import CppExtension, CUDAExtension + +# In any case, include the CPU version +modules = [ + CppExtension('torchsearchsorted.cpu', + ['src/cpu/searchsorted_cpu_wrapper.cpp']), +] + +# If nvcc is available, add the CUDA extension +if CUDA_HOME: + modules.append( + CUDAExtension('torchsearchsorted.cuda', + ['src/cuda/searchsorted_cuda_wrapper.cpp', + 'src/cuda/searchsorted_cuda_kernel.cu']) + ) + +tests_require = [ + 'pytest', +] + +# Now proceed to setup +setup( + name='torchsearchsorted', + version='1.1', + description='A searchsorted implementation for pytorch', + keywords='searchsorted', + author='Antoine Liutkus', + author_email='antoine.liutkus@inria.fr', + packages=find_packages(where='src'), + package_dir={"": "src"}, + ext_modules=modules, + tests_require=tests_require, + extras_require={ + 'test': tests_require, + }, + cmdclass={ + 'build_ext': BuildExtension + } +) diff --git a/torchsearchsorted/src/cpu/searchsorted_cpu_wrapper.cpp b/torchsearchsorted/src/cpu/searchsorted_cpu_wrapper.cpp new file mode 100644 index 0000000..610200f --- /dev/null +++ b/torchsearchsorted/src/cpu/searchsorted_cpu_wrapper.cpp @@ -0,0 +1,126 @@ +#include "searchsorted_cpu_wrapper.h" +#include + +template +int eval(scalar_t val, scalar_t *a, int64_t row, int64_t col, int64_t ncol, bool side_left) +{ + /* Evaluates whether a[row,col] < val <= a[row, col+1]*/ + + if (col == ncol - 1) + { + // special case: we are on the right border + if (a[row * ncol + col] <= val){ + return 1;} + else { + return -1;} + } + bool is_lower; + bool is_next_higher; + + if (side_left) { + // a[row, col] < v <= a[row, col+1] + is_lower = (a[row * ncol + col] < val); + is_next_higher = (a[row*ncol + col + 1] >= val); + } else { + // a[row, col] <= v < a[row, col+1] + is_lower = (a[row * ncol + col] <= val); + is_next_higher = (a[row * ncol + col + 1] > val); + } + if (is_lower && is_next_higher) { + // we found the right spot + return 0; + } else if (is_lower) { + // answer is on the right side + return 1; + } else { + // answer is on the left side + return -1; + } +} + +template +int64_t binary_search(scalar_t*a, int64_t row, scalar_t val, int64_t ncol, bool side_left) +{ + /* Look for the value `val` within row `row` of matrix `a`, which + has `ncol` columns. + + the `a` matrix is assumed sorted in increasing order, row-wise + + returns: + * -1 if `val` is smaller than the smallest value found within that row of `a` + * `ncol` - 1 if `val` is larger than the largest element of that row of `a` + * Otherwise, return the column index `res` such that: + - a[row, col] < val <= a[row, col+1]. (if side_left), or + - a[row, col] < val <= a[row, col+1] (if not side_left). + */ + + //start with left at 0 and right at number of columns of a + int64_t right = ncol; + int64_t left = 0; + + while (right >= left) { + // take the midpoint of current left and right cursors + int64_t mid = left + (right-left)/2; + + // check the relative position of val: are we good here ? + int rel_pos = eval(val, a, row, mid, ncol, side_left); + // we found the point + if(rel_pos == 0) { + return mid; + } else if (rel_pos > 0) { + if (mid==ncol-1){return ncol-1;} + // the answer is on the right side + left = mid; + } else { + if (mid==0){return -1;} + right = mid; + } + } + return -1; +} + +void searchsorted_cpu_wrapper( + at::Tensor a, + at::Tensor v, + at::Tensor res, + bool side_left) +{ + + // Get the dimensions + auto nrow_a = a.size(/*dim=*/0); + auto ncol_a = a.size(/*dim=*/1); + auto nrow_v = v.size(/*dim=*/0); + auto ncol_v = v.size(/*dim=*/1); + + auto nrow_res = fmax(nrow_a, nrow_v); + + //auto acc_v = v.accessor(); + //auto acc_res = res.accessor(); + + AT_DISPATCH_ALL_TYPES(a.type(), "searchsorted cpu", [&] { + + scalar_t* a_data = a.data_ptr(); + scalar_t* v_data = v.data_ptr(); + int64_t* res_data = res.data(); + + for (int64_t row = 0; row < nrow_res; row++) + { + for (int64_t col = 0; col < ncol_v; col++) + { + // get the value to look for + int64_t row_in_v = (nrow_v == 1) ? 0 : row; + int64_t row_in_a = (nrow_a == 1) ? 0 : row; + + int64_t idx_in_v = row_in_v * ncol_v + col; + int64_t idx_in_res = row * ncol_v + col; + + // apply binary search + res_data[idx_in_res] = (binary_search(a_data, row_in_a, v_data[idx_in_v], ncol_a, side_left) + 1); + } + } + }); + } + + PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + m.def("searchsorted_cpu_wrapper", &searchsorted_cpu_wrapper, "searchsorted (CPU)"); + } diff --git a/torchsearchsorted/src/cpu/searchsorted_cpu_wrapper.h b/torchsearchsorted/src/cpu/searchsorted_cpu_wrapper.h new file mode 100644 index 0000000..d674255 --- /dev/null +++ b/torchsearchsorted/src/cpu/searchsorted_cpu_wrapper.h @@ -0,0 +1,12 @@ +#ifndef _SEARCHSORTED_CPU +#define _SEARCHSORTED_CPU + +#include + +void searchsorted_cpu_wrapper( + at::Tensor a, + at::Tensor v, + at::Tensor res, + bool side_left); + +#endif \ No newline at end of file diff --git a/torchsearchsorted/src/cuda/searchsorted_cuda_kernel.cu b/torchsearchsorted/src/cuda/searchsorted_cuda_kernel.cu new file mode 100644 index 0000000..af6ed27 --- /dev/null +++ b/torchsearchsorted/src/cuda/searchsorted_cuda_kernel.cu @@ -0,0 +1,142 @@ +#include "searchsorted_cuda_kernel.h" + +template +__device__ +int eval(scalar_t val, scalar_t *a, int64_t row, int64_t col, int64_t ncol, bool side_left) +{ + /* Evaluates whether a[row,col] < val <= a[row, col+1]*/ + + if (col == ncol - 1) + { + // special case: we are on the right border + if (a[row * ncol + col] <= val){ + return 1;} + else { + return -1;} + } + bool is_lower; + bool is_next_higher; + + if (side_left) { + // a[row, col] < v <= a[row, col+1] + is_lower = (a[row * ncol + col] < val); + is_next_higher = (a[row*ncol + col + 1] >= val); + } else { + // a[row, col] <= v < a[row, col+1] + is_lower = (a[row * ncol + col] <= val); + is_next_higher = (a[row * ncol + col + 1] > val); + } + if (is_lower && is_next_higher) { + // we found the right spot + return 0; + } else if (is_lower) { + // answer is on the right side + return 1; + } else { + // answer is on the left side + return -1; + } +} + +template +__device__ +int binary_search(scalar_t *a, int64_t row, scalar_t val, int64_t ncol, bool side_left) +{ + /* Look for the value `val` within row `row` of matrix `a`, which + has `ncol` columns. + + the `a` matrix is assumed sorted in increasing order, row-wise + + Returns + * -1 if `val` is smaller than the smallest value found within that row of `a` + * `ncol` - 1 if `val` is larger than the largest element of that row of `a` + * Otherwise, return the column index `res` such that: + - a[row, col] < val <= a[row, col+1]. (if side_left), or + - a[row, col] < val <= a[row, col+1] (if not side_left). + */ + + //start with left at 0 and right at number of columns of a + int64_t right = ncol; + int64_t left = 0; + + while (right >= left) { + // take the midpoint of current left and right cursors + int64_t mid = left + (right-left)/2; + + // check the relative position of val: are we good here ? + int rel_pos = eval(val, a, row, mid, ncol, side_left); + // we found the point + if(rel_pos == 0) { + return mid; + } else if (rel_pos > 0) { + if (mid==ncol-1){return ncol-1;} + // the answer is on the right side + left = mid; + } else { + if (mid==0){return -1;} + right = mid; + } + } + return -1; +} + +template +__global__ +void searchsorted_kernel( + int64_t *res, + scalar_t *a, + scalar_t *v, + int64_t nrow_res, int64_t nrow_a, int64_t nrow_v, int64_t ncol_a, int64_t ncol_v, bool side_left) +{ + // get current row and column + int64_t row = blockIdx.y*blockDim.y+threadIdx.y; + int64_t col = blockIdx.x*blockDim.x+threadIdx.x; + + // check whether we are outside the bounds of what needs be computed. + if ((row >= nrow_res) || (col >= ncol_v)) { + return;} + + // get the value to look for + int64_t row_in_v = (nrow_v==1) ? 0: row; + int64_t row_in_a = (nrow_a==1) ? 0: row; + int64_t idx_in_v = row_in_v*ncol_v+col; + int64_t idx_in_res = row*ncol_v+col; + + // apply binary search + res[idx_in_res] = binary_search(a, row_in_a, v[idx_in_v], ncol_a, side_left)+1; +} + + +void searchsorted_cuda( + at::Tensor a, + at::Tensor v, + at::Tensor res, + bool side_left){ + + // Get the dimensions + auto nrow_a = a.size(/*dim=*/0); + auto nrow_v = v.size(/*dim=*/0); + auto ncol_a = a.size(/*dim=*/1); + auto ncol_v = v.size(/*dim=*/1); + + auto nrow_res = fmax(double(nrow_a), double(nrow_v)); + + // prepare the kernel configuration + dim3 threads(ncol_v, nrow_res); + dim3 blocks(1, 1); + if (nrow_res*ncol_v > 1024){ + threads.x = int(fmin(double(1024), double(ncol_v))); + threads.y = floor(1024/threads.x); + blocks.x = ceil(double(ncol_v)/double(threads.x)); + blocks.y = ceil(double(nrow_res)/double(threads.y)); + } + + AT_DISPATCH_ALL_TYPES(a.type(), "searchsorted cuda", ([&] { + searchsorted_kernel<<>>( + res.data(), + a.data(), + v.data(), + nrow_res, nrow_a, nrow_v, ncol_a, ncol_v, side_left); + })); + + } diff --git a/torchsearchsorted/src/cuda/searchsorted_cuda_kernel.h b/torchsearchsorted/src/cuda/searchsorted_cuda_kernel.h new file mode 100644 index 0000000..08ea049 --- /dev/null +++ b/torchsearchsorted/src/cuda/searchsorted_cuda_kernel.h @@ -0,0 +1,12 @@ +#ifndef _SEARCHSORTED_CUDA_KERNEL +#define _SEARCHSORTED_CUDA_KERNEL + +#include + +void searchsorted_cuda( + at::Tensor a, + at::Tensor v, + at::Tensor res, + bool side_left); + +#endif diff --git a/torchsearchsorted/src/cuda/searchsorted_cuda_wrapper.cpp b/torchsearchsorted/src/cuda/searchsorted_cuda_wrapper.cpp new file mode 100644 index 0000000..c11372e --- /dev/null +++ b/torchsearchsorted/src/cuda/searchsorted_cuda_wrapper.cpp @@ -0,0 +1,20 @@ +#include "searchsorted_cuda_wrapper.h" + +// C++ interface + +#define CHECK_CUDA(x) AT_ASSERTM(x.type().is_cuda(), #x " must be a CUDA tensor") +#define CHECK_CONTIGUOUS(x) AT_ASSERTM(x.is_contiguous(), #x " must be contiguous") +#define CHECK_INPUT(x) CHECK_CUDA(x); CHECK_CONTIGUOUS(x) + +void searchsorted_cuda_wrapper(at::Tensor a, at::Tensor v, at::Tensor res, bool side_left) +{ + CHECK_INPUT(a); + CHECK_INPUT(v); + CHECK_INPUT(res); + + searchsorted_cuda(a, v, res, side_left); +} + +PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + m.def("searchsorted_cuda_wrapper", &searchsorted_cuda_wrapper, "searchsorted (CUDA)"); +} diff --git a/torchsearchsorted/src/cuda/searchsorted_cuda_wrapper.h b/torchsearchsorted/src/cuda/searchsorted_cuda_wrapper.h new file mode 100644 index 0000000..9ecd429 --- /dev/null +++ b/torchsearchsorted/src/cuda/searchsorted_cuda_wrapper.h @@ -0,0 +1,13 @@ +#ifndef _SEARCHSORTED_CUDA_WRAPPER +#define _SEARCHSORTED_CUDA_WRAPPER + +#include +#include "searchsorted_cuda_kernel.h" + +void searchsorted_cuda_wrapper( + at::Tensor a, + at::Tensor v, + at::Tensor res, + bool side_left); + +#endif diff --git a/torchsearchsorted/src/torchsearchsorted/__init__.py b/torchsearchsorted/src/torchsearchsorted/__init__.py new file mode 100644 index 0000000..fc30292 --- /dev/null +++ b/torchsearchsorted/src/torchsearchsorted/__init__.py @@ -0,0 +1,2 @@ +from .searchsorted import searchsorted +from .utils import numpy_searchsorted diff --git a/torchsearchsorted/src/torchsearchsorted/searchsorted.py b/torchsearchsorted/src/torchsearchsorted/searchsorted.py new file mode 100644 index 0000000..aaca900 --- /dev/null +++ b/torchsearchsorted/src/torchsearchsorted/searchsorted.py @@ -0,0 +1,53 @@ +from typing import Optional + +import torch + +# trying to import the CPU searchsorted +SEARCHSORTED_CPU_AVAILABLE = True +try: + from torchsearchsorted.cpu import searchsorted_cpu_wrapper +except ImportError: + SEARCHSORTED_CPU_AVAILABLE = False + +# trying to import the CUDA searchsorted +SEARCHSORTED_GPU_AVAILABLE = True +try: + from torchsearchsorted.cuda import searchsorted_cuda_wrapper +except ImportError: + SEARCHSORTED_GPU_AVAILABLE = False + + +def searchsorted(a: torch.Tensor, v: torch.Tensor, + out: Optional[torch.LongTensor] = None, + side='left') -> torch.LongTensor: + assert len(a.shape) == 2, "input `a` must be 2-D." + assert len(v.shape) == 2, "input `v` mus(t be 2-D." + assert (a.shape[0] == v.shape[0] + or a.shape[0] == 1 + or v.shape[0] == 1), ("`a` and `v` must have the same number of " + "rows or one of them must have only one ") + assert a.device == v.device, '`a` and `v` must be on the same device' + + result_shape = (max(a.shape[0], v.shape[0]), v.shape[1]) + if out is not None: + assert out.device == a.device, "`out` must be on the same device as `a`" + assert out.dtype == torch.long, "out.dtype must be torch.long" + assert out.shape == result_shape, ("If the output tensor is provided, " + "its shape must be correct.") + else: + out = torch.empty(result_shape, device=v.device, dtype=torch.long) + + if a.is_cuda and not SEARCHSORTED_GPU_AVAILABLE: + raise Exception('torchsearchsorted on CUDA device is asked, but it seems ' + 'that it is not available. Please install it') + if not a.is_cuda and not SEARCHSORTED_CPU_AVAILABLE: + raise Exception('torchsearchsorted on CPU is not available. ' + 'Please install it.') + + left_side = 1 if side=='left' else 0 + if a.is_cuda: + searchsorted_cuda_wrapper(a, v, out, left_side) + else: + searchsorted_cpu_wrapper(a, v, out, left_side) + + return out diff --git a/torchsearchsorted/src/torchsearchsorted/utils.py b/torchsearchsorted/src/torchsearchsorted/utils.py new file mode 100644 index 0000000..68b9939 --- /dev/null +++ b/torchsearchsorted/src/torchsearchsorted/utils.py @@ -0,0 +1,15 @@ +import numpy as np + + +def numpy_searchsorted(a: np.ndarray, v: np.ndarray, side='left'): + """Numpy version of searchsorted that works batch-wise on pytorch tensors + """ + nrows_a = a.shape[0] + (nrows_v, ncols_v) = v.shape + nrows_out = max(nrows_a, nrows_v) + out = np.empty((nrows_out, ncols_v), dtype=np.long) + def sel(data, row): + return data[0] if data.shape[0] == 1 else data[row] + for row in range(nrows_out): + out[row] = np.searchsorted(sel(a, row), sel(v, row), side=side) + return out diff --git a/torchsearchsorted/test/conftest.py b/torchsearchsorted/test/conftest.py new file mode 100644 index 0000000..5ec545f --- /dev/null +++ b/torchsearchsorted/test/conftest.py @@ -0,0 +1,11 @@ +import pytest +import torch + +devices = {'cpu': torch.device('cpu')} +if torch.cuda.is_available(): + devices['cuda'] = torch.device('cuda:0') + + +@pytest.fixture(params=devices.values(), ids=devices.keys()) +def device(request): + return request.param diff --git a/torchsearchsorted/test/test_searchsorted.py b/torchsearchsorted/test/test_searchsorted.py new file mode 100644 index 0000000..27bfb49 --- /dev/null +++ b/torchsearchsorted/test/test_searchsorted.py @@ -0,0 +1,44 @@ +import pytest + +import torch +import numpy as np +from torchsearchsorted import searchsorted, numpy_searchsorted +from itertools import product, repeat + + +def test_searchsorted_output_dtype(device): + B = 100 + A = 50 + V = 12 + + a = torch.sort(torch.rand(B, V, device=device), dim=1)[0] + v = torch.rand(B, A, device=device) + + out = searchsorted(a, v) + out_np = numpy_searchsorted(a.cpu().numpy(), v.cpu().numpy()) + assert out.dtype == torch.long + np.testing.assert_array_equal(out.cpu().numpy(), out_np) + + out = torch.empty(v.shape, dtype=torch.long, device=device) + searchsorted(a, v, out) + assert out.dtype == torch.long + np.testing.assert_array_equal(out.cpu().numpy(), out_np) + +Ba_val = [1, 100, 200] +Bv_val = [1, 100, 200] +A_val = [1, 50, 500] +V_val = [1, 12, 120] +side_val = ['left', 'right'] +nrepeat = 100 + +@pytest.mark.parametrize('Ba,Bv,A,V,side', product(Ba_val, Bv_val, A_val, V_val, side_val)) +def test_searchsorted_correct(Ba, Bv, A, V, side, device): + if Ba > 1 and Bv > 1 and Ba != Bv: + return + for test in range(nrepeat): + a = torch.sort(torch.rand(Ba, A, device=device), dim=1)[0] + v = torch.rand(Bv, V, device=device) + out_np = numpy_searchsorted(a.cpu().numpy(), v.cpu().numpy(), + side=side) + out = searchsorted(a, v, side=side).cpu().numpy() + np.testing.assert_array_equal(out, out_np)