3D Shape Induction from 2D Views of Multiple Objects
In this paper we investigate the problem of inducing a distribution over three-dimensional structures given two-dimensional views of multiple objects taken from unknown viewpoints. Our approach called “projective generative adversarial networks” (PrGANs) trains a deep generative model of 3D shapes whose projections match the distributions of the input 2D views. The addition of a projection module allows us to infer the underlying 3D shape distribution without using any 3D, viewpoint information, or annotation during the learning phase. We show that our approach produces 3D shapes of comparable quality to GANs trained on 3D data for a number of shape categories including chairs, airplanes, and cars. Experiments also show that the disentangled representation of 2D shapes into geometry and viewpoint leads to a good generative model of 2D shapes. The key advantage is that our model allows us to predict 3D, viewpoint, and generate novel views from an input image in a completely unsupervised manner.
We live in a three-dimensional (3D) world, but all we see are its projections on to two dimensions (2D). Inferring the 3D shapes of objects from their 2D views is one of the central challenges of computer vision. For example, looking at a catalogue of different chair views in Figure 1, one can mentally infer their 3D shapes by simultaneously reasoning about the shared variability in the underlying geometry and viewpoint across instances. In this paper, we investigate the problem of learning a generative model of 3D shapes given a collection of images of an unknown set of objects taken from an unknown set of views.
Although there are several cues for inferring the 3D shape from a single image, in this work we assume that shapes are rendered as binary images bounded by silhouettes. Even in this simplified setting the problem remains challenging since shading cues are no longer available. Moreover, which instance was used to generate each image, the viewpoint from which the image was taken, or even the number of underlying instances are not provided. This makes it difficult to apply exisiting approaches of estimating geometry based on structure from motion [12, 4], or computing visual hulls .
The key idea of our approach is to learn a 3D shape generator whose projections match the distribution of the provided images. We use the framework of Generative Adversarial Networks (GANs)  and augment the generator with a projection module. The generator produces a 3D shape, the projection module renders the shape from a randomly-chosen viewpoint, and the adversarial network discriminates real images from generated ones. The projection module is a differentiable renderer that approximates the true rendering pipeline and allows us to map 3D shapes to 2D images, as well as back-propagate the gradients of 2D images to 3D shapes. Once trained, the model can be used to infer 3D shape distributions from a collection of images (Figure 1 shows some samples drawn from the generator), and to infer depth data from a single image, without using any 3D or viewpoint information during learning. We call our approach Projective GANs (PrGANs).
There are several challenges that need to be addressed for learning a generative model of 3D shapes from views. First is the choice of how the 3D shape is represented. Linear shape basis (or morphable models [4, 5]) are effective for categories like faces that have a fixed topology, but less so for categories with varying number of parts, e.g., airplanes and chairs. Other bases such as spherical harmonics are not well suited for modeling objects with holes and fine-details. Mesh-based representations are commonly used with rendering pipelines (e.g., OpenGL ) and can also be adjusted to match image statistics using a differentiable renderer (e.g., OpenDR ), but the variability of the mesh topology makes it difficult to generate them in a consistent manner across instances.
We make the following assumptions to tackle this problem. First, shapes are modeled using a voxel representation that indicates the occupancy of a volume in fixed-resolution 3D grid. This allows us to model topology in a consistent manner across instances. Second, the effects of lighting and material properties are ignored and a 3D shape is rendered from a given viewpoint as a binary image indicating whether a pixel is occupied or not. This allows us to design a volumetric feed-forward network that faithfully reproduces the true rendering pipeline. The layers in the feed-forward network are differentiable, allowing the ability to adjust the 3D volume based on projections.
Our main contributions are as follows: (i) we propose PrGANs, a framework to learn probabilistic distributions over 3D shapes from a collection of 2D views of objects. We demonstrate its effectiveness on learning complex shape categories such as chairs, airplanes, and cars sampled from online shape repositories [6, 34]. The results are reasonable, even when views from multiple categories are combined; (ii) On the task of generating 3D shapes, PrGANs perform well in comparison to GANs trained directly on 3D data ; (iii) The learned 3D representation can be used for unsupervised estimation of 3D shape and viewpoint given a novel 2D shape, and for interpolation between two different shapes.
2 Related work
Estimating 3D shape from image collections.
The difficulty of estimating 3D shape can vary widely based on how the images are generated. Visual-hull techniques  can be used to infer the shape of a particular object given its views from known viewpoints by taking the intersection of the projected silhouettes. When the viewpoint is fixed and the lighting is known, photometric stereo  can provide accurate geometry estimates for rigid and diffuse surfaces. Structure from motion (SfM)  can be used to recover the shape of rigid objects from their views taken from unknown viewpoints by jointly reasoning about point correspondences and camera projections. Non-rigid SfM can be used to recover shapes from image collections by assuming a parametric family of deformations across 3D shapes. An early example of this approach is by Blanz and Vetter  for estimating 3D shapes of faces from image collections. However, 3D data with consistent global correspondences is required in order to learn a morphable model. Recently, non-rigid SfM has been applied to categories such as cars and airplanes by manually annotating a fixed set of keypoints across instances in order to bootstrap the learning process . Our work augments non-rigid SfM using a learned 3D shape generator, which allows us to generalize the technique to categories with diverse structures without requiring correspondence annotations. Our work is also related to recent work of Kulkarni et al.  for estimating a disentangled representation of images into shape, viewpoint, and lighting variables (dubbed “inverse graphics networks”). However, the shape representation is not explicit, and the approach requires the ability to generate training images while varying one factor at a time.
Inferring 3D shape from a single image.
Optimization-based approaches put priors on geometry, material, and light and estimate all of them by minimizing the reconstruction error when rendered [17, 3, 2]. Recognition-based methods have been used to estimate geometry of outdoor scenes [14, 26], indoor environments [9, 27], and objects [1, 25]. More recently, convolutional networks have been trained to generate views of 3D objects given their attributes and camera parameters , to generate 3D shape given a 2D view of the object , and to generate novel views of an object . Most of these recognition-based methods are trained in a fully-supervised manner and require 3D data, or views of the same object from multiple views, during training.
Generative models for images and shapes.
Our work builds on the success of GANs for generating images across a wide range of domains . Recently, Jiajun et al. in  learned a generative model of 3D shapes by using a variant of GAN equipped with 3D convolutions. However, the model was trained using aligned 3D shape data. Our work aims to solve a more difficult question of learning a 3D-GAN from 2D images. Two recent works are in this direction. Rezende et al. in  show results for 3D shape completion for simple shapes when views are provided, but require the viewpoints to be known and the generative models are trained on 3D data. Yan et al. in  learn a mapping from an image to 3D using multiple projections of the 3D shape from known viewpoints (similar to a visual-hull technique). These approaches share some commonalities to ours as the require a way to map 3D shape to 2D images.
Our method builds upon the GAN architecture proposed in Goodfellow et al. . The purpose of the GAN is to train a generative model in an adversarial setup. The model consists of two different parts: a generator and a discriminator. The generator aims to transform samples drawn from a simple distribution that appear to have been sampled from the original dataset. The goal of the discriminator is to distinguish synthetic samples (created by the generator) from real samples (drawn from a data distribution ). Both the generator and the discriminator are trained jointly to solving for the following optimization:
Our main task is to train a generative model capable of creating 3D shapes without relying on 3D data itself, but in 2D images from those shapes, without any view or shape annotation. In other words, the data distribution consists of 2D images taken from different views and are of different objects. To address this issue, we factorize the 2D image generator into a 3D shape generator, viewpoint generator, and a projection module (Fig. 2). The challenge is to identify a representation suitable for a diverse set of shapes and a differentiable projection module to create final 2D images and enable end-to-end training. We describe the architecture employed for each of these next.
3D shape generator.
The input to the entire generator is with each dimension drawn independently from a uniform distribution . Our 3D shape generator transforms the first 200 dimensions of to a voxel representation of the shape. Each voxel contains a value that represents its occupancy. The architecture of the 3D shape generator is inspired by the DCGAN  and 3D-GAN  architectures. It consists of a four-layer network shown in Fig. 2. The first layer transforms the 200 dimensional vector to a vector using a fully-connected layer. Subsequent layers have batch normalization and ReLU layers between them and use 3D kernels of size . The last layer is succeeded by a sigmoid activation instead of a ReLU.
The viewpoint generator takes the last dimension of and transforms it to a viewpoint vector . The training images are assumed to have been generated from 3D models that are upright oriented along a consistent vertical axis (e.g., y-axis), and are centered at the origin. Most models in online repositories and the real world satisfy this assumption (e.g., chairs are on horizontal planes). We generate images by sampling views uniformly at random from one of eight pre-selected directions evenly spaced around the y-axis (i.e., and , , , , ), as seen in Fig 3. Thus the viewpoint generator picks one of these directions uniformly at random.
The projection module works as follows. The first step is to rotate the voxel grid to the corresponding viewpoint. Let be the voxel grid, a function that given given an integer 3D coordinate returns the occupancy of the voxel centered at . The rotated version of the voxel grid is defined as , where is the coordinate obtained by rotating around the origin according to the spherical angles . For simplicity we use nearest neighbor sampling (hence the floor operator).
The second step is to perform the projection to create an image from the rotated voxel grid. This is done by applying the projection operator . Intuitively, the operator sums up the voxel occupancy values along each line of sight (assuming othographic projection), and applies exponential falloff to create a smooth and differentiable function. When there is no voxel along the line of sight, the value is 0; as the number of voxels increases, the value approaches 1. Combined with the rotated version of the voxel grid, we define our final projection module as: . As seen in Fig. 3 the projection module can well approximate the rendering of a 3D shape as a binary silhouette image, and is differentiable.
The discriminator consists of a sequence of 2D convolutional layers with batch normalization and LeakyReLU layers  between them. The sequence of transformations done in the network are: . Similarly to the generator, the last layer of the discriminator is followed by a sigmoid activation instead of a LeakyReLU.
We train the entire architecture by optimizing the objective in Equation 1. Usually, the training updates to minimize each one of the losses is applied once at each iteration. However, in our model, the generator and the discriminator have a considerably different number of parameters. The generator is trying to create 3D shapes, while the discriminator is trying to classify 2D images. To mitigate this issue, we employ an adaptive training strategy. At each iteration of the training, if the discriminator accuracy is higher than 75%, we skip its training. We also set different different learning rates for the discriminator and the generator: and , respectively. Similarly to the DCGAN architecture , we use ADAM with for the optimization.
In this section we describe the set of experiments to evaluate our method and to demonstrate the extension of its capabilities. First, we show the effectiveness of our method as both 2D and 3D shape generators. To this end, we compare our model with a traditional GAN for image generation and a GAN for 3D shapes. We present quantitative and qualitative results. Second, we demonstrate that our method is able to induce 3D shapes from unlabelled images even when there is only a single view per object. Third, we present 3D shapes induced by our model from a variety of categories such as airplanes, cars, chairs, motorbikes, and vases. Using the same architecture, we show how our model is able to induce coherent 3D shapes when the training data contains images mixed from multiple categories. Finally, we show applications of our method in predicting 3D shape from a novel 2D shape, and performing shape interpolation.
|(a) Results from 2D-GAN.|
|(a) Results from PrGAN.|
We generate training images synthetically using several categories of 3D shapes available in the ModelNet  and ShapeNet  databases. Each category contains a few hundred to thousand shapes. We render each shape from 8 evenly spaced viewing angles with orthographic projection to produce binary images. To reduce aliasing, we render each image at resolution and downsample to . We have found that this generally improves the results. Using synthetic data allows us to easily perform controlled experiments to analyze our method. It is also possible to use real images downloaded from a search engine as discussed in Section 5.
We quantitatively evaluate our model by comparing its ability to generate 2D and 3D shapes. To do so, we use 2D image GAN similar to DCGAN  and a 3D-GAN similar to the one presented at . At the time of this writing the implementation of  is not public yet, therefore we implemented our own version. We will refer to them as 2D-GAN and 3D-GAN, respectively. The 2D-GAN has the same discriminator architecture as the PrGAN, but the generator contains a sequence of 2D transposed convolutions instead of 3D ones, and the projection module is removed. The 3D-GAN has a discriminator with 3D convolutions instead of 3D ones. The 3D-GAN generator is the same of the PrGAN, but without the projection module.
The models used in this experiment are chairs from ModelNet dataset . From those models, we create two sets of training data: voxel grids and images. The voxel grids are generated by densely sampling the surface and inside of each mesh, and binning the sample points into grid. A value 1 is assigned to any voxel that contains at least one sample point, and 0 otherwise. Notice that the voxel grids are only used to train the 3D-GAN, while the images are used to train the 2D-GAN and our PrGAN.
|(a) Results from 3D-GAN.|
|(a) Results from PrGAN.|
Our quantitative evaluation is done by taking the Maximum Mean Discrepancy (MMD)  between the data created by the generative models and the training data. We use a kernel bandwidth of for images and for voxel grids. The training data consists of 989 voxel grids and 7912 images. To compute the MMD, we draw 128 random data points from each one of the generative models. The distance metric between the data points is the hamming distance divided by the dimensionality of the data. Because the data represents continuous occupancy values, we binaritize them by using a threshold of for images or voxels created by PrGAN, and for voxels created by the 3D-GAN.
Results show that for 2D-GAN, the MMD between the generated images and the training data is 90.13. For PrGAN, the MMD is 88.31, which is slightly better quantitatively than 2D-GAN. Fig. 4 shows a qualitative comparison. The results are visually very similar. For 3D-GAN, the MMD between the generated voxel grids and the training voxel grids is 347.55. For PrGAN, the MMD is 442.98, which is worse compared to 3D-GAN. This is not surprising as 3D-GAN is trained on 3D data, while PrGAN is trained on the image views only. Fig. 5 presents a qualitative comparison. In general PrGAN has trouble generating intrior structures because the training images are binary, carries no shading information, and are taken from a limited set of viewing angles. Nonetheless, it learns to generate exterior structures reasonably well.
Varying the number of views per model.
In the default setting, our training data consists of 8 views per object. Here we study the ability of our method in the more challenging case where the training data contains fewer number of views per object. To do so, we generate a new training set that contains only 1 randomly chosen view (among the 8) per object and use it to train PrGAN. We then repeat the experiments for 2 randomly chosen views per object, and also 4. The results are shown in Fig. 6. The 3D shapes that PrGAN learns becomes increasingly better as the number of views increases. Even in the single view per object case, our method is able to induce reasonable shapes. h
Visualizations across categories.
Our method is able to generate 3D shapes for a wide range of categories. Fig. 9 show a gallery of results, including airplanes, car, chairs, vases, motorbikes. For each category we show 64 randomly sampled training images, 64 generated images from PrGAN, and renderings of 128 generated 3D shapes (produced by randomly sampling the 200-d input vector of the generator). One remarkable property is that the generator produces 3D shapes in a consistent horizontal and vertical axes, even though the training data is only consistently oriented along the vertical axis. Our hypothesis for this is that the generator finds it more efficient to generate shapes in a consistent manner by sharing parts across models. Fig. 10 shows selected examples from Fig. 9 that demonstrates the quality and diversity of the generated shapes.
The last row in Fig. 9 shows an example of a ’mixed’ category, where the training images combine the three categories of airplane, car, and motorbike. The same PrGAN network is used to learn the shape distributions. Results show that PrGAN learns to represent all three categories well, without any additional supervision.
Once the generator is trained, any encoding supposedly generates a plausible 3D shape, hence represents a 3D shape manifold. Similar to previous work, we can interpolate between 3D shapes by linearly interpolating their codes. Fig. 7 shows the interpolation results for two airplane models and two chair models.
Unsupervised shape and viewpoint prediction.
Our method is also able to handle unsupervised prediction of shapes in 2D images. Once trained, the 3D shape generator is capable of creating shapes from a set of encodings . One application is to predict the encoding of the underlying 3D object given a single view image of the object. We do so by using the PrGAN’s generator to produce a large number of encoding-image pairs, then use the data to train a neural network (called encoding network). In other words, we create a training set that consists of images synthesized by the PrGAN and the encodings that generated them. The encoding network is fully connected, with 2 hidden layers, each with 512 neurons. The input of the network is an image and the output is an encoding. The last dimension of describes the view, and the first 200 dimensions describe the code of the shape, which allows us to further reconstruct the 3D shape as a voxel grid. With the encoding network, we can present to it a single view image, and it outputs the shape code along with the viewing angle. Experimental results are shown in in Figure 8. This whole process constitutes a completely unsupervised approach to creating a model that infers a 3D shape from a single image.
|Input||Generated images||Generated shapes|
5 Limitations and Future Work
Comprared to 3D-GANs, the proposed PrGAN models cannot discover structures that are hidden due to occlusions from all views. For example, it fails to discover that some chairs have concave interiors and the generator simply fills these since it does not change the silhouette from any view as we can see at Figure 11. However, this is a natural drawback of view-based approaches since some 3D ambiquities cannot be resolved (e.g. necker cubes) without relying on other cues. Despite this, one advantage over 3D-GAN is that our model does not require consistently aligned 3D shapes since it reasons over viewpoints.
Another drawback of our approach is that we currently generate low-resolution () shapes. This is an inherent limitation of voxel-based representations since the size of the voxel grid scales cubically with the resolution. Recent results in learning generative models of images using residual architectures  and multi-scale reasoning , may help scale the resolution of generative models to the next few octaves.
Using multiple cues for shape reasoning.
Our approach currently only relies on binary silhouettes for estimating the shape. This contributes to the lack of geometric details, which can be improved by incorporating shading cues. One strategy is to train a more powerful differentiable function approximator, e.g., a convolutional network, to replicate the sophisticated rendering pipelines developed by the computer graphics community. Once trained, the resulting neural renderer could be a plug-in replacement for the projection module in the PrGAN framework. This would allow the ability to use collections of realistically-shaded images for infering probabilistic models of 3D shapes and other properties. Recent work on sceen-space shading using convnets are promising .
Learning from real images.
Our approach can be extended to learning 3D shapes from real images by applying an exisiting approach for segmentation such as . However, the assumption that the viewpoints are uniformly distributed over the viewing sphere may not hold. In this situation, one can either learn a distribution over viewpoints by mapping a few dimensions of the input code to a distribution over viewpoints using a multi-layer network. More generally, one can also learn a distribution over a full set of camera parameters. An alternative is learn a conditional generator where the viewpoint is provided as input to the algorithm. This may be obtained using a generic viewpoint estimator such as [30, 28]. We will explore these directions in future work.
In summary, we have proposed a framework for infering 3D shape distributions from 2D shape collections by agumenting a convnet-based 3D shape generator with a projection module. This compliments exisiting approches for non-rigid SfM since these models can be trained without prior knowledge about the shape family, and can generalize to categories with variable structure. We showed that our models can infer 3D shapes for a wide range of categories, and can be used to infer shape and viewpoint from a single image in a completely unsupervised manner. We believe that the idea of using a differentiable render to infer distributions over unobserved scene properties from images can be applied to other problems.
-  M. Andriluka, S. Roth, and B. Schiele. Monocular 3d pose estimation and tracking by detection. In Computer Vision and Pattern Recognition (CVPR), 2010 IEEE Conference on, pages 623–630. IEEE, 2010.
-  J. T. Barron and J. Malik. Shape, illumination, and reflectance from shading. TPAMI, 2015.
-  H. Barrow and J. Tenenbaum. Recovering intrinsic scene characteristics. Comput. Vis. Syst., A Hanson & E. Riseman (Eds.), pages 3–26, 1978.
-  V. Blanz and T. Vetter. A morphable model for the synthesis of 3d faces. In Proceedings of the 26th annual conference on Computer graphics and interactive techniques, pages 187–194. ACM Press/Addison-Wesley Publishing Co., 1999.
-  C. Bregler, A. Hertzmann, and H. Biermann. Recovering non-rigid 3d shape from image streams. In Computer Vision and Pattern Recognition, 2000. Proceedings. IEEE Conference on, volume 2, pages 690–696. IEEE, 2000.
-  A. X. Chang, T. Funkhouser, L. Guibas, P. Hanrahan, Q. Huang, Z. Li, S. Savarese, M. Savva, S. Song, H. Su, et al. Shapenet: An information-rich 3d model repository. arXiv preprint arXiv:1512.03012, 2015.
-  E. L. Denton, S. Chintala, R. Fergus, et al. Deep generative image models using aï¿¼ laplacian pyramid of adversarial networks. In Advances in neural information processing systems, pages 1486–1494, 2015.
-  A. Dosovitskiy, J. Tobias Springenberg, and T. Brox. Learning to generate chairs with convolutional neural networks. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 1538–1546, 2015.
-  D. Eigen and R. Fergus. Predicting depth, surface normals and semantic labels with a common multi-scale convolutional architecture. In Proceedings of the IEEE International Conference on Computer Vision, pages 2650–2658, 2015.
-  I. Goodfellow, J. Pouget-Abadie, M. Mirza, B. Xu, D. Warde-Farley, S. Ozair, A. Courville, and Y. Bengio. Generative adversarial nets. In Advances in Neural Information Processing Systems, pages 2672–2680, 2014.
-  A. Gretton, K. M. Borgwardt, M. Rasch, B. Schölkopf, and A. J. Smola. A kernel method for the two-sample-problem. In Advances in neural information processing systems, pages 513–520, 2006.
-  R. Hartley and A. Zisserman. Multiple view geometry in computer vision. Cambridge university press, 2003.
-  K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. arXiv preprint arXiv:1512.03385, 2015.
-  D. Hoiem, A. A. Efros, and M. Hebert. Geometric context from a single image. In Tenth IEEE International Conference on Computer Vision (ICCV’05) Volume 1, volume 1, pages 654–661. IEEE, 2005.
-  A. Kar, S. Tulsiani, J. Carreira, and J. Malik. Category-specific object reconstruction from a single image. In 2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pages 1966–1974. IEEE, 2015.
-  T. D. Kulkarni, W. F. Whitney, P. Kohli, and J. Tenenbaum. Deep convolutional inverse graphics network. In Advances in Neural Information Processing Systems, pages 2539–2547, 2015.
-  E. H. Land and J. J. McCann. Lightness and retinex theory. JOSA, 61(1):1–11, 1971.
-  A. Laurentini. The visual hull concept for silhouette-based image understanding. IEEE Transactions on pattern analysis and machine intelligence, 16(2):150–162, 1994.
-  J. Long, E. Shelhamer, and T. Darrell. Fully convolutional networks for semantic segmentation. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 3431–3440, 2015.
-  M. M. Loper and M. J. Black. Opendr: An approximate differentiable renderer. In European Conference on Computer Vision, pages 154–169. Springer, 2014.
-  A. L. Maas, A. Y. Hannun, and A. Y. Ng. Rectifier nonlinearities improve neural network acoustic models. In International Conference on Machine Learning (ICML), 2013.
-  O. Nalbach, E. Arabadzhiyska, D. Mehta, H.-P. Seidel, and T. Ritschel. Deep shading: Convolutional neural networks for screen-space shading. arXiv preprint arXiv:1603.06078, 2016.
-  A. Radford, L. Metz, and S. Chintala. Unsupervised representation learning with deep convolutional generative adversarial networks. arXiv preprint arXiv:1511.06434, 2015.
-  D. J. Rezende, S. Eslami, S. Mohamed, P. Battaglia, M. Jaderberg, and N. Heess. Unsupervised learning of 3d structure from images. In Neural Information Processing Systems (NIPS), 2016.
-  S. Savarese and L. Fei-Fei. 3d generic object categorization, localization and pose estimation. In 2007 IEEE 11th International Conference on Computer Vision, pages 1–8. IEEE, 2007.
-  A. Saxena, S. H. Chung, and A. Ng. Learning depth from single monocular images. In Neural Information Processing Systems (NIPS), volume 18, page 1161. MIT, 2005.
-  A. G. Schwing and R. Urtasun. Efficient exact inference for 3d indoor scene understanding. In European Conference on Computer Vision, pages 299–313. Springer, 2012.
-  H. Su, C. R. Qi, Y. Li, and L. J. Guibas. Render for cnn: Viewpoint estimation in images using cnns trained with rendered 3d model views. In Proceedings of the IEEE International Conference on Computer Vision, pages 2686–2694, 2015.
-  M. Tatarchenko, A. Dosovitskiy, and T. Brox. Multi-view 3d models from single images with a convolutional network. In European Conference on Computer Vision, pages 322–337. Springer International Publishing, 2016.
-  S. Tulsiani, J. Carreira, and J. Malik. Pose induction for novel object categories. In Proceedings of the IEEE International Conference on Computer Vision, pages 64–72, 2015.
-  M. Woo, J. Neider, T. Davis, and D. Shreiner. OpenGL programming guide: the official guide to learning OpenGL, version 1.2. Addison-Wesley Longman Publishing Co., Inc., 1999.
-  R. J. Woodham. Photometric method for determining surface orientation from multiple images. Optical engineering, 19(1):191139–191139, 1980.
-  J. Wu, C. Zhang, T. Xue, W. T. Freeman, and J. B. Tenenbaum. Learning a probabilistic latent space of object shapes via 3d generative-adversarial modeling. In Neural Information Processing Systems (NIPS), 2016.
-  Z. Wu, S. Song, A. Khosla, F. Yu, L. Zhang, X. Tang, and J. Xiao. 3d shapenets: A deep representation for volumetric shapes. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 1912–1920, 2015.
-  E. Y. Y. G. H. L. Xinchen Yan, Jimei Yang. Learning volumetric 3d object reconstruction from single-view with projective transformations. In Neural Information Processing Systems (NIPS), 2016.
-  T. Zhou, S. Tulsiani, W. Sun, J. Malik, and A. A. Efros. View synthesis by appearance flow. arXiv preprint arXiv:1605.03557, 2016.