{"id":1113,"date":"2022-09-15T20:53:44","date_gmt":"2022-09-15T20:53:44","guid":{"rendered":"http:\/\/summergeometry.org\/sgi2022\/?p=1113"},"modified":"2022-09-16T13:46:12","modified_gmt":"2022-09-16T13:46:12","slug":"how-to-train-your-dragon-using-a-siren","status":"publish","type":"post","link":"https:\/\/summergeometry.org\/sgi2022\/how-to-train-your-dragon-using-a-siren\/","title":{"rendered":"How to Train Your Dragon Using a SIREN"},"content":{"rendered":"\n<p class=\"has-text-align-center has-large-font-size wp-block-paragraph\"><strong>             <em>A theoretical walkthrough INRs methods for unoriented point clouds<\/em><\/strong><\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><em>By Alisia Lupidi, Ahmed Elhag and Krishnendu Kar<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hello SGI Community, \ud83d\udc4b<br>We are the Implicit Neural Representation (INR) team, Alisia Lupidi, Ahmed Elhag, and Krishnendu Kar, under the supervision of Dr. Dena Bazazian and Shaimaa Monem Abdelhafez. In this article, we would like to introduce you to the theoretical background for our project.<br>We based our work on two papers: one about <em>Sinusoidal Representation Network<\/em> (SIREN<sup>[1]<\/sup> ) and one about <em>Divergence Guided Shape Implicit Neural Representation for unoriented point clouds<\/em> (DiGS<sup>[2]<\/sup>), but before presenting these we added a (simple and straightforward) prerequisites section where you can find all the theoretical background needed to understand the papers.<br>Enjoy!<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/94ESYmBLLebcPNOew1dqYwZAVgQdZcv5GDSoLFeGBwmTsawPHktJVnWBKYZMsE42EHPLUxG5EcbjZuKcRa-LKZq5vzNvyKVldB_0lWFfuaulyXmRLgPTfMQzKyzY2F_LuPZJNMqrufYW90B7kyc5t405XKS2kmz2VL13gO2EHVJNBcq6I52Ftrm05Q\" alt=\"\" width=\"593\" height=\"388\"\/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>0.<\/strong> <strong>Prerequisites<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>0.1 Implicit Neural Representation (INR)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Various paradigms have been used to represent a 3D object predicted by neural networks &#8211; including voxels, point clouds, and meshes. All of these methods are discrete and therefore pose several limitations &#8211; for instance, they require a lot of memory which limits the resolution of the 3D object predicted.<br><br>The concept of implicit neural representation (INR) for 3D representation has recently been introduced and uses a signed distance function (SDF) to represent 3D objects implicitly. It is a type of regression problem and consists of encoding a continuous differential signal within a neural network. With INR, we can provide a high resolution for a 3D object with a lower memory footprint, despite the limitations of discrete methods.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><strong>0.2 Signed Distance Function (SDF)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The signed distance function<sup>[5]<\/sup> of a set in \u03a9 is a metric space that determines the distance of a given point \ud835\udccd from the boundary of \u03a9.<br>The function has positive values for \u2200\ud835\udccd \u2208 \u03a9, and this value decreases as \ud835\udccd approaches the boundary of \u03a9. On the boundary, the signed distance function is exactly 0 and it takes negative values outside of \u03a9.<br><br><strong>0.3<\/strong> <strong>Rectified Linear Unit (ReLU)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Rectified Linear Unit (ReLU, Fig. 1) is the most commonly used activation function in deep learning models. The function returns 0 if it receives any negative input, but for any positive value \ud835\udccd, it returns that value. It is defined by <em>f(\ud835\udccd) = max(0, \ud835\udccd)<\/em>, where \ud835\udccd<a href=\"https:\/\/www.codecogs.com\/eqnedit.php?latex=x#0\"><\/a> is an input to a neuron.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-14.04.19.png\" alt=\"\" class=\"wp-image-1114\" width=\"592\" height=\"298\" srcset=\"https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-14.04.19.png 798w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-14.04.19-300x151.png 300w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-14.04.19-768x387.png 768w\" sizes=\"auto, (max-width: 592px) 100vw, 592px\" \/><figcaption><strong>Figure 1: ReLU Plo<\/strong>t<sup>[3]<\/sup><\/figcaption><\/figure>\n<\/div>\n\n\n<figure class=\"wp-block-table aligncenter\"><table><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>ReLU pros<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>ReLU cons<\/strong><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Extremely easy to implement (just a max function), unlike the Tanh and the Sigmoid activation functions that require exponential calculation<\/td><td class=\"has-text-align-center\" data-align=\"center\"><br>Dying ReLU: for all negative inputs, ReLU gives 0 as output &#8211; a ReLU neuron is \u201cdead\u201d if it is stuck in the negative side (not recoverable).<br><br><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">The rectifier function behaves like a linear activation function<\/td><td class=\"has-text-align-center\" data-align=\"center\">Non-differentiable at zero<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Can output a true zero value<\/td><td class=\"has-text-align-center\" data-align=\"center\">Not zero-centered and unbounded<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br><strong>0.4<\/strong> <strong>Multilayer Perceptron (MLP)<\/strong> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A multilayer perceptron (MLP)<sup>[6]<\/sup> is a fully connected class of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Feedforward_neural_network\">feedforward<\/a> <a href=\"https:\/\/en.wikipedia.org\/wiki\/Artificial_neural_network\">artificial neural network<\/a> (ANN) that utilizes <a href=\"https:\/\/en.wikipedia.org\/wiki\/Backpropagation\">backpropagation<\/a> for training (supervised learning). It has at least three <a href=\"https:\/\/en.wikipedia.org\/wiki\/Layer_(deep_learning)\">layers<\/a> of nodes: an input <a href=\"https:\/\/en.wikipedia.org\/wiki\/Layer_(deep_learning)\">layer<\/a>, a hidden <a href=\"https:\/\/en.wikipedia.org\/wiki\/Layer_(deep_learning)\">layer<\/a> and an output <a href=\"https:\/\/en.wikipedia.org\/wiki\/Layer_(deep_learning)\">layer<\/a>, and except for the first layer, each node is a neuron that uses a nonlinear <a href=\"https:\/\/en.wikipedia.org\/wiki\/Activation_function\">activation function<\/a>.<br><br>A perceptron is a <em>linear classifier <\/em>that takes in input<em> \ud835\udcce =  \u2211<a href=\"https:\/\/www.codecogs.com\/eqnedit.php?latex=%20y%20%3D%20%5Csum%20(W_i%20x_i%20%2B%20b_i)#0\"><\/a> W<em>\u1d62<\/em>\ud835\udccd<em>\u1d62<\/em> + b<em>\u1d62<\/em> <\/em>where <em>\ud835\udccd<\/em><a href=\"https:\/\/www.codecogs.com\/eqnedit.php?latex=x#0\"><\/a> is the feature vector, <em>W<\/em><a href=\"https:\/\/www.codecogs.com\/eqnedit.php?latex=w#0\"><\/a> are the weights, and <em>b<\/em><a href=\"https:\/\/www.codecogs.com\/eqnedit.php?latex=b#0\"><\/a> the bias. This input, in some cases such as SIREN, is passed to an activation function to produce the bias (see equation 5).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1.SIREN<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1.1 Sinusoidal Representation Network (SIREN)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SIRENs<sup>[1]<\/sup> are neural networks (NNs) used for signals\u2019 INRs. In comparison with other networks\u2019 architectures, SIRENs can represent a signal\u2019s spatial and temporal derivatives, thus conveying a greater level of detail when modeling a signal, thanks to their sine-based activation function.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1.2 How does SIREN work?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We want to learn a function \u03a6 that satisfies the following equation and is limited by a set of constraints<sup>[1]<\/sup>,<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" width=\"324\" height=\"22\" src=\"https:\/\/lh6.googleusercontent.com\/sC2yd4g3aURMW4ZHlpdXZkC5Xt17Jnk8e07YEQEAWrWP90skdbYT6Joz2gkTInNvfdsh1U4B7UgjUxCYES2Wt3P3TFamtgR5UDM9LbPd4Qi8YNIbpNMNhEUfr97kt4K3XTMxcpTUJUcmESQ5cva9eVzqglwrYvWkPy_J01TM2zGDF0QlEMe-Nmh1bw\"><\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" width=\"382\" height=\"21\" src=\"https:\/\/lh3.googleusercontent.com\/tCHc6pyTSYk9VXhkVpsL1h76t4HcXfIZuexVcQFmdwvFjXQ61x_r7F-nXdJp15CTSHUhdNZci-b-8LEmT-wLdB8WsLh0aso1HTIXMjzznuNjSXWtYcB979L-svR1Kj2OywCmBtNvppZ4mjRTQawuQRj_lxg2Ex7-e8A-I2ThciAb8De-FsveUWu_6A\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This above is the formulation of an implicit neural representation where <em>F<\/em> is our NN architecture and it takes as input the spatio-temporal coordinates \ud835\udccd \u2208 \u211d<sup>m<\/sup> and the derivatives of \u03a6 with respect to&nbsp;\ud835\udccd. This feasibility problem can be summarized as<sup>[1]<\/sup>,<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" width=\"671\" height=\"44\" src=\"https:\/\/lh5.googleusercontent.com\/1GEY1r57fADi5WPJ60lw4klqXUAy4_8eOunKRrYDowOtMNLDBNtHh2xulrFV5-r0aM_jgAIqv1hAa-x7UM9D_7Cz0W3vtN2uHO0o17i4lZSXWEg45h4dG2B_5v-2H8xJ8mqxOEH5MQ1Q_xytwI54rOssZLrXHhywLMhkjvaX240H-vMjflVsaWdI1A\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As we want to learn \u03a6<a href=\"https:\/\/www.codecogs.com\/eqnedit.php?latex=%5CPhi#0\"><\/a>, it makes sense to cast this problem in a loss function to see how well we accomplish our goal. This loss function penalizes deviations from the constraints on their domain <em>\u03a9<sub>m<\/sub><\/em><sup>[1]<\/sup>,<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" width=\"487\" height=\"58\" src=\"https:\/\/lh5.googleusercontent.com\/R-oIKjgeWtlrCe9acdJFpc6Q-eibOVj0SVX7yOcXCEMO7fQquZweddnP-J4Xy72abaHxaIxxFOWFr-DgirXK0Vyzw_qRoWH-3tGBeqhUEOd3-WpcBKcTFSNmzQOHWCk_VPbAlXIjVjT8av2gnoWBa26XbWIhgT2xb-OKDlPeyIVgDhnX5xw1JvO9dA\"><a href=\"https:\/\/www.codecogs.com\/eqnedit.php?latex=%20L%20%3D%20%5Cint_%7B%5COmega%7D%20%5Csum_%7Bm%20%3D%201%7D%5E%7BM%7D%201_%7B%5COmega_%7Bm%7D%7D(x)%20%7C%7C%20C_%7Bm%7D(a(x)%2C%20%5CPhi(x)%2C%20%5Cnabla%20%5CPhi(x)%2C%20%5Cldots)%20%7C%7C%20dx.%20%5Cquad%20(4)#0\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here we have the <em>indicator function<\/em> <em>1<sub>\u03a9<sub>m<\/sub><\/sub>= 1 if \ud835\udccd \u2208 \u03a9<sub>m<\/sub><\/em>  <em>and otherwise equal to 0.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">All points <em>\ud835\udccd<em>\u1d62<\/em><\/em> are mapped to \u03a6(<em>\ud835\udccd<\/em>)<a href=\"https:\/\/www.codecogs.com\/eqnedit.php?latex=%5CPhi(x)#0\"><\/a> in a way that minimizes its deviation from the sampled value of the constraint <em>a\u1d62(\ud835\udccd)<\/em>. The dataset <em>                D = {(\ud835\udccd\u1d62, a\u1d62(\ud835\udccd))}\u1d62<\/em> is sampled dynamically at training time using Monte Carlo integration. The aim of doing this is to improve the approximation of the loss <em>L<\/em> as the number of samples grows.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To calculate \u03a6<a href=\"https:\/\/www.codecogs.com\/eqnedit.php?latex=%5CPhi#0\"><\/a>, we use <em>\u03b8<\/em><a href=\"https:\/\/www.codecogs.com\/eqnedit.php?latex=%5Ctheta#0\"><\/a> parameters and solve the resulting optimization problem using gradient descent.<sup>[1]<\/sup><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" width=\"693\" height=\"22\" src=\"https:\/\/lh3.googleusercontent.com\/ezwiqqHIqYjDwuqb_mqB5-LLTpsqJM5I7qWj3KEwGPgDEDfjK3jpGSNNpM9cfa9Exj2Gcr98CXIYD2uCmu8u0S1STUn2ttcum5bFLa_zW4eFYC7yOJbGaRcjrabuk9SICDXn1d40C70Gajyg7f6yGebI7RFSaVKvciAisQGKvO0nuT-mYxq1YIvywA\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here  <em>\u03b8<\/em><sub><em>i<\/em><\/sub> \u2236 <em>\u211d\u2192 \u211d<sup>N<sub>i<\/sub> <\/sup> <\/em>is the <em>i<sup>th<\/sup><\/em><a href=\"https:\/\/www.codecogs.com\/eqnedit.php?latex=i%5E%7Bth%7D#0\"><\/a> layer of the network. It consists of the affine transform defined by the weight matrix <em>W<\/em><sub><em>i<\/em><\/sub> <em>\u2208<\/em> \u211d<sup><em>N<sub>i<\/sub> <\/em>x<em> M<sub>i<\/sub><\/em><\/sup>  and the biases <i>b<\/i><sub><em style=\"font-style: italic\">i<\/em><\/sub> <em>\u2208<\/em> \u211d<sup><em>N<sub>i<\/sub><\/em><\/sup><a href=\"https:\/\/www.codecogs.com\/eqnedit.php?latex=b_i%20%5Cin%20%5Cmathbb%7BR%7D%5E%7BN_i%7D#0\"><\/a> applied on the input <em>\ud835\udccd<em>\u1d62<\/em><\/em> <em>\u2208<\/em> \u211d<sup><em>M<sub>i<\/sub><\/em><\/sup><a href=\"https:\/\/www.codecogs.com\/eqnedit.php?latex=x_i%20%5Cin%20%5Cmathbb%7BR%7D%5E%7BM_i%7D#0\"><\/a>. The sine acts as the activation function and it was chosen to achieve greater resolution: a sine activation function ensures that all derivatives are never null regardless of their order (the sine\u2019s derivative is a cosine, whereas a polynomial one would approach zero in a number of derivations related to its grade). A polynomial would thus lose higher order frequencies and therefore render a model with less information.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1.3 Examples and Experiments<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the paper<sup>[1]<\/sup>, the authors compared SIREN performances to the most popular network architectures used-like Tanh, ReLU, Softplus, etc. Conducting experiments on different signals (picture, sound, video, etc), we can see that SIREN outperforms all the other methods by a significant margin (i.e., it reconstructs the signal with higher accuracy, Fig. 2).&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-17.22.04-494x1024.png\" alt=\"\" class=\"wp-image-1134\" width=\"347\" height=\"719\" srcset=\"https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-17.22.04-494x1024.png 494w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-17.22.04-145x300.png 145w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-17.22.04.png 706w\" sizes=\"auto, (max-width: 347px) 100vw, 347px\" \/><figcaption>Figure 2: SIREN performance compared to other INRs.<sup>[1]<\/sup><\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">To appreciate all of SIREN\u2019s potential, it is worth mentioning that we can look at the experiment the authors did on an oriented point cloud representing a 3D statue and on shape representation with differentiable signed distance functions (Fig. 3).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-17.34.10-1-1024x675.png\" alt=\"\" class=\"wp-image-1156\" width=\"534\" height=\"352\" srcset=\"https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-17.34.10-1-1024x675.png 1024w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-17.34.10-1-300x198.png 300w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-17.34.10-1-768x506.png 768w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-17.34.10-1-1536x1013.png 1536w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-17.34.10-1-1200x791.png 1200w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-17.34.10-1.png 1784w\" sizes=\"auto, (max-width: 534px) 100vw, 534px\" \/><figcaption>Figure 3: SIREN reconstruction of a high detailed statue compared to ReLU ones.<sup>[5]<\/sup><\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">By applying SIREN to this problem, they were able to reconstruct the whole object while accurately reproducing even the finer details on the elephant and woman\u2019s bodies.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The whole scene is stored in the weights of a single 5-layer NN.<br>Compared to recent procedures (like combining voxel grids with neural implicit representations) with SIREN, we have no 2D or 3D convolutions and fewer parameters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What gives SIREN an edge over other architectures is that: it does not compute SDFs using supervised GT SDF or occupancy values. Instead, it requires supervision in the gradient domain, so even though it is a harder problem to solve, it results in a better model and more efficient approach.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1.4 Conclusion on SIREN<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SIREN is a new and powerful method in the INR world that allows 3D image reconstructions with greater precision, an increased amount of details, and smaller memory usage.<br>All of this has been possible thanks to a smart choice of the activation function: using the sine gives an edge on the other networks (Tanh, ReLU, Sigmoid, etc) as its derivatives are never null and retrieve information even at higher frequency levels (higher order derivatives).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2.<\/strong> <strong>DiGS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2.1<\/strong> <strong>Divergence Guided Shape Implicit Neural Representation for unoriented point clouds (DiGS)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now that we know what SIREN is, we present DiGS<sup>[2]<\/sup>: a method to reconstruct surfaces from point clouds that have no normals.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Why are normals important for INR?<\/em> When normal vectors are available for each point in the cloud, a higher fidelity representation can be learned. Unfortunately, most of the time normals are not provided with the raw data. DiGS is significant because it manages to render objects with high accuracy in all cases, thus bypassing the need for normals as a prior.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2.2<\/strong> <strong>Training SIRENs without normal vectors<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The problem has now changed into training a SIREN without supplying the shape\u2019s normals beforehand. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Looking at the gradient vector field of the signed distance function produced by the network, we can see that it has low divergence nearly everywhere except for sink points &#8211; like in the center of the circle in Fig. 4. By incorporating this geometric prior as a soft constraint in the loss function, DiGS reliably orients gradients to match the unknown normals at each point and in some cases this produces results that are even better than those produced by approaches that use directly GT normals.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-18.00.41-1024x373.png\" alt=\"\" class=\"wp-image-1137\" width=\"616\" height=\"224\" srcset=\"https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-18.00.41-1024x373.png 1024w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-18.00.41-300x109.png 300w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-18.00.41-768x280.png 768w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-18.00.41-1200x438.png 1200w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-18.00.41.png 1492w\" sizes=\"auto, (max-width: 616px) 100vw, 616px\" \/><figcaption>Figure 4: DiGS applied to a 2D example. <sup>[2]<\/sup><\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">To do this, DiGS requires a network architecture that has <em>continuous second derivatives<\/em>, such as SIRENs, and an <em>initial zero level set<\/em> that is approximately spherical. To achieve the latter, two new geometric initialization methods are proposed: the initialization to a sphere and the Multi-Frequency Geometric Initialization (MFGI). The MFGI is better than the first because the first keeps all activations within the first period of the sinusoidal activation function and this will not generate high-frequency outputs, thus losing some detail. The second one, however, introduced controlled high frequencies into the first layer of the NN, and even though is a noisier method it solves the aforementioned problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To train SIRENS with DiGS, firstly we need a precise geometric initialization. Initializing the shape to a sphere biases the function to start with an SDF that is positive away from the object and negative in the center of the object\u2019s bounding box, while keeping the model\u2019s ability to have high frequencies (in a controllable manner).<br>Progressively, finer and finer details are added into consideration, passing from a smooth surface to a coarse shape with edges. This step-by-step approach allows the model to learn a function that has smoothly changing normals and that is interpolated as much as possible with the original point cloud samples.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The original SIREN loss function includes:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>A manifold constraint: points on the surface manifold should be on the function\u2019s zero-level set<sup>[2]<\/sup>,<\/li><\/ul>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" width=\"227\" height=\"44\" src=\"https:\/\/lh4.googleusercontent.com\/Ct75_MJmiQpjYos0FybNwTKVTMRm7yYUhWdyGe7hR7H3c1BnfNsz-0JdMhAkI3TzBztzvezYl_qEB43uZe4LxCEOaKRY47dKyi-FYja_eH7W2FbfO6uWmPEvjx2zmpwp8m8VIVYwyHo7zIRVyI5iyqdlDCxmGUcmpQV7LQovsy7x9pdTIkUvNP3PMA\"><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>A non-manifold penalization constraint because of which all off-surface point have <em>SDF = 0<\/em> <sup>[2]<\/sup>,<\/li><\/ul>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" width=\"258\" height=\"45\" src=\"https:\/\/lh3.googleusercontent.com\/4vD7UvMhOc4C-0MsZVby_i9yIZ431mQXrka34v76bH8K4BiGRaJ2_-VsAzulfn2eYI8GPnnFfq_3Mffae0loxrLDcnk6FZHxKWKHysy9PAetQGjU6X93zFkEuSWd7Hky858zFvXTj1C3uT0d7MKHuFtL7hNZhNZEhRgn8HxsbzNfNeSubmZ1BO72Pg\"><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>An Eikonal term that defines all gradients to have unit length<sup>[2]<\/sup>,<\/li><\/ul>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" width=\"316\" height=\"41\" src=\"https:\/\/lh5.googleusercontent.com\/rrr31RVg_vXi7UlADMV2Y5RxlaBTxn9By_3Zfo9WeGWW77BbrPYXRsdim_itxcnBtFlYF1fxvMGxyOp9tWV20hdcZ_9a1TS3nKJw2Izt6tQUyI057EE_OeeWtO1V8C2RsonJzn-1LLIe199_R120bjAA-vJTQbC6MLwcHn2qWK5oeOIcrAr6b9K4WA\"><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>A normal term that forces the gradients\u2019 directions of points on the surface manifold to match the GT normals\u2019 directions<sup>[2]<\/sup>,<\/li><\/ul>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" width=\"314\" height=\"45\" src=\"https:\/\/lh6.googleusercontent.com\/awRrmeMGDOO-nJKwzWUY-I9lk7IBBUkjn_fRpDofrAGTxzQkdLSbvXnmcg2sQ8pPL28biU-joJBrIsChJ9ZhfstE2Xm1RMnk8HUmT729RNr1duiWnbawPOeSY8wRy_nVq6Rx3WkoBGA897WF0rgI0pFWOqFwIAKEs-ebU9GqJjeDMDPcdVxfEqrsgQ\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The original SIREN\u2019s loss function is<sup>[2]<\/sup><\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" width=\"527\" height=\"20\" src=\"https:\/\/lh4.googleusercontent.com\/WeB8lDlfP9Eq2nG3eDHsNhMHpOor9ak0dNAwyoKRZJMOrkFCz_PBYRuy9WAbON3tavsE95nYCs551AZ8fviQoa2FOamnzfJYuzfu6oI1_TzgDVTs3ugOMeFYqp-PKKjGjK7zA8O6MTlSahCjKOTPKBjy-BunFuP9q0aa3NM-SDpSn8TKSfiIWc8Z7w\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/latex-staging.easygenerator.com\/eqneditor\/editor.php?latex=%20L_%7B%5Ctextbox%7BSIREN%7D%7D%20%3D%20%5Clambda_%7Bzls%7D%20L_%7Bzls%7D%20%2B%20%5Clambda_%7B%5COmega%20%2F%20%5COmega_0%7D%20L_%7B%5COmega%20%2F%20%5COmega_0%7D%20%2B%20%20%20%5Clambda_%7B%5Ctextbox%7BEikonal%7D%7D%20L_%7B%5Ctextbox%7BEikonal%7D%7D%20%2B%20%5Clambda_%7Bn%7D%20L_%7Bn%7D%20%5Cquad%20(10)#0\"><\/a>With DiGS, the normal term is replaced by a Laplacian one that imposes a penalty on the magnitude of the divergence of the gradient vector field.<sup>[2]<\/sup><\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" width=\"446\" height=\"44\" src=\"https:\/\/lh3.googleusercontent.com\/sungA8HrT2MnO3o4OuIN8a_lh8IDeUz7fgJN5MJkc9ANSZzeTuLoeaEi8PeRGQV6BDJlz2V4CebVZVZTlgWJl7pQ8DPIl6KOh51RG831jfqVvvUvIwMTWWmczZM1SYbFJMV2yVE_6g6UQXUT-xIpm3OP0eSli-7eBjDz3jP_hte5Kvuk5fUTsfL6hQ\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This leads to a new loss function which is equivalent to regularizing the learn loss function:<sup>[2]<\/sup><\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" width=\"562\" height=\"21\" src=\"https:\/\/lh4.googleusercontent.com\/H4ovO1Yp854thiG537tjlrQVjP1BkgXcHF2maCK3LxI6nbAgfBJReradATiVYWbuvNFRQgyp8SliBUqGd-MmEJxSUD3c1szyO0Fhnm6Nzv3_r5Wrdfg0HLjEHp2_NVOuy7nIomr_35U6hfx14Zwz5FMUld1NDEvg9P8_skcyJ8eza7vdPIeXpMU4_w\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2.3 Examples and Experiments<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table aligncenter\"><table><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong><em>Iterations<\/em><\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong><em>0<\/em><\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><em><strong>50<\/strong><\/em><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong><em>2000<\/em><\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong><em>9000<\/em><\/strong><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong><em>DiGS<\/em><\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/nR05QpKipYdpyLhKI2vmfdsIHhJ2OROFHqEKcLBuw3-Lro2ps3nnK8AOlnMisCvsusXiaicRO4Cl2KKErlihTIMN3VrDkygZTouin3CtlJgfm-3u2gZFH4zwt3lsBQRdzZbyZI3_Sc1gfG4_XnrbA9-MHG9dZhdnFwFrqB9wlBDFBe3sHOX2Q2FXVw\" width=\"110\" height=\"113\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/eWrHGobWMVnik5CG_gLIFhkrYA9HzWPA9nFw-Oz92ZMZDt7lUBq7WgspiWNqJsbo3Q7Pyg73Vi8W-7yJOsXetGgOvOaCtnytiA2-NhvsPYabVc54oZ27TO8cr92SOQN-yPSBJIrf1XVuT8VWeTIwgbw2O2oynsO8VcC49SdKMPU257jOfDKJ5Y-pKw\" width=\"110\" height=\"113\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/8Skmx9y6iWa5QbfH6zwfpQObPrAVDuXahPM6x2PSFFB2bUwTsaTUny3SocEMT7vM7nLI9inw7wiuD0b07CWXHZxJiM8Of6UTS4zentQZdEkkDsKUqWn_O2e33HyEPAKD6IXE58tZUE194g3AMZ1E4EGfKXOMcu5Ahk1jxYmJTd7ZHefY7EAiHUL1DA\" width=\"110\" height=\"113\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"110\" height=\"113\" src=\"https:\/\/lh4.googleusercontent.com\/knM8WfTyM5PQcOnno4TSCfdAIsi54KLpyztfiBeo3KFaaD5QSJGSTRmyBUQQVWX0pAZ9gDhU8q3tXnErzXGSjcVCGeYpao9JCZQgQcin7gthxiurwGLDlfiGG8zIHgo5HyjWK_bKT6bxn5aD9OCoraJz8D29ItYPV9cNaorABLSGI_RedH20tmjwwA\"><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong><em>SIREN<\/em><\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/sipKk9MmqgIsI5GhswdsdRJASUI9UniZQlE5vG8lQVzngLv8m4NSfWM6pRMKj1Eh2XgaxATgEAvHFImKSMuOdJwTyCPRc2bsWoDysgXr6fQQmJqA4sUiHPaDkkqCPxpHY1yBoAGi41s1xKFDGRbK_L8RyY-WJNqv6sbt9i389oh7Mn0xNr_HNvp8fw\" width=\"110\" height=\"117\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/oG33i8RHV-yQQR-hzUpXawL7hPZKR2IgOD4p4MOu8bJ6Thdg34pT1HoLFDszCfhazOPJSUhrPCtbPQzsy4gvfGUCcKPnNDRe1WfoOt8oIvUEYE_HqXtmPrtEwe6OPbTF-ixKKLsaBKPN1BWmBs0F5SAiUO4NqtmMxQPWD5DmY1uy5zH73mUAbAVFsg\" width=\"110\" height=\"119\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/vcbiKOl5fMl8vyusLV8owH-r0s1UMzE6r6SNPF7bWUpwe69taupAh1gGngwp_sKsoIuezJBknh9OmnVxgK4IfzZIakEQIxPVEeHEzfD0_0zcWEM9SaKj2ql_b8SowyPSkMmXKlQb03EEtUKdJLUOICjHuq5ApeH9d7eZTkigsdBUOk2QKQiLWwK2ag\" width=\"110\" height=\"120\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"110\" height=\"120\" src=\"https:\/\/lh6.googleusercontent.com\/-_TrHzBZNB55MBIMFQSHBXEopgygk44YpVFIJd-yRW6UbyDx40OBhfmtVgUhCgANqmn4zkMXH_r_h5TK81tZxNMD_BtoaKcwd92erDdVZfLIZu2dCYQx495F6DttwfNnpQGDIvCGAHc_Qm6gP9o2PjXrPT_HnPXw7RsE6-m5BkXJXCTGMYJ_fp6pnA\"><\/td><\/tr><\/tbody><\/table><figcaption>Figure 5: Reconstructing a dragon statue (DIGS and SIREN).<sup>[7]<\/sup><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In Fig. 5, both SIREN and DiGS were tasked with the reconstruction of a highly detailed statue of a dragon for which no normals were provided. The outputs were color mapped: in red, you can see the approximated solution, and in blue the reconstructed points match exactly with the ground truth. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At iteration 0, we can appreciate the spherical geometrical initialization required by DiGS. At first, it seems that SIREN converges faster and better to the solution: after 50 iterations, in fact, SIREN already has the shape of the dragon whereas DiGS has a potato-like object.<br>But as the reconstruction progresses, SIREN gets stuck on certain areas and cannot derive them. This phenomenon is known as \u201cghost geometries\u201d (see Fig 6) as no matter how many iterations we do INR architectures cannot reconstruct these areas. This means that our results will always have irrecuperable holes. DiGS is slower but can overcome ghost geometries: after 9k iterations, DiGS manages to recover data for the whole statue &#8211; irrecuperable areas included.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-22.47.20-1-1024x509.png\" alt=\"\" class=\"wp-image-1157\" width=\"548\" height=\"272\" srcset=\"https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-22.47.20-1-1024x509.png 1024w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-22.47.20-1-300x149.png 300w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-22.47.20-1-768x381.png 768w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-22.47.20-1-1200x596.png 1200w, https:\/\/summergeometry.org\/sgi2022\/wp-content\/uploads\/2022\/09\/Screen-Shot-2022-09-15-at-22.47.20-1.png 1530w\" sizes=\"auto, (max-width: 548px) 100vw, 548px\" \/><figcaption>Figure 6: Highlighting ghost geometries. <sup>[7]<\/sup><\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>2.4 Conclusion on DiGS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In general, DiGS behaves as good as (if not better) than other state-of-the-art methods with normal supervision and can also overcome ghost geometries and deal with unoriented point clouds.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. Conclusions<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Being able to reconstruct shapes from unoriented point clouds expands our ability to deal with incomplete data, which is something that often occurs in real life. As point clouds dataset without normals is more common than those with normals, the advancements championed by SIREN and DiGS will greatly facilitate 3D model reconstruction.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Acknowledgements<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We want to thank our supervisor Dr. Dena Bazazian, and our TA Shaimaa Moner, for guiding us through this article. We also want to thank Dr. Ben-Shabat for his kindness in answering all our questions about his paper.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>References<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">[1] Sitzmann, V., Martel, J., Bergman, A., Lindell, D. and Wetzstein, G., 2020. Implicit neural representations with periodic activation functions. <em>Advances in Neural Information Processing Systems<\/em>, <em>33<\/em>, pp.7462-7473.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">[2] Ben-Shabat, Y., Koneputugodage, C.H. and Gould, S., 2022. DiGS: Divergence guided shape implicit neural representation for unoriented point clouds. In <em>Proceedings of the IEEE\/CVF Conference on Computer Vision and Pattern Recognition<\/em>, pp. 19323-19332.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">[3] Liu, D., 2017, A Practical Guide to ReLU [online],&nbsp;<a href=\"https:\/\/medium.com\/@danqing\/a-practical-guide-to-relu-b83ca804f1f7\">https:\/\/medium.com\/@danqing\/a-practical-guide-to-relu-b83ca804f1f7<\/a> [Accessed on 26 July 2022].<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">[4] Sitzmann, V., 2020, Implicit Neural Representations with Periodic Activation Functions [online],<a href=\"https:\/\/www.vincentsitzmann.com\/siren\/\"> https:\/\/www.vincentsitzmann.com\/siren\/<\/a>,&nbsp; [Accessed 27 July 2022].<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">[5]&nbsp; Chan, Tony, and Wei Zhu. &#8220;Level set based shape prior segmentation.&#8221; 2005 IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR&#8217;05). Vol. 2. IEEE, 2005.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">[6] Hastie, Trevor, et al. The elements of statistical learning: data mining, inference, and prediction. Vol. 2. New York: springer, 2009.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">[7] anucvml, 2022, CVPR 2022 Paper: Divergence Guided Shape Implicit Neural Representation for Unoriented Point Clouds [online], <a href=\"https:\/\/www.youtube.com\/watch?v=bQWpRyM9wYM\">https:\/\/www.youtube.com\/watch?v=bQWpRyM9wYM<\/a>, Available from 31 May 2022 [Accessed 27 July 2022].<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A theoretical walkthrough INRs methods for unoriented point clouds By Alisia Lupidi, Ahmed Elhag and Krishnendu Kar Hello SGI Community, \ud83d\udc4bWe are the Implicit Neural Representation (INR) team, Alisia Lupidi, Ahmed Elhag, and Krishnendu Kar, under the supervision of Dr. Dena Bazazian and Shaimaa Monem Abdelhafez. In this article, we would like to introduce you [&hellip;]<\/p>\n","protected":false},"author":14,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[45],"tags":[146,148,150,149,147],"class_list":["post-1113","post","type-post","status-publish","format-standard","hentry","category-research","tag-3d-shape-representation","tag-digs","tag-implicit-neural-representation","tag-inr","tag-siren"],"_links":{"self":[{"href":"https:\/\/summergeometry.org\/sgi2022\/wp-json\/wp\/v2\/posts\/1113","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/summergeometry.org\/sgi2022\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/summergeometry.org\/sgi2022\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/summergeometry.org\/sgi2022\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/summergeometry.org\/sgi2022\/wp-json\/wp\/v2\/comments?post=1113"}],"version-history":[{"count":10,"href":"https:\/\/summergeometry.org\/sgi2022\/wp-json\/wp\/v2\/posts\/1113\/revisions"}],"predecessor-version":[{"id":1162,"href":"https:\/\/summergeometry.org\/sgi2022\/wp-json\/wp\/v2\/posts\/1113\/revisions\/1162"}],"wp:attachment":[{"href":"https:\/\/summergeometry.org\/sgi2022\/wp-json\/wp\/v2\/media?parent=1113"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/summergeometry.org\/sgi2022\/wp-json\/wp\/v2\/categories?post=1113"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/summergeometry.org\/sgi2022\/wp-json\/wp\/v2\/tags?post=1113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}