Kaolin: A PyTorch Library for Accelerating 3D Deep Learning Research
We present Kaolin111Kaolin, it’s from Kaolinite, a form of plasticine (clay) that is sometimes used in 3D modeling., a PyTorch library aiming to accelerate 3D deep learning research. Kaolin provides efficient implementations of differentiable 3D modules for use in deep learning systems. With functionality to load and preprocess several popular 3D datasets, and native functions to manipulate meshes, pointclouds, signed distance functions, and voxel grids, Kaolin mitigates the need to write wasteful boilerplate code. Kaolin packages together several differentiable graphics modules including rendering, lighting, shading, and view warping. Kaolin also supports an array of loss functions and evaluation metrics for seamless evaluation and provides visualization functionality to render the 3D results. Importantly, we curate a comprehensive model zoo comprising many state-of-the-art 3D deep learning architectures, to serve as a starting point for future research endeavours. Kaolin is available as open-source software at https://github.com/NVIDIAGameWorks/kaolin/.
3D deep learning is receiving attention and recognition at an accelerated rate due to its high relevance in complex tasks such as robotics [Lalonde2006NaturalTC, yang2016real, sung2018robobarista, Yu2013AVR], self-driving cars [Roddick2018OrthographicFT, mousavian20173d, chen2016monocular], and augmented and virtual reality [garon2016real, 2016ApplyingDL]. The advent of deep learning and an ever-growing compute infrastructures have allowed for the analysis of highly complicated, and previously intractable 3D data [3dconv, hamilton2017inductive, pointnet]. Furthermore, 3D vision research has started an interesting trend of exploiting well-known concepts from related areas such as robotics and computer graphics [NMR, MonteCarlo, milz2018visual]. Despite this accelerating interest, conducting research within the field involves a steep learning curve due to the lack of standardized tools. No system yet exists that would allow a researcher to easily load popular 3D datasets, convert 3D data across various representations and levels of complexity, plug into modern machine learning frameworks, and train and evaluate deep learning architectures. New researchers in the field of 3D deep learning must inevitably compile a collection of mismatched code snippets from various code bases to perform even basic tasks, which has resulted in an uncomfortable absence of comparisons across different state-of-the-art methods.
With the aim of removing the barriers to entry into 3D deep learning and expediting research, we present Kaolin, a 3D deep learning library for PyTorch [pytorch]. Kaolin provides efficient implementations of all core modules required to quickly build 3D deep learning applications. From loading and pre-processing data, to converting it across popular 3D representations (meshes, voxels, signed distance functions, pointclouds, etc.), to performing deep learning tasks on these representations, to computing task-specific metrics and visualizations of 3D data, Kaolin makes the entire life-cycle of a 3D deep learning applications intuitive and approachable. In addition, Kaolin implements a large set of popular methods for 3D tasks along with their pre-trained models in our model zoo, to demonstrate the ease through which new methods can now be implemented, and to highlight it as a home for future 3D DL research. Finally, with the advent of differentiable renders for explicit modeling of geometric structure and other physical processes (lighting, shading, projection, etc.) in 3D deep learning applications [NMR, softras, dib], Kaolin features a generic, modular differentiable renderer which easily extends to all popular differentiable rendering methods, and is also simple to build upon for future research and development.
2 Kaolin - Overview
Kaolin aims to provide efficient and easy-to-use tools for constructing 3D deep learning architectures and manipulating 3D data. By extensively providing useful boilerplate code, 3D deep learning researchers and practitioners can direct their efforts exclusively to developing the novel aspects of their applications. In the following section, we briefly describe each major functionality of this 3D deep learning package. For an illustrated overview see Fig. LABEL:fig:splash.
2.1 3D Representations
The choice of representation in a 3D deep learning project can have a large impact on its success due to the varied properties different 3D data types posses [3dDLtutorial]. To ensure high flexibility in this choice of representation, Kaolin exhaustively supports all popular 3D representations:
Signed distance functions and level sets
Depth images (2.5D)
Each representation type is stored a as collection of PyTorch Tensors, within an independent class. This allows for operator overloading over common functions for data augmentation and modifications supported by the package. Efficient (and wherever possible, differentiable) conversions across representations are provided within each class. For example, we provide differentiable surface sampling mechanisms that enable conversion from polygon meshes to pointclouds, by application of the reparameterization trick [GEOMetrics]. Network architectures are also supported for each representation, such as graph convolutional networks and MeshCNN for meshes[gcn, meshcnn], 3D convolutions for voxels[3dconv], and PointNet and PointNet++ for pointclouds[pointnet, pointnet++]. The following piece of example code demonstrates the ease with which a mesh model can be loaded into Kaolin, differentiably converted into a point cloud, and then rendered in both representations:
Kaolin provides complete support for many popular 3D datasets; reducing the large overhead involved in file handling, parsing, and augmentation into a single function call222For datasets which do not possess open access licenses, the data must be downloaded independently, and their location specified to Kaolin’s dataloaders.. Access to all data is provided via extensions to the PyTorch Dataset, and DataLoader classes. This makes pre-processing and loading 3D data as simple and intuitive as loading MNIST [MNIST], and also directly grants users the efficient loading of batched data that PyTorch dataloaders natively support. All data is importable and exportable in Universal Scene Description (USD) format [usd], which provides a common language for defining, packaging, assembling, and editing 3D data across graphics applications.
Datasets currently supported include ShapeNet [ShapeNet], PartNet [partnet], SHREC [ShapeNet, modelnet], ModelNet [modelnet], ScanNet [scannet], HumanSeg [humanseg], and many more common and custom collections. Through ShapeNet [ShapeNet], for example, a huge repository of CAD models is provided, including over tens of thousands of objects, across dozens of classes. Through ScanNet [scannet], more then 1500 RGD-B videos scans, including over 2.5 million unique depth maps are provided, with full annotations for camera pose, surface reconstructions, and semantic segmentations. Both these large collections of 3D information, and many more are easily accessed through single function calls. For example, access to ModelNet [modelnet] providing it to a Pytorch dataloader, and loading a batch of voxel models is as easy as:
2.3 3D Geometry Functions
At the core of Kaolin is an efficient suite of 3D geometric functions, which allow manipulation of 3D content. Rigid body transformations are implemented in several of their parameterizations (Euler angles, Lie groups, and Quaternions). Differentiable image warping layers, such as the perspective warping layers defined in GVNN (Neural network library for geometric vision) [gvnn], are also implemented. The geometry submodule allows for 3D rigid-body, affine, and projective transformations, as well as 3D-2D projection, and 2D-3D backprojection. It currently supports orthographic and perspective (pinhole) projection.
2.4 Modular Differentiable Renderer
Recently, differentiable rendering has manifested into an active area of research, allowing deep learning researchers to perform 3D tasks using predominantly 2D supervision [NMR, softras, dib]. Developing differentiable rendering tools is no easy feat however; the operations involved are computationally heavy and complicated. With the aim of removing these roadblocks to further research in this area, and to allow for easy use of popular differentiable rendering methods, Kaolin provides a flexible, and modular differentiable renderer. Kaolin defines an abstract base class—DifferentiableRenderer—containing abstract methods for each component in a rendering pipeline (geometric transformations, lighting, shading, rasterization, and projection). Assembling the components, swapping out modules, and developing new techniques using this abstract class is simple and intuitive.
Kaolin supports multiple lighting (ambient, directional, specular), shading (Lambertian, Phong, Cosine), projection (perspective, orthographic, distorted), and rasterization modes. An illustration of the architecture of the abstract DifferentiableRenderer() class is shown in Fig. 3. Wherever necessary, implementations are written in CUDA, for optimal performance (c.f. Table 2). To demonstrate the reduced overhead of development in this area, multiple publicly available differentiable renderers [NMR, softras, dib] are available as concrete instances of our DifferentiableRenderer class. One such example, DIB-Renderer [dib], is instantiated and used to differentiably render a mesh to an image using Kaolin in the following few lines of code:
2.5 Loss Functions and Metrics
A common challenge for 3D deep learning applications lies in defining and implementing tools for evaluating performance and for supervising neural networks. For example, comparing surface representations such as meshes or point clouds might require matching positions of thousands of points or triangles, and CUDA functions are a necessity [fan2017point, Pixel2Mesh, GEOMetrics]. As a result, Kaolin provides implementations for an array of commonly used 3D metrics for each 3D representation. Included in this collection of metrics are intersection over union for voxels [3dr2n2], Chamfer distance and (a quadratic approximation of) Earth-mover’s distance for pointclouds [fan2017point], and the point-to-surface loss [GEOMetrics] for Meshes, along with many other mesh metrics such as the laplacian, smoothness, and the edge length regularizers [Pixel2Mesh, NMR].
New researchers to the field of 3D Deep learning are faced with a storm of questions over the choice of 3D representations, model architectures, loss functions, etc. We ameliorate this by providing a rich collection of baselines, as well as state-of-the-art architectures for a variety of 3D tasks, including, but not limited to classification, segmentation, 3D reconstruction from images, super-resolution, and differentiable rendering. In addition to source code, we also release pre-trained models for these tasks on popular benchmarks, to serve as baselines for future research. We also hope that this will help encourage standardization in a field where evaluation methodology and criteria are still nascent.
Methods found in this model-zoo currently include Pixel2Mesh [Pixel2Mesh], GEOMetrics [GEOMetrics], and AtlasNet [atlasnet] for reconstructing mesh objects from single images, NM3DR [NMR], Soft-Rasterizer [softras], and Dib-Renderer [dib] for the same task with only 2D supervision, MeshCNN [meshcnn] is implemented for generic learning over meshes, PointNet [pointnet] and PointNet++ [pointnet++] for generic learning over point clouds, 3D-GAN [3DGAN], 3D-IWGAN [3DIWGAN], and 3D-R2N2[3dr2n2] for learning over distributions of voxels, and Occupancy Networks [Occ] and DeepSDF [deepsdf] for learning over level-set and SDFs, among many more. As examples of the these methods and the pre-trained models available to them in Figure 4 we highlight an array of results directly accessible through Kaolin’s model zoo.
An undeniably important aspect of any computer vision task is visualizing data. For 3D data however, this is not at all trivial. While python packages exist for visualizing some datatypes, such as voxels and point clouds, no package supports visualization across all popular 3D representations. One of Kaolin’s key features is visualization support for all of its representation types. This is implemented via lightweight visualization libraries such as Trimesh, and pptk for running time visualization. As all data is exportable to USD [usd], 3D results can also easily be visualized in more intensive graphics applications with far higher fidelity (see Figure 4 for example renderings). For headless applications such as when running on a server that has no attached display, we provide compact utilities to render images and animations to disk, for visualization at a later point.
While we view Kaolin as a major step in accelerating 3D DL research, the efforts do not stop here. We intend to foster a strong open-source community around Kaolin, and welcome contributions from other 3D deep learning researchers and practitioners. In this section, we present a general roadmap of Kaolin as open-source software.
Model Zoo: We seek to constantly keep improving our model zoo, especially given that Kaolin provides extensive functionality that reduces the time required to implement new methods (most approaches can be implemented in a day or two of work).
Differentiable rendering: We plan on extending support to newer differentiable rendering tools, and include functionality for additional tasks such as domain randomization, material recovery, and the like.
LiDAR datasets: We plan to include several large scale semantic and instance segmentation datasets. For example supporting S3DIS [S3DIS] and nuScenes [nuscenes] is a high-priority task for future releases.
3D object detection: Currently, Kaolin does not have models for 3D object detection in its model zoo. This is a thrust area for future releases.
Automatic Mixed Precision: To make 3D neural network architectures more compact and fast, we are investigating the applicability of Automatic Mixed Precision (AMP) to commonly used 3D architectures (PointNet, MeshCNN, Voxel U-Net, etc.). Nvidia Apex supports most AMP modes for popular 2D deep learning architectures, and we would like to investigate extending this support to 3D.
Secondary light effects: Kaolin currently only supports primary lighting effects for its differentiable rendering class, which limits the application’s ability to reason about more complex scene information such as shadows. Future releases are planned to contain support for path-tracing and ray-tracing [MonteCarlo] such that these secondary effects are within the scope of the package.
We look forward to the 3D community trying out Kaolin, giving us feedback, and contributing to its development.
The authors would like to thank Amlan Kar for suggesting the need for this library. We also thank Ankur Handa for his advice during the initial and final stages of the project. Many thanks to Johan Philion, Daiqing Li, Mark Brophy, Jun Gao, and Huan Ling who performed detailed internal reviews, and provided constructive comments. We also thank Gavriel State for all his help during the project.