From 53599770dd642f0bc59a6554bd7c46e4a8044334 Mon Sep 17 00:00:00 2001 From: Olivia Date: Thu, 19 Mar 2020 11:19:39 -0700 Subject: [PATCH] Accumulate points (#4) Summary: Code for accumulating points in the z-buffer in three ways: 1. weighted sum 2. normalised weighted sum 3. alpha compositing Pull Request resolved: https://github.com/fairinternal/pytorch3d/pull/4 Reviewed By: nikhilaravi Differential Revision: D20522422 Pulled By: gkioxari fbshipit-source-id: 5023baa05f15e338f3821ef08f5552c2dcbfc06c --- .../deform_source_mesh_to_target_mesh.ipynb | 6 +- docs/tutorials/render_coloured_points.ipynb | 303 ++++++++++++ pytorch3d/csrc/compositing/alpha_composite.cu | 187 ++++++++ pytorch3d/csrc/compositing/alpha_composite.h | 110 +++++ .../csrc/compositing/alpha_composite_cpu.cpp | 114 +++++ .../csrc/compositing/norm_weighted_sum.cu | 202 ++++++++ .../csrc/compositing/norm_weighted_sum.h | 109 +++++ .../compositing/norm_weighted_sum_cpu.cpp | 134 ++++++ pytorch3d/csrc/compositing/weighted_sum.cu | 161 +++++++ pytorch3d/csrc/compositing/weighted_sum.h | 107 +++++ .../csrc/compositing/weighted_sum_cpu.cpp | 98 ++++ pytorch3d/csrc/ext.cpp | 11 + pytorch3d/renderer/__init__.py | 8 + pytorch3d/renderer/compositing.py | 255 ++++++++++ pytorch3d/renderer/points/__init__.py | 7 + pytorch3d/renderer/points/compositor.py | 51 ++ pytorch3d/renderer/points/rasterizer.py | 103 ++++ pytorch3d/renderer/points/renderer.py | 56 +++ pytorch3d/structures/__init__.py | 1 + tests/test_compositing.py | 442 ++++++++++++++++++ tests/test_face_areas_normals.py | 5 +- 21 files changed, 2466 insertions(+), 4 deletions(-) create mode 100644 docs/tutorials/render_coloured_points.ipynb create mode 100644 pytorch3d/csrc/compositing/alpha_composite.cu create mode 100644 pytorch3d/csrc/compositing/alpha_composite.h create mode 100644 pytorch3d/csrc/compositing/alpha_composite_cpu.cpp create mode 100644 pytorch3d/csrc/compositing/norm_weighted_sum.cu create mode 100644 pytorch3d/csrc/compositing/norm_weighted_sum.h create mode 100644 pytorch3d/csrc/compositing/norm_weighted_sum_cpu.cpp create mode 100644 pytorch3d/csrc/compositing/weighted_sum.cu create mode 100644 pytorch3d/csrc/compositing/weighted_sum.h create mode 100644 pytorch3d/csrc/compositing/weighted_sum_cpu.cpp create mode 100644 pytorch3d/renderer/compositing.py create mode 100644 pytorch3d/renderer/points/compositor.py create mode 100644 pytorch3d/renderer/points/rasterizer.py create mode 100644 pytorch3d/renderer/points/renderer.py create mode 100644 tests/test_compositing.py diff --git a/docs/tutorials/deform_source_mesh_to_target_mesh.ipynb b/docs/tutorials/deform_source_mesh_to_target_mesh.ipynb index 39820f472..4235ba680 100644 --- a/docs/tutorials/deform_source_mesh_to_target_mesh.ipynb +++ b/docs/tutorials/deform_source_mesh_to_target_mesh.ipynb @@ -673,9 +673,9 @@ "provenance": [] }, "kernelspec": { - "display_name": "pytorch3d (local)", + "display_name": "Python 3", "language": "python", - "name": "pytorch3d_local" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -687,7 +687,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.5+" + "version": "3.7.6" }, "widgets": { "application/vnd.jupyter.widget-state+json": { diff --git a/docs/tutorials/render_coloured_points.ipynb b/docs/tutorials/render_coloured_points.ipynb new file mode 100644 index 000000000..0cfa8f4a0 --- /dev/null +++ b/docs/tutorials/render_coloured_points.ipynb @@ -0,0 +1,303 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Render a coloured point cloud\n", + "\n", + "This tutorial shows how to:\n", + "- set up a renderer \n", + "- render the point cloud \n", + "- vary the rendering settings such as compositing and camera position" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Import modules" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# !pip install torch torchvision\n", + "# !pip install 'git+https://github.com/facebookresearch/pytorch3d.git'" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "os.chdir('../..')\n", + "import torch\n", + "import torch.nn.functional as F\n", + "import matplotlib.pyplot as plt\n", + "from skimage.io import imread\n", + "\n", + "# Util function for loading point clouds\n", + "import numpy as np\n", + "\n", + "# Data structures and functions for rendering\n", + "from pytorch3d.structures import Pointclouds\n", + "from pytorch3d.renderer import (\n", + " look_at_view_transform,\n", + " OpenGLOrthographicCameras, \n", + " PointsRasterizationSettings,\n", + " PointsRenderer,\n", + " PointsRasterizer,\n", + " AlphaCompositor,\n", + " NormWeightedCompositor\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load a point cloud and corresponding colours\n", + "\n", + "Load a `.ply` file and create a **Point Cloud** object. \n", + "\n", + "**Pointclouds** is a unique datastructure provided in PyTorch3D for working with batches of point clouds of different sizes. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Setup\n", + "device = torch.device(\"cuda:0\")\n", + "torch.cuda.set_device(device)\n", + "\n", + "# Set paths\n", + "DATA_DIR = os.path.join(os.getcwd(), \"docs/tutorials/data\")\n", + "obj_filename = os.path.join(DATA_DIR, \"PittsburghBridge/pointcloud.npz\")\n", + "\n", + "# Load point cloud\n", + "pointcloud = np.load(obj_filename)\n", + "verts = torch.Tensor(pointcloud['verts']).to(device)\n", + "rgb = torch.Tensor(pointcloud['rgb']).to(device)\n", + "\n", + "point_cloud = Pointclouds(points=[verts], features=[rgb])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create a renderer\n", + "\n", + "A renderer in PyTorch3D is composed of a **rasterizer** and a **shader** which each have a number of subcomponents such as a **camera** (orthgraphic/perspective). Here we initialize some of these components and use default values for the rest.\n", + "\n", + "In this example we will first create a **renderer** which uses an **orthographic camera**, and applies **alpha compositing**. Then we learn how to vary different components using the modular API. \n", + "\n", + "[1] SynSin: End to end View Synthesis from a Single Image. Olivia Wiles, Georgia Gkioxari, Richard Szeliski, Justin Johnson. CVPR 2020." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Initialize an OpenGL perspective camera.\n", + "R, T = look_at_view_transform(20, 10, 0)\n", + "cameras = OpenGLOrthographicCameras(device=device, R=R, T=T, znear=0.01)\n", + "\n", + "# Define the settings for rasterization and shading. Here we set the output image to be of size\n", + "# 512x512. As we are rendering images for visualization purposes only we will set faces_per_pixel=1\n", + "# and blur_radius=0.0. Refer to raster_points.py for explanations of these parameters. \n", + "raster_settings = PointsRasterizationSettings(\n", + " image_size=512, \n", + " radius = 0.003,\n", + " points_per_pixel = 10,\n", + " bin_size = None,\n", + " max_points_per_bin = None\n", + ")\n", + "\n", + "\n", + "# Create a points renderer by compositing points using an alpha compositor (nearer points\n", + "# are weighted more heavily). See [1] for an explanation.\n", + "renderer = PointsRenderer(\n", + " rasterizer=PointsRasterizer(\n", + " cameras=cameras, \n", + " raster_settings=raster_settings\n", + " ),\n", + " compositor=AlphaCompositor(\n", + " device=device, \n", + " composite_params=None\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-0.5, 511.5, 511.5, -0.5)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi0AAAIuCAYAAABzfTjcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeZTm2V3f98+997c8S+1VvUxPz4xm14KkGaGRhCSQLIEQYMBJsE9I/ggHSIhzYkMcKcbHCScJCYawWDZgCGAnJDk5jg9JWCIQQoAWEBKWtc8gMYs0mn16reVZfsu9N3/cXz09siWMxEyPLvN+zZkjTVd39VNPVfXz6Xu/i4kxCgAA4CudfbYfAAAAwJ8HoQUAAGSB0AIAALJAaAEAAFkgtAAAgCwQWgAAQBaKP+uNxhj6oQEAwFUVYzRf6Mc5aQEAAFkgtAAAgCwQWgAAQBYILQAAIAuEFgAAkAVCCwAAyAKhBQAAZIHQAgAAskBoAQAAWSC0AACALBBaAABAFggtAAAgC4QWAACQBUILAADIAqEFAABkgdACAACyQGgBAABZILQAAIAsEFoAAEAWCC0AACALhBYAAJAFQgsAAMgCoQUAAGSB0AIAALJAaAEAAFkgtAAAgCwQWgAAQBYILQAAIAuEFgAAkAVCCwAAyAKhBQAAZIHQAgAAskBoAQAAWSC0AACALBBaAABAFggtAAAgC4QWAACQBUILAADIAqEFAABkgdACAACyQGgBAABZILQAAIAsEFoAAEAWCC0AACALhBYAAJAFQgsAAMgCoQUAAGSB0AIAALJAaAEAAFkgtAAAgCwQWgAAQBYILQAAIAuEFgAAkAVCCwAAyAKhBQAAZIHQAgAAskBoAQAAWSC0AACALBBaAABAFggtAAAgC4QWAACQBUILAADIAqEFAABkgdACAACyQGgBAABZILQAAIAsEFoAAEAWCC0AACALhBYAAJAFQgsAAMgCoQUAAGSB0AIAALJAaAEAAFkgtAAAgCwQWgAAQBYILQAAIAuEFgAAkAVCCwAAyAKhBQAAZIHQAgAAskBoAQAAWSC0AACALBBaAABAFggtAAAgC4QWAACQBUILAADIAqEFAABkgdACAACyQGgBAABZILQAAIAsEFoAAEAWCC0AACALhBYAAJAFQgsAAMgCoQUAAGSB0AIAALJAaAEAAFkgtAAAgCwQWgAAQBYILQAAIAuEFgAAkAVCCwAAyAKhBQAAZIHQAgAAskBoAQAAWSC0AACALBBaAABAFggtAAAgC4QWAACQBUILAADIAqEFAABkgdACAACyQGgBAABZILQAAIAsEFoAAEAWCC0AACALhBYAAJAFQgsAAMgCoQUAAGSB0AIAALJAaAEAAFkgtAAAgCwQWgAAQBYILQAAIAuEFgAAkAVCCwAAyAKhBQAAZIHQAgAAskBoAQAAWSC0AACALBBaAABAFggtAAAgC4QWAACQBUILAADIAqEFAABkgdACAACyQGgBAABZILQAAIAsEFoAAEAWCC0AACALhBYAAJAFQgsAAMgCoQUAAGSB0AIAALJAaAEAAFkgtAAAgCwQWgAAQBYILQAAIAuEFgAAkAVCCwAAyAKhBQAAZIHQAgAAskBoAQAAWSC0AACALBBaAABAFggtAAAgC4QWAACQBUILAADIAqEFAABkgdACAACyQGgBAABZILQAAIAsEFoAAEAWCC0AACALhBYAAJAFQgsAAMgCoQUAAGSB0AIAALJAaAEAAFkgtAAAgCwQWgAAQBYILQAAIAuEFgAAkAVCCwAAyAKhBQAAZIHQAgAAskBoAQAAWSC0AACALBBaAABAFggtAAAgC4QWAACQBUILAADIAqEFAABkgdACAACyQGgBAABZILQAAIAsEFoAAEAWCC0AACALhBYAAJAFQgsAAMgCoQUAAGSB0AIAALJAaAEAAFkgtAAAgCwQWgAAQBYILQAAIAuEFgAAkAVCCwAAyAKhBQAAZIHQAgAAskBoAQAAWSC0AACALBBaAABAFggtAAAgC4QWAACQBUILAADIAqEFAABkgdACAACyQGgBAABZILQAAIAsEFoAAEAWCC0AACALhBYAAJAFQgsAAMgCoQUAAGSB0AIAALJAaAEAAFkgtAAAgCwQWgAAQBYILQAAIAuEFgAAkAVCCwAAyAKhBQAAZIHQAgAAskBoAQAAWSC0AACALBBaAABAFggtAAAgC4QWAACQBUILAADIAqEFAABkgdACAACyQGgBAABZILQAAIAsEFoAAEAWCC0AACALhBYAAJAFQgsAAMgCoQUAAGSB0AIAALJAaAEAAFkgtAAAgCwQWgAAQBYILQAAIAuEFgAAkAVCCwAAyAKhBQAAZIHQAgAAskBoAQAA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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "images = renderer(point_cloud)\n", + "plt.figure(figsize=(10, 10))\n", + "plt.imshow(images[0, ..., :3].cpu().numpy())\n", + "plt.grid(\"off\")\n", + "plt.axis(\"off\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example we will first create a **renderer** which uses an **orthographic camera**, and applies **weighted compositing**. " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# Initialize an OpenGL perspective camera.\n", + "R, T = look_at_view_transform(20, 10, 0)\n", + "cameras = OpenGLOrthographicCameras(device=device, R=R, T=T, znear=0.01)\n", + "\n", + "# Define the settings for rasterization and shading. Here we set the output image to be of size\n", + "# 512x512. As we are rendering images for visualization purposes only we will set faces_per_pixel=1\n", + "# and blur_radius=0.0. Refer to rasterize_points.py for explanations of these parameters. \n", + "raster_settings = PointsRasterizationSettings(\n", + " image_size=512, \n", + " radius = 0.003,\n", + " points_per_pixel = 10,\n", + " bin_size = None,\n", + " max_points_per_bin = None\n", + ")\n", + "\n", + "\n", + "# Create a points renderer by compositing points using an weighted compositor (3D points are\n", + "# weighted according to their distance to a pixel and accumulated using a weighted sum)\n", + "renderer = PointsRenderer(\n", + " rasterizer=PointsRasterizer(\n", + " cameras=cameras, \n", + " raster_settings=raster_settings\n", + " ),\n", + " compositor=NormWeightedCompositor(\n", + " device=device, \n", + " composite_params=None\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-0.5, 511.5, 511.5, -0.5)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi0AAAIuCAYAAABzfTjcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdaaytWV7f999az7jHM92xxu4quqHodjdgijZgYXCME3ASCUvJC5tgAYobOUQdS8GJQoa2MQZsDG6wIcGOg/Iib6IofuUoksmrIDmyI8dSGLpt6Imu4d57pj0+w3rWyov1nH2rUTeBpupWr67vp1VSV51T++yzzzn3/Gqt/2BCCAIAAPhyZ9/uJwAAAPD7QWgBAABJILQAAIAkEFoAAEASCC0AACAJhBYAAJCE/Pd6ozGGfmgAAPBEhRDMF/rnnLQAAIAkEFoAAEASCC0AACAJhBYAAJAEQgsAAEgCoQUAACSB0AIAAJJAaAEAAEkgtAAAgCQQWgAAQBIILQAAIAmEFgAAkARCCwAASAKhBQAAJIHQAgAAkkBoAQAASSC0AACAJBBaAABAEggtAAAgCYQWAACQBEILAABIAqEFAAAkgdACAACSQGgBAABJILQAAIAkEFoAAEASCC0AACAJhBYAAJAEQgsAAEgCoQUAACSB0AIAAJJAaAEAAEkgtAAAgCQQWgAAQBIILQAAIAmEFgAAkARCCwAASAKhBQAAJIHQAgAAkkBoAQAASSC0AACAJBBaAABAEggtAAAgCYQWAACQBEILAABIAqEFAAAkgdACAACSQGgBAABJILQAAIAkEFoAAEASCC0AACAJhBYAAJAEQgsAAEgCoQUAACSB0AIAAJJAaAEAAEkgtAAAgCQQWgAAQBIILQAAIAmEFgAAkARCCwAASAKhBQAAJIHQAgAAkkBoAQAASSC0AACAJBBaAABAEggtAAAgCYQWAACQBEILAABIAqEFAAAkgdACAACSQGgBAABJILQAAIAkEFoAAEASCC0AACAJhBYAAJAEQgsAAEgCoQUAACSB0AIAAJJAaAEAAEkgtAAAgCQQWgAAQBIILQAAIAmEFgAAkARCCwAASAKhBQAAJIHQAgAAkkBoAQAASSC0AACAJBBaAABAEggtAAAgCYQWAACQBEILAABIAqEFAAAkgdACAACSQGgBAABJILQAAIAkEFoAAEASCC0AACAJhBYAAJAEQgsAAEgCoQUAACSB0AIAAJJAaAEAAEkgtAAAgCQQWgAAQBIILQAAIAmEFgAAkARCCwAASAKhBQAAJIHQAgAAkkBoAQAASSC0AACAJBBaAABAEggtAAAgCYQWAACQBEILAABIAqEFAAAkgdACAACSQGgBAABJILQAAIAkEFoAAEASCC0AACAJhBYAAJAEQgsAAEgCoQUAACSB0AIAAJJAaAEAAEkgtAAAgCQQWgAAQBIILQAAIAmEFgAAkARCCwAASAKhBQAAJIHQAgAAkkBoAQAASSC0AACAJBBaAABAEggtAAAgCYQWAACQBEILAABIAqEFAAAkgdACAACSQGgBAABJILQAAIAkEFoAAEASCC0AACAJhBYAAJAEQgsAAEgCoQUAACSB0AIAAJJAaAEAAEkgtAAAgCQQWgAAQBIILQAAIAmEFgAAkARCCwAASAKhBQAAJIHQAgAAkkBoAQAASSC0AACAJBBaAABAEggtAAAgCYQWAACQBEILAABIAqEFAAAkgdACAACSQGgBAABJILQAAIAkEFoAAEASCC0AACAJhBYAAJAEQgsAAEgCoQUAACSB0AIAAJJAaAEAAEkgtAAAgCQQWgAAQBIILQAAIAmEFgAAkARCCwAASAKhBQAAJIHQAgAAkkBoAQAASSC0AACAJBBaAABAEggtAAAgCYQWAACQBEILAABIAqEFAAAkgdACAACSQGgBAABJILQAAIAkEFoAAEASCC0AACAJhBYAAJAEQgsAAEgCoQUAACSB0AIAAJJAaAEAAEkgtAAAgCQQWgAAQBIILQAAIAmEFgAAkARCCwAASAKhBQAAJIHQAgAAkkBoAQAASSC0AACAJBBaAABAEggtAAAgCYQWAACQBEILAABIAqEFAAAkgdACAACSQGgBAABJILQAAIAkEFoAAEASCC0AACAJhBYAAJAEQgsAAEgCoQUAACSB0AIAAJJAaAEAAEkgtAAAgCQQWgAAQBIILQAAIAmEFgAAkARCCwAASAKhBQAAJIHQAgAAkkBoAQAASSC0AACAJBBaAABAEggtAAAgCYQWAACQBEILAABIAqEFAAAkgdACAACSQGgBAABJILQAAIAkEFoAAEASCC0AACAJhBYAAJAEQgsAAEgCoQUAACSB0AIAAJJAaAEAAEkgtAAA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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "images = renderer(point_cloud)\n", + "plt.figure(figsize=(10, 10))\n", + "plt.imshow(images[0, ..., :3].cpu().numpy())\n", + "plt.grid(\"off\")\n", + "plt.axis(\"off\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pytorch3d/csrc/compositing/alpha_composite.cu b/pytorch3d/csrc/compositing/alpha_composite.cu new file mode 100644 index 000000000..f4d741e70 --- /dev/null +++ b/pytorch3d/csrc/compositing/alpha_composite.cu @@ -0,0 +1,187 @@ +// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. + +#include + +#include +#include + +#include +#include + +// TODO(gkioxari) support all data types once AtomicAdd supports doubles. +// Currently, support is for floats only. +__global__ void alphaCompositeCudaForwardKernel( + // clang-format off + torch::PackedTensorAccessor result, + const torch::PackedTensorAccessor features, + const torch::PackedTensorAccessor alphas, + const torch::PackedTensorAccessor points_idx) { + // clang-format on + const int64_t batch_size = result.size(0); + const int64_t C = features.size(0); + const int64_t H = points_idx.size(2); + const int64_t W = points_idx.size(3); + + // Get the batch and index + const int batch = blockIdx.x; + + const int num_pixels = C * W * H; + const int num_threads = gridDim.y * blockDim.x; + const int tid = blockIdx.y * blockDim.x + threadIdx.x; + + // Iterate over each feature in each pixel + for (int pid = tid; pid < num_pixels; pid += num_threads) { + int ch = pid / (W * H); + int j = (pid % (W * H)) / H; + int i = (pid % (W * H)) % H; + + // alphacomposite the different values + float cum_alpha = 1.; + // Iterate through the closest K points for this pixel + for (int k = 0; k < points_idx.size(1); ++k) { + int n_idx = points_idx[batch][k][j][i]; + + // Sentinel value is -1 indicating no point overlaps the pixel + if (n_idx < 0) { + continue; + } + + float alpha = alphas[batch][k][j][i]; + // TODO(gkioxari) It might be more efficient to have threads write in a + // local variable, and move atomicAdd outside of the loop such that + // atomicAdd is executed once per thread. + atomicAdd( + &result[batch][ch][j][i], features[ch][n_idx] * cum_alpha * alpha); + cum_alpha = cum_alpha * (1 - alpha); + } + } +} + +// TODO(gkioxari) support all data types once AtomicAdd supports doubles. +// Currently, support is for floats only. +__global__ void alphaCompositeCudaBackwardKernel( + // clang-format off + torch::PackedTensorAccessor grad_features, + torch::PackedTensorAccessor grad_alphas, + const torch::PackedTensorAccessor grad_outputs, + const torch::PackedTensorAccessor features, + const torch::PackedTensorAccessor alphas, + const torch::PackedTensorAccessor points_idx) { + // clang-format on + const int64_t batch_size = points_idx.size(0); + const int64_t C = features.size(0); + const int64_t H = points_idx.size(2); + const int64_t W = points_idx.size(3); + + // Get the batch and index + const int batch = blockIdx.x; + + const int num_pixels = C * W * H; + const int num_threads = gridDim.y * blockDim.x; + const int tid = blockIdx.y * blockDim.x + threadIdx.x; + + // Parallelize over each feature in each pixel in images of size H * W, + // for each image in the batch of size batch_size + for (int pid = tid; pid < num_pixels; pid += num_threads) { + int ch = pid / (W * H); + int j = (pid % (W * H)) / H; + int i = (pid % (W * H)) % H; + + // alphacomposite the different values + float cum_alpha = 1.; + // Iterate through the closest K points for this pixel + for (int k = 0; k < points_idx.size(1); ++k) { + int n_idx = points_idx[batch][k][j][i]; + + // Sentinel value is -1 indicating no point overlaps the pixel + if (n_idx < 0) { + continue; + } + float alpha = alphas[batch][k][j][i]; + + // TODO(gkioxari) It might be more efficient to have threads write in a + // local variable, and move atomicAdd outside of the loop such that + // atomicAdd is executed once per thread. + atomicAdd( + &grad_alphas[batch][k][j][i], + cum_alpha * features[ch][n_idx] * grad_outputs[batch][ch][j][i]); + atomicAdd( + &grad_features[ch][n_idx], + cum_alpha * alpha * grad_outputs[batch][ch][j][i]); + + // Iterate over all (K-1) nearest points to update gradient + for (int t = 0; t < k; ++t) { + int t_idx = points_idx[batch][t][j][i]; + // Sentinel value is -1, indicating no point overlaps this pixel + if (t_idx < 0) { + continue; + } + float alpha_tvalue = alphas[batch][t][j][i]; + // TODO(gkioxari) It might be more efficient to have threads write in a + // local variable, and move atomicAdd outside of the loop such that + // atomicAdd is executed once per thread. + atomicAdd( + &grad_alphas[batch][t][j][i], + -grad_outputs[batch][ch][j][i] * features[ch][n_idx] * cum_alpha * + alpha / (1 - alpha_tvalue)); + } + + cum_alpha = cum_alpha * (1 - alphas[batch][k][j][i]); + } + } +} + +torch::Tensor alphaCompositeCudaForward( + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx) { + const int64_t batch_size = points_idx.size(0); + const int64_t C = features.size(0); + const int64_t H = points_idx.size(2); + const int64_t W = points_idx.size(3); + + auto result = torch::zeros({batch_size, C, H, W}, features.options()); + + const dim3 threadsPerBlock(64); + const dim3 numBlocks(batch_size, 1024 / batch_size + 1); + + // TODO(gkioxari) add AT_DISPATCH_FLOATING_TYPES once atomicAdd supports + // doubles. Currently, support is for floats only. + alphaCompositeCudaForwardKernel<<>>( + // clang-format off + result.packed_accessor(), + features.packed_accessor(), + alphas.packed_accessor(), + points_idx.packed_accessor()); + // clang-format on + + return result; +} + +std::tuple alphaCompositeCudaBackward( + const torch::Tensor& grad_outputs, + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx) { + auto grad_features = torch::zeros_like(features); + auto grad_alphas = torch::zeros_like(alphas); + + const int64_t bs = alphas.size(0); + + const dim3 threadsPerBlock(64); + const dim3 numBlocks(bs, 1024 / bs + 1); + + // TODO(gkioxari) add AT_DISPATCH_FLOATING_TYPES once atomicAdd supports + // doubles. Currently, support is for floats only. + alphaCompositeCudaBackwardKernel<<>>( + // clang-format off + grad_features.packed_accessor(), + grad_alphas.packed_accessor(), + grad_outputs.packed_accessor(), + features.packed_accessor(), + alphas.packed_accessor(), + points_idx.packed_accessor()); + // clang-format on + + return std::make_tuple(grad_features, grad_alphas); +} diff --git a/pytorch3d/csrc/compositing/alpha_composite.h b/pytorch3d/csrc/compositing/alpha_composite.h new file mode 100644 index 000000000..ea8ace146 --- /dev/null +++ b/pytorch3d/csrc/compositing/alpha_composite.h @@ -0,0 +1,110 @@ +// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. + +#include +#include "pytorch3d_cutils.h" + +#include + +// Perform alpha compositing of points in a z-buffer. +// +// Inputs: +// features: FloatTensor of shape (C, P) which gives the features +// of each point where C is the size of the feature and +// P the number of points. +// alphas: FloatTensor of shape (N, points_per_pixel, W, W) where +// points_per_pixel is the number of points in the z-buffer +// sorted in z-order, and W is the image size. +// points_idx: IntTensor of shape (N, points_per_pixel, W, W) giving the +// indices of the nearest points at each pixel, sorted in z-order. +// Returns: +// weighted_fs: FloatTensor of shape (N, C, W, W) giving the accumulated +// feature for each point. Concretely, it gives: +// weighted_fs[b,c,i,j] = sum_k cum_alpha_k * +// features[c,points_idx[b,k,i,j]] +// where cum_alpha_k = +// alphas[b,k,i,j] * prod_l=0..k-1 (1 - alphas[b,l,i,j]) + +// CUDA declarations +#ifdef WITH_CUDA +torch::Tensor alphaCompositeCudaForward( + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx); + +std::tuple alphaCompositeCudaBackward( + const torch::Tensor& grad_outputs, + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx); +#endif + +// C++ declarations +torch::Tensor alphaCompositeCpuForward( + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx); + +std::tuple alphaCompositeCpuBackward( + const torch::Tensor& grad_outputs, + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx); + +torch::Tensor alphaCompositeForward( + torch::Tensor& features, + torch::Tensor& alphas, + torch::Tensor& points_idx) { + features = features.contiguous(); + alphas = alphas.contiguous(); + points_idx = points_idx.contiguous(); + + if (features.type().is_cuda()) { +#ifdef WITH_CUDA + CHECK_CONTIGUOUS_CUDA(features); + CHECK_CONTIGUOUS_CUDA(alphas); + CHECK_CONTIGUOUS_CUDA(points_idx); +#else + AT_ERROR("Not compiled with GPU support"); +#endif + return alphaCompositeCudaForward(features, alphas, points_idx); + } else { + CHECK_CONTIGUOUS(features); + CHECK_CONTIGUOUS(alphas); + CHECK_CONTIGUOUS(points_idx); + + return alphaCompositeCpuForward(features, alphas, points_idx); + } +} + +std::tuple alphaCompositeBackward( + torch::Tensor& grad_outputs, + torch::Tensor& features, + torch::Tensor& alphas, + torch::Tensor& points_idx) { + grad_outputs = grad_outputs.contiguous(); + features = features.contiguous(); + alphas = alphas.contiguous(); + points_idx = points_idx.contiguous(); + + if (grad_outputs.type().is_cuda()) { +#ifdef WITH_CUDA + CHECK_CONTIGUOUS_CUDA(grad_outputs); + CHECK_CONTIGUOUS_CUDA(features); + CHECK_CONTIGUOUS_CUDA(alphas); + CHECK_CONTIGUOUS_CUDA(points_idx); +#else + AT_ERROR("Not compiled with GPU support"); +#endif + + return alphaCompositeCudaBackward( + grad_outputs, features, alphas, points_idx); + } else { + CHECK_CONTIGUOUS(grad_outputs); + CHECK_CONTIGUOUS(features); + CHECK_CONTIGUOUS(alphas); + CHECK_CONTIGUOUS(points_idx); + + return alphaCompositeCpuBackward( + grad_outputs, features, alphas, points_idx); + } +} diff --git a/pytorch3d/csrc/compositing/alpha_composite_cpu.cpp b/pytorch3d/csrc/compositing/alpha_composite_cpu.cpp new file mode 100644 index 000000000..cc500c533 --- /dev/null +++ b/pytorch3d/csrc/compositing/alpha_composite_cpu.cpp @@ -0,0 +1,114 @@ +// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. + +#include + +#include +#include + +torch::Tensor alphaCompositeCpuForward( + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx) { + const int64_t B = points_idx.size(0); + const int64_t K = points_idx.size(1); + const int64_t H = points_idx.size(2); + const int64_t W = points_idx.size(3); + const int64_t C = features.size(0); + + torch::Tensor result = torch::zeros({B, C, H, W}, features.options()); + + auto features_a = features.accessor(); + auto alphas_a = alphas.accessor(); + auto points_idx_a = points_idx.accessor(); + auto result_a = result.accessor(); + + // Iterate over the batch + for (int b = 0; b < B; ++b) { + // Iterate over the features + for (int c = 0; c < C; ++c) { + // Iterate through the horizontal lines of the image from top to bottom + for (int j = 0; j < H; ++j) { + // Iterate over pixels in a horizontal line, left to right + for (int i = 0; i < W; ++i) { + float cum_alpha = 1.; + // Iterate through the closest K points for this pixel + for (int k = 0; k < K; ++k) { + int64_t n_idx = points_idx_a[b][k][j][i]; + // Sentinel value is -1 indicating no point overlaps the pixel + if (n_idx < 0) { + continue; + } + float alpha = alphas_a[b][k][j][i]; + result_a[b][c][j][i] += cum_alpha * alpha * features_a[c][n_idx]; + cum_alpha = cum_alpha * (1 - alpha); + } + } + } + } + } + return result; +} + +std::tuple alphaCompositeCpuBackward( + const torch::Tensor& grad_outputs, + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx) { + torch::Tensor grad_features = torch::zeros_like(features); + torch::Tensor grad_alphas = torch::zeros_like(alphas); + + const int64_t B = points_idx.size(0); + const int64_t K = points_idx.size(1); + const int64_t H = points_idx.size(2); + const int64_t W = points_idx.size(3); + const int64_t C = features.size(0); + + auto grad_outputs_a = grad_outputs.accessor(); + auto features_a = features.accessor(); + auto alphas_a = alphas.accessor(); + auto points_idx_a = points_idx.accessor(); + auto grad_features_a = grad_features.accessor(); + auto grad_alphas_a = grad_alphas.accessor(); + + // Iterate over the batch + for (int b = 0; b < B; ++b) { + // Iterate over the features + for (int c = 0; c < C; ++c) { + // Iterate through the horizontal lines of the image from top to bottom + for (int j = 0; j < H; ++j) { + // Iterate over pixels in a horizontal line, left to right + for (int i = 0; i < W; ++i) { + float cum_alpha = 1.; + // Iterate through the closest K points for this pixel + for (int k = 0; k < K; ++k) { + int64_t n_idx = points_idx_a[b][k][j][i]; + // Sentinal value is -1, indicating no point overlaps this pixel + if (n_idx < 0) { + continue; + } + float alpha = alphas_a[b][k][j][i]; + grad_alphas_a[b][k][j][i] += + grad_outputs_a[b][c][j][i] * features_a[c][n_idx] * cum_alpha; + grad_features_a[c][n_idx] += + grad_outputs_a[b][c][j][i] * cum_alpha * alpha; + + // Iterate over all (K-1) nearer points to update gradient + for (int t = 0; t < k; t++) { + int64_t t_idx = points_idx_a[b][t][j][i]; + // Sentinal value is -1, indicating no point overlaps this pixel + if (t_idx < 0) { + continue; + } + float alpha_tvalue = alphas_a[b][t][j][i]; + grad_alphas_a[b][t][j][i] -= grad_outputs_a[b][c][j][i] * + features_a[c][n_idx] * cum_alpha * alpha / (1 - alpha_tvalue); + } + + cum_alpha = cum_alpha * (1 - alpha); + } + } + } + } + } + return std::make_tuple(grad_features, grad_alphas); +} diff --git a/pytorch3d/csrc/compositing/norm_weighted_sum.cu b/pytorch3d/csrc/compositing/norm_weighted_sum.cu new file mode 100644 index 000000000..5771c4b28 --- /dev/null +++ b/pytorch3d/csrc/compositing/norm_weighted_sum.cu @@ -0,0 +1,202 @@ +// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. + +#include + +#include +#include + +#include +#include + +__constant__ const float kEpsilon = 1e-4; + +// TODO(gkioxari) support all data types once AtomicAdd supports doubles. +// Currently, support is for floats only. +__global__ void weightedSumNormCudaForwardKernel( + // clang-format off + torch::PackedTensorAccessor result, + const torch::PackedTensorAccessor features, + const torch::PackedTensorAccessor alphas, + const torch::PackedTensorAccessor points_idx) { + // clang-format on + const int64_t batch_size = result.size(0); + const int64_t C = features.size(0); + const int64_t H = points_idx.size(2); + const int64_t W = points_idx.size(3); + + // Get the batch and index + const int batch = blockIdx.x; + + const int num_pixels = C * W * H; + const int num_threads = gridDim.y * blockDim.x; + const int tid = blockIdx.y * blockDim.x + threadIdx.x; + + // Parallelize over each feature in each pixel in images of size H * W, + // for each image in the batch of size batch_size + for (int pid = tid; pid < num_pixels; pid += num_threads) { + int ch = pid / (W * H); + int j = (pid % (W * H)) / H; + int i = (pid % (W * H)) % H; + + // Store the accumulated alpha value + float cum_alpha = 0.; + // Iterate through the closest K points for this pixel + for (int k = 0; k < points_idx.size(1); ++k) { + int n_idx = points_idx[batch][k][j][i]; + // Sentinel value is -1 indicating no point overlaps the pixel + if (n_idx < 0) { + continue; + } + + cum_alpha += alphas[batch][k][j][i]; + } + + if (cum_alpha < kEpsilon) { + cum_alpha = kEpsilon; + } + + // Iterate through the closest K points for this pixel + for (int k = 0; k < points_idx.size(1); ++k) { + int n_idx = points_idx[batch][k][j][i]; + // Sentinel value is -1 indicating no point overlaps the pixel + if (n_idx < 0) { + continue; + } + float alpha = alphas[batch][k][j][i]; + // TODO(gkioxari) It might be more efficient to have threads write in a + // local variable, and move atomicAdd outside of the loop such that + // atomicAdd is executed once per thread. + atomicAdd( + &result[batch][ch][j][i], features[ch][n_idx] * alpha / cum_alpha); + } + } +} + +// TODO(gkioxari) support all data types once AtomicAdd supports doubles. +// Currently, support is for floats only. +__global__ void weightedSumNormCudaBackwardKernel( + // clang-format off + torch::PackedTensorAccessor grad_features, + torch::PackedTensorAccessor grad_alphas, + const torch::PackedTensorAccessor grad_outputs, + const torch::PackedTensorAccessor features, + const torch::PackedTensorAccessor alphas, + const torch::PackedTensorAccessor points_idx) { + // clang-format on + const int64_t batch_size = points_idx.size(0); + const int64_t C = features.size(0); + const int64_t H = points_idx.size(2); + const int64_t W = points_idx.size(3); + + // Get the batch and index + const int batch = blockIdx.x; + + const int num_pixels = C * W * H; + const int num_threads = gridDim.y * blockDim.x; + const int tid = blockIdx.y * blockDim.x + threadIdx.x; + + // Parallelize over each feature in each pixel in images of size H * W, + // for each image in the batch of size batch_size + for (int pid = tid; pid < num_pixels; pid += num_threads) { + int ch = pid / (W * H); + int j = (pid % (W * H)) / H; + int i = (pid % (W * H)) % H; + + float sum_alpha = 0.; + float sum_alphafs = 0.; + // Iterate through the closest K points for this pixel to calculate the + // cumulative sum of the alphas for this pixel + for (int k = 0; k < points_idx.size(1); ++k) { + int n_idx = points_idx[batch][k][j][i]; + // Sentinel value is -1 indicating no point overlaps the pixel + if (n_idx < 0) { + continue; + } + + sum_alpha += alphas[batch][k][j][i]; + sum_alphafs += alphas[batch][k][j][i] * features[ch][n_idx]; + } + + if (sum_alpha < kEpsilon) { + sum_alpha = kEpsilon; + } + + // Iterate again through the closest K points for this pixel to calculate + // the gradient. + for (int k = 0; k < points_idx.size(1); ++k) { + int n_idx = points_idx[batch][k][j][i]; + + // Sentinel value is -1 indicating no point overlaps the pixel + if (n_idx < 0) { + continue; + } + float alpha = alphas[batch][k][j][i]; + + // TODO(gkioxari) It might be more efficient to have threads write in a + // local variable, and move atomicAdd outside of the loop such that + // atomicAdd is executed once per thread. + atomicAdd( + &grad_alphas[batch][k][j][i], + (features[ch][n_idx] * sum_alpha - sum_alphafs) / + (sum_alpha * sum_alpha) * grad_outputs[batch][ch][j][i]); + atomicAdd( + &grad_features[ch][n_idx], + alpha * grad_outputs[batch][ch][j][i] / sum_alpha); + } + } +} + +torch::Tensor weightedSumNormCudaForward( + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx) { + const int64_t batch_size = points_idx.size(0); + const int64_t C = features.size(0); + const int64_t H = points_idx.size(2); + const int64_t W = points_idx.size(3); + + auto result = torch::zeros({batch_size, C, H, W}, features.options()); + + const dim3 threadsPerBlock(64); + const dim3 numBlocks(batch_size, 1024 / batch_size + 1); + + // TODO(gkioxari) add AT_DISPATCH_FLOATING_TYPES once atomicAdd supports + // doubles. Currently, support is for floats only. + // clang-format off + weightedSumNormCudaForwardKernel<<>>( + result.packed_accessor(), + features.packed_accessor(), + alphas.packed_accessor(), + points_idx.packed_accessor()); + // clang-format on + + return result; +} + +std::tuple weightedSumNormCudaBackward( + const torch::Tensor& grad_outputs, + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx) { + auto grad_features = torch::zeros_like(features); + auto grad_alphas = torch::zeros_like(alphas); + + const int64_t bs = points_idx.size(0); + + const dim3 threadsPerBlock(64); + const dim3 numBlocks(bs, 1024 / bs + 1); + + // TODO(gkioxari) add AT_DISPATCH_FLOATING_TYPES once atomicAdd supports + // doubles. Currently, support is for floats only. + weightedSumNormCudaBackwardKernel<<>>( + // clang-format off + grad_features.packed_accessor(), + grad_alphas.packed_accessor(), + grad_outputs.packed_accessor(), + features.packed_accessor(), + alphas.packed_accessor(), + points_idx.packed_accessor()); + // clang-format on + + return std::make_tuple(grad_features, grad_alphas); +} diff --git a/pytorch3d/csrc/compositing/norm_weighted_sum.h b/pytorch3d/csrc/compositing/norm_weighted_sum.h new file mode 100644 index 000000000..964b268bf --- /dev/null +++ b/pytorch3d/csrc/compositing/norm_weighted_sum.h @@ -0,0 +1,109 @@ +// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. + +#include +#include "pytorch3d_cutils.h" + +#include + +// Perform normalized weighted sum compositing of points in a z-buffer. +// +// Inputs: +// features: FloatTensor of shape (C, P) which gives the features +// of each point where C is the size of the feature and +// P the number of points. +// alphas: FloatTensor of shape (N, points_per_pixel, W, W) where +// points_per_pixel is the number of points in the z-buffer +// sorted in z-order, and W is the image size. +// points_idx: IntTensor of shape (N, points_per_pixel, W, W) giving the +// indices of the nearest points at each pixel, sorted in z-order. +// Returns: +// weighted_fs: FloatTensor of shape (N, C, W, W) giving the accumulated +// feature in each point. Concretely, it gives: +// weighted_fs[b,c,i,j] = sum_k alphas[b,k,i,j] * +// features[c,points_idx[b,k,i,j]] / sum_k alphas[b,k,i,j] + +// CUDA declarations +#ifdef WITH_CUDA +torch::Tensor weightedSumNormCudaForward( + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx); + +std::tuple weightedSumNormCudaBackward( + const torch::Tensor& grad_outputs, + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx); +#endif + +// C++ declarations +torch::Tensor weightedSumNormCpuForward( + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx); + +std::tuple weightedSumNormCpuBackward( + const torch::Tensor& grad_outputs, + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx); + +torch::Tensor weightedSumNormForward( + torch::Tensor& features, + torch::Tensor& alphas, + torch::Tensor& points_idx) { + features = features.contiguous(); + alphas = alphas.contiguous(); + points_idx = points_idx.contiguous(); + + if (features.type().is_cuda()) { +#ifdef WITH_CUDA + CHECK_CONTIGUOUS_CUDA(features); + CHECK_CONTIGUOUS_CUDA(alphas); + CHECK_CONTIGUOUS_CUDA(points_idx); +#else + AT_ERROR("Not compiled with GPU support"); +#endif + + return weightedSumNormCudaForward(features, alphas, points_idx); + } else { + CHECK_CONTIGUOUS(features); + CHECK_CONTIGUOUS(alphas); + CHECK_CONTIGUOUS(points_idx); + + return weightedSumNormCpuForward(features, alphas, points_idx); + } +} + +std::tuple weightedSumNormBackward( + torch::Tensor& grad_outputs, + torch::Tensor& features, + torch::Tensor& alphas, + torch::Tensor& points_idx) { + grad_outputs = grad_outputs.contiguous(); + features = features.contiguous(); + alphas = alphas.contiguous(); + points_idx = points_idx.contiguous(); + + if (grad_outputs.type().is_cuda()) { +#ifdef WITH_CUDA + CHECK_CONTIGUOUS_CUDA(grad_outputs); + CHECK_CONTIGUOUS_CUDA(features); + CHECK_CONTIGUOUS_CUDA(alphas); + CHECK_CONTIGUOUS_CUDA(points_idx); +#else + AT_ERROR("Not compiled with GPU support"); +#endif + + return weightedSumNormCudaBackward( + grad_outputs, features, alphas, points_idx); + } else { + CHECK_CONTIGUOUS(grad_outputs); + CHECK_CONTIGUOUS(features); + CHECK_CONTIGUOUS(alphas); + CHECK_CONTIGUOUS(points_idx); + + return weightedSumNormCpuBackward( + grad_outputs, features, alphas, points_idx); + } +} diff --git a/pytorch3d/csrc/compositing/norm_weighted_sum_cpu.cpp b/pytorch3d/csrc/compositing/norm_weighted_sum_cpu.cpp new file mode 100644 index 000000000..a2d4390c2 --- /dev/null +++ b/pytorch3d/csrc/compositing/norm_weighted_sum_cpu.cpp @@ -0,0 +1,134 @@ +// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. + +#include + +#include +#include + +// Epsilon float +const float kEps = 1e-4; + +torch::Tensor weightedSumNormCpuForward( + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx) { + const int64_t B = points_idx.size(0); + const int64_t K = points_idx.size(1); + const int64_t H = points_idx.size(2); + const int64_t W = points_idx.size(3); + const int64_t C = features.size(0); + + torch::Tensor result = torch::zeros({B, C, H, W}, features.options()); + + auto features_a = features.accessor(); + auto alphas_a = alphas.accessor(); + auto points_idx_a = points_idx.accessor(); + auto result_a = result.accessor(); + + // Iterate over the batch + for (int b = 0; b < B; ++b) { + // Iterate oer the features + for (int c = 0; c < C; ++c) { + // Iterate through the horizontal lines of the image from top to bottom + for (int j = 0; j < H; ++j) { + // Iterate over pixels in a horizontal line, left to right + for (int i = 0; i < W; ++i) { + float t_alpha = 0.; + for (int k = 0; k < K; ++k) { + int64_t n_idx = points_idx_a[b][k][j][i]; + if (n_idx < 0) { + continue; + } + + t_alpha += alphas_a[b][k][j][i]; + } + + if (t_alpha < kEps) { + t_alpha = kEps; + } + + // Iterate over the different zs to combine + for (int k = 0; k < K; ++k) { + int64_t n_idx = points_idx_a[b][k][j][i]; + // Sentinel value is -1 indicating no point overlaps the pixel + if (n_idx < 0) { + continue; + } + float alpha = alphas_a[b][k][j][i]; + result_a[b][c][j][i] += alpha * features_a[c][n_idx] / t_alpha; + } + } + } + } + } + return result; +} + +std::tuple weightedSumNormCpuBackward( + const torch::Tensor& grad_outputs, + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx) { + torch::Tensor grad_features = torch::zeros_like(features); + torch::Tensor grad_alphas = torch::zeros_like(alphas); + + const int64_t B = points_idx.size(0); + const int64_t K = points_idx.size(1); + const int64_t H = points_idx.size(2); + const int64_t W = points_idx.size(3); + const int64_t C = features.size(0); + + auto grad_outputs_a = grad_outputs.accessor(); + auto features_a = features.accessor(); + auto alphas_a = alphas.accessor(); + auto points_idx_a = points_idx.accessor(); + auto grad_features_a = grad_features.accessor(); + auto grad_alphas_a = grad_alphas.accessor(); + + // Iterate over the batch + for (int b = 0; b < B; ++b) { + // Iterate oer the features + for (int c = 0; c < C; ++c) { + // Iterate through the horizontal lines of the image from top to bottom + for (int j = 0; j < H; ++j) { + // Iterate over pixels in a horizontal line, left to right + for (int i = 0; i < W; ++i) { + float t_alpha = 0.; + float t_alphafs = 0.; + // Iterate through the closest K points for this pixel + for (int k = 0; k < K; ++k) { + int64_t n_idx = points_idx_a[b][k][j][i]; + // Sentinel value is -1, indicating no point overlaps this pixel + if (n_idx < 0) { + continue; + } + + t_alpha += alphas_a[b][k][j][i]; + t_alphafs += alphas_a[b][k][j][i] * features_a[c][n_idx]; + } + + if (t_alpha < kEps) { + t_alpha = kEps; + } + + // Iterate through the closest K points for this pixel ordered by z + // distance. + for (int k = 0; k < K; ++k) { + int64_t n_idx = points_idx_a[b][k][j][i]; + // Sentinel value is -1 indicating no point overlaps the pixel + if (n_idx < 0) { + continue; + } + float alpha = alphas_a[b][k][j][i]; + grad_alphas_a[b][k][j][i] += grad_outputs_a[b][c][j][i] * + (features_a[c][n_idx] * t_alpha - t_alphafs) / + (t_alpha * t_alpha); + grad_features_a[c][n_idx] += + grad_outputs_a[b][c][j][i] * alpha / t_alpha; + } + } + } + } + } + return std::make_tuple(grad_features, grad_alphas); +} diff --git a/pytorch3d/csrc/compositing/weighted_sum.cu b/pytorch3d/csrc/compositing/weighted_sum.cu new file mode 100644 index 000000000..8b15a497a --- /dev/null +++ b/pytorch3d/csrc/compositing/weighted_sum.cu @@ -0,0 +1,161 @@ +// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. + +#include + +#include +#include + +#include +#include + +// TODO(gkioxari) support all data types once AtomicAdd supports doubles. +// Currently, support is for floats only. +__global__ void weightedSumCudaForwardKernel( + // clang-format off + torch::PackedTensorAccessor result, + const torch::PackedTensorAccessor features, + const torch::PackedTensorAccessor alphas, + const torch::PackedTensorAccessor points_idx) { + // clang-format on + const int64_t batch_size = result.size(0); + const int64_t C = features.size(0); + const int64_t H = points_idx.size(2); + const int64_t W = points_idx.size(3); + + // Get the batch and index + const int batch = blockIdx.x; + + const int num_pixels = C * W * H; + const int num_threads = gridDim.y * blockDim.x; + const int tid = blockIdx.y * blockDim.x + threadIdx.x; + + // Parallelize over each feature in each pixel in images of size H * W, + // for each image in the batch of size batch_size + for (int pid = tid; pid < num_pixels; pid += num_threads) { + int ch = pid / (W * H); + int j = (pid % (W * H)) / H; + int i = (pid % (W * H)) % H; + + // Iterate through the closest K points for this pixel + for (int k = 0; k < points_idx.size(1); ++k) { + int n_idx = points_idx[batch][k][j][i]; + // Sentinel value is -1 indicating no point overlaps the pixel + if (n_idx < 0) { + continue; + } + + // Accumulate the values + float alpha = alphas[batch][k][j][i]; + // TODO(gkioxari) It might be more efficient to have threads write in a + // local variable, and move atomicAdd outside of the loop such that + // atomicAdd is executed once per thread. + atomicAdd(&result[batch][ch][j][i], features[ch][n_idx] * alpha); + } + } +} + +// TODO(gkioxari) support all data types once AtomicAdd supports doubles. +// Currently, support is for floats only. +__global__ void weightedSumCudaBackwardKernel( + // clang-format off + torch::PackedTensorAccessor grad_features, + torch::PackedTensorAccessor grad_alphas, + const torch::PackedTensorAccessor grad_outputs, + const torch::PackedTensorAccessor features, + const torch::PackedTensorAccessor alphas, + const torch::PackedTensorAccessor points_idx) { + // clang-format on + const int64_t batch_size = points_idx.size(0); + const int64_t C = features.size(0); + const int64_t H = points_idx.size(2); + const int64_t W = points_idx.size(3); + + // Get the batch and index + const int batch = blockIdx.x; + + const int num_pixels = C * W * H; + const int num_threads = gridDim.y * blockDim.x; + const int tid = blockIdx.y * blockDim.x + threadIdx.x; + + // Iterate over each pixel to compute the contribution to the + // gradient for the features and weights + for (int pid = tid; pid < num_pixels; pid += num_threads) { + int ch = pid / (W * H); + int j = (pid % (W * H)) / H; + int i = (pid % (W * H)) % H; + + // Iterate through the closest K points for this pixel + for (int k = 0; k < points_idx.size(1); ++k) { + int n_idx = points_idx[batch][k][j][i]; + // Sentinel value is -1 indicating no point overlaps the pixel + if (n_idx < 0) { + continue; + } + float alpha = alphas[batch][k][j][i]; + + // TODO(gkioxari) It might be more efficient to have threads write in a + // local variable, and move atomicAdd outside of the loop such that + // atomicAdd is executed once per thread. + atomicAdd( + &grad_alphas[batch][k][j][i], + features[ch][n_idx] * grad_outputs[batch][ch][j][i]); + atomicAdd( + &grad_features[ch][n_idx], alpha * grad_outputs[batch][ch][j][i]); + } + } +} + +torch::Tensor weightedSumCudaForward( + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx) { + const int64_t batch_size = points_idx.size(0); + const int64_t C = features.size(0); + const int64_t H = points_idx.size(2); + const int64_t W = points_idx.size(3); + + auto result = torch::zeros({batch_size, C, H, W}, features.options()); + + const dim3 threadsPerBlock(64); + const dim3 numBlocks(batch_size, 1024 / batch_size + 1); + + // TODO(gkioxari) add AT_DISPATCH_FLOATING_TYPES once atomicAdd supports + // doubles. Currently, support is for floats only. + weightedSumCudaForwardKernel<<>>( + // clang-format off + result.packed_accessor(), + features.packed_accessor(), + alphas.packed_accessor(), + points_idx.packed_accessor()); + // clang-format on + + return result; +} + +std::tuple weightedSumCudaBackward( + const torch::Tensor& grad_outputs, + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx) { + auto grad_features = torch::zeros_like(features); + auto grad_alphas = torch::zeros_like(alphas); + + const int64_t bs = points_idx.size(0); + + const dim3 threadsPerBlock(64); + const dim3 numBlocks(bs, 1024 / bs + 1); + + // TODO(gkioxari) add AT_DISPATCH_FLOATING_TYPES once atomicAdd supports + // doubles. Currently, support is for floats only. + weightedSumCudaBackwardKernel<<>>( + // clang-format off + grad_features.packed_accessor(), + grad_alphas.packed_accessor(), + grad_outputs.packed_accessor(), + features.packed_accessor(), + alphas.packed_accessor(), + points_idx.packed_accessor()); + // clang-format on + + return std::make_tuple(grad_features, grad_alphas); +} diff --git a/pytorch3d/csrc/compositing/weighted_sum.h b/pytorch3d/csrc/compositing/weighted_sum.h new file mode 100644 index 000000000..fb9782973 --- /dev/null +++ b/pytorch3d/csrc/compositing/weighted_sum.h @@ -0,0 +1,107 @@ +// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. + +#include +#include "pytorch3d_cutils.h" + +#include + +// Perform weighted sum compositing of points in a z-buffer. +// +// Inputs: +// features: FloatTensor of shape (C, P) which gives the features +// of each point where C is the size of the feature and +// P the number of points. +// alphas: FloatTensor of shape (N, points_per_pixel, W, W) where +// points_per_pixel is the number of points in the z-buffer +// sorted in z-order, and W is the image size. +// points_idx: IntTensor of shape (N, points_per_pixel, W, W) giving the +// indices of the nearest points at each pixel, sorted in z-order. +// Returns: +// weighted_fs: FloatTensor of shape (N, C, W, W) giving the accumulated +// feature in each point. Concretely, it gives: +// weighted_fs[b,c,i,j] = sum_k alphas[b,k,i,j] * +// features[c,points_idx[b,k,i,j]] + +// CUDA declarations +#ifdef WITH_CUDA +torch::Tensor weightedSumCudaForward( + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx); + +std::tuple weightedSumCudaBackward( + const torch::Tensor& grad_outputs, + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx); +#endif + +// C++ declarations +torch::Tensor weightedSumCpuForward( + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx); + +std::tuple weightedSumCpuBackward( + const torch::Tensor& grad_outputs, + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx); + +torch::Tensor weightedSumForward( + torch::Tensor& features, + torch::Tensor& alphas, + torch::Tensor& points_idx) { + features = features.contiguous(); + alphas = alphas.contiguous(); + points_idx = points_idx.contiguous(); + + if (features.type().is_cuda()) { +#ifdef WITH_CUDA + CHECK_CONTIGUOUS_CUDA(features); + CHECK_CONTIGUOUS_CUDA(alphas); + CHECK_CONTIGUOUS_CUDA(points_idx); +#else + AT_ERROR("Not compiled with GPU support"); +#endif + + return weightedSumCudaForward(features, alphas, points_idx); + } else { + CHECK_CONTIGUOUS(features); + CHECK_CONTIGUOUS(alphas); + CHECK_CONTIGUOUS(points_idx); + + return weightedSumCpuForward(features, alphas, points_idx); + } +} + +std::tuple weightedSumBackward( + torch::Tensor& grad_outputs, + torch::Tensor& features, + torch::Tensor& alphas, + torch::Tensor& points_idx) { + grad_outputs = grad_outputs.contiguous(); + features = features.contiguous(); + alphas = alphas.contiguous(); + points_idx = points_idx.contiguous(); + + if (grad_outputs.type().is_cuda()) { +#ifdef WITH_CUDA + CHECK_CONTIGUOUS_CUDA(grad_outputs); + CHECK_CONTIGUOUS_CUDA(features); + CHECK_CONTIGUOUS_CUDA(alphas); + CHECK_CONTIGUOUS_CUDA(points_idx); +#else + AT_ERROR("Not compiled with GPU support"); +#endif + + return weightedSumCudaBackward(grad_outputs, features, alphas, points_idx); + } else { + CHECK_CONTIGUOUS(grad_outputs); + CHECK_CONTIGUOUS(features); + CHECK_CONTIGUOUS(alphas); + CHECK_CONTIGUOUS(points_idx); + + return weightedSumCpuBackward(grad_outputs, features, alphas, points_idx); + } +} diff --git a/pytorch3d/csrc/compositing/weighted_sum_cpu.cpp b/pytorch3d/csrc/compositing/weighted_sum_cpu.cpp new file mode 100644 index 000000000..4c3000c66 --- /dev/null +++ b/pytorch3d/csrc/compositing/weighted_sum_cpu.cpp @@ -0,0 +1,98 @@ +// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. + +#include + +#include +#include + +torch::Tensor weightedSumCpuForward( + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx) { + const int64_t B = points_idx.size(0); + const int64_t K = points_idx.size(1); + const int64_t H = points_idx.size(2); + const int64_t W = points_idx.size(3); + const int64_t C = features.size(0); + + torch::Tensor result = torch::zeros({B, C, H, W}, features.options()); + + auto features_a = features.accessor(); + auto alphas_a = alphas.accessor(); + auto points_idx_a = points_idx.accessor(); + auto result_a = result.accessor(); + + // Iterate over the batch + for (int b = 0; b < B; ++b) { + // Iterate over the features + for (int c = 0; c < C; ++c) { + // Iterate through the horizontal lines of the image from top to bottom + for (int j = 0; j < H; ++j) { + // Iterate over pixels in a horizontal line, left to right + for (int i = 0; i < W; ++i) { + // Iterate through the closest K points for this pixel + for (int k = 0; k < K; ++k) { + int64_t n_idx = points_idx_a[b][k][j][i]; + // Sentinel value is -1 indicating no point overlaps the pixel + if (n_idx < 0) { + continue; + } + + float alpha = alphas_a[b][k][j][i]; + result_a[b][c][j][i] += alpha * features_a[c][n_idx]; + } + } + } + } + } + return result; +} + +std::tuple weightedSumCpuBackward( + const torch::Tensor& grad_outputs, + const torch::Tensor& features, + const torch::Tensor& alphas, + const torch::Tensor& points_idx) { + const int64_t B = points_idx.size(0); + const int64_t K = points_idx.size(1); + const int64_t H = points_idx.size(2); + const int64_t W = points_idx.size(3); + const int64_t C = features.size(0); + + torch::Tensor grad_features = torch::zeros_like(features); + torch::Tensor grad_alphas = torch::zeros_like(alphas); + + auto grad_outputs_a = grad_outputs.accessor(); + auto features_a = features.accessor(); + auto alphas_a = alphas.accessor(); + auto points_idx_a = points_idx.accessor(); + auto grad_features_a = grad_features.accessor(); + auto grad_alphas_a = grad_alphas.accessor(); + + // Iterate over the batch + for (int b = 0; b < B; ++b) { + // Iterate oer the features + for (int c = 0; c < C; ++c) { + // Iterate through the horizontal lines of the image from top to bottom + for (int j = 0; j < H; ++j) { + // Iterate over pixels in a horizontal line, left to right + for (int i = 0; i < W; ++i) { + // Iterate through the closest K points for this pixel + for (int k = 0; k < K; ++k) { + int64_t n_idx = points_idx_a[b][k][j][i]; + // Sentinal value is -1, indicating no point overlaps this pixel + if (n_idx < 0) { + continue; + } + + float alpha = alphas_a[b][k][j][i]; + grad_alphas_a[b][k][j][i] += + grad_outputs_a[b][c][j][i] * features_a[c][n_idx]; + grad_features_a[c][n_idx] += grad_outputs_a[b][c][j][i] * alpha; + } + } + } + } + } + return std::make_tuple(grad_features, grad_alphas); +} diff --git a/pytorch3d/csrc/ext.cpp b/pytorch3d/csrc/ext.cpp index 88993107d..10105c0b4 100644 --- a/pytorch3d/csrc/ext.cpp +++ b/pytorch3d/csrc/ext.cpp @@ -1,6 +1,9 @@ // Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. #include +#include "compositing/alpha_composite.h" +#include "compositing/norm_weighted_sum.h" +#include "compositing/weighted_sum.h" #include "face_areas_normals/face_areas_normals.h" #include "gather_scatter/gather_scatter.h" #include "nearest_neighbor_points/nearest_neighbor_points.h" @@ -20,6 +23,14 @@ PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { m.def("rasterize_meshes_backward", &RasterizeMeshesBackward); m.def("rasterize_meshes", &RasterizeMeshes); + // Accumulation functions + m.def("accum_weightedsumnorm", &weightedSumNormForward); + m.def("accum_weightedsum", &weightedSumForward); + m.def("accum_alphacomposite", &alphaCompositeForward); + m.def("accum_weightedsumnorm_backward", &weightedSumNormBackward); + m.def("accum_weightedsum_backward", &weightedSumBackward); + m.def("accum_alphacomposite_backward", &alphaCompositeBackward); + // These are only visible for testing; users should not call them directly m.def("_rasterize_points_coarse", &RasterizePointsCoarse); m.def("_rasterize_points_naive", &RasterizePointsNaive); diff --git a/pytorch3d/renderer/__init__.py b/pytorch3d/renderer/__init__.py index e020dfbe8..7b13ea9ac 100644 --- a/pytorch3d/renderer/__init__.py +++ b/pytorch3d/renderer/__init__.py @@ -34,6 +34,14 @@ phong_shading, rasterize_meshes, ) +from .points import ( + AlphaCompositor, + NormWeightedCompositor, + PointsRasterizationSettings, + PointsRasterizer, + PointsRenderer, + rasterize_points, +) from .utils import TensorProperties, convert_to_tensors_and_broadcast __all__ = [k for k in globals().keys() if not k.startswith("_")] diff --git a/pytorch3d/renderer/compositing.py b/pytorch3d/renderer/compositing.py new file mode 100644 index 000000000..66852be80 --- /dev/null +++ b/pytorch3d/renderer/compositing.py @@ -0,0 +1,255 @@ +#!/usr/bin/env python3 +# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. + + +from typing import NamedTuple +import torch + +from pytorch3d import _C + +# Example functions for blending the top K features per pixel using the outputs +# from rasterization. +# NOTE: All blending function should return a (N, H, W, C) tensor per batch element. +# This can be an image (C=3) or a set of features. + + +# Data class to store blending params with defaults +class CompositeParams(NamedTuple): + radius: float = 4.0 / 256.0 + + +class _CompositeAlphaPoints(torch.autograd.Function): + """ + Composite features within a z-buffer using alpha compositing. Given a zbuffer + with corresponding features and weights, these values are accumulated according + to their weights such that features nearer in depth contribute more to the final + feature than ones further away. + + Concretely this means: + weighted_fs[b,c,i,j] = sum_k cum_alpha_k * features[c,pointsidx[b,k,i,j]] + cum_alpha_k = alphas[b,k,i,j] * prod_l=0..k-1 (1 - alphas[b,l,i,j]) + + Args: + features: Packed Tensor of shape (C, P) giving the features of each point. + alphas: float32 Tensor of shape (N, points_per_pixel, image_size, + image_size) giving the weight of each point in the z-buffer. + Values should be in the interval [0, 1]. + pointsidx: int32 Tensor of shape (N, points_per_pixel, image_size, image_size) + giving the indices of the nearest points at each pixel, sorted in z-order. + Concretely pointsidx[n, k, y, x] = p means that features[:, p] is the feature of + the kth closest point (along the z-direction) to pixel (y, x) in batch element n. + This is weighted by alphas[n, k, y, x]. + + Returns: + weighted_fs: Tensor of shape (N, C, image_size, image_size) + giving the accumulated features at each point. + """ + + @staticmethod + def forward(ctx, features, alphas, points_idx): + pt_cld = _C.accum_alphacomposite(features, alphas, points_idx) + + ctx.save_for_backward( + features.clone(), alphas.clone(), points_idx.clone() + ) + return pt_cld + + @staticmethod + def backward(ctx, grad_output): + grad_features = None + grad_alphas = None + grad_points_idx = None + features, alphas, points_idx = ctx.saved_tensors + + grad_features, grad_alphas = _C.accum_alphacomposite_backward( + grad_output, features, alphas, points_idx + ) + + return grad_features, grad_alphas, grad_points_idx, None + + +def alpha_composite( + pointsidx, alphas, pt_clds, blend_params=None +) -> torch.Tensor: + """ + Composite features within a z-buffer using alpha compositing. Given a zbuffer + with corresponding features and weights, these values are accumulated according + to their weights such that features nearer in depth contribute more to the final + feature than ones further away. + + Concretely this means: + weighted_fs[b,c,i,j] = sum_k cum_alpha_k * features[c,pointsidx[b,k,i,j]] + cum_alpha_k = alphas[b,k,i,j] * prod_l=0..k-1 (1 - alphas[b,l,i,j]) + + + Args: + pt_clds: Tensor of shape (N, C, P) giving the features of each point (can use RGB for example). + alphas: float32 Tensor of shape (N, points_per_pixel, image_size, + image_size) giving the weight of each point in the z-buffer. + Values should be in the interval [0, 1]. + pointsidx: int32 Tensor of shape (N, points_per_pixel, image_size, image_size) + giving the indices of the nearest points at each pixel, sorted in z-order. + Concretely pointsidx[n, k, y, x] = p means that features[n, :, p] is the feature of + the kth closest point (along the z-direction) to pixel (y, x) in batch element n. + This is weighted by alphas[n, k, y, x]. + + Returns: + Combined features: Tensor of shape (N, C, image_size, image_size) + giving the accumulated features at each point. + """ + return _CompositeAlphaPoints.apply(pt_clds, alphas, pointsidx) + + +class _CompositeNormWeightedSumPoints(torch.autograd.Function): + """ + Composite features within a z-buffer using normalized weighted sum. Given a zbuffer + with corresponding features and weights, these values are accumulated + according to their weights such that depth is ignored; the weights are used to perform + a weighted sum. + + Concretely this means: + weighted_fs[b,c,i,j] = + sum_k alphas[b,k,i,j] * features[c,pointsidx[b,k,i,j]] / sum_k alphas[b,k,i,j] + + Args: + features: Packed Tensor of shape (C, P) giving the features of each point. + alphas: float32 Tensor of shape (N, points_per_pixel, image_size, + image_size) giving the weight of each point in the z-buffer. + Values should be in the interval [0, 1]. + pointsidx: int32 Tensor of shape (N, points_per_pixel, image_size, image_size) + giving the indices of the nearest points at each pixel, sorted in z-order. + Concretely pointsidx[n, k, y, x] = p means that features[:, p] is the feature of + the kth closest point (along the z-direction) to pixel (y, x) in batch element n. + This is weighted by alphas[n, k, y, x]. + + Returns: + weighted_fs: Tensor of shape (N, C, image_size, image_size) + giving the accumulated features at each point. + """ + + @staticmethod + def forward(ctx, features, alphas, points_idx): + pt_cld = _C.accum_weightedsumnorm(features, alphas, points_idx) + + ctx.save_for_backward( + features.clone(), alphas.clone(), points_idx.clone() + ) + return pt_cld + + @staticmethod + def backward(ctx, grad_output): + grad_features = None + grad_alphas = None + grad_points_idx = None + features, alphas, points_idx = ctx.saved_tensors + + grad_features, grad_alphas = _C.accum_weightedsumnorm_backward( + grad_output, features, alphas, points_idx + ) + + return grad_features, grad_alphas, grad_points_idx, None + + +def norm_weighted_sum( + pointsidx, alphas, pt_clds, blend_params=None +) -> torch.Tensor: + """ + Composite features within a z-buffer using normalized weighted sum. Given a zbuffer + with corresponding features and weights, these values are accumulated + according to their weights such that depth is ignored; the weights are used to perform + a weighted sum. + + Concretely this means: + weighted_fs[b,c,i,j] = + sum_k alphas[b,k,i,j] * features[c,pointsidx[b,k,i,j]] / sum_k alphas[b,k,i,j] + + Args: + pt_clds: Packed feature tensor of shape (C, P) giving the features of each point + (can use RGB for example). + alphas: float32 Tensor of shape (N, points_per_pixel, image_size, + image_size) giving the weight of each point in the z-buffer. + Values should be in the interval [0, 1]. + pointsidx: int32 Tensor of shape (N, points_per_pixel, image_size, image_size) + giving the indices of the nearest points at each pixel, sorted in z-order. + Concretely pointsidx[n, k, y, x] = p means that features[:, p] is the feature of + the kth closest point (along the z-direction) to pixel (y, x) in batch element n. + This is weighted by alphas[n, k, y, x]. + + Returns: + Combined features: Tensor of shape (N, C, image_size, image_size) + giving the accumulated features at each point. + """ + return _CompositeNormWeightedSumPoints.apply(pt_clds, alphas, pointsidx) + + +class _CompositeWeightedSumPoints(torch.autograd.Function): + """ + Composite features within a z-buffer using normalized weighted sum. Given a zbuffer + with corresponding features and weights, these values are accumulated + according to their weights such that depth is ignored; the weights are used to + perform a weighted sum. As opposed to norm weighted sum, the weights are not + normalized to sum to 1. + + Concretely this means: + weighted_fs[b,c,i,j] = sum_k alphas[b,k,i,j] * features[c,pointsidx[b,k,i,j]] + + Args: + features: Packed Tensor of shape (C, P) giving the features of each point. + alphas: float32 Tensor of shape (N, points_per_pixel, image_size, + image_size) giving the weight of each point in the z-buffer. + Values should be in the interval [0, 1]. + pointsidx: int32 Tensor of shape (N, points_per_pixel, image_size, image_size) + giving the indices of the nearest points at each pixel, sorted in z-order. + Concretely pointsidx[n, k, y, x] = p means that features[:, p] is the feature of + the kth closest point (along the z-direction) to pixel (y, x) in batch element n. + This is weighted by alphas[n, k, y, x]. + + Returns: + weighted_fs: Tensor of shape (N, C, image_size, image_size) + giving the accumulated features at each point. + """ + + @staticmethod + def forward(ctx, features, alphas, points_idx): + pt_cld = _C.accum_weightedsum(features, alphas, points_idx) + + ctx.save_for_backward( + features.clone(), alphas.clone(), points_idx.clone() + ) + return pt_cld + + @staticmethod + def backward(ctx, grad_output): + grad_features = None + grad_alphas = None + grad_points_idx = None + features, alphas, points_idx = ctx.saved_tensors + + grad_features, grad_alphas = _C.accum_weightedsum_backward( + grad_output, features, alphas, points_idx + ) + + return grad_features, grad_alphas, grad_points_idx, None + + +def weighted_sum(pointsidx, alphas, pt_clds, blend_params=None) -> torch.Tensor: + """ + Composite features within a z-buffer using normalized weighted sum. + + Args: + pt_clds: Packed Tensor of shape (C, P) giving the features of each point + (can use RGB for example). + alphas: float32 Tensor of shape (N, points_per_pixel, image_size, + image_size) giving the weight of each point in the z-buffer. + Values should be in the interval [0, 1]. + pointsidx: int32 Tensor of shape (N, points_per_pixel, image_size, image_size) + giving the indices of the nearest points at each pixel, sorted in z-order. + Concretely pointsidx[n, k, y, x] = p means that features[:, p] is the feature of + the kth closest point (along the z-direction) to pixel (y, x) in batch element n. + This is weighted by alphas[n, k, y, x]. + + Returns: + Combined features: Tensor of shape (N, C, image_size, image_size) + giving the accumulated features at each point. + """ + return _CompositeWeightedSumPoints.apply(pt_clds, alphas, pointsidx) diff --git a/pytorch3d/renderer/points/__init__.py b/pytorch3d/renderer/points/__init__.py index 40539064a..2e052fe28 100644 --- a/pytorch3d/renderer/points/__init__.py +++ b/pytorch3d/renderer/points/__init__.py @@ -1 +1,8 @@ # Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. + +from .compositor import AlphaCompositor, NormWeightedCompositor +from .rasterize_points import rasterize_points +from .rasterizer import PointsRasterizationSettings, PointsRasterizer +from .renderer import PointsRenderer + +__all__ = [k for k in globals().keys() if not k.startswith("_")] diff --git a/pytorch3d/renderer/points/compositor.py b/pytorch3d/renderer/points/compositor.py new file mode 100644 index 000000000..fd45c32ab --- /dev/null +++ b/pytorch3d/renderer/points/compositor.py @@ -0,0 +1,51 @@ +# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. + +import torch +import torch.nn as nn + +from ..compositing import CompositeParams, alpha_composite, norm_weighted_sum + +# A compositor should take as input 3D points and some corresponding information. +# Given this information, the compositor can: +# - blend colors across the top K vertices at a pixel + + +class AlphaCompositor(nn.Module): + """ + Accumulate points using alpha compositing. + """ + + def __init__(self, composite_params=None): + super().__init__() + + self.composite_params = ( + composite_params + if composite_params is not None + else CompositeParams() + ) + + def forward(self, fragments, alphas, ptclds, **kwargs) -> torch.Tensor: + images = alpha_composite( + fragments, alphas, ptclds, self.composite_params + ) + return images + + +class NormWeightedCompositor(nn.Module): + """ + Accumulate points using a normalized weighted sum. + """ + + def __init__(self, composite_params=None): + super().__init__() + self.composite_params = ( + composite_params + if composite_params is not None + else CompositeParams() + ) + + def forward(self, fragments, alphas, ptclds, **kwargs) -> torch.Tensor: + images = norm_weighted_sum( + fragments, alphas, ptclds, self.composite_params + ) + return images diff --git a/pytorch3d/renderer/points/rasterizer.py b/pytorch3d/renderer/points/rasterizer.py new file mode 100644 index 000000000..7684ec87e --- /dev/null +++ b/pytorch3d/renderer/points/rasterizer.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. + + +from typing import NamedTuple, Optional +import torch +import torch.nn as nn + +from ..cameras import get_world_to_view_transform +from .rasterize_points import rasterize_points + + +# Class to store the outputs of point rasterization +class PointFragments(NamedTuple): + idx: torch.Tensor + zbuf: torch.Tensor + dists: torch.Tensor + + +# Class to store the point rasterization params with defaults +class PointsRasterizationSettings(NamedTuple): + image_size: int = 256 + radius: float = 0.01 + points_per_pixel: int = 8 + bin_size: Optional[int] = None + max_points_per_bin: Optional[int] = None + + +class PointsRasterizer(nn.Module): + """ + This class implements methods for rasterizing a batch of pointclouds. + """ + + def __init__(self, cameras, raster_settings=None): + """ + cameras: A cameras object which has a `transform_points` method + which returns the transformed points after applying the + world-to-view and view-to-screen + transformations. + raster_settings: the parameters for rasterization. This should be a + named tuple. + + All these initial settings can be overridden by passing keyword + arguments to the forward function. + """ + super().__init__() + if raster_settings is None: + raster_settings = PointsRasterizationSettings() + + self.cameras = cameras + self.raster_settings = raster_settings + + def transform(self, point_clouds, **kwargs) -> torch.Tensor: + """ + Args: + point_clouds: a set of point clouds + + Returns: + points_screen: the points with the vertex positions in screen + space + + NOTE: keeping this as a separate function for readability but it could + be moved into forward. + """ + cameras = kwargs.get("cameras", self.cameras) + + pts_world = point_clouds.points_padded() + pts_world_packed = point_clouds.points_packed() + pts_screen = cameras.transform_points(pts_world, **kwargs) + + # NOTE: Retaining view space z coordinate for now. + # TODO: Remove this line when the convention for the z coordinate in + # the rasterizer is decided. i.e. retain z in view space or transform + # to a different range. + view_transform = get_world_to_view_transform(R=cameras.R, T=cameras.T) + verts_view = view_transform.transform_points(pts_world) + pts_screen[..., 2] = verts_view[..., 2] + + # Offset points of input pointcloud to reuse cached padded/packed calculations. + pad_to_packed_idx = point_clouds.padded_to_packed_idx() + pts_screen_packed = pts_screen.view(-1, 3)[pad_to_packed_idx, :] + pts_packed_offset = pts_screen_packed - pts_world_packed + point_clouds = point_clouds.offset(pts_packed_offset) + return point_clouds + + def forward(self, point_clouds, **kwargs) -> PointFragments: + """ + Args: + point_clouds: a set of point clouds with coordinates in world space. + Returns: + PointFragments: Rasterization outputs as a named tuple. + """ + points_screen = self.transform(point_clouds, **kwargs) + raster_settings = kwargs.get("raster_settings", self.raster_settings) + idx, zbuf, dists2 = rasterize_points( + points_screen, + image_size=raster_settings.image_size, + radius=raster_settings.radius, + points_per_pixel=raster_settings.points_per_pixel, + bin_size=raster_settings.bin_size, + max_points_per_bin=raster_settings.max_points_per_bin, + ) + return PointFragments(idx=idx, zbuf=zbuf, dists=dists2) diff --git a/pytorch3d/renderer/points/renderer.py b/pytorch3d/renderer/points/renderer.py new file mode 100644 index 000000000..57255658f --- /dev/null +++ b/pytorch3d/renderer/points/renderer.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 +# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. + + +import torch +import torch.nn as nn + +# A renderer class should be initialized with a +# function for rasterization and a function for compositing. +# The rasterizer should: +# - transform inputs from world -> screen space +# - rasterize inputs +# - return fragments +# The compositor can take fragments as input along with any other properties of +# the scene and generate images. + +# E.g. rasterize inputs and then shade +# +# fragments = self.rasterize(point_clouds) +# images = self.compositor(fragments, point_clouds) +# return images + + +class PointsRenderer(nn.Module): + """ + A class for rendering a batch of points. The class should + be initialized with a rasterizer and compositor class which each have a forward + function. + """ + + def __init__(self, rasterizer, compositor): + super().__init__() + self.rasterizer = rasterizer + self.compositor = compositor + + def forward(self, point_clouds, **kwargs) -> torch.Tensor: + fragments = self.rasterizer(point_clouds, **kwargs) + + # Construct weights based on the distance of a point to the true point. + # However, this could be done differently: e.g. predicted as opposed + # to a function of the weights. + r = self.rasterizer.raster_settings.radius + + dists2 = fragments.dists.permute(0, 3, 1, 2) + weights = 1 - dists2 / (r * r) + images = self.compositor( + fragments.idx.long().permute(0, 3, 1, 2), + weights, + point_clouds.features_packed().permute(1, 0), + **kwargs + ) + + # permute so image comes at the end + images = images.permute(0, 2, 3, 1) + + return images diff --git a/pytorch3d/structures/__init__.py b/pytorch3d/structures/__init__.py index e09118047..ab9cdff4a 100644 --- a/pytorch3d/structures/__init__.py +++ b/pytorch3d/structures/__init__.py @@ -1,6 +1,7 @@ # Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. from .meshes import Meshes, join_meshes +from .pointclouds import Pointclouds from .textures import Textures from .utils import ( list_to_packed, diff --git a/tests/test_compositing.py b/tests/test_compositing.py new file mode 100644 index 000000000..a0d1a4443 --- /dev/null +++ b/tests/test_compositing.py @@ -0,0 +1,442 @@ +# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. + +import unittest +import torch + +from pytorch3d.renderer.compositing import ( + alpha_composite, + norm_weighted_sum, + weighted_sum, +) + + +class TestAccumulatePoints(unittest.TestCase): + + # NAIVE PYTHON IMPLEMENTATIONS (USED FOR TESTING) + @staticmethod + def accumulate_alphacomposite_python(points_idx, alphas, features): + """ + Naive pure PyTorch implementation of alpha_composite. + Inputs / Outputs: Same as function + """ + + B, K, H, W = points_idx.size() + C = features.size(0) + + output = torch.zeros(B, C, H, W, dtype=alphas.dtype) + + for b in range(0, B): + for c in range(0, C): + for i in range(0, W): + for j in range(0, H): + t_alpha = 1 + for k in range(0, K): + n_idx = points_idx[b, k, j, i] + + if n_idx < 0: + continue + + alpha = alphas[b, k, j, i] + output[b, c, j, i] += ( + features[c, n_idx] * alpha * t_alpha + ) + t_alpha = (1 - alpha) * t_alpha + + return output + + @staticmethod + def accumulate_weightedsum_python(points_idx, alphas, features): + """ + Naive pure PyTorch implementation of weighted_sum rasterization. + Inputs / Outputs: Same as function + """ + B, K, H, W = points_idx.size() + C = features.size(0) + + output = torch.zeros(B, C, H, W, dtype=alphas.dtype) + + for b in range(0, B): + for c in range(0, C): + for i in range(0, W): + for j in range(0, H): + + for k in range(0, K): + n_idx = points_idx[b, k, j, i] + + if n_idx < 0: + continue + + alpha = alphas[b, k, j, i] + output[b, c, j, i] += features[c, n_idx] * alpha + + return output + + @staticmethod + def accumulate_weightedsumnorm_python(points_idx, alphas, features): + """ + Naive pure PyTorch implementation of norm_weighted_sum. + Inputs / Outputs: Same as function + """ + + B, K, H, W = points_idx.size() + C = features.size(0) + + output = torch.zeros(B, C, H, W, dtype=alphas.dtype) + + for b in range(0, B): + for c in range(0, C): + for i in range(0, W): + for j in range(0, H): + t_alpha = 0 + for k in range(0, K): + n_idx = points_idx[b, k, j, i] + + if n_idx < 0: + continue + + t_alpha += alphas[b, k, j, i] + + t_alpha = max(t_alpha, 1e-4) + + for k in range(0, K): + n_idx = points_idx[b, k, j, i] + + if n_idx < 0: + continue + + alpha = alphas[b, k, j, i] + output[b, c, j, i] += ( + features[c, n_idx] * alpha / t_alpha + ) + + return output + + def test_python(self): + device = torch.device("cpu") + self._simple_alphacomposite( + self.accumulate_alphacomposite_python, device + ) + self._simple_wsum(self.accumulate_weightedsum_python, device) + self._simple_wsumnorm(self.accumulate_weightedsumnorm_python, device) + + def test_cpu(self): + device = torch.device("cpu") + self._simple_alphacomposite(alpha_composite, device) + self._simple_wsum(weighted_sum, device) + self._simple_wsumnorm(norm_weighted_sum, device) + + def test_cuda(self): + device = torch.device("cuda:0") + self._simple_alphacomposite(alpha_composite, device) + self._simple_wsum(weighted_sum, device) + self._simple_wsumnorm(norm_weighted_sum, device) + + def test_python_vs_cpu_vs_cuda(self): + self._python_vs_cpu_vs_cuda( + self.accumulate_alphacomposite_python, alpha_composite + ) + self._python_vs_cpu_vs_cuda( + self.accumulate_weightedsumnorm_python, norm_weighted_sum + ) + self._python_vs_cpu_vs_cuda( + self.accumulate_weightedsum_python, weighted_sum + ) + + def _python_vs_cpu_vs_cuda(self, accumulate_func_python, accumulate_func): + torch.manual_seed(231) + device = torch.device("cpu") + + W = 8 + C = 3 + P = 32 + + for d in ["cpu", "cuda"]: + # TODO(gkioxari) add torch.float64 to types after double precision + # support is added to atomicAdd + for t in [torch.float32]: + device = torch.device(d) + + # Create values + alphas = torch.rand(2, 4, W, W, dtype=t).to(device) + alphas.requires_grad = True + alphas_cpu = alphas.detach().cpu() + alphas_cpu.requires_grad = True + + features = torch.randn(C, P, dtype=t).to(device) + features.requires_grad = True + features_cpu = features.detach().cpu() + features_cpu.requires_grad = True + + inds = torch.randint(P + 1, size=(2, 4, W, W)).to(device) - 1 + inds_cpu = inds.detach().cpu() + + args_cuda = (inds, alphas, features) + args_cpu = (inds_cpu, alphas_cpu, features_cpu) + + self._compare_impls( + accumulate_func_python, + accumulate_func, + args_cpu, + args_cuda, + (alphas_cpu, features_cpu), + (alphas, features), + compare_grads=True, + ) + + def _compare_impls( + self, fn1, fn2, args1, args2, grads1, grads2, compare_grads=False + ): + res1 = fn1(*args1) + res2 = fn2(*args2) + + self.assertTrue(torch.allclose(res1.cpu(), res2.cpu(), atol=1e-6)) + + if not compare_grads: + return + + # Compare gradients + torch.manual_seed(231) + grad_res = torch.randn_like(res1) + loss1 = (res1 * grad_res).sum() + loss1.backward() + + grads1 = [gradsi.grad.data.clone().cpu() for gradsi in grads1] + grad_res = grad_res.to(res2) + + loss2 = (res2 * grad_res).sum() + loss2.backward() + grads2 = [gradsi.grad.data.clone().cpu() for gradsi in grads2] + + for i in range(0, len(grads1)): + self.assertTrue( + torch.allclose(grads1[i].cpu(), grads2[i].cpu(), atol=1e-6) + ) + + def _simple_wsum(self, accum_func, device): + # Initialise variables + features = torch.Tensor( + [[0.1, 0.4, 0.6, 0.9], [0.1, 0.4, 0.6, 0.9]] + ).to(device) + + alphas = torch.Tensor( + [ + [ + [ + [0.5, 0.5, 0.5, 0.5], + [0.5, 1.0, 1.0, 0.5], + [0.5, 1.0, 1.0, 0.5], + [0.5, 0.5, 0.5, 0.5], + ], + [ + [0.5, 0.5, 0.5, 0.5], + [0.5, 1.0, 1.0, 0.5], + [0.5, 1.0, 1.0, 0.5], + [0.5, 0.5, 0.5, 0.5], + ], + ] + ] + ).to(device) + + points_idx = ( + torch.Tensor( + [ + [ + # fmt: off + [ + [0, 0, 0, 0], # noqa: E241, E201 + [0, -1, -1, -1], # noqa: E241, E201 + [0, 1, 1, 0], # noqa: E241, E201 + [0, 0, 0, 0], # noqa: E241, E201 + ], + [ + [2, 2, 2, 2], # noqa: E241, E201 + [2, 3, 3, 2], # noqa: E241, E201 + [2, 3, 3, 2], # noqa: E241, E201 + [2, 2, -1, 2], # noqa: E241, E201 + ], + # fmt: on + ] + ] + ) + .long() + .to(device) + ) + + result = accum_func(points_idx, alphas, features) + + self.assertTrue(result.shape == (1, 2, 4, 4)) + + true_result = torch.Tensor( + [ + [ + [ + [0.35, 0.35, 0.35, 0.35], + [0.35, 0.90, 0.90, 0.30], + [0.35, 1.30, 1.30, 0.35], + [0.35, 0.35, 0.05, 0.35], + ], + [ + [0.35, 0.35, 0.35, 0.35], + [0.35, 0.90, 0.90, 0.30], + [0.35, 1.30, 1.30, 0.35], + [0.35, 0.35, 0.05, 0.35], + ], + ] + ] + ).to(device) + + self.assertTrue( + torch.allclose(result.cpu(), true_result.cpu(), rtol=1e-3) + ) + + def _simple_wsumnorm(self, accum_func, device): + # Initialise variables + features = torch.Tensor( + [[0.1, 0.4, 0.6, 0.9], [0.1, 0.4, 0.6, 0.9]] + ).to(device) + + alphas = torch.Tensor( + [ + [ + [ + [0.5, 0.5, 0.5, 0.5], + [0.5, 1.0, 1.0, 0.5], + [0.5, 1.0, 1.0, 0.5], + [0.5, 0.5, 0.5, 0.5], + ], + [ + [0.5, 0.5, 0.5, 0.5], + [0.5, 1.0, 1.0, 0.5], + [0.5, 1.0, 1.0, 0.5], + [0.5, 0.5, 0.5, 0.5], + ], + ] + ] + ).to(device) + + # fmt: off + points_idx = ( + torch.Tensor( + [ + [ + [ + [0, 0, 0, 0], # noqa: E241, E201 + [0, -1, -1, -1], # noqa: E241, E201 + [0, 1, 1, 0], # noqa: E241, E201 + [0, 0, 0, 0], # noqa: E241, E201 + ], + [ + [2, 2, 2, 2], # noqa: E241, E201 + [2, 3, 3, 2], # noqa: E241, E201 + [2, 3, 3, 2], # noqa: E241, E201 + [2, 2, -1, 2], # noqa: E241, E201 + ], + ] + ] + ) + .long() + .to(device) + ) + # fmt: on + + result = accum_func(points_idx, alphas, features) + + self.assertTrue(result.shape == (1, 2, 4, 4)) + + true_result = torch.Tensor( + [ + [ + [ + [0.35, 0.35, 0.35, 0.35], + [0.35, 0.90, 0.90, 0.60], + [0.35, 0.65, 0.65, 0.35], + [0.35, 0.35, 0.10, 0.35], + ], + [ + [0.35, 0.35, 0.35, 0.35], + [0.35, 0.90, 0.90, 0.60], + [0.35, 0.65, 0.65, 0.35], + [0.35, 0.35, 0.10, 0.35], + ], + ] + ] + ).to(device) + + self.assertTrue( + torch.allclose(result.cpu(), true_result.cpu(), rtol=1e-3) + ) + + def _simple_alphacomposite(self, accum_func, device): + # Initialise variables + features = torch.Tensor( + [[0.1, 0.4, 0.6, 0.9], [0.1, 0.4, 0.6, 0.9]] + ).to(device) + + alphas = torch.Tensor( + [ + [ + [ + [0.5, 0.5, 0.5, 0.5], + [0.5, 1.0, 1.0, 0.5], + [0.5, 1.0, 1.0, 0.5], + [0.5, 0.5, 0.5, 0.5], + ], + [ + [0.5, 0.5, 0.5, 0.5], + [0.5, 1.0, 1.0, 0.5], + [0.5, 1.0, 1.0, 0.5], + [0.5, 0.5, 0.5, 0.5], + ], + ] + ] + ).to(device) + + # fmt: off + points_idx = ( + torch.Tensor( + [ + [ + [ + [0, 0, 0, 0], # noqa: E241, E201 + [0, -1, -1, -1], # noqa: E241, E201 + [0, 1, 1, 0], # noqa: E241, E201 + [0, 0, 0, 0], # noqa: E241, E201 + ], + [ + [2, 2, 2, 2], # noqa: E241, E201 + [2, 3, 3, 2], # noqa: E241, E201 + [2, 3, 3, 2], # noqa: E241, E201 + [2, 2, -1, 2], # noqa: E241, E201 + ], + ] + ] + ) + .long() + .to(device) + ) + # fmt: on + + result = accum_func(points_idx, alphas, features) + + self.assertTrue(result.shape == (1, 2, 4, 4)) + + true_result = torch.Tensor( + [ + [ + [ + [0.20, 0.20, 0.20, 0.20], + [0.20, 0.90, 0.90, 0.30], + [0.20, 0.40, 0.40, 0.20], + [0.20, 0.20, 0.05, 0.20], + ], + [ + [0.20, 0.20, 0.20, 0.20], + [0.20, 0.90, 0.90, 0.30], + [0.20, 0.40, 0.40, 0.20], + [0.20, 0.20, 0.05, 0.20], + ], + ] + ] + ).to(device) + + self.assertTrue((result == true_result).all().item()) diff --git a/tests/test_face_areas_normals.py b/tests/test_face_areas_normals.py index e307f12b2..a34d7678f 100644 --- a/tests/test_face_areas_normals.py +++ b/tests/test_face_areas_normals.py @@ -76,7 +76,10 @@ def _test_face_areas_normals_helper(self, device, dtype=torch.float32): verts_torch = verts.detach().clone().to(dtype) verts_torch.requires_grad = True faces_torch = faces.detach().clone() - areas_torch, normals_torch = TestFaceAreasNormals.face_areas_normals_python( + ( + areas_torch, + normals_torch, + ) = TestFaceAreasNormals.face_areas_normals_python( verts_torch, faces_torch ) self.assertClose(areas_torch, areas, atol=1e-7)