Collaborative Large-Scale Dense 3D Reconstruction with ...tvg/projects/Collaborative... · by the...

5
Collaborative Large-Scale Dense 3D Reconstruction with Online Inter-Agent Pose Optimisation S UPPLEMENTARY MATERIAL Stuart Golodetz * Tommaso Cavallari * Nicholas A. Lord * Victor A. Prisacariu David W. Murray Philip H. S. Torr 1 OUR DATASET Our dataset comprises 4 different subsets – Flat, House, Priory and Lab – each containing a number of different sequences that can be successfully relocalised against each other. The name of each sequence is prefixed with a simple identifier indicating the subset to which it belongs: f/ for Flat, h/ for House, p/ for Priory and l/ for Lab. Basic information about the sequences in each subset, their frame counts and capture times can be found in Table 1. Illustrations of the sequences and how they fit together to make the combined scenes are shown in Figures 2 to 5. Each sequence was captured at 5Hz using an Asus ZenFone AR augmented reality smartphone, which produces depth images at a resolution of 224 × 172, and colour images at a resolution of 1920 × 1080. To improve the speed at which we were able to load sequences from disk, we resized the colour images down to 480 × 270 (i.e. 25% size) to produce the collaborative reconstructions we show in the paper, but we nevertheless provide both the original and resized images as part of the dataset. We also provide the calibration parameters for the depth and colour sensors, the 6D camera pose at each frame, and the optimised global pose produced for each sequence when running our approach on all of the sequences in each subset. Finally, we provide a pre-built mesh of each sequence, pre- transformed by its optimised global pose to allow the sequences from each subset to be loaded into MeshLab [1] or CloudCompare [2] with a common coordinate system. 2 ADDITIONAL I MPLEMENTATION DETAILS In this section, we describe some relevant implementation details for those wanting to reimplement our approach, namely the inner workings of the pooled queue data structure mentioned in §3.2 of the main paper, the way in which we can render a global map of all of the sub-scenes we have reconstructed, and the way in which those sub-scenes can be fused offline to produce a single global reconstruction. These details can be skipped by more casual readers. 2.1 Pooled Queue Data Structure A pooled queue is a data structure that pairs a normal queue Q of objects of type T with a pool P of reusable T objects, with the un- derlying goal of minimising memory reallocations for performance reasons. Normal queues conventionally support the following range of operations: empty checks whether the queue is empty, peek gets the object (if any) at the front of the queue, pop removes the object (if any) at the front of the queue, push adds an object to the back of the queue, and size gets the number of objects on the queue. Pooled queues support the same range of operations, but their implementa- tions of push and pop are necessarily complicated by interactions with the pool. * S. Golodetz, T. Cavallari and N. Lord assert joint first authorship. Sequence Frame Count Capture Time (s) f/bathroom2study 2173 434.6 f/kitchen2study 2728 545.6 f/study2sittingroom 2816 563.2 f/turret2sittingroom 3079 615.8 h/frontroom2study 4372 874.4 h/hall2frontbedroom 3342 668.4 h/hall2oldkitchen 3798 759.6 h/mainbedroom2studio 3600 720.0 p/bath2office 1319 263.8 p/bed2office 1518 303.6 p/dining2guest 1232 246.4 p/guest2bath 1315 263.0 p/kitchen2dining 1142 228.4 p/living2dining 1640 328.0 l/atrium 1709 341.8 l/firstfloor 3188 637.6 l/groundfloor 1985 397.0 l/secondfloor 2146 429.2 Table 1: The sequences in each subset of our dataset. The pop operation is the more straightforward of the two: this simply removes the object (if any) at the front of the queue and returns it to the pool (with appropriate synchronisation in a multi- threaded context). The push operation is more complicated, and we divide it into two parts: begin push and end push. The begin push operation first checks whether a reusable object is currently available from the pool. If so, it removes it from the pool and returns a push handler encapsulating the object to the caller. The caller then modifies the object, after which the push handler calls end push to actually push the object onto the queue. If a reusable object is not available from the pool when begin push is called, we have a range of options, which are available as policies in our implementation: (i) discard the object we are trying to push onto the queue, (ii) grow the pool by allocating a new object that can then be reused, (iii) remove a random element from the queue and return it to the pool so that it can be reused, or (iv) wait for another thread to pop an object from the queue and return it to the pool. In practice, we found the discard strategy to work best for our approach: growing the pool has the disadvantage that the memory usage can grow without bound over time, waiting makes the client and/or server (as the case may be) less interactive, and removing a random element from the queue functions much like discarding but with different frames. 2.2 Global Map Rendering To render a global map of all of the sub-scenes we have reconstructed from a global pose T g SE 3 , we first compute (for each agent a) the corresponding local pose T a in a’s local coordinate system: T a = T gg ˆ T a (1)

Transcript of Collaborative Large-Scale Dense 3D Reconstruction with ...tvg/projects/Collaborative... · by the...

Page 1: Collaborative Large-Scale Dense 3D Reconstruction with ...tvg/projects/Collaborative... · by the pose graph optimiser to disk at the end of the collaborative reconstruction process.

Collaborative Large-Scale Dense 3D Reconstructionwith Online Inter-Agent Pose Optimisation

SUPPLEMENTARY MATERIAL

Stuart Golodetz* Tommaso Cavallari∗ Nicholas A. Lord∗

Victor A. Prisacariu David W. Murray Philip H. S. Torr

1 OUR DATASET

Our dataset comprises 4 different subsets – Flat, House, Priory andLab – each containing a number of different sequences that canbe successfully relocalised against each other. The name of eachsequence is prefixed with a simple identifier indicating the subsetto which it belongs: f/ for Flat, h/ for House, p/ for Priory and l/ forLab. Basic information about the sequences in each subset, theirframe counts and capture times can be found in Table 1. Illustrationsof the sequences and how they fit together to make the combinedscenes are shown in Figures 2 to 5.

Each sequence was captured at 5Hz using an Asus ZenFoneAR augmented reality smartphone, which produces depth imagesat a resolution of 224× 172, and colour images at a resolution of1920×1080. To improve the speed at which we were able to loadsequences from disk, we resized the colour images down to 480×270 (i.e. 25% size) to produce the collaborative reconstructions weshow in the paper, but we nevertheless provide both the original andresized images as part of the dataset. We also provide the calibrationparameters for the depth and colour sensors, the 6D camera poseat each frame, and the optimised global pose produced for eachsequence when running our approach on all of the sequences in eachsubset. Finally, we provide a pre-built mesh of each sequence, pre-transformed by its optimised global pose to allow the sequences fromeach subset to be loaded into MeshLab [1] or CloudCompare [2]with a common coordinate system.

2 ADDITIONAL IMPLEMENTATION DETAILS

In this section, we describe some relevant implementation detailsfor those wanting to reimplement our approach, namely the innerworkings of the pooled queue data structure mentioned in §3.2 ofthe main paper, the way in which we can render a global map ofall of the sub-scenes we have reconstructed, and the way in whichthose sub-scenes can be fused offline to produce a single globalreconstruction. These details can be skipped by more casual readers.

2.1 Pooled Queue Data Structure

A pooled queue is a data structure that pairs a normal queue Q ofobjects of type T with a pool P of reusable T objects, with the un-derlying goal of minimising memory reallocations for performancereasons. Normal queues conventionally support the following rangeof operations: empty checks whether the queue is empty, peek getsthe object (if any) at the front of the queue, pop removes the object(if any) at the front of the queue, push adds an object to the back ofthe queue, and size gets the number of objects on the queue. Pooledqueues support the same range of operations, but their implementa-tions of push and pop are necessarily complicated by interactionswith the pool.

*S. Golodetz, T. Cavallari and N. Lord assert joint first authorship.

Sequence Frame Count Capture Time (s)

f/bathroom2study 2173 434.6f/kitchen2study 2728 545.6

f/study2sittingroom 2816 563.2f/turret2sittingroom 3079 615.8

h/frontroom2study 4372 874.4h/hall2frontbedroom 3342 668.4

h/hall2oldkitchen 3798 759.6h/mainbedroom2studio 3600 720.0

p/bath2office 1319 263.8p/bed2office 1518 303.6

p/dining2guest 1232 246.4p/guest2bath 1315 263.0

p/kitchen2dining 1142 228.4p/living2dining 1640 328.0

l/atrium 1709 341.8l/firstfloor 3188 637.6

l/groundfloor 1985 397.0l/secondfloor 2146 429.2

Table 1: The sequences in each subset of our dataset.

The pop operation is the more straightforward of the two: thissimply removes the object (if any) at the front of the queue andreturns it to the pool (with appropriate synchronisation in a multi-threaded context).

The push operation is more complicated, and we divide it intotwo parts: begin push and end push. The begin push operationfirst checks whether a reusable object is currently available from thepool. If so, it removes it from the pool and returns a push handlerencapsulating the object to the caller. The caller then modifies theobject, after which the push handler calls end push to actually pushthe object onto the queue. If a reusable object is not available fromthe pool when begin push is called, we have a range of options,which are available as policies in our implementation: (i) discardthe object we are trying to push onto the queue, (ii) grow the poolby allocating a new object that can then be reused, (iii) remove arandom element from the queue and return it to the pool so that itcan be reused, or (iv) wait for another thread to pop an object fromthe queue and return it to the pool. In practice, we found the discardstrategy to work best for our approach: growing the pool has thedisadvantage that the memory usage can grow without bound overtime, waiting makes the client and/or server (as the case may be)less interactive, and removing a random element from the queuefunctions much like discarding but with different frames.

2.2 Global Map Rendering

To render a global map of all of the sub-scenes we have reconstructedfrom a global pose Tg ∈ SE3, we first compute (for each agent a) thecorresponding local pose Ta in a’s local coordinate system:

Ta = Tg gTa (1)

Page 2: Collaborative Large-Scale Dense 3D Reconstruction with ...tvg/projects/Collaborative... · by the pose graph optimiser to disk at the end of the collaborative reconstruction process.

(a) Rendering a global map of the sub-scenes with per-pixel depth testing (b) Rendering the single global reconstruction produced by fusing the sub-scenes together

Figure 1: Fusing the sub-scenes into a single global reconstruction, as an offline post-processing step, naturally resolves inconsistenciesbetween the individual sub-scenes, e.g. those involving the sofa, wall, left-hand table plant and floor in this example (in which we fused all foursub-scenes in the Flat subset of our dataset). Both reconstructions were rendered using MeshLab [1], so as to achieve a consistent viewpoint.

Using the standard raycasting approach for a voxel-based scene [6],we then render synthetic colour and depth images (at 1280× 960resolution) for each agent from the local pose we have computed forit, which we call Ca and Da respectively. Finally, we set the colourof each pixel in the output image O based on per-pixel depth testingbetween the agents, i.e.

O(x) =Ca∗(x)(x), where a∗(x) = argmina

Da(x), (2)

where x ranges over the domain of O .

2.3 Producing a Single Global ReconstructionTo preserve the possibility of moving the sub-scenes of individualagents relative to each other during collaborative reconstruction (inparticular, as part of the pose graph optimisation process), we do notmerge them into a single global reconstruction online. However, oursystem does provide a mechanism for fusing the sub-scenes into asingle reconstruction after the fact.

To achieve this, we save both the sequences used to reconstructthe sub-scenes for the agents and the global poses {gTa} determinedby the pose graph optimiser to disk at the end of the collaborativereconstruction process. We then read the sequences and globalposes back in, and feed the sequences’ frames sequentially through astandard TSDF fusion pipeline [6], transforming each frame’s poseby its sequence’s global pose immediately prior to fusion. Thisprocess produces a single global model that can then be used asnormal for downstream tasks. Any inconsistencies between theindividual sub-scenes (in overlapping areas) are naturally resolvedby the implicit surface used in the fusion process.

Figure 1 shows an example of rendering a fused model producedby this process, in comparison to simply rendering a global map ofthe corresponding sub-scenes (without fusing them) as described inthe previous sub-section. The fused model resolves minor inconsis-tencies where the sub-scenes overlap, but the individual sub-scenescan no longer be moved around once fusion has taken place.

3 DEPTH SENSOR NOISE CHARACTERISTICS

As with all approaches to 3D reconstruction from RGB-D cameras,the reconstruction quality our approach is able to achieve is partly

a function of the quality of the depth produced by the sensors weuse. For that reason, we include here a brief discussion of the noisecharacteristics of several popular consumer depth sensors (Kinectv1, PrimeSense, and Kinect v2) that can be used with our system.For a more complete discussion, the interested reader may wish toconsult the mentioned references. Unfortunately, we are not awareof any existing public study of the noise characteristics of the depthsensor embedded in the Asus ZenFone AR.

The noise characteristics of the original Kinect v1 sensor (whichis based on structured light) were modelled by Nguyen et al. [5], whodetermined the axial depth noise by freely rotating a planar targetaround a vertical axis in front of a fixed Kinect, fitting a plane to theresulting point cloud, and then examining the differences betweenthe raw and fitted depths. The lateral depth noise was determined byexamining vertical edges in the depth map. They found that the axialnoise increases quadratically with depth, whereas the lateral noiseincreases only linearly. Mallick et al. [4] obtained similar results.The PrimeSense sensors are based on the same structured lightapproach as the Kinect v1 (which uses PrimeSense’s technology [9]).The noise characteristics of both devices are thus similar.

Wasenmuller et al. [7] undertook a detailed study for the Kinect v2sensor (which is based on time-of-flight principles). They found thatin contrast to the Kinect v1, whose accuracy decreases exponentiallywith increasing distance, the accuracy of the new sensor is constantwith depth (roughly a −18mm offset from the true depth). However,the depth accuracy of the Kinect v2 is dependent on temperature,with the authors recommending that it be pre-heated in advance toachieve best results. Moreover, unlike the Kinect v1, the accuracyof the Kinect v2’s depth is affected by scene colour. Yang et al. [8]also studied the depth accuracy of the Kinect v2, using a cone modelto represent its accuracy distribution. In addition to studying thebehaviour of an individual Kinect v2, they proposed a method forimproving depth accuracy when three separate sensors can be used.Finally, Fankhauser et al. [3] studied the Kinect v2’s usefulness inthe context of mobile robot navigation.

REFERENCES

[1] P. Cignoni, M. Callieri, M. Corsini, M. Dellepiane, F. Ganovelli, andG. Ranzuglia. MeshLab: an Open-Source Mesh Processing Tool. In

Page 3: Collaborative Large-Scale Dense 3D Reconstruction with ...tvg/projects/Collaborative... · by the pose graph optimiser to disk at the end of the collaborative reconstruction process.

Eurographics Italian Chapter Conference, pages 129–136, 2008.[2] CloudCompare v2.9 (GPL software), 2017. Retrieved from

http://www.danielgm.net/cc.[3] P. Fankhauser, M. Bloesch, D. Rodriguez, R. Kaestner, M. Hutter, and

R. Y. Siegwart. Kinect v2 for Mobile Robot Navigation: Evaluation andModeling. In ICAR, pages 388–394, 2015.

[4] T. Mallick, P. P. Das, and A. K. Majumdar. Characterizations of Noisein Kinect Depth Images: A Review. IEEE Sensors, 14(6):1731–1740,2014.

[5] C. V. Nguyen, S. Izadi, and D. Lovell. Modeling Kinect Sensor Noisefor Improved 3D Reconstruction and Tracking. In 3DIM/3DPVT, pages524–530, 2012.

[6] V. A. Prisacariu, O. Kahler, S. Golodetz, M. Sapienza, T. Cavallari,P. H. S. Torr, and D. W. Murray. InfiniTAM v3: A Framework forLarge-Scale 3D Reconstruction with Loop Closure. arXiv preprintarXiv:1708.00783v1, 2017.

[7] O. Wasenmuller and D. Stricker. Comparison of Kinect v1 and v2 DepthImages in Terms of Accuracy and Precision. In ACCV, pages 34–45,2016.

[8] L. Yang, L. Zhang, H. Dong, A. Alelaiwi, and A. E. Saddik. Evaluatingand Improving the Depth Accuracy of Kinect for Windows v2. IEEESensors, 15(8):4275–4285, 2015.

[9] P. Zanuttigh, G. Marin, C. D. Mutto, F. Dominio, L. Minto, and G. M.Cortelazzo. Operating Principles of Structured Light Depth Cameras. InTime-of-Flight and Structured Light Depth Cameras: Technology andApplications, pages 43–79. Springer International Publishing, 2016.

Page 4: Collaborative Large-Scale Dense 3D Reconstruction with ...tvg/projects/Collaborative... · by the pose graph optimiser to disk at the end of the collaborative reconstruction process.

Figure 2: A collaborative reconstruction of the 4 Flat sequences in our dataset (f/turret2sittingroom, f/study2sittingroom, f/kitchen2study andf/bathroom2study). These collectively represent a single-storey, two-bedroom flat. The mono-colour images show the individual sub-scenes wereconstruct from each sequence; the other images show the combined map.

Figure 3: A collaborative reconstruction of the 4 House sequences in our dataset (h/frontroom2study, h/hall2frontbedroom, h/hall2oldkitchenand h/mainbedroom2studio). These collectively represent a two-storey, four-bedroom house. The mono-colour images show the individualsub-scenes we reconstruct from each sequence; the other images show the combined map.

Page 5: Collaborative Large-Scale Dense 3D Reconstruction with ...tvg/projects/Collaborative... · by the pose graph optimiser to disk at the end of the collaborative reconstruction process.

Figure 4: A collaborative reconstruction of the 6 Priory sequences in our dataset (p/bath2office, p/bed2office, p/guest2bath, p/dining2guest,p/kitchen2dining and p/living2dining). These collectively represent a three-storey house. The mono-colour images show the individualsub-scenes we reconstruct from each sequence; the other images show the combined map.

Figure 5: A collaborative reconstruction of the 4 Lab sequences in our dataset (l/groundfloor, l/firstfloor, l/atrium and l/secondfloor). Thesecollectively represent a three-storey research lab. The mono-colour images show the individual sub-scenes we reconstruct from each sequence;the other images show the combined map.