Computer Vision System
By adopting sparse volume data structures and hardware accelerators in computer vision systems, the problems of computing complexity and resource constraints in high-frame rate 3D data processing are solved, and low-latency and high-efficiency 3D rendering effect is achieved.
Patent Information
- Application Number
- JP2024073394
- Authority / Receiving Office
- JP · JP
- Patent Type
- Patents
- Current Assignee / Owner
- Priority Date
- 2018-08-29
- Filing Date
- 2024-04-30
- Publication Date
- 2025-04-22
- Estimated Expiration
- 2039-08-29
AI Technical Summary
Existing computer vision systems face high computational complexity and resource constraints when processing 3D data at high frame rates, resulting in poor latency and performance, especially in augmented reality, virtual reality and mixed reality applications.
Using a sparse volume data structure, by representing the volume data as a sparse tree structure, only voxels that actually contain geometric information are stored, the storage and processing requirements are reduced, and the processing of volume data is accelerated through hardware accelerators.
The 3D rendering system is processed and updated with low latency and efficiently, reducing computing and storage requirements, and avoiding user experience problems caused by delays such as sports vomiting.
Smart Images

Figure 0007665901000033 
Figure 0007665901000034 
Figure 0007665901000035
Abstract
Description
[Technical field]
[0001] [Related Applications] This application claims the benefit of U.S. Provisional Patent Application No. 62 / 724,446, filed Aug. 29, 2018, the entirety of which is incorporated herein by reference.
[0002] The present disclosure relates generally to the field of computer systems, and more specifically to hash tables used in computer vision applications. [Background technology]
[0003] With the advent of Augmented Reality (AR), Virtual Reality (VR) and Mixed Reality (MR) products such as those from MagicLeap™, Microsoft®, HoloLens™, Oculus™, Rift™, and other VR systems such as those from Valve™ and HTC™, the worlds of computer vision and computer graphics are rapidly converging. The current approach in such systems is to use separate graphics processing units (GPUs) and computer vision subsystems that operate in parallel. These parallel systems can be assembled from existing GPUs in parallel with a computer vision pipeline implemented in software running on an array of processors and / or programmable hardware accelerators. [Brief description of the drawings]
[0004] Various objects, features, and advantages of the disclosed subject matter may be more fully understood with reference to the following detailed description of the disclosed subject matter when considered in conjunction with the following drawings, in which like reference numerals identify like elements. The accompanying drawings are schematic and are not intended to be drawn to scale. For purposes of clarity, not every component has been labeled in every figure. Not every component of each embodiment of the disclosed subject matter is shown unless illustration is necessary to enable those skilled in the art to understand the disclosed subject matter.
[0005] [Figure 1] 1 illustrates a conventional augmented or mixed reality rendering system.
[0006] [Diagram 2] 1 illustrates a voxel-based augmented or mixed reality rendering system according to some embodiments.
[0007] [Diagram 3] 1 illustrates the difference between dense and sparse volumetric representations according to some embodiments.
[0008] [Figure 4] 1 illustrates a composite view of a scene according to some embodiments.
[0009] [Diagram 5] 4 illustrates an exemplary element tree structure level of detail according to some embodiments.
[0010] [Figure 6] 1 illustrates applications in which the data structures and voxel data of the present application may be utilized, according to some embodiments.
[0011] [Figure 7] 1 illustrates an exemplary network used to recognize 3D digits, according to some embodiments.
[0012] [Figure 8] 1 illustrates multiple classifications performed on the same data structure with an implicit level of detail, according to some embodiments.
[0013] [Figure 9] 1 illustrates computation elimination with a 2D convolutional neural network in accordance with some embodiments.
[0014] [Figure 10] 13 illustrates experimental results from analysis of exemplary test images according to some embodiments.
[0015] [Figure 11] 1 illustrates hardware for culling operations according to some embodiments.
[0016] [Figure 12] 1 illustrates hardware improvements for culling operations according to some embodiments.
[0017] [Figure 13] 1 illustrates hardware in accordance with some embodiments.
[0018] [Figure 14] 1 illustrates an example system using a computer vision subsystem, according to some embodiments.
[0019] [Figure 15] 1 illustrates ray casting using a hierarchical volumetric data structure according to some embodiments.
[0020] [Figure 16A] 4 illustrates an example of ray traversal during an exemplary ray casting algorithm. [Figure 16B] 4 illustrates an example of ray traversal during an exemplary ray casting algorithm. [Figure 16C]4 illustrates an example of ray traversal during an exemplary ray casting algorithm.
[0021] [Figure 17A] 1 shows exemplary comparative images rendered using different ray casting techniques. [Figure 17B] 1 shows exemplary comparative images rendered using different ray casting techniques.
[0022] [Figure 18] 1 is a simplified block diagram illustrating the architecture of an exemplary visual processing unit (VPU).
[0023] [Figure 19] 1 is an exemplary graph illustrating a comparison of exemplary results of ray casting techniques.
[0024] [Figure 20A] 1 is an exemplary graph illustrating a comparison of exemplary performance characteristics of different ray casting techniques. [Figure 20B] 1 is an exemplary graph illustrating a comparison of exemplary performance characteristics of different ray casting techniques.
[0025] [Figure 21A] 1 is a simplified block diagram illustrating an example neural network model. [Figure 21B] 1 is a simplified block diagram illustrating an example neural network model. [Figure 21C] 1 is a simplified block diagram illustrating an example neural network model.
[0026] [Figure 22] 1 is a graph illustrating an exemplary performance of a visual inertial odometry method.
[0027] [Figure 23A]1 is a simplified block diagram of a conventional relative pose estimation technique.
[0028] [Figure 23B] 1 is a simplified block diagram of an improved relative pose estimation technique utilizing a neural network model.
[0029] [Figure 24] 1 is a simplified block diagram illustrating an example neural network model.
[0030] [Diagram 25] 1 illustrates an example voxelization of a point cloud.
[0031] [Figure 26A] 1 is a flow chart illustrating an example technique for enhancing computer vision processing. [Figure 26B] 1 is a flow chart illustrating an example technique for enhancing computer vision processing. [Figure 26C] 1 is a flow chart illustrating an example technique for enhancing computer vision processing.
[0032] [Figure 27] 1 illustrates an example multi-slot vector processor in accordance with some embodiments.
[0033] [Figure 28] 1 illustrates exemplary volumetric acceleration hardware in accordance with some embodiments.
[0034] [Figure 29] 1 illustrates an organization of a voxel cube according to some embodiments.
[0035] [Diagram 30] 1 illustrates a two-level sparse voxel tree in accordance with some embodiments.
[0036] [Diagram 31] 1 illustrates a two-level sparse voxel tree in accordance with some embodiments.
[0037] [Diagram 32] 1 illustrates an example voxel data storage according to some embodiments.
[0038] [Diagram 33] 1 illustrates the insertion of a voxel into an exemplary volumetric data structure in accordance with some embodiments.
[0039] [Diagram 34] 1 illustrates a projection of an exemplary 3D volumetric object in accordance with some embodiments.
[0040] [Figure 35A] 1 illustrates an example operation involving an example volumetric data structure. [Figure 35B] 1 illustrates an example operation involving an example volumetric data structure. [Figure 35C] 1 illustrates an example operation involving an example volumetric data structure.
[0041] [Diagram 36] 1 illustrates generation of a simplified map using projection, according to some embodiments.
[0042] [Figure 37] 1 illustrates an exemplary aggregation of exemplary volumetric 3D and / or simple 2D measurements from an embedded device, according to some embodiments.
[0043] [Figure 38A] 1 illustrates an exemplary acceleration of 2D pathfinding on a 2D 2×2 bitmap according to some embodiments. [Figure 38B] 1 illustrates an exemplary acceleration of 2D pathfinding on a 2D 2×2 bitmap according to some embodiments. [Figure 38C]1 illustrates an exemplary acceleration of 2D pathfinding on a 2D 2×2 bitmap according to some embodiments.
[0044] [Figure 39] 1 illustrates an example acceleration of collision detection using an example volumetric data structure, according to some embodiments.
[0045] [Diagram 40] 1 is a simplified block diagram of an example network having devices in accordance with at least some embodiments.
[0046] [Diagram 41] 1 is a simplified block diagram of an example fog or cloud computing network in accordance with at least some embodiments.
[0047] [Diagram 42] 1 is a simplified block diagram of a system including an example device according to at least some embodiments.
[0048] [Diagram 43] 1 is a simplified block diagram of an example processing device according to at least some embodiments.
[0049] [Diagram 44] 1 is a block diagram of an example processor according to at least some embodiments.
[0050] [Diagram 45] 1 is a block diagram of an exemplary computing system according to at least some embodiments. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS
[0051] In the following description, numerous specific details are set forth with respect to the systems and methods of the disclosed subject matter, as well as the environments in which such systems and methods may operate, to provide a thorough understanding of the disclosed subject matter. However, it will be apparent to those skilled in the art that the disclosed subject matter may be practiced without such specific details, and that certain features that are well known in the art are not described in detail to avoid complicating the disclosed subject matter. In addition, it will be understood that the embodiments provided below are illustrative, and that other systems and methods are believed to exist within the scope of the disclosed subject matter.
[0052] Various technologies based on and incorporating augmented reality, virtual reality, mixed reality, autonomous devices and robots are emerging that may utilize data models that represent three-dimensional spaces and geometric volumes. Descriptions of various real and virtual environments using such 3D or volumetric data have historically involved large data sets that some computing systems have had difficulty processing in a desirable manner. Furthermore, as devices such as drones, wearable devices, virtual reality systems, etc., become smaller, memory and processing resources of such devices may also be constrained. As an example, AR / VR / MR applications may require high frame rates for graphical displays generated using supporting hardware. However, in some applications, the GPU and computer vision subsystems of such hardware may need to process data (e.g., 3D data) at high rates, e.g., up to 130 fps (7 ms), to generate desirable results (e.g., to generate reliable graphical scenes at frame rates that generate reliable results and prevent users from getting motion sickness due to excessive latency, among other exemplary goals). In further applications, it may be similarly challenging to satisfactorily process data describing large volumes while meeting constraints in the processing, memory, power, and application requirements of the corresponding systems, among other exemplary challenges.
[0053] In some implementations, a computing system may include logic for generating and / or using sparse volumetric data defined according to a format. For example, the defined volumetric data structure may be provided to unify computer vision and 3D rendering in various systems and applications. The volumetric representation of an object may be imaged using an optical sensor, such as a stereoscopic camera or a depth camera. The volumetric representation of the object may include multiple voxels. The improved volumetric data structure may be defined to enable recursively subdividing the corresponding volumetric representation to obtain a target resolution of the object. During subdivision, empty spaces in the volumetric representation that may be contained in one or more of these voxels may be culled from the volumetric representation (and supporting operations). The empty spaces may be areas of the volumetric representation that do not include geometric characteristics of the object.
[0054] Thus, in an improved volumetric data structure, individual voxels in a corresponding volume may be tagged as "occupied" (due to some geometry present in the corresponding volumetric space) or "empty" (representing that the corresponding volume consists of free space). Such tags may be further interpreted as specifying that one or more of its corresponding subvolumes are also occupied (e.g., if a parent or higher level voxel is tagged as occupied) or that all of its subvolumes are free space (i.e., if a parent or higher level voxel is tagged as empty). In some implementations, tagging a voxel as empty may allow the voxel and / or its corresponding subvolume voxels to be effectively removed from the operations used to generate the corresponding volumetric representation. The volumetric data structure may follow a sparse tree structure, such as one following a sparse secquaternary tree (SST) format. Furthermore, such an approach to sparse volumetric data structures may utilize relatively less storage space than has heretofore been used to store volumetric representations of objects. Additionally, compressing volumetric data may increase the feasibility of transmission of such representations and enable faster processing of such representations, among other exemplary benefits.
[0055] By hardware accelerating the volumetric data structure to allow for rapid updates of the 3D renderer, delays that may occur in separate computer vision and graphics systems can be eliminated. Such delays can introduce latency and, when used in AR, VR, MR and other applications, can cause motion sickness in the user, among other drawbacks. The ability to quickly test whether a voxel occupies a geometric property in the accelerated data structure allows for the construction of low-latency AR, VR, MR or other systems that can be updated in real time.
[0056] In some embodiments, the capabilities of the volumetric data structure may also provide intra-frame warnings, for example in AR, VR, MR and other applications where a user may collide with a real or synthetic object in an imaged scene, or in computer vision applications for drones or robotics where such devices may collide with a real or synthetic object in an imaged scene, the speed of processing provided by the volumetric data structure allows for warning of impending collisions.
[0057] Embodiments of the present disclosure may relate to the storage and processing of volumetric data in applications such as robotics, head mounted displays for augmented and mixed reality headsets, and phones and tablets. Embodiments of the present disclosure represent each volumetric element (e.g., voxel) in a voxel group, and optionally physical quantities related to the voxel's geometry, as a single bit. Additional parameters related to a group of 64 voxels, such as corresponding red-green-blue (RGB) or other color encoding, transparency, truncated signed distance function (TSDF) information, etc., may be associated with the voxel and stored in an associated optional 64-bit data structure (e.g., such that two or more bits are used to represent each voxel). Such a representation scheme may achieve minimal memory requirements. Furthermore, representing a voxel with a single bit allows for the performance of many simplified calculations to logically or mathematically combine elements of the volumetric representation. Combining elements of the volumetric representation can include, for example, ORing planes within the volume to create a 2D projection of the 3D volumetric data, and calculating surface area by counting the number of occupied voxels in a 2.5D manifold, among other things. When comparing, 64-bit subvolumes (e.g., 4^3 subvolumes) can be compared using XOR logic, and volumes can be inverted. Hybrid objects can be created by merging objects and ORing them together, among other examples.
[0058] FIG. 1 illustrates a conventional augmented or mixed reality system consisting of a parallel graphics rendering subsystem and a computer vision subsystem with a post-rendering correction device to account for changes due to rapid head movements and environmental changes that may produce occlusions and shadows in the rendered graphics. In one exemplary implementation, the system may include a host processor 100 supported by a host memory 124 to control the execution of a graphics pipeline, a computer vision pipeline, and a post-rendering correction device by interconnection via a bus 101, an on-chip network on chip, or other interconnection. The interconnection allows the host processor 100, running appropriate software, to control the execution of a graphics processing unit (GPU) 106, an associated graphics memory 111, a computer vision pipeline 116, and an associated computer vision memory 124. In one example, rendering of graphics using the GPU 106 via an OpenGL graphics shader 107 (e.g., operating on a triangle list 105) may be performed at a slower rate than the computer vision pipeline. As a result, post-rendering corrections via warp engine 108 and display / occlusion processor 109 can be performed to account for changes in head pose and occlusion scene geometry that may have occurred since the graphics were rendered by GPU 106. The output of GPU 106 is time stamped so that it can be used in conjunction with correct control signals 121 and 123 from head pose pipeline 120 and occlusion pipeline 122, among other examples, to generate the correct graphics output to take into account any changes in head pose 119 and occlusion geometry 113.
[0059] In parallel with the GPU 106, multiple sensors and cameras (e.g., including active and passive stereo cameras for depth and vision processing 117) may be connected to the computer vision pipeline 116. The computer vision pipeline 116 may include one or more of at least three stages, each of which may include multiple stages of lower-level processing. In one example, the stages in the computer vision pipeline 116 may be an image signal processing (ISP) pipeline 118, a head pose pipeline 120, and an occlusion pipeline 122. The ISP pipeline 118 may receive and condition the outputs of the input camera sensors 117 so that they can be used for subsequent head pose and occlusion processing. The head pose pipeline 120 may receive and use the outputs of the ISP pipeline 118, along with the outputs 119 of an inertial measurement unit (IMU) in the headset 110, to calculate the change in head pose since the corresponding output graphics frame was rendered by the GPU 106. The output 121 of the head pose pipeline (HPP) 120 may be applied to the warp engine 108 along with a user-specified mesh to warp the GPU output 102 to match the updated head pose position 119. The occlusion pipeline 122 may receive the output of the head pose pipeline 121 and look for new objects in the field of view, such as a hand 113 (or other example object) entering the field of view, which should generate a corresponding shadow 114 on the scene geometry. The output 123 of the occlusion pipeline 122 may be used by the display and occlusion processor 109 to accurately overlay the field of view onto the output 103 of the warp engine 108.Among other example use cases and features, the display and occlusion processor 109 may use the calculated head pose 119 to generate a shadow mask for a synthetic shadow 114, and the display and occlusion processor 109 may composite the occlusion geometry of the hand 113 onto the shadow mask to generate a graphical shadow 114 onto the output 103 of the warp engine 108, and generate a final output frame 104 for display on the augmented / mixed reality headset 110.
[0060] FIG. 2 illustrates a voxel-based augmented or mixed reality rendering system according to some embodiments of the present disclosure. The device illustrated in FIG. 2 may include a host system configured on a host CPU 200 and associated host memory 201. Such a system may communicate via a bus 204, an on-chip network, or other communication mechanism with an integrated computer vision and graphics pipeline 223 and associated integrated computer vision and graphics memory 213 that includes real and synthetic voxels that are rendered into a final scene for display on a head-mounted augmented or mixed reality display 211. The AR / MR display 211 may also include multiple active and passive image sensors 214, and an inertial measurement unit (IMU) 212 used to measure changes in orientation of head pose 222.
[0061] In a combined rendering pipeline, the composite geometry may be generated starting from a triangle list 204 that is processed by an OpenGL JiT (Just-in-Time) translator 205 to generate a composite voxel geometry 202. The composite voxel geometry may be generated, for example, by selecting a principal plane of triangles from the triangle list. Then, 2D rasterization of each triangle in the selected plane may be performed (e.g., in X and Z directions). A third coordinate (e.g., Y) may be created as an attribute that is interpolated across the triangle. Each pixel of the rasterized triangle may result in the definition of a corresponding voxel. This process may be performed by either a CPU or a GPU. If performed by a GPU, each rasterized triangle may be read back from the GPU to create a voxel where the GPU has rendered the pixel, among other example implementations. For example, the composite voxels may be generated using a 2D buffer of the list, where each entry of the list stores depth information for the polygon rendered at that pixel. For example, the model may be rendered using an orthographic perspective (e.g., top view). For example, every (x,y) provided in the exemplary buffer may represent a column of (x,y) within the corresponding voxel volume (e.g., from (x,y,0) to (x,y,4095)). Each column may then be rendered from the information as a 3D scanline using the information in each list.
[0062] 2, in some implementations, the synthetic voxel geometry 202 may be combined with measured geometry voxels 227 configured using a simultaneous localization and mapping (SLAM) pipeline 217. The SLAM pipeline may generate output 225 using active and / or passive image sensors 214 (e.g., 214.1 and 214.2) that are first processed using an image signal processing (ISP) pipeline 215, which may be converted to a depth image 226 by a depth pipeline 216. The active or passive image sensors 214 (214.1 and 214.2) may include active or passive stereo sensors, structured light sensors, time-of-flight sensors, among other examples. For example, the depth pipeline 216 may process depth data from a structured light or time-of-flight sensor 214.1, or depth data from a passive stereo sensor 214.2. In one exemplary implementation, the stereo sensor 214.2 may include a pair of passive stereo sensors, among other exemplary implementations.
[0063] The depth images generated by the depth pipeline 215 may be processed by a dense SLAM pipeline 217 using a SLAM algorithm (e.g., Kinect Fusion) to generate a voxelized model of the measured geometry voxels 227. The measured geometry voxels 227 (e.g., actual voxel geometry) may be combined with the synthetic voxel geometry 202 to provide a ray tracing accelerator 206 that may generate a 2D rendering of the scene for output to a display device (e.g., a head-mounted display 211 in a VR or AR application) via a display processor 210. In such an implementation, a complete scene model may be constructed from the measured geometry voxels 227 and the actual voxels of the synthetic geometry 202. As a result, there is no need to warp the 2D rendered geometry (e.g., as in FIG. 1). Such an implementation, combined with a head pose tracking sensor and corresponding logic, may accurately align the actual and measured geometries. For example, the exemplary head pose pipeline 221 can process head pose measurements 232 from an IMU 212 attached to a head mounted display 211, and the output 231 of the head pose measurement pipeline can be taken into account during rendering via the display processor 210.
[0064] In some examples, the unified rendering pipeline may also use measured geometry voxels 227 (e.g., actual voxel model) and synthetic geometry 202 (e.g., synthetic voxel model) to render an audio reverberation model and to model the physics of a real-world, virtual, or mixed reality scene. As an example, the physics pipeline 218 may receive the measured geometry voxels 227 and the synthetic voxel geometry 202 and use the ray casting accelerator 206 to calculate output audio samples for the left and right earphones in the head mounted display (HMD) 211 to calculate output samples 230 using the acoustic reflection coefficients embedded in the voxel data structure. Similarly, the unified voxel model of 202 and 227 may also be used to determine updates to the physics of synthetic objects in the synthetic AR / MR scene. The physics pipeline 218 receives the synthetic scene geometry as input and then uses the ray casting accelerator 206 to calculate collisions before calculating updates 228 of the synthetic geometry 202 for rendering and as a basis for future iterations of the physics model.
[0065] In some implementations, a system such as that shown in FIG. 2 may further comprise one or more hardware accelerators for implementing and / or utilizing a convolutional neural network (CNN) that can process either RGB video / image input from the output of the ISP pipeline 215, or volumetric scene data from the output of the SLAM pipeline 217, among other examples. The neural network classifier can operate exclusively with a hardware (HW) convolutional neural network (CNN) accelerator 207 or in combination with a processor and a HW CNN accelerator 207 to generate the output classification 237. The availability of a HW CNN accelerator 207 to make inferences about the volumetric representation may enable a group of voxels in the measured geometry voxels 227 to be coded as belonging to a particular object class, among other example uses.
[0066] By marking the voxels (e.g., by supporting hardware acceleration using CNN), it may be possible to recognize the objects to which they belong by the system corresponding to known objects. The source voxels may be removed from the measured geometry voxels 227 and replaced by bounding boxes corresponding to the objects, and / or information about the object's origin, object pose, object descriptors, among other exemplary information. This may result in a semantically much more meaningful description of the scene. This description may be used, for example, as input by a robot, drone or other computing system to interact with objects in the scene, or by an audio system to look up the sound absorption coefficients of objects in the scene and incorporate them into an acoustic model of the scene, among other exemplary uses.
[0067] One or more processor devices and hardware accelerators may be provided to implement the pipeline of the exemplary system shown and described in Figure 2. In some implementations, among others, all of the hardware and software elements of the combined rendering pipeline may share access to a DRAM controller 209, thereby allowing data to be stored in a shared DDR memory device 208.
[0068] FIG. 3 is presented to illustrate the difference between dense and sparse volumetric representations according to some embodiments. As shown in the example of FIG. 3, a real-world or synthetic object 300 (e.g., a rabbit statue) can be represented in terms of voxels in either a dense manner as shown at 302 or a sparse manner as shown at 304. The advantage of a dense representation such as 302 is the uniform speed of access to all voxels in the volume, but the downside is the amount of storage that may be required. For example, for a dense representation such as a 512^3 element volume (e.g., corresponding to 5 m at 1 cm resolution for a volume scanned with a Kinect sensor), 512 megabytes are required to store a relatively small volume using a truncated signed distance function (TSDF) with 4 bytes per voxel. On the other hand, an octree representation 304 embodying a sparse representation may reduce the amount of data required to store the same volume by storing only those voxels for which actual geometry exists in the real-world scene.
[0069] Referring to FIG. 4, an exemplary synthetic view of a scene according to some embodiments is shown. In particular, FIG. 4 shows how a synthetic view of a scene 404 can be maintained, displayed, or subjected to further processing using parallel data structures to represent synthetic voxels 401 and real-world measured voxels 403 that are within equivalent bounding boxes 400 and 402, respectively, for synthetic and real-world voxel data. FIG. 5 shows the level of detail of a uniform 4^3 element tree structure according to some embodiments. In some implementations, as little as one bit can be utilized to describe each voxel in a volume using an octree representation such as that depicted in the example of FIG. 5. However, a drawback of octree-based techniques can be the number of indirect memory accesses utilized to access a particular voxel in the octree. With sparse voxel octrees, among other exemplary advantages, the same geometry can be advantageously represented implicitly at multiple levels of detail, enabling operations such as ray casting, game physics, CNNs and other techniques, and culling empty parts of a scene from further computation, resulting in an overall reduction not only in terms of required storage, but also in terms of power consumption and computational load.
[0070] In one implementation, an improved voxel descriptor (also referred to herein as a volumetric data structure) may be provided to organize the volumetric information as 4^3 (or 64-bit) unsigned integers as shown in 501 with a memory requirement of 1 bit per voxel. In this example, 1 bit per voxel is insufficient to store the truncated signed distance function value (compared to the TSDF in SLAMbench / KFusion, which utilizes 64 bits). In this example, an additional (e.g., 64-bit) field 500 may be included in the voxel descriptor. This example may be further enhanced to make the combination of the voxel TSDF and voxel position 501 in the 64-bit field 500 comparable to a much higher resolution TSDF as used in SLAMbench / KFusion or other examples, by implicitly providing an additional 2 bits of fractional resolution in x, y, and z to the voxel descriptor 501 while making the TSDF in the 64-bit field 500 16 bits. For example, further data in the 64-bit field 500 (voxel descriptor) may be used to store subsampled RGB color information (e.g., from the scene via a passive RGB sensor), each 1 byte, an 8-bit transparency value alpha, and two 1-byte reserved fields R1 and R2. These reserved fields may be application specific and may be used, for example, to store acoustic reflectivity for audio applications, stiffness for physics applications, object material type, among other examples.
[0071] As shown in FIG. 5, the voxel descriptor 501 may be logically grouped into four 2D planes, each containing 16 voxels 502. Each of these 2D planes (or voxel planes) may describe a level of an octree-style structure based on successive decompositions in ascending powers of four depicted in FIG. 5. In this exemplary implementation, a 64-bit voxel descriptor is chosen because it matches well with the 64-bit bus infrastructure used in the corresponding system implementation (although other voxel descriptor sizes and formats may be provided in other system implementations and sized according to the system's bus or other infrastructure). In some implementations, the voxel descriptor may be sized to reduce the number of memory accesses used to obtain a voxel. For example, among other exemplary considerations and implementations, the use of a 64-bit voxel descriptor may reduce the number of memory accesses required to access a voxel at any level in the octree by a factor of two, compared to a traditional octree that operates with 2^3 elements.
[0072] In one example, an octree may be written starting with a 4^3 root volume 503 and each non-zero entry indicating in the exemplary 256^3 volume a code for the presence of geometry in underlying layers 504, 505 and 506. In this particular example, four memory accesses may be used to access the lowest level in the octree. If such overhead is too high, an alternative approach may be adopted to encode the top level of the octree as a larger volume such as 64^3 as shown in 507. In this case, each non-zero entry in 507 may indicate the presence of an underlying 4^3 octree in the underlying 256^3 volume 508. As a result of this alternative organization, only two memory accesses are required to access any voxel in the 256^3 volume 508, compared to the alternative formulations shown in 503, 504 and 505. This latter approach is advantageous when the device hosting the octree structure has a larger amount of embedded memory, thereby permitting only the smaller, less frequently accessed portion of the voxel octree 508 in external memory. This approach may be more costly in terms of storage, for example, when an entirely larger (e.g., 64^3) volume is stored in on-chip memory, but the tradeoff may allow faster memory access (e.g., by a factor of 2) and significantly reduced power consumption, among other example advantages.
[0073] Referring to FIG. 6, a block diagram illustrating an example application that may utilize the data structures and voxel data of the present application, according to some embodiments, is shown. In one example, further information may be provided through an example voxel descriptor 500, such as that shown in FIG. 5. Although the voxel descriptor may increase the overall memory utilized to 2 bits per voxel, the voxel descriptor may enable a wide range of applications that may utilize the voxel data as depicted in FIG. 6. For example, among other implementations, a shared volumetric representation 602, such as that generated using a dense SLAM system 601 (e.g., SLAMbench), may be used in rendering a scene using graphics ray casting or ray tracing 603 used in audio ray casting 604. In yet another example, the volumetric representation 602 may also be used for convolutional neural network (CNN) inference 605, backed by a cloud infrastructure 607. In some cases, the cloud infrastructure 607 may include detailed volumetric descriptors of objects, such as trees, furniture, or other objects (e.g., 606), that may be accessed via inference. Based on inference or otherwise identification of the object, the corresponding detailed descriptors may be returned to the device, enabling it to replace voxels of the volumetric representation 602 with bounding box representations having pose information and descriptors that include properties of the object, among other example features.
[0074] In yet other embodiments, the voxel models described above may additionally or alternatively be utilized in some systems to build 2D maps of the exemplary environment 608 using 3D-to-2D projections from the volumetric representation 602. These 2D maps may again be shared via communication mechanisms via cloud infrastructure and / or other network-based resources 607 and aggregated (e.g., using the same cloud infrastructure) to build high-quality maps using crowdsourcing techniques. These maps may be shared by the cloud infrastructure 607 to connected machines and devices. In yet another example, the 2D maps may be refined for ultra-low bandwidth applications using piecewise simplification 609 following projection (e.g., assuming the width and height of the vehicle or robot are fixed). The simplified path then has only a single X,Y coordinate pair per piecewise linear segment of the path, reducing the amount of bandwidth required to communicate the path of the vehicle 609 to the cloud infrastructure 607 and aggregated to that same cloud infrastructure 607 to build high-quality maps using crowdsourcing techniques. These maps can be shared by the cloud infrastructure 607 to connected machines and devices.
[0075] To enable these different applications, common functionality may be provided in some implementations, for example, through a shared software library, among other examples, and in some embodiments may be accelerated using hardware accelerators or processor instruction set architecture (ISA) extensions. For example, such functionality may include inserting a voxel into a descriptor, deleting a voxel, or looking up a voxel 610. In some implementations, collision detection functionality 620 may be supported, as well as deleting points / voxels from a volume 630, among other examples. As introduced above, the system may include functionality for rapidly generating 2D projections 640 in the X, Y, and Z directions from a corresponding volumetric representation 602 (a 3D volume) (e.g., this may serve as a basis for path or collision determination). In some cases, it may also be advantageous to be able to generate triangle lists from the volumetric representation 602 using histogram pyramids 650. Additionally, the system may include functionality for rapidly determining free paths 660 within the 2D and 3D representations of the volumetric space 602. Such functionality may be useful in a variety of applications. Additional functionality may be provided, such as detailing the number of voxels in a volume, determining the surface of an object using a population counter to count the number of 1-bits in masked regions of the volumetric representation 602, among other examples.
[0076] Referring to the simplified block diagram of FIG. 7, an exemplary network including a system with the capability to recognize 3D numbers is shown, according to at least some embodiments. For example, one of the applications shown in FIG. 6 is a volumetric CNN application 605, which is described in more detail in FIG. 7. In FIG. 7, an exemplary network is used to recognize 3D numbers 700 generated from a dataset such as the National Institute of Standards and Technology (MNIST) mixed dataset. The numbers in such a dataset can be used to train a CNN-based convolutional network classifier 710 by applying appropriate rotations and translations in X, Y, and Z to the numbers before training. The trained network 710, when used for inference in an embedded device, can be used to classify 3D numbers in a scene with high accuracy even when the numbers are subject to rotations and translations 720 in X, Y, and Z, among other examples. In some implementations, the operation of the CNN classifier can be accelerated by the HW CNN accelerator 207 shown in FIG. 2. The first layer of the neural network performs multiplications using voxels in the volumetric representation 602. Therefore, since multiplication by zero is always zero, and multiplication by 1 (a voxel) by a data value A is equal to A, these arithmetic operations can be skipped.
[0077] FIG. 8 shows multiple classifications performed on the same data structure with implicit levels of detail. A further improvement of CNN classification using volumetric representation 602 may be that since the octree representation implicitly includes multiple levels of detail in the octree structure as shown in FIG. 5, multiple classifications can be performed on the same data structure using the implicit levels of detail 800, 810, and 820 in parallel and using a single classifier 830 or multiple classifiers in parallel as shown in FIG. 8. In conventional systems, an equivalent parallel classification may be slow due to the necessary image resizing between classification passes. Such resizing may be omitted in implementations that apply the voxel structure described herein, since the same octree may contain the same information at multiple levels of detail. In fact, a single training dataset based on a volumetric model may cover all of these levels of detail, rather than a resized training dataset as is required in conventional CNN networks.
[0078] With reference to the example of FIG. 9, an exemplary computational elimination by a 2D CNN according to some embodiments is illustrated. Computational elimination can be used for 3D volumetric CNNs as well as 2D CNNs as shown in FIG. 9. For example, in FIG. 9, in the first layer, a bitmap mask 900 can be used to describe the expected "shape" of the input 910 and can be applied to the incoming video stream 920. In an example, computational elimination can be used for 3D volumetric CNNs as well as 2D volumetric CNNs. For example, in the 2D CNN of the example of FIG. 9, a bitmap mask 900 can be applied to the first layer of the CNN to describe the expected "shape" of the input 910 and can be applied to the input data of the CNN, such as the incoming video stream 820. As an example, the effect of applying a bitmap mask to an image of a pedestrian for training or inference in a CNN network is illustrated in FIG. 9. In FIG. 9, 901 represents an original image of the pedestrian 901 and 903 represents the corresponding version with the bitmap mask applied. Similarly, an image without pedestrians is shown at 902, and the corresponding bitmap masked version is shown at 904. The same method can be applied to any kind of 2D or 3D object to reduce the number of operations required for CNN training or inference through knowledge of the expected 2D or 3D geometry predicted by the detector. An example of a 3D volumetric bitmap is shown at 911. The use of 2D bitmaps for inference in real scenes is shown at 920.
[0079] In the exemplary implementation of Figure 9, a conceptual bitmap is shown (at 900), but the actual bitmap is generated by averaging a series of training images for a particular class of object 910. Although the example shown is two-dimensional, similar bitmap masks can also be generated for 3D objects with the proposed volumetric data format of one bit per voxel. In fact, among other exemplary implementations, this method could potentially be extended to specify the expected color range or other characteristics of 2D or 3D objects with additional bits per voxel / pixel.
[0080] FIG. 10 is a table showing the results of an exemplary experiment involving the analysis of 10,000 CIFAR-10 test images according to some embodiments. In some implementations, operation elimination can be used to eliminate intermediate calculations in 1D, 2D and 3D CNNs due to the rectified linear unit (ReLU) operations that are frequent in CNN networks, such as LeNet 1000 shown in FIG. 10. As shown in FIG. 10, in an experiment using 10,000 CIFAR-10 test images, the percentage of data-dependent zeros generated by the ReLU unit can reach up to 85%. This means that a system can be provided that recognizes zeros in the case of zeros and, in response, does not fetch corresponding data or perform corresponding multiplication operations. In this example, 85% represents the percentage of ReLU dynamic zeros generated from the National Institute of Standards and Technology (MNIST) modified test dataset. The corresponding operation eliminations corresponding to these zeros can help reduce power consumption requirements and memory bandwidth requirements, among other exemplary benefits.
[0081] Trivial operations may be culled based on a bitmap. For example, the use of such a bitmap may be in accordance with the principles and embodiments described and illustrated in U.S. Patent No. 8,713,080, entitled "Circuit for compressing data and a processor employing the same," which is incorporated herein by reference in its entirety. Some implementations may provide hardware that can use such bitmaps, such as the systems, circuits, and other implementations described and illustrated in U.S. Patent No. 9,104,633, entitled "Hardware for performing arithmetic operations," which is also incorporated herein by reference in its entirety.
[0082] FIG. 11 illustrates hardware that may be incorporated into a system to provide functionality for culling trivial operations based on a bitmap, according to some embodiments. In this example, a multi-layer neural network including repeated convolution layers is provided. The hardware may include one or more processors, one or more microprocessors, one or more circuits, one or more computers, etc. In this particular example, the neural network includes an initial convolution processing layer 1100, followed by a pooling process 1110, and finally an activation function process such as a rectified linear unit (ReLU) function 1120. The output of the ReLU unit 1120, which provides a ReLU output vector 1131, may be connected (e.g., possibly via a delay 1132) to a next convolution processing layer 1180 that receives the ReLU output vector 1131. In one exemplary implementation, the ReLU bitmap 1130 may be generated in parallel with the connection of the ReLU unit 1120 to the next convolution unit 1180. The ReLU bitmap 1130 indicates which elements of the ReLU output vector 1131 are zero and which elements are non-zero.
[0083] In one implementation, a bitmap (e.g., 1130) may be generated or otherwise provided to inform enabled hardware of opportunities to eliminate operations involved in computing the neural network. For example, bits in the ReLU bitmap 1130 may be interpreted by the bitmap scheduler 1160, which instructs multipliers in the next convolution unit 1180 to skip entries that are zero in the ReLU output vector 1131 for which there is a corresponding binary zero in the ReLU bitmap 1130, assuming that multiplication by zero always produces zero as an output. In parallel, memory fetches from the address generator 1140 for data / weights that correspond to zeros in the ReLU bitmap 1130 may also be skipped, since there is little value in fetching weights that are to be skipped by the next convolution unit 1180. If the weights are fetched from an attached DDR DRAM storage device 1170 via the DDR controller 1150, the latency may be very high and only some on-chip bandwidth and associated power consumption may be saved. On the other hand, if the weights are fetched from an on-chip RAM storage 1180, it may be possible to bypass / skip the weight fetch operation altogether, especially if a delay corresponding to the RAM / DDR fetch delay 1132 is added at the input to the next convolution unit 1180.
[0084] Referring to FIG. 12, a simplified block diagram is presented showing an example hardware improvement with a circuit and other logic for culling trivial operations (or performing operation elimination) according to some embodiments. As shown in the example of FIG. 12, further hardware logic may be provided to predict in advance the sign of the ReLU unit 1220 input from the immediately preceding max pooling unit 1210 or convolution unit 1200. By adding sign prediction and ReLU bitmap generation to the max pooling unit 1210, it may be possible to predict the ReLU bitmap information earlier in terms of timing, and cover the delay that may occur through the address generator 1240 through the external DDR controller 1250 and DDR storage 1270 or the internal RAM storage 1271. If the delay is small enough, the ReLU bitmap can be interpreted in the address generator 1240, and the memory fetch associated with the ReLU bitmap zero can be completely skipped, since it can be determined that the result of the fetch from memory will never be used. This modification to the scheme of FIG. 11 may, among other example features and functions, save further power and may also allow the elimination of a delay stage (e.g., 1132, 1232) at the input to the next convolution unit 1280 if the delay through the DDR access path (e.g., from 1240 to 1250, from 1250 to 1270) or the RAM access path (e.g., from 1240 to 1271) is small enough to not warrant the delay stage 1232.
[0085] FIG. 13 is another simplified block diagram showing an example hardware according to some embodiments. For example, a CNN ReLU layer can generate a large number of output zeros corresponding to negative inputs. In practice, negative ReLU inputs can be predictively determined by looking at the sign input to the previous layer (e.g., the pooling layer in the example of FIG. 13). Because floating-point and integer operations can be explicitly signed in terms of the most significant bit (MSB), a simple bitwise exclusive OR (XOR) operation over the vectors of inputs multiplied in a convolutional layer can predict which multiplications will generate output zeros as shown in FIG. 13. The resulting sign-predicted ReLU bitmap vector can be used as a basis to determine and eliminate a subset of multiplications and associated coefficient reads from memory, such as in the manner described in other examples above.
[0086] Providing for the generation of a ReLU bitmap back to a previous pooling or convolution stage (i.e., a stage before the corresponding ReLU stage) may result in additional power. For example, a sign prediction logic may be provided to disable a multiplier if it produces a negative output that is ultimately set to zero by the ReLU activation logic. For example, this is shown when two sign bits 1310 and 1315 of inputs 1301 and 1302 of multiplier 1314 are logically combined by an XOR gate to form PreReLU bitmap bit 1303. This same signal may be used to disable the operation of multiplier 1314, among other examples, which would otherwise unnecessarily consume energy generating a negative output that would be set to zero by the ReLU logic before being input for multiplication in the next convolution stage 1390.
[0087] Note that the representations of 1300, 1301, 1302 and 1303 (notation A) show a high-level view of what is shown in the representation given in Fig. 13. In this example, the input to block 1302 may include two floating-point operands. Input 1301 may include an explicit sign bit 1310, an exponent 1311 including multiple bits, and a mantissa also including multiple bits 1312. Similarly, input 1302 may also include a sign 1315, a mantissa 1317, and an exponent 1316. In some implementations, the mantissa and the exponent may have different precisions because the sign of result 1303 depends only on signs 1301 and 1302 or signs 1310 and 1315, respectively. In fact, neither 1301 nor 1302 need be floating-point numbers, but could be in any integer or fixed-point format, so long as they are signed numbers and the most significant bit (MSB) is in fact, explicitly or implicitly, the sign bit (e.g., if the numbers are one's or two's complement, etc.).
[0088] 13, two sign inputs 1310 and 1315 may be combined using an XOR (sometimes alternatively denoted herein as ExOR or ExOR) gate to generate a bitmap bit 1303, which may then be processed using hardware to identify downstream multiplications that may be omitted in the next convolution block (e.g., 1390). The same XOR output 1303 may also be used to disable multiplier 1314 if the two input numbers 1313 (e.g., corresponding to 1301) and 1318 (e.g., corresponding to 1302) have opposite signs and generating a negative output 1304 that would be set to zero by ReLU block 1319 would result in a zero value in the ReLU output vector 13191 input to the next convolution stage 1390. Thus, in some implementations, the PreReLU bitmap 1320 may be transmitted in parallel to a bitmap scheduler 1360, which may schedule the multiplications to be performed (and / or omitted) on the convolution unit 1390. For example, for every zero in the bitmap 1320, the corresponding convolution operation may be skipped in the convolution unit 1390. In parallel, the bitmap 1320 may be consumed by an exemplary address generator 1330, which controls the fetching of weights used in the convolution unit 1390. A list of addresses corresponding to ones in the bitmap 1320 may be compiled in the address generator 1330, which controls the routing to the DDR storage 1370 via the DDR controller 1350 or otherwise to the chip RAM 1380. In either case, among other examples, weights corresponding to those in the PreReLU bitmap 1320 may be fetched and presented to the convolution block 1390 (e.g., after some latency in terms of clock cycles to the weight input 1371), but the fetching of weights corresponding to zero may be omitted.
[0089] As mentioned above, in some implementations, a delay (e.g., 1361) may be inserted between the bitmap scheduler 1360 and the convolution unit 1390 to balance the delay through the address generator 1330, the DDR controller 1350, and the DDR 1350, or the path through the address generator 1330 and the internal RAM 1380. The delay may allow the convolution driven by the bitmap scheduler to be correctly aligned with the corresponding weights for the convolution calculation in the convolution unit 1390. In fact, from a timing perspective, it may be possible to gain additional time by generating the ReLU bitmap earlier than the output of the ReLU block 1319. This additional time may be used to intercept reads to memory (e.g., RAM 1380 or DDR 1370) before they are generated by the address generator 1330, thereby saving some of the reads (e.g., corresponding to zeros). Because memory reads can be much more expensive than logical operations on a chip, eliminating such memory fetches can result in very significant energy savings, among many exemplary benefits.
[0090] In some implementations, if the storage is still insufficient in terms of clock cycles to cover the number of DRAM accesses, a block-oriented technique may be used to pre-read groups of code bits (e.g., 1301) from the DDR. These groups of code bits may be used with blocks of codes from the input image or intermediate convolutional layers 1302 to generate blocks of PreReLU bitmaps using a set of XOR gates 1300 (multiple XOR gates 1300) (e.g., to calculate the difference between the code bits in 2D or 3D convolutions between 2D or 3D arrays / matrices, among other examples). In such implementations, an additional bit of storage capacity in DDR or on-chip RAM may be provided to store the code of each weight, which may make it possible to cover many latency cycles to avoid always reading weights from the ReLU stage from the DDR or RAM, which would be multiplied by zero. Among other example considerations and implementations, an additional bit of storage capacity per weight in DDR or on-chip RAM may be avoided in some implementations. This is because the sign is stored so that it is addressable independently of the exponent and mantissa.
[0091] In one example, the system may be further enhanced to utilize DDR accesses that may have natural burst accesses for maximum data transfer rates. Energy savings from skipping individual DDR weight accesses may not be feasible in this context since they may be shorter than a burst. Thus, in some cases, a burst may be skipped if all bitmap bits corresponding to a particular burst transaction are zero. However, this may not occur frequently, and thus the resulting power and bandwidth savings may be limited. In yet another implementation, a register programmable threshold may be set for the number of bitmap bits in a burst such that a burst is skipped entirely if more than N bits in the bitmap burst are zero. This may have the effect of slightly reducing the overall CNN classification accuracy, but may be acceptable for energy savings.
[0092] Referring to FIG. 14, a simplified block diagram 1400 is shown illustrating an example environment including a machine 1405 for analyzing a 3D space. In some implementations, the machine may comprise machine executable logic implemented in hardware and / or circuitry for utilizing volumetric data describing the 3D space in one or various applications or operations, such as, for example, SLAM processing, ray casting, odometry, collision detection, 2D or 3D route planning, among other examples, as described herein. The volumetric data may be embodied as a sparse tree representation as described herein. In some cases, a hash table may additionally or alternatively be used to perform processing of the volumetric data more quickly by trading off increased memory occupancy (e.g., because a hash table uses less memory than a dense array).
[0093] The machine 1405 may include hardware and logic described herein configured to handle and process volumetric data represented in a sparse tree volumetric data structure. In the particular example shown in FIG. 14, the machine 1405 may be implemented as an autonomous or semi-autonomous machine capable of processing volumetric data describing a 3D scene and utilizing this information for autonomous movement within the scene (e.g., changing its position within the scene and / or changing the orientation (e.g., aiming) of one or more of the machine's elements (e.g., sensors, cameras, pointers, actuators, tools, etc.) based on the geography present in the scene). By doing so, the machine may detect objects (e.g., 1410a-c) and autonomously navigate or interact with the scene based on the detected objects. In some implementations, the machine 1405 may be embodied as an autonomous vehicle (for carrying passengers or cargo), an aerial, terrestrial or marine drone, a robot, among other examples.
[0094] In one exemplary implementation, the machine 1405 may include a computing system 1406. The computing system 1406 is implemented with a data processor 1415, such as one or more central processing units (CPUs), graphical processing units (GPUs), tensor processing units or other matrix operation processors, hardware accelerators (e.g., volumetric processing accelerators, machine learning accelerators), among other exemplary general-purpose and special-purpose processing hardware, and further implemented with one or more memory elements (e.g., 1420). Additional logic blocks may be provided, implemented in hardware circuits, firmware, or software, such as volumetric processing logic 1425, computer vision engine 1430, and actuators 1435. In some implementations, the machine 1405 may further include one or more sensors (e.g., 1440) for measuring 3D space (e.g., LiDAR sensors, time-of-flight sensors, realsense sensors, etc.). Such sensors 1440 may be used not only to generate volumetric data describing the 3D environment to develop a map of the volume, but also to compare the locally observed geometry detected using the sensors 1440 with reference data describing an expected or pre-observed version of the occupied geometry of the volume. The sensor data may be processed by the computer vision engine 1430 in connection with ray casting, odometry, pose estimation or other functions (which may be implemented, for example, as sub-modules of the computer vision engine 1430). In some instances, the volumetric processing logic 1425 may comprise logic for performing one or more different volumetric processing operations or tasks, such as tasks related to the functions of the computer vision engine 1430. In one example, a volumetric acceleration unit, such as a volumetric acceleration unit (VXU) described herein, may be utilized to implement at least a portion of the volumetric processing logic 1425 and / or the computer vision engine 1430.In some implementations, the logic of the volumetric processing logic 1425 and the computer vision engine 1430 may be combined in whole or in part. The volumetric processing logic may, among other examples, receive as input the volumetric data embodied in the VOLA data 1450 and parse the data 1450 to determine opportunities to omit analysis of certain sections of the relevant volume identified in the data 1450 as not occupied by structures or geometry. In some cases, the results generated by the volumetric processing logic 1425 and / or the computer vision engine 1430 may trigger one or more actuators 1435 of the machine 1405 to activate one or more motors, engines or other drives and / or one or more steering mechanisms and to move the machine itself or a particular tool of the machine within the volume according to its design. For example, the volumetric processing logic may provide input to one or more actuators to cause a drone or autonomous vehicle to self-navigate a volume that the machine understands through processing of the volumetric data.
[0095] Simultaneous localization and mapping (SLAM) applications, among other uses, may be utilized in the robotics field to facilitate autonomous movement of robots and drones within an environment, among other examples. In some cases, SLAM may utilize maps that are generated offline. However, autonomous robots often need to build and interact with maps in real time, and do so with limited available resources. Most methods for computing dense SLAM are designed for high-performance desktop systems and require much more FLOPS, memory, and power than is generally desirable or possible for integration into low-cost embedded devices utilized in modern robotics and drones, especially considering the computationally intensive ray-casting stage in traditional SLAM pipelines. To address this challenge, optimized low-power, low-memory implementations of ray-casting algorithms may be implemented in hardware and / or software that are integrated into the SLAM pipeline. For example, the volumetric acceleration (VOLA) data structures introduced herein may be used for 3D volume representation, and further techniques and features may leverage the VOLA structures and architectures employed to implement improved SLAM applications to achieve particular performance / memory efficiencies.
[0096] The worlds of computer vision and graphics are distinct, but converge in the field of robotics. Representing volumetric data in 3D space in a way that conserves the limited resources available in embedded systems is a major challenge in both domains. For example, input systems for computer vision, such as Light Detection and Ranging (LiDAR), can generate point cloud depth maps of the environment that can quickly become too large for embedded system memory to handle. A common application where this is a challenge is SLAM applications, where the goal is to create a map of the environment surrounding a robot and simultaneously locate the robot within the map. In autonomous applications, if an autonomous agent cannot efficiently interact with a highly detailed map in real time, there is no use in building such a map. One of the most important interactions can be collision detection. Collision detection is particularly important in drone applications (e.g., for readily apparent safety reasons). A common method used for ray / geometry intersection is ray casting. Ray casting typically requires a large number of operations per second. Ray casting represents one of the most expensive components of a typical SLAM SW pipeline. Therefore, there is a need to improve its performance and efficiency so that real-time embedded SLAM is possible despite the limitations of embedded platforms.
[0097] In some implementations, an improved lightweight implementation of a ray casting algorithm for embedded platforms based on the use of a VOLA data structure may be utilized, which is specifically designed to reduce memory requirements for 3D models. For example, an embedded implementation of a ray casting algorithm may be provided, specifically targeted for SLAM applications. Implementing such an algorithm may improve the use of computational resources such as caches and SIMD instructions to exploit image and object spatial coherence, among other exemplary advantages. To generate volumetric compression of 3D scenes, dense or sparse hierarchical grid data structures (e.g., VOLA-based structures) may be utilized. Such a solution may also provide improved power efficiency while maintaining sufficient quality and accuracy.
[0098] As introduced above, VOLA type data structures may be implemented as compact data structures organized as hierarchical bit arrays that allow efficient compression of volumetric data for use in embedded devices where memory constraints would make it impractical or even impossible to use the entire point cloud on such devices. The spatial partitioning VOLA structure may combine a hierarchical structure of octrees with a volumetric approach using modular arithmetic and bit counting applied to bit arrays. In contrast to octrees, kd-trees and other 3D representations, VOLA may use a hierarchical grid structure rather than a pointer-based tree structure. Since compression is the main concern, VOLA achieves a maximum compression of 1 bit per voxel by only encoding the occupancy data, making it extremely compact. As a result, VOLA may not be well suited for accurate volumetric rendering by ray casting, but instead is very efficient in applications such as SLAM, where a simple map of the surroundings must be constructed and ray cast, and where photorealism of the representation is not a requirement or priority. In some implementations, each element in a VOLA is a 64-bit integer that divides the represented volume into 4x4x4 subcells, mapped from a one-dimensional bit array to three dimensions using modular arithmetic. If some location in a cell is occupied, the corresponding subcell bit is set to one, otherwise it is set to zero. At the next level, only the occupied subcells are represented, encoding exactly the space that is occupied. Thus, passing from a higher level to a lower level in a VOLA structure suggests, among other examples, a four-fold increase in resolution.
[0099] In some applications, the VOLA format has proven particularly efficient for encoding aerial scans of major cities. For example, in LiDAR datasets, a maximum size reduction of 70x can be realized. Other common applications that can benefit from the VOLA format are CNN inference, path planning, and obstacle avoidance. Finally, the memory footprint can be further reduced by utilizing hash tables, among other example applications.
[0100] Exemplary ray casting algorithms may be implemented as non-recursive ray tracing algorithms that emit only primary rays, and are particularly popular as direct volume rendering techniques. Some of the main advantages of volume rendering techniques are their excellent image quality and the ability to render images without explicitly defining the surface geometry. Conversely, the main drawback is their high computational cost. There are several approaches regarding the data structures used to represent 3D volumes and the algorithms used for voxel traversal. Moreover, numerous further techniques have been developed over the years to handle certain side problems and improve the performance of the algorithms, such as, for example, spatial reaping, coherent packet traversal, frustum culling, etc.
[0101] The type of optimization used in ray casting is often linked to the chosen representation of the volume. The most basic representations of volumes are uniform and hierarchical grids. Hierarchical grids can be organized as loosely nested grids, recursive or multi-resolution grids, and macrocells or multigrids. As another example, binary space partitioning (BSP) can be used to recursively subdivide the space using arbitrary partitioning planes. Among the many BSPs, kd-trees are a special case that use only axis-parallel partitioning planes. kd-trees allow volumes to be partitioned adaptively, but are more difficult to update than octrees. kd-trees are especially used more for large volumes. Packet kd-tree traversal outperforms grids for stationary scenes, but the cost of rebuilding the tree makes them less suitable for truly dynamic scenes. In contrast, grids can be created and modified faster, making them attractive for animated scenes, even if they incur a high traversal cost. Among other examples, another efficient representation for rendering voxelized geometry is the sparse voxel octree, the bounding volume hierarchy (BVH).
[0102] In some implementations, spatial leaping may be utilized to efficiently skip empty cells by leveraging the VOLA structure. This strategy used for free space skipping may be coupled with the underlying volumetric representation. In one example, ray acceleration with distance coding (RACD) may be utilized for spatial leaping to store for each voxel the leaping distance to the next possible non-transparent voxel. This may be performed as a pre-processing step. In some implementations, a hardware architecture may be implemented for spatial leaping by computing an occupancy map of the rendered volume only for the first level of a multi-level grid structure similar to VOLA. A GPU octree-based approach for skipping empty nodes may also be implemented. In some implementations, free space may be skipped in a regular 3D grid using a proximity cloud, where empty voxels are filled with scene-dependent information indicating their proximity to surrounding objects. For example, a proximity cloud-based algorithm may be implemented in the system. The proximity cloud-based algorithm is dedicated to GPU ray casting for rendering of large volumes, combined with a free space skipping strategy with the best image order and object order.
[0103] The implementation of the volume traversal may depend, at least in part, on the volume representation chosen. Most of these methods have evolved from algorithms based on flat grids that determine the nearest neighbor voxel to visit at each iteration depending on the distance of the next axis-parallel plane. Other implementations may traverse an octree using only operations involving integer arithmetic throughout the traversal. In another example, an efficient octree representation of the data may be utilized in connection with an efficient sparse voxel octree, among other examples.
[0104] In a traditional raycaster, ray traversal can be terminated early by accumulating color during traversal of occupied voxels until an opacity threshold is reached (e.g. opacity accumulation). In this way, the actual volumetric data can be rendered taking into account transparent materials. In a before-and-after implementation with VOLA, these kinds of features can be omitted since VOLA can natively omit encoding color information, since the information needed is information about occupancy in 3D space (though VOLA can be extended with further bit arrays for voxel colors, at the expense of increased memory footprint). In such an implementation, the algorithm flow can stop as soon as a voxel is encountered without detailing any color information, opacity, texture, etc.
[0105] In one implementation, the ray traversal algorithm used during ray casting can be implemented to specifically exploit the structure of the VOLA-based representation. With reference to FIG. 15, two different 3D volume representations can be used and compared for a particular exemplary ray caster: a dense hierarchical grid (1505) and a VOLA-style (1510) or sparse hierarchical grid. Both data structures in this example are 4 315A, 15B, and 15C have the shape of a tree, the difference being that they are organized as multi-level bit arrays. Data is encoded in one bit per voxel format and stored according to geographical location in the grid. Given the resolution at the final level, the dimensions of the dense grid are predictable since both free and occupied space are represented. However, in the VOLA format, the actual occupancy may depend on the geometry, since empty sub-bricks are not stored. This results in a very small memory occupancy, but at the same time makes the placement of individual voxels more complex and computationally expensive. For example, to place a sub-brick bit at a particular level, it may be necessary to know the number of bits preceding the corresponding bit set at a higher level. Such an operation may slow down the computation significantly. This is handled carefully during the ray casting algorithm to avoid incurring unacceptable overhead. Placing voxels according to level, as represented in 1505 and 1510, is theoretically simpler for a dense hierarchical grid (1505) than for a sparse hierarchical grid (1510), as shown in FIG. 15.
[0106] In one example, a computing system may implement a ray traversal algorithm based on a hierarchical sparse grid structure (e.g., VOLA) in conjunction with performing a ray casting operation (e.g., in a SLAM application). In some implementations, utilizing a VOLA structure to represent 3D space in a ray casting application may enable a more efficient approximated hierarchical ray traversal algorithm. In some implementations, a ray casting traversal algorithm utilized in a ray casting application may implement a hierarchical version of a conventional traversal algorithm, such as Fast Voxel Traversal Algorithm for Ray Tracing by John Amanatides and Andrew Wo. For example, in one exemplary implementation of a traversal algorithm, a ray intersection test operation is performed with a bounding volume (e.g., an axis-aligned bounding box (AABB) test) if the bounding volume is aligned with the axes of a reference system. If some externally located portions of the volume are empty, it is possible to reduce it to an intersecting sub-AABB by examining the L0 VOLA element to easily prune the ray casted volume (e.g., as represented at 1515). Such applications may include aerial scanning, where the volume in the z dimension is mostly empty. The virtual image is scanned using a perspective projection. Since each ray is independent, it is possible to exploit multithreading to process different rays simultaneously. In some implementations, a pool of threads is initialized and then scheduled according to available runtime resources. In practice, in some implementations, due to cache data locality and context switching overhead considerations, it may be more convenient to assign rectangular subtiles of the virtual image to threads, rather than single pixels or entire rows.
[0107] In one example, the algorithm may be implemented using a computing system (and in some cases entirely in hardware). The equation for the ray is expressed as r(t)=p+td, where p is the ray-AABB intersection point (or alternatively a point inside the volume) and d is the ray direction. Solving the equation for t on an axis-parallel plane orthogonal to the x component gives t x =(1 / d x )x+(-p x / d x ) is given, where d x is the distance of the point to the plane, where t is the value of the ray moving in a particular direction over the width of a voxel (t DeltaX ,t DeltaY ,t DeltaZ ) and for the nearest axis-parallel plane intersection, t x Value, t y Value, t z Using the value (t MaxX ,t MaxY ,t MaxZ By initializing the ,variables,(,i,), a simple algorithm can be defined to handle the traversal of a ray through a uniform grid.,The pseudocode for the algorithm is presented below, and an,example visual traversal is shown in FIG. 16A.
number
[0108] As shown in FIG. 16A, a conventional traversal algorithm is illustrated. According to this, a ray 1605 (e.g., one of many rayed through a volume (e.g., 1610)) is rayed through the volume 1610. In FIG. 16A, the black squares (e.g., 1615, 1620) represent occupied voxels in the volume 1610 that are not hit by the ray 1605, and the gray squares (e.g., 1625) represent the first occupied voxel that is hit by the ray 1605. In conventional traversal, as shown in FIG. 16A, each and every voxel traversed by the ray 1605 is checked by the system logic to determine whether the voxel is occupied (e.g., each check represented by a respective point (e.g., 1630)). The traversal can be extended for hierarchical structures such as VOLA to effectively exploit the skipping of empty spaces. In one example, since the hierarchical dense grid and VOLA formats share the same data organization, the algorithm can be applied indiscriminately to both of them. For the basic algorithm, 3D coordinates can be used to move through space with varying levels of resolution depending on the voxel encountered. The main difference between the two is how the contents of the voxel are examined. For example, referring to FIG. 16B, if an occupied voxel (e.g., 1635) at a particular level is encountered, the next level in the hierarchy is accessed (e.g., and new initialization operations are performed on the tMax and tDelta variables) depending on this level and the boundaries of the particular brick of the voxel, and the sub-voxels within the occupied upper level voxel that are traversed by the ray 1605 can be checked individually (e.g., represented by the point (e.g., 1640)). The boundaries can be determined using modular operations based on regular volume subdivision. If the upper level voxel (e.g., 1645) is determined to be empty, the check of the constituent sub-voxels traversed can be skipped. For example, when passing from one level to another, the spatial skip is expressed by the equation r(t)=p+t min t is determined by a 3D linear step of t minis the t value from the upper level. Due to the traversal method, tracking positions at different levels can be implemented more efficiently than traditional traversal algorithms. For example, at each hierarchical level, the traversal is performed as in traditional traversal, but when passing from one level to the next, the first position is found in linear steps using the current t parameter to move from one occupied voxel to the next (skipping any intermediate voxels in the ray's path that are unoccupied, e.g., 1645). In either case, the traversal algorithm continues until the system first encounters an occupied voxel at the top level resolution, e.g., 1625.
[0109] In an example, where accuracy is not a primary concern and accuracy can be sacrificed in favor of speed, a hierarchical implementation of the traversal algorithm may be modified to speed up execution. For example, as depicted in FIG. 16C, in some implementations, the ray traversal algorithm first determines which coarse-grained voxels are occupied and traversed first by the ray. The ray traversal algorithm may then focus only on evaluating the high-resolution (lower-level) voxel representation within the occupied low-resolution (upper-level) voxels. However, as opposed to checking each sub-voxel within an occupied voxel, an approximated approach may be utilized. In the approximated approach, sub-voxels are checked at intervals (e.g., x) that cover more than one voxel (e.g., checking every second or third voxel traversed by the ray for an occupied volume, rather than checking every traversed voxel). For example, a fixed-point implementation may be used for the data. After identifying the principal component of the ray direction, the ray at a particular level is advanced to cover a distance equal to the size of the sub-voxel in the determined principal component of the direction (e.g., x-component, y-component, or z-component). In that way, the occupied / unoccupied decision to be made for a new voxel traversed is fast. However, the tradeoff is that the approximated hierarchical traversal algorithm does not visit exactly every voxel that the ray traverses. As a result, in certain conditions, e.g., when the density of voxels is low or when rendering empty objects with thin surfaces, the ray may hit a missing occupied voxel, potentially creating artifacts, among other side effects. As shown in FIG. 16C, the interval 1655 for scanning voxels within an occupied upper level voxel may be defined to be a voxel in the x-direction. Thus, when performing a ray casting check for an occupied upper level voxel (eg, 1660, 1665, 1670), only a portion of the voxels that are traversed (eg, 1675, 1680, 1685) are checked.The exemplary pseudocode further illustrates such an embodiment.
number
[0110] The example of FIG. 16C illustrates an approximated hierarchical traversal algorithm that checks voxels along a defined subvoxel interval, although other intervals may be selected and utilized in the algorithm based on the use and resolution sensitivity of the application (e.g., rendering or SLAM application). With reference to FIG. 17A and FIG. 17B, a comparison of renderings of an exemplary Asian dragon model is shown for a visual comparison between, for example, an exemplary result of a standard hierarchical traversal algorithm (e.g., shown in connection with FIG. 16B) in which each subvoxel in an occupied voxel traversed by a ray is checked, and an approximated hierarchical traversal algorithm (e.g., shown in connection with FIG. 16C) in which only a portion of the traversed subvoxels in an occupied top-level voxel are checked. In this example, images 1705, 1710 are simply rendered as depth maps from raw ray casting data of a 3D Asian dragon model. Image 1705 represents the result of a standard hierarchical traversal algorithm, while image 1710 represents the result of an approximated hierarchical traversal algorithm. Although the image 1710 produced from the approximated algorithm is missing some voxels on the surface, resulting in graphical artifacts, the similarity between the two images 1705, 1710 suggests that in some applications the computational efficiencies made possible through the approximated hierarchical traversal algorithm may be a worthwhile trade-off.
[0111] The illustrations in Figures 17A and 17B are among the example results from an implementation of the approximate hierarchical traversal, but may be compared more generally with conventional algorithms that emphasize accuracy in terms of the rendered image. In such a comparison, a grayscale image of each camera pose may be generated using both hierarchical traversal algorithms. The intensity of each pixel in the image is an integer related to the distance between the virtual camera and the hit voxel. Thus, the two images may be compared based on the difference between the intensity values, while considering the exact uniform algorithm used as ground truth. Since the background (where rays are missing) does not provide valuable information, the comparison may only consider rays that hit voxels in the exact raycaster (which may only produce false negatives, not false alarms). The percentage of different results may be calculated by averaging frames of hundreds of camera poses and frames of different scenes in space. In this example, VOLA models such as a model generated from an aerial scan of the River Liffey (Dublin, Ireland) and three models from the Stanford 3D Scanning Repository: an Asian dragon, a Lucy Angel, and a Thai statuette, may be used for testing. Because floating-point arithmetic and conversions may result in very small pixel intensity differences (as small as unity) that would unrealistically increase the diff count, a threshold may be implemented in which only pixel intensity differences above 1 are considered. Exemplary results are shown in Table 1. Note that the percentage of different pixels shown in the table is expressed as a fraction of only the pixels that are actually hit by an accurate raycaster. The high value of the average of those pixels that differ in intensity between the two images confirms that the considered cases are good false negatives. The percentage of difference depends on the density of voxels in the model used, and generally the higher the pixel density the worse the approximation. [Table 1] Table 1: Percentage of different pixels between the exact and approximate rendered images, as a fraction of the missed pixels in the exact image. The average intensity difference of the missed spots is also reported.
[0112] In some implementations, the ray caster may be implemented in hardware such as a visual processing unit (VPU). Such hardware devices may be implemented to provide high performance machine vision and artificial intelligence (AI) computations in particularly power-constrained environments. FIG. 18 is a simplified block diagram that may be implemented as a multi-core always-on system-on-chip (SoC) 1805 that provides highly sustainable performance efficiency and low latency and power requirements for various machine learning and machine vision applications. The architecture of an exemplary processing device 1805 may use a combination of a low-power very long instruction word (VLIW) processor (e.g., 1810) supporting vector and SIMD operations with hardware acceleration (e.g., provided through one or more accelerator devices (e.g., 1815) for image processing and computer vision kernels, backed by a very high bandwidth memory subsystem (e.g., 1820), and one or more RISC processors 1825, 1830 (e.g., Leon 32-bit RISC processors according to the SPARC architecture)). The system is divided into three main architectural units: the Media Subsystem (MSS), the CPU Subsystem (CSS), and the Microprocessor Array (UPA). In this example, the UPA contains VLIW processors (e.g., 12 custom vector processors (e.g., 1840a-l)) that in some cases are implemented as Streaming Hybrid Architecture Vector Engine (SHAVE) processors.
[0113] To easily access the SoC from a PC, a machine learning accelerator (e.g., Movidius™ Neural Compute Stick™ (NCS)) can be used to program the vector processor using a USB3 connection. A software application (e.g., running on a general-purpose CPU of a computing system or on dedicated hardware or firmware) manages the creation of a hierarchical grid structure starting from a set of vol (VOLA format) files and then sends this content to the vector processor unit through USB (or other interface (e.g., 1845)). In addition, the software application handles the visualization of the rendered frames coming from the accelerator (e.g., using the Simple DirectMedia Layer (SDL2) library). In some implementations, the actual ray casting algorithm can be performed by a set of dedicated vector processors (e.g., 1840a-l), each of which handles a small rectangular tile area of the virtual image. To significantly leverage the computational load, the vector processors (e.g., 1840a-l) can be scheduled asynchronously and dynamically to reduce overall idle time. Data regarding the virtual camera's position and orientation is passed to the threads via a shared structure that is dynamically updated by the system, among other example system implementations and programs.
[0114] In one exemplary test, uniform and hierarchical grid algorithms (both exact (standard) and approximate versions) were tested and compared in terms of performance. To take advantage of the vector operations available in the particular architecture (e.g., architectures utilizing the SHAVE Instruction Set Architecture (ISA)) utilized to execute the ray casting application, the hierarchical implementation can be reconstructed utilizing the intrinsics available in the compiler of the system and tested separately. In one example, tests using an aerial scan of the O'Connell Bridge House (OCBH) building in Dublin and two models from the Stanford 3D Scanning Repository are used. The results obtained in such an exemplary test are shown in FIG. 19, where the measured values of average frame rate, minimum frame rate and maximum frame rate are shown. The measurements shown are obtained under the same conditions for all tests, by performing a circular movement of the virtual camera while looking at a fixed point in the center of the volume. As represented in the graph 1900 of FIG. 19, the approximate implementation consistently performs better than the exact one, with frame rates 30% to 75% higher. Through the use of built-in functions, maximum speedup factors of 12.78 and 17.74 are reached for the exact and approximate SIMD raycaster versions, respectively.
[0115] By utilizing a sparse hierarchical grid structure (e.g., VOLA) in ray casting applications, further benefits can be realized, for example, in terms of performance and memory occupancy of the data structure. For example, dense and sparse hierarchical grids from a topological point of view may effectively share the same organization in space, but in the case of sparse grids, only the occupied data is actually stored. This results in a very small memory footprint (table), but at the same time increases the time required to place a particular voxel in the hierarchical grid, since all previous levels must be examined to identify and count the set bits in the sparse grid table. For example, Table 2 reports a comparison between the memory occupancy of different formats of the same model. The dense grid and VOLA formats shown in the table are taken directly from an exemplary Polygon File Format (PLY) object. It can be seen that the VOLA structure guarantees a huge size reduction, here up to about 11140 times lower for the PLY format. Dense grid occupancy can be considered as fully deterministic in the sense that the occupancy of the dense grid depends only on the depth of the hierarchical grid, whereas the occupancy of the VOLA structure depends on the actual occupied voxels in space. As shown in graph 2000a of FIG. 20A, the average frame rates of three different VOLA models are shown with the same algorithm and optimization used for dense grids. It is possible to notice that there is no real gain in using the approximated implementation anymore, and similarly the benefit of introducing the SHAVE built-in function optimization is very low. This can be explained because the utilized technique is aimed at optimizing the algorithm grid traversal performance, but here the bottleneck is mainly due to the large amount of time required to test the occupancy of the voxels in the VOLA structure. As a result, the fraction of time spent on the actual traversal is here much lower than for dense grids. The performance of the VOLA implementations is about 11 to about 30 times lower than their dense grid counterparts.Nevertheless, in terms of performance obtained with memory footprint (average-FPS / MB), it can be concluded that the VOLA implementation is much more efficient and may therefore constitute a valid option in highly memory-constrained environments, as shown, for example, in the exemplary table 2000b of FIG. 20B. [Table 2] Table 2: Comparison of memory footprints of different data formats occupying the same 3D model.
[0116] In some implementations, an embedded implementation of a ray casting algorithm may be implemented utilizing a sparse hierarchical data structure to implement ray casting. Furthermore, an approximated ray traversal algorithm may be used to realize processing performance benefits. Furthermore, performance and memory usage may be traded off with a dense and sparse (VOLA) approach, showing consistent advantages in FPS / MB efficiency of the VOLA structure at the expense of reduced performance. Thus, a system utilizing a sparse hierarchical grid structure to represent 3D volumes in ray casting applications may be considered preferable, especially in highly memory-constrained environments. In fact, the improved system implementations described herein exhibit extremely high power efficiency, up to two orders of magnitude higher than conventional ray casting implementations, among other exemplary advantages.
[0117] Computer vision systems may utilize ray casting and rendering results in connection with autonomously determining the position and orientation of an autonomous device, such as a robot, an autonomous drone, or an autonomous vehicle, among other examples. In practice, accurate position and orientation estimation is essential for navigation in autonomous robots. Although a well-studied problem, existing solutions rely on computationally expensive statistical filters that typically require good parameter initialization or parameter calibration. As described herein, improved systems may implement improved end-to-end machine learning approaches that include the incorporation of multiple data sources (e.g., monocular RGB images and inertial data) to overcome the weaknesses of each source independently. In some implementations, improved systems utilizing such capabilities may enable such systems to realize valuable potential solutions for resource-constrained devices by achieving odometry results that are computationally less expensive and whose accuracy is comparable to or only slightly below that of the state-of-the-art, among other exemplary uses and advantages.
[0118] Motion estimation is one of the main pillars of mobile robotics. It provides the robot with the ability to understand its position and orientation in an unknown environment. It may be combined with a mapping approach to develop simultaneous localization and mapping (SLAM). In fact, the utilized SLAM pipeline may employ the improved ray casting technique described herein within such implementation. Using different data sources, the robot can perform such motion estimation depending on the type of sensor, namely proprioceptive (such as an inertial measurement unit (IMU)), where the motion estimation provides internal information of the robot, or exteroceptive (such as a camera or LiDAR sensor), where the motion estimation provides information of the robot's surrounding environment. Due to the autonomy of the robot, the robot should be able to perform such on-board motion estimation in real time. This is a special challenge when the device has limited resources. It is therefore desirable to find a solution that can operate embedded devices under such restrictions.
[0119] Deep learning can be used to solve the problem of pose estimation in odometry applications. For example, a camera can be used to image the surrounding environment of a robot or other autonomous device and track the robot's movement through visual odometry (VO). Classical VO approaches estimate motion from geometric constraints and can be classified into two groups: sparse feature-based methods and direct methods. On the one hand, sparse feature-based methods estimate motion between frames by extracting and matching feature points. In addition, some VO approaches add and maintain feature maps to compensate for drift incurred due to the presence of outliers and noisy images. On the other hand, direct and semi-direct methods estimate pose by minimizing the photometric error between successive images using all image pixels.
[0120] However, classical VO approaches typically require external information (such as camera height or templates) to recognize scale and recover distance in real-world units. Furthermore, conventional VO systems have proven unreliable in situations with rapid motion or when lighting changes suddenly. To address this unreliability, camera information can be combined with inertial sensors, which can provide acceleration and angular velocity information. These sensors typically provide data at a much higher frequency than cameras (e.g., about 10 times faster). Thus, in the presence of rapid camera motion, inertial information can be used to overcome the weaknesses of VO systems, among other example enhancements and challenges.
[0121] A visual inertial odometry (VIO) system leverages visual and inertial information to provide position and orientation estimation. In some implementations, visual-inertial data fusion is performed by using a probabilistic filter approach such as the Extended Kalman Filter (EKF) or the Unscented Kalman Filter (UKF). Visual-inertial data fusion is performed using an EKF-based system that previously compared different fusion models using only gyroscope data, or gyroscope and accelerometer data. Other variants of the EKF can be implemented, such as the Multi-State Constrained Kalman Filter (MSCKF), among other examples, a system in which several past camera poses are used to detect stationary features and add constraints to the state vector.
[0122] In some implementations, a system with deep learning capabilities may be used to overcome weaknesses of classical VO approaches, such as lack of robustness against blurry or noisy images, or when illumination or occlusion changes occur. For example, convolutional neural networks (CNNs) provide a robust method of extracting image features, as they can work well even against blurry and noisy images. CNNs can also be used to calculate optical flow between two consecutive images. Optical flow represents the change in the position of objects on the camera view, and is therefore related to the motion the camera underwent between two consecutive frames. In one example, the image features extracted by the optical flow network can be used with two long short-term memory (LSTM) layers in a deep learning system. This implements a monocular VO system in an end-to-end deep learning manner that can outperform classical monocular VO approaches (e.g., VO based on LIBVISO2), among other examples.
[0123] The VIO approach based on probabilistic filters for sensor fusion may require a difficult and complex calibration process to bring the camera and inertial measurement unit (IMU) measurements into the same reference frame. For example, this calibration process may be performed in real-time while the tracking system is operating, adding complexity to the filtering process. Furthermore, some IMU parameters are difficult to model, such as noise scaling through measurements found in most commercial IMUs. Deep learning techniques may be further utilized to solve the challenges with the sensor fusion process. For example, LSTMs may be used to track past raw IMU measurements (accelerometer and gyroscope) to estimate the robot's pose, which may then be fused with the VO system. LSTMs may be used in VINet to extract encoded features from the IMU raw measurements. These encoded features may be combined with features extracted from the CNN in a feature vector. This feature vector may be tracked over time by a second LSTM to provide a robot pose estimate. In some implementations, the VINet approach may outperform traditional approaches, such as traditional optimization-based sensor fusion approaches, among many exemplary benefits.
[0124] In one example, an improved system may implement an end-to-end trainable neural network architecture incorporating both a vision deep learning sub-model and an inertial deep learning sub-model. For example, in the vision-based CNN sub-model, an RGB image may be provided as an input. In the second inertial-based deep learning sub-model, raw measurements of an IMU are provided as an input. In one example, the end-to-end neural network architecture may utilize a combination of the neural network sub-models. The combined network (and its subcomponents) can be trained in an end-to-end manner, eliminating the need for any calibration or pre-processing.
[0125] In some implementations, a neural network of an end-to-end machine learning odometry system may be trained to generate a pose estimate in every frame relative to the previous frame. Each pose estimate represents a transformation. The transformation is usually represented as an element of the special Euclidean group transformation SE(3). All transformations represented in SE(3) (Equation 1) may be composed of a rotation matrix and a translation vector, which is the rotation matrix part of the special orthogonal group SO(3). Formula 1:
number
number
[0126] The pose estimate in se(3) may be a 6-D vector and may not be orthogonally constrained. Once estimated, the pose values in se(3) can be transformed to transformed values in SE(3) by performing an exponential mapping: se(3) → SE(3) (Equation 10). Formula 3:
number
number
number
number
number
number
number
number
[0127] In one example, a vision-based neural network model 2105 may be utilized as depicted in the simplified block diagram of FIG. 21A. The vision-based neural network model 2105 receives as input 2110 two successive RGB images that are stacked to form an input tensor of size 512×384 with six channels. This image size may contain sufficient features while still resulting in a lightweight CNN. In one example, a layer 2115 of a computer vision neural network such as FlowNetS may be used to extract image features that may be advantageously used for motion estimation, among other exemplary uses. Such a network (e.g., 2115) employed as part of the neural network model 2105 may be trained on a synthetic dataset to learn how to estimate optical flow between frames representing the movement of a robot over time, among other examples.
[0128] In the example of Figure 21A, the FlowNetS layer 2115 may be taken up to the ninth convolutional layer of the network, 2105, followed by a further convolutional layer 2120, reducing the CNN output size to a 2x3x256 tensor. After the CNN layer 2125, a series of fully connected layers 2130 may be utilized to combine the extracted features to generate an output 6-D vector pose 2135 representing the transformation of the current frame (t) relative to the previous frame (t-1), which is expressed in terms of the Lie algebra SE(3).
[0129] In another example network 2140 shown in Figure 21B, only inertial data is used as input 2142 to the network 2140. In one example, the input 2145 may be IMU data embodied as a subsequence. The subsequence consists of ten 6-D vectors with xyz raw data components from the accelerometer and gyroscope components of the device. In this example, the input subsequence of (ten) measurements, with the last being the most recent, may be ordered in time to encode the movement of the sensor over time.
[0130] Continuing with the example of FIG. 21B, a long short-term memory (LSTM) artificial recurrent neural network portion 2150 can be utilized as a recurrent layer in the model 2140 to track measurements through the subsequence and extract motion information, since it can store short-term and long-term dependencies generated by past inputs in a hidden state. As each input passes through the LSTM 2150, it is combined with the hidden state to determine a temporal correspondence between the current measurement and past measurements. The LSTM 2150 in one example may have one layer, 1024 units, followed by four fully connected layers 2155 that output a 6-D vector representing the transformation that the robot underwent (e.g., from the last element of the subsequence to the first element). These architectures and parameters may be selected as a result of their execution in a Monte Carlo analysis, which may be used to explore and optimize the selection of different combinations of layers, among other example implementations.
[0131] As introduced above, the improved machine learning system may utilize a neural network model 2160 to perform odometry calculations. The improved neural network model, combining the example network portions 2105, 2140 shown in FIG. 21A and FIG. 21B, leverages both visual and inertial sensors that may be present on a robot or other autonomous device. Thus, the input to the model 2160 may include both visual and inertial data, such as a pair of consecutive RGB images and a subsequence of 10 inertial measurements. In this example, the virtual neural network portion 2105 is the same as that presented in the example of FIG. 21A up to the third fully connected layer. Similarly, the inertial odometry (IO) network portion 2140 is used up to the second fully connected layer. In this way, the neural network model 2160 maintains both the VO network and the IO network until the last layer, which provides useful features. The vision and inertial feature vectors are then concatenated into a 128-D vector and passed through three fully connected layers 2165 to output a pose estimate 2170. As before, each pose estimate represents the transformation that the robot has undergone in the current frame relative to the previous frame.
[0132] In one exemplary implementation, the data used to train the exemplary neural network model 2160 may be part of a compiled dataset (e.g., the raw data section of the KITTI Vision Benchmark Suite). In one example, the odometry dataset consists of 22 sequences. The first 11 of these sequences comprise ground truth transformations. In this example, sequences 11-22 are intended to be used as evaluation, so no ground truth is provided. Sequences 00, 02, 08, and 09, which contain the most frames, are used for training, and sequences 05, 07, and 10 are used for evaluation. The training data in some implementations may be augmented by randomly applying Gaussian noise, Gaussian blur, and intensity variation to the images, for example, by applying Gaussian noise (e.g., mean=0, standard deviation=[0,32]) and pixel intensity variation (e.g., [-25%, 25%]) to 2 / 3 of the data, and applying a Gaussian blur with kernels 3, 5, and 7 to the remaining 1 / 3 of the data. After data augmentation, the training dataset (e.g., 22912 image frames in total) may be sampled (e.g., at 10 Hz) but also ground truthed. The IMU data may reach higher frequencies (e.g., 100 Hz). This means that there may be multiple IMU measurements per image frame. However, there may also be frames where some IMU data is missing. In that case, the first IMU measurement of the frame is used to pad the missing measurements and fill the subsequence.
[0133] In one example, a loss function (Equation 11) is used that represents the Euclidean distance between all estimated relative poses and their respective ground truths, denoted as se(3). Formula 11
number
number
number
number
number
[0134] In one example, an initial learning rate (λ0) of 10-5 and a step (r) of 50 are used. With these parameters, the learning rate is divided by 2 for every 50 iterations in total. In one exemplary comparison, all networks are implemented in TensorFlow and trained using NVIDIA GeForce GTX Titan X GPUs. To reduce training time, FlowNetS weights can be stopped during training.
[0135] The networks described herein may be evaluated and their performance compared. In this example, VO and VIO are compared separately with existing approaches using the same type of data. For example, an improved VO network (e.g., as described herein with reference to the example of FIG. 21A) may be evaluated and compared with conventional solutions. In one example, the comparison is performed using the metrics proposed in the KITTI Odometry Development Kit and the network run on sequences 05, 07 and 10. This may provide absolute poses of all frames with respect to the first frame. Then, the root mean square error (RMSE) may be calculated for different trajectory lengths (100m, 200m, 300m, ... 800m) through the sequence. These results are shown in Table 3 along with the conventional VISO2 M network and the DeepVO network. As shown in the example of Table 3, an improved VO network as described herein can outperform a conventional network (e.g., VISO2 M) in terms of both translation and rotation errors for sequences 05 and 10, and performs relatively well for sequence 07 in translation. [Table 3] Table 3. All errors represent the average RMSE over all possible sequence lengths. rel is the translation error, and r rel is the rotation error.
[0136] With reference to Figure 22, exemplary results of an embodiment of the improved VIO network described herein (e.g., in connection with Figure 21C) are shown and compared to the results of conventional solutions. For example, Figure 22 shows an estimated trajectory achieved using the improved VIO network against the ground truth (with corresponding exemplary endpoint translation and rotation errors shown in Table 4). [Table 4] Table 4. Position and orientation error of the final point of the improved VIO network model compared to the conventional solution. The translation error is shown both in terms of the absolute error of the final point and its percentage of the total distance covered in frames 0-800.
[0137] An implementation of an inertial odometry (IO) only network may exhibit large drift errors over time, but when combined with a visual odometry network (to form a visual inertial odometry network as described in the example above), the drift may be significantly reduced. Furthermore, the visual inertial odometry (VIO) network may exhibit better performance than the visual odometry network when the robot is turning. This shows how the IMU compensates for large displacements of the object in the camera. The improved visual inertial odometry network may outperform conventional solutions. Such networks may be utilized in a variety of applications, from robots to autonomous drones, among other examples.
[0138] In addition to the above exemplary features, the improved computer vision system may further utilize a convolutional neural network (CNN) to estimate the relative pose between pairs of point clouds using a sparse hierarchical voxel grid representation (e.g., VOLA). As described herein, the voxel grid is a more memory-efficient solution compared to point clouds, and thus may be used on embedded systems (e.g., autonomous devices) where memory and computational resources may be limited. A novel loss function using transformation errors may further be used with 2D convolution over a 3D voxel grid. In practice, such a solution may provide such efficiency while maintaining accuracy comparable to conventional state-of-the-art implementations of iterative closest point (ICP). In practice, since the use of a voxel grid limits the contribution of dense areas to the registration error, the improved voxel grid-based solution may achieve improvements over ICP, among other exemplary uses and advantages.
[0139] In recent years, 3D scanning technology has become more accessible to everyone as a result of a wide range of sensors being able to scan 3D data in greater quantities and with higher quality. These 3D sensors generate point clouds, which are unorganized three-dimensional sets of points in a unified coordinate system that describe the spatial information used to represent the 3D data. However, available 3D sensors such as LiDAR, sonar, and RGB-D have limited range of scanning. To overcome this limited range, multiple scans are acquired and merged to create a 3D map. Fusing multiple scans requires that each scan is represented in the same coordinate system to present their information in an organized manner. Therefore, it is important to know the position where the scan was performed in order to represent all the scans in the same coordinate system. This position can be represented as a displacement between the reference frame and the current scan. This displacement, known as the camera pose, can be represented as a transformation ΔT formed by a translation t and a rotation R, so that ΔT=(R|t). The sensor displacements can be extracted by using 3D information available in the scans or with the support of other types of sensors such as GPS, IMU, or wheel odometry on ground vehicles. In some cases, an odometry solution as described herein can be applied to assist in determining such placement. Once the camera positions are known, the scans can be represented in the same coordinate system, allowing the creation of a 3D map that includes information from all the scans together. The problem of determining the camera positions is known as relative pose estimation, and has previously been difficult to implement on resource-constrained devices.
[0140] In one example, a computing system may be configured to solve the problem of relative pose estimation by implementing and using a deep neural network (DNN). The size of the point cloud may vary between scans due to noise and limitations on the sensor. However, the voxel grid representation of the point cloud is fixed from the design stage. Since 3D convolution is computationally expensive, an improved solution may instead enable the use of a computationally efficient 2D convolutional neural network (CNN) with an alternative 2D representation of the 3D voxel grid. In some implementations, a 2D convolutional neural network may be used to determine the transformation between the voxel grid pairs. A loss function may be determined based on the error obtained by transforming the point cloud with the ground truth and the network prediction. An implementation of such an implementation may be to use an RGB-D SLAM dataset and compare the results with a state-of-the-art iterative closest point (ICP) approach. Furthermore, the relative pose estimate between the scans of the sensor generating the two point clouds may be utilized to determine the transformation that produces the best registration between the generated point clouds. Therefore, such relative pose estimation solutions described herein may alternatively be referred to as "point cloud registration" solutions.
[0141] With reference to Fig. 23A and Fig. 23B, currently the most frequent method for aligning 3D point clouds is based on a variant of Iterative Closest Point (ICP) 2315, which estimates in an iterative manner a transformation that minimizes the distance between corresponding points in two different point clouds 2305, 2310 represented in Fig. 23A. This iterative procedure can be computationally expensive and, moreover, suffers from the initial alignment and overlap between the processed point clouds 2305, 2310 and their size. Depending on the manner of calculating and minimizing the alignment difference between both point clouds, several ICP-based methods can be found where this distance can be made between planes or curves instead of points. To make the 3D alignment more efficient, the ICP solution can be extended to extract important points from the descriptors of the 3D point clouds using features. Factors such as rotational and translational invariance or noise robustness are important on these important points, for which work with histogram-based descriptors 3DSIFT, SHOT and NARF are examples.
[0142] When RGB-D images are available, they can be used to improve the estimation of camera displacement. This can be used to implement approaches for monocular or binocular or multi-camera pose estimation. In some implementations of the improved system, the RGB images are used as input to a Convolutional Neural Network (CNN) that uses a set of convolutional layers to extract complex features in the image data followed by a set of fully connected layers to regress the pose. Furthermore, in some implementations, a Long Short-Term Memory (LSTM) layer is added on top of this topology to form a Recurrent Neural Network (RNN) to handle time dependencies between images taken over a long trajectory.
[0143] Other implementations may use different kinds of inputs along with the RGB images. For example, optical flow between pairs of images may be used to estimate the relative pose. Additionally, information of the depth dimension may also be used. Here, considering this situation from a 2.5D perspective, a neural network uses RGB-D images as input, among other examples. Some implementations may use CNNs on 3D data and perform deep learning with this 3D data. For example, the problem of point cloud registration may be evaluated by first extracting feature points from the point cloud and then feeding the obtained features to a deep learning approach. For example, a "super point" descriptor may serve as a basic unit for matching point clouds. This descriptor may be used as input to a deep neural network autoencoder that holds the geometric information used to find the transformation between point clouds. In other implementations, interest points that represent clusters of point clouds with a large number of points may be used. In addition, different problems such as classification or segmentation may be used with this strategy. Here, nearest neighbor maps and KD trees are used as point cloud descriptors, respectively.
[0144] In some implementations, the point clouds may be represented as point subsets represented as a list of (x;y;z) coordinates that are then fed into a fully connected layer that looks for interactions between points to classify 3D objects. In some implementations, as represented by the simplified block diagram in FIG. 23B, the point clouds 2305, 2310 may be converted into respective voxel grids (VGs) 2320, 2325 through a voxelization process 2330 that converts each point cloud 2305, 2310 onto a 3D grid where each cell has a fixed size. This fixes the amount of memory required and creates neighbor relationships between voxels. The voxel grid-based inputs 2320, 2325 may then be used to provide inputs to a convolutional neural network 2350 to generate relative pose results 2355. This type of data-using strategy with deep learning may be applied to object classification and orientation problems, among other applications. Conventional solutions and systems solve the problem of relative pose estimation without using a voxel grid (VG) and deep learning. The use of a VG representation of 3D space has the properties of having a fixed size at the design stage and a small memory footprint. Also, the use of low-power hardware accelerators for CNN execution and other machine learning operations (e.g., Movidius™ Neural Compute Stick™) makes this approach applicable to resource-constrained devices, among other exemplary benefits.
[0145] Referring to the simplified block diagram shown in FIG. 24, an exemplary neural network topology is depicted for use in determining a relative pose estimate based on a voxel grid representation (e.g., 2320, 2325) of the 3D space under analysis. In one exemplary implementation, a 2D convolutional neural network may be implemented to receive a pair of voxel grid structures 2320, 2325 as input and then determine the relative pose between the scans by training a CNN 2350 to align their corresponding point clouds (generated from the scans and on which the voxel grid structures are based). In practice, each voxel grid structure 2320, 2325 may be generated or extracted from a corresponding one of the point clouds through a voxelization process performed by the system. A 3D to 2D projection 2405 may then be performed by the system to adapt the inputs used in the 2D convolutional layer in the network 2350. Once a pair of 2D projections is introduced into the network, the relative pose ΔT 2355 between them is predicted.
[0146] As shown in the example of FIG. 24, once the voxel grid inputs 2320, 2325 are sliced in 2D projections and transformed into 2D projection inputs (2410, 2415, respectively), the 2D projection inputs 2410, 2415 may be provided as inputs to the representation portion 2420 of the CNN 2350. The representation portion 2420 of the network 2350 may be implemented as a Siamese network with multiple sets (e.g., pairs) of corresponding convolutional layers (e.g., 2425a,b). Within the notation used in FIG. 24, for each layer in the representation portion 2420, Conv(i;j;k) represents a convolutional layer with i outputs, kernel size j×j with stride k, and the same zero padding. The outputs from the representation portion 2420 may be concatenated to form a feature vector 2430 that is introduced as an input to the regression portion 2435 of the network 2350. For example, the regression portion 2435 may be implemented to include a fully connected layer set 2440 with a final fully connected layer generating each of the rotation (ΔR) and translation (Δt) components, respectively, used to generate the relative pose result 2355. Within the notation used in the representation of Figure 24, FC(i) means a fully connected layer with i neurons.
[0147] As mentioned above, a point cloud is a type of data formed by a set of unorganized points, so it is first represented as a 3D grid in a process known as voxelization. Voxelization converts the point cloud into a voxel grid, where the data is structured in voxels as correspondingly a 2D image is structured in pixels. Essentially, a voxel grid is a cubic 3D grid with a [height, width, depth] shape, where each cube, known as a voxel, contains a small zone of information from the point cloud. If the point is included in that zone, the voxel's occupancy is set to 1, otherwise it is 0. This means that the VG contains only one bit per voxel, known as the occupancy VG. An example of a point cloud representation 2505 of a 3D space and a corresponding voxel grid representation 2510 generated through voxelization from the point cloud representation 2505 are shown in FIG. 25. The VOLA structure can be considered as a specialized form of the voxel grid data structure, where data is stored only for those voxels that represent the 3D space occupied by some geometry. Thus, the VOLA voxel grid structure reduces the amount of stored data useful for data transfer and memory-constrained environments such as those described in the examples herein.
[0148] As introduced above, in some implementations, a 3D to 2D projection step may be performed before introducing the voxel grid-based input (e.g., 2320, 2325) to adapt the 3D representation used with the convolutional layers with 2D kernels. This reduces the computational cost of the network (e.g., 2350) and makes it simpler, allowing for easier deployment on memory-constrained embedded devices, among other example applications. For example, 2D projections may be used on 3D data in multi-view CNNs, where 2D image projections are extracted from different perspectives of the 3D model in order to use them with well-developed 2D CNNs. However, this approach typically does not preserve the spatial structure of the 3D volume, since it focuses on classification problems where this information may not be necessary. In other implementations, 3D objects may be projected into 2D using anisotropic probing kernels, a process similar to "X-ray scanning" that convolves the 3D VG into a 2D plane. This projection can help us to image the 3D global structure of the 3D volume used in the pose estimation problem we study. VG ;w VG ;d VG ), in one exemplary solution, the voxel grid structure is converted to a 2D projection by slicing the voxel grid in the Y dimension to produce a 2D projection of size (h VG ,d VG )'s w VG images can be generated. The resulting 2D images are then stacked, VG A size (h VG ,d VG ) is generated. In related applications, vertical lines of the object can be expected to contribute to the alignment of the point clouds, so in this example, VG is used as the slice direction. Other implementations based on intended application considerations, among other example alternatives, may alternatively work along other dimensions of the 3D voxel grid as well.
[0149] As described above in the example of FIG. 24, a computing system may implement a convolutional neural network (CNN) in hardware and / or software to estimate the relative pose between pairs of voxel grids using the CNN. The CNN 2350 receives as input 2D projections of the corresponding voxel grids and outputs vectors representing the rotation (ΔR) and translation (Δt) of the relative pose. The representation part 2420 of the CNN 2350 may extract a feature vector 2430 from every pair of inputs. This feature vector 2430 may contain actionable information that is later used to predict the relative pose. The feature vector 2430 is formed by a Siamese network with two identical branches of a convolutional layer whose weights are shared with each other. In some implementations, after every convolutional layer in the representation part 2430, there is a rectified linear unit (ReLU) as the activation function. In some cases, no pooling layer is used to ensure that the spatial information of the data is preserved. In the regression part 2435 of the CNN 2350, the outputs of both branches of the Siamese network are flattened and concatenated to form a vector that is fed into the regression part, the part of the network responsible for estimating the prediction. This is formed by a set of fully connected layers 2440, each followed by a ReLU activation function. Since the output of the network has two components, the rotational and translational parts of the prediction, in the last segment 2450 of the network 2350 there is a separation into two fully connected layers, each of which is the entire prediction part.
[0150] Continuing with the above example, the output 2355 of the CNN 2350 may consist of a vector representing the relative orientation between pairs of voxel grids. This vector is usually defined as a transformation matrix ΔT of the special Euclidean group of transformation values SE(3), which is a set of elements consisting of rotation elements and translation vectors from the special orthogonal group SO(3). When making predictions in the SE(3) group, there may be some issues with the SO(3) rotation components, since they need to be orthogonal matrices. In some implementations, the use of the Lie algebra se(3) of the SE(3) group is presented as a solution to avoid the orthogonality requirement, since it represents an instantaneous transformation without its orthogonality constraint. An exponential map may be used to convert between se(3) and SE(3). Equation 15:
number
[0151] In some implementations, the network 2350 may be trained using a learning phase controlled by a loss function that guides the network to achieve the correct solution. The loss function may penalize or reward the learning error backpropagation by measuring how good the network's predictions are. In one example, a proposed loss function uses two different transformation values T gt and
number
number
number
number
number
number
[0152] There are many datasets focused on the relative pose estimation problem that can be used to test the effectiveness of CNNs used in solving pose estimation. Such datasets can be used to represent ground truth, which provides information about the localization of the data that is needed to know about the relative pose. In one example, a point cloud is required to evaluate the network. This kind of data can be found in two ways: from a 3D dataset that directly provides a point cloud generated using a 3D laser sensor (e.g., LiDAR), or from an RGB-D dataset. The point cloud can be extracted from a depth map in a simple process that uses the depth information to convert each pixel into a point.
[0153] In implementations utilizing deep learning as described herein, a high volume of data may be required in the learning phase to train the network. By meeting this requirement, different datasets may be found, distinguishing them by their applications. For example, the KITTI dataset, the Oxford Robot Car dataset, the Malaga Urban dataset, and others may focus on autonomous driving applications where a car is used to move the camera / sensor. As another example, the 7 Scenes dataset, the ICL-NUIM dataset, and others may focus on handheld devices in indoor environments where the camera is picked up and moved by hand. In another example, in addition to handheld sequences, the TUM dataset may be utilized. Among other example datasets that may be used during training of the network, the TUM dataset may also include data acquired from a wheeled robot moving on the ground.
[0154] As an example, for a ground robotic application targeting indoor locations using deep learning, the TUM dataset can be used because it provides a sufficient amount of data of this type for training a deep neural network (DNN). This dataset can consist of multiple sequences, which are organized into categories according to the application. In one example, only the "Robot SLAM" sequence is used. The tools provided in the dataset to obtain point clouds from depth maps are used to evaluate the performance of our approach.
[0155] A point cloud from the TUM dataset may be voxelized as described herein (e.g., by populating a VG of size [64,64,128] with only points from within [4,4,8] meters of the camera in x, y, and z directions). In one example, the first three sequences in the "robot SLAM" category (e.g., fr2 / pioneer360, fr2 / pioneer slam, and fr2 / pioneer slam2) may be used to train a network from scratch, while the fourth set (e.g., fr2 / pioneer slam3) may be left out of training to evaluate the network with unseen data.
[0156] Furthermore, to make the network robust to large sensor displacements by increasing the amount of data for training, the training pairs are of the form
number
number
number
[0157] In one example, the network model is implemented using the TensorFlow framework and can be trained using a graphical processing unit (GPU), vector processing unit or other computer processor. In one example, the performance of the trained network is analyzed by using tools provided in the TUM dataset. The TUM dataset presents two different types of errors: (i) Relative Attitude Error (RPE), which measures the local accuracy of the trajectory over a fixed interval Δ, i.e., the error corresponding to the drift of the trajectory, and (ii) Absolute Orbit Error (ATE), which measures the global consistency of the estimated trajectory by comparing the absolute distance between the estimated trajectory and the ground truth trajectory.
[0158] A conventional implementation of iterative closest point (ICP) can be used to compare the performance of the network against existing approaches. The errors determined in the exemplary evaluation of the CNN-based relative pose estimation approach described herein are presented in Table 5 together with the results of the conventional ICP implementation, and a combined CNN and ICP approach (a combination of an improved CNN-based solution and an ICP part) is also presented for comparison. With respect to relative pose estimation, it can be seen that CNN has a higher rotation error than the method using ICP, but the translation error of CNN is the lowest. This means that although the rotation error is high, the translation error has little impact since it has little effect on the pose. In some cases, the translation relative pose estimation error can be fully considered for comparison, since the rotation relative pose estimation error appears as a translation error when the camera is moved. Finally, although the ATE error is larger in CNN, the trajectory obtained by the network is smooth and follows the same "shape" as the ground truth. On the other hand, the ICP trajectory is typically more irregular. The higher ATE for CNNs can be seen as a result of training the CNN on a small dataset where there is no scale of evaluation rotation. [Table 5] Table 5: Relative attitude error (RPE) and absolute orbit error (ATE) for each relative attitude estimation technique (expressed as root mean square error (RMSE), mean deviation and standard deviation (STD)). In this example, RPE is calculated using a fixed Δ interval of 5 frames.
[0159] As described above, an improved computing system may implement an end-to-end approach (in hardware and / or software) to determine the relative pose between voxel grids using a loss function based on the transformation error between point clouds. The trajectory estimated by the CNN of such a system may be smoother compared to ICP (and even the combination CNN+ICP). Such a system may utilize a relatively large amount of data to train the corresponding deep learning model, although in other implementations the size of the training data set may be increased. It should be understood that the approach may be utilized for other applications including handheld cameras, drones, and cars. Additionally, implementations may utilize point clouds acquired by LiDAR. Also, in some implementations the size of the parameters of the network may be reduced or otherwise simplified, among other exemplary modifications.
[0160] 26A-C are flowcharts 2600a-c illustrating an exemplary technique for enhancing computer vision processing by a system. In the example of FIG. 26A, an improved technique for performing ray casting is depicted. For example, a sparse hierarchical volumetric (grid-based) data structure (e.g., a VOLA-based structure) may be accessed (2602), and a ray casting algorithm may be performed using the volumetric data structure (2604). The ray casting algorithm may be performed by casting a number of rays into the volume represented by the volumetric data structure (2606). Ray casting may include a ray traversal stage. In this case, a fraction of all of the voxels intersected by the ray are checked to see if they contain geometry (or are "occupied") according to an interval that results in an approximate traversal of the ray. From the traversal, it is approximately determined whether the ray intersects an occupied voxel, and if so, the occupied voxel is the voxel that the ray first intersected. This ray casting process is repeated for each of the rays, e.g., as part of a SLAM pipeline, rendering application, or other exemplary use.
[0161] Referring to FIG. 26B, an improved technique for determining the pose of a device (e.g., one or more sensors of the device) is shown. The device may be an autonomous device capable of autonomously navigating and moving within an environment. In one example, visual data (e.g., generated by a camera of the device) may be input to a first portion of a neural network model implemented as a visual odometry neural network portion (2620). Additionally, inertial data (e.g., generated by an IMU of the device) may also be input to a second portion of the neural network model implemented as an inertial odometry neural network portion (2622). The respective outputs of the visual odometry network portion and the inertial odometry network portion may be concatenated and then provided as inputs to a first of a set of fully connected layers in the neural network model. The neural network model may generate an output representing a post of the device based on the combined input of the visual data and the inertial data (2626).
[0162] Referring to FIG. 26C, an improved technique for determining a relative pose estimate is shown. For example, point cloud data captured to describe a view of an environment (and to describe two volumes (e.g., sub-volumes of the entire environment)) may be converted (at 2630, 2632) into respective voxelized volumetric data structures (e.g., VOLA-based structures) each representing a corresponding volume. These volumetric data structures may then be sliced or otherwise converted (at 2634, 2636) into 2D data structures (e.g., respective sets of 2D slices), and the 2D slices may be provided as inputs (at 2638) to a trained convolutional neural network model to determine a relative pose estimate. In practice, the convolutional neural network model may generate (at 2640) a result representing a relative pose estimate based on the volumes described in the two voxelized volumetric data structures.
[0163] 27 is a simplified block diagram illustrating an exemplary multi-slot vector processor (e.g., a very long instruction word (VLIW) vector processor) according to some embodiments. In this example, the vector processor may include multiple (e.g., nine) functional units (e.g., 2703 through 2711), which may be fed by a multi-port memory system 2700 backed by a vector register file (VRF) 2701 and a general purpose register file (GRF) 2702. The processor includes an instruction decoder (IDEC) 2712 that decodes instructions and generates control signals to control the functional units 2703-2711. The functional units 2703 to 2711 are a predicated execution unit (PEU) 2703, a branch and repeat unit (BRU) 2704, a load store port unit (e.g., LSU0 2705 and LSU1 2706), a vector arithmetic unit (VAU) 2707, a scalar arithmetic unit (SAU) 2710, a compare and move unit (CMU) 2708, an integer arithmetic unit (IAU) 2711, and a volumetric acceleration unit (VXU) 2800. In this particular implementation, the VXU 2800 may accelerate operations on volumetric data, including both store / lookup operations, logical operations, and arithmetic operations. While the example of FIG. 27 shows the VXU circuitry 2800 as a single component, it should be understood that the functionality of the VXU (and the other functional units 2703 to 2711) may be distributed among multiple circuits. Additionally, in some implementations, among other example implementations, the functionality of the VXU 2800 may be distributed within one or more of the other functional units of the processor (e.g., 2703 through 2708, 2710, 2711).
[0164] 28 is a simplified block diagram illustrating an example implementation of a VXU 2800 according to some embodiments. For example, the VXU 2800 may provide at least one 64-bit input port 2801 to accept input from either a vector register file 2801 or a general purpose register file 2802. This input may be connected to multiple functional units including a register file 2803, an address generator 2804, a point addressing logic 2805, a point insertion logic 2806, a point deletion 3D logic 2807, a 3D to 2D projection logic in the X dimension 2808, a Y dimension 3D to 2D projection logic 2809, a 3D to 2D projection logic in the Z dimension 2810, a 2D histogram pyramid generator 2811, a 3D histogram pyramid generator 2812, a population counter 2813, a 2D pathfinding logic 2814, a 3D pathfinding logic 2815, and possibly further functional units for operating on 64-bit unsigned integer volumetric bitmaps. The output from block 2802 may be written back to either a vector register file VRF 2801 or a general purpose register file GRF 2802.
[0165] Referring to the example of FIG. 29, a representation of the organization of a 4^3 voxel cube 2900 is shown. A second voxel cube 2901 is also shown. In this example, the voxel cube may be defined in the data as a 64-bit integer 2902, where each and every voxel in the cube is represented by a single corresponding bit of the 64-bit integer. For example, voxel 2902 at address {x,y,z}={3,0,3} may be set to "1" to indicate that geometry exists at that coordinate in the volumetric space represented by voxel cube 2901. Furthermore, in this example, all other voxels (other than voxel 2902) may correspond to "empty" space and may be set to "0" to indicate, among other examples, that there is no physical geometry at those coordinates. Referring to FIG. 30, an exemplary two-level sparse voxel tree 3000 is shown in accordance with some embodiments. In this example, only a single "occupied" voxel is contained within the volume (e.g., at location {15,0,15}). The top level -0 3001 of the tree in this case contains a single voxel entry {3,0,3}. As a result, that voxel points towards the next level 3002 of the tree, which contains a single voxel at element {3,0,3}. The entry in the data structure corresponding to level 0 of the sparse voxel tree is a 64-bit integer 3003 with one voxel set as occupied. Setting the voxel means that an array of 64-bit integers is then assigned to level 1 of the tree, which corresponds to the voxel volume set in 3003. In the level 1 subarray 3004, only one of the voxels is set as occupied, and all other voxels are set as unoccupied. In this example, the tree is a two-level tree, so level 1 represents the bottom of the tree, and thus the hierarchy ends here.
[0166] FIG. 31 illustrates a two-level sparse voxel tree 3100 according to some embodiments, which includes occupied voxels at locations {15,0,3} and {15,0,15} for a particular volume. The top level-0 of the tree 3101 in this case (subdividing the particular volume into 64 top level-0 voxels) includes two voxel entries {3,0,0} and {3,0,3}, and the corresponding data 3104 indicates that the two voxels are set (or occupied). The next level of the sparse voxel tree (SVT) is provided as an array of 64-bit integers that includes two subcubes 3102 and 3103, one for each voxel that is set in level 0. In the level 1 subarray 3105, two voxels v15 and v63 are set as occupied, and all other voxels are set as unoccupied and tree. This format is flexible. Because 64 entries in the next level of the tree are always allocated corresponding to each configured voxel in the upper layer of the tree. This flexibility may allow dynamically changing scene geometry to be inserted into an existing volumetric data structure in a flexible manner (i.e., not in a fixed order such as random) as long as the corresponding voxels in the upper layer are configured. Otherwise, maintaining a table of pointers would result in high memory requirements or would otherwise require at least partial restructuring of the tree to insert unexpected geometry.
[0167] FIG. 32 illustrates an alternative technique for storing voxels from FIG. 31, according to some embodiments. In this example, the entire volume 3200 contains two voxels stored at global coordinates {15,0,3} and {15,0,15} as in FIG. 31. In this approach, rather than allocating an array of 64 entries to represent all of the subcubes in level 1 below level 0, only those elements in level 1 that actually contain geometry (e.g., as indicated by whether the corresponding level 0 voxel is occupied) are allocated as corresponding 64-bit level 1 records. This results in level 1 in this example having only two 64-bit entries (i.e., for each of the 64 level 1 voxels, whether occupied or empty), rather than 64 64-bit entries. Thus, in this example, the first level 0 3204 is equivalent to 3104 in FIG. 31, but the next level 3205 has 62 times smaller memory requirements than its corresponding 3105 in FIG. 31. In some implementations, when inserting a new geometry into level 0 for which no space has been allocated in level 1, the tree must be copied and rearranged.
[0168] In the example of FIG. 32, the subvolumes can be derived by counting occupied voxels in layers above the current layer. In this way, the system can determine where in the voxel data one higher layer ends and the next lower layer begins. For example, if three layer 0 voxels are occupied, the system can predict that three corresponding layer 1 entries follow in the voxel data, and that the next entry (after these three) corresponds to the first entry in layer 2, etc. Such optimal compression can be very useful when certain parts of a scene do not change over time, or when the application requires remote transmission of volumetric data, such as from a space probe scanning the surface of Pluto, where transmitting every bit is costly and time consuming.
[0169] FIG. 33 illustrates how voxels may be inserted into a 4^3 cube represented as a 64-bit integer volumetric data structure entry to reflect changes to geometry within the corresponding volume, according to some embodiments. In one example, as shown in 3300, each voxel cube may be organized as four logical 16-bit planes within a 64-bit integer. Among other example organization, each of the planes corresponds to a Z value from 0 to 3, within each plane, each y value encodes four logical 4 displacement bits from 0 to 3, and finally, within each 4-bit y plane, each bit encodes four possible x values from 0 to 3. Thus, in this example, to insert a voxel into a 4^3 volume, one may first shift one bit by the x value 0 to 3, then shift that value by 0 / 4 / 8 / 12 bits to encode the y value, and finally, the z value may be represented by a shift of 0 / 16 / 32 / 48 bits, as shown in C code form in 3301. Finally, since each 64-bit integer may be a combination of up to 64 voxels, each written separately, the new bitmap must be logically combined with the old 64-bit value read from the sparse voxel tree by ORing the old and new bitmap values, as shown in 3302.
[0170] Referring to FIG. 34, a representation is shown to illustrate how a 3D volumetric object stored in a 64-bit integer 3400 may be projected by logically ORing in the X direction to generate a 2D pattern 3401, in the Y direction to generate a 2D output 3402, and finally in the Z direction to generate the pattern shown in 3403, according to some embodiments. FIGS. 35A, 35B, and 35C illustrate how bits from an input 64-bit integer are logically ORed to generate output projections in X, Y, and Z, according to some embodiments. In this example, table 3501 indicates, by column, which element indexes from input vector 3500 are ORed to generate x-projected output vector 3502. Table 3503 indicates, by column, which element indexes from input vector 3500 are ORed to generate Y-projected output vector 3504. Finally, 3505 indicates, by column, which element indexes from input vector 3500 are ORed to generate z-projected output vector 3506.
[0171] In the X projection, bits 0, 1, 2, and 3 from the input data 3500 are logically ORed together to generate bit 0 of the X projection 3501. For example, bit 1 in 3501 may be generated by ORing together bits 4, 5, 6, and 7, etc. from 3500. Similarly, bit 0 in the Y projection 3504 may be generated by ORing together bits 0, 4, 8, and 12 of 3500. Bit 1 of 3504 may be generated by ORing together bits 1, 5, 9, and 13, etc. of 3500. Finally, bit 0 in the Z projection 3506 may be generated by ORing together bits 0, 16, 32, and 48 of 3500. Bit 1 of 3506 may be generated by ORing together bits 1, 17, 33, and 49, etc. of 3500.
[0172] FIG. 36 shows an example of how projections can be used to generate a simplified map, according to some embodiments. The goal in this scenario may be to generate a compact 2D map of a path taken by a vehicle 3600 of height h 3610 and width w 3601 from a voxel volume 3602. Here, Y projection logic may be used to generate an initial coarse 2D map 3603 from the voxel volume 3602. In some implementations, processing the map may check whether a particular vehicle (e.g., a car (or autonomous vehicle), a drone, etc.) of particular dimensions can pass through the width constraints 3601 and height constraints 3610 of the path. This may be done to ensure that the path is traversable by performing a projection in Z to check the width constraint 3601, and the projection in Y may be masked to limit the calculation to the height of the vehicle 3610. With further post-processing (e.g., in software), it can be seen that for paths that are traversable and meet the width and height constraints, only the X and Z coordinates of points A 3604, B 3605, C 3606, D 3607, E 3608, and F 3609 along the path can be stored or transmitted over the network to fully reconstruct a legal path that a vehicle can travel. Assuming that a path can be decomposed into such piecewise segments, it is possible to fully describe the path with only one or two bytes per piecewise linear section of the path. This can aid in the rapid transmission and processing of such path data (e.g., by autonomous vehicles), among other examples.
[0173] FIG. 37 shows how either 3D volumetric measurements or simple 2D measurements from embedded devices can be aggregated by mathematical means according to some embodiments to generate a high-quality crowdsourced map instead of taking accurate measurements using LiDAR or other expensive means. In the proposed system, multiple embedded devices 3700, 3701, etc. can be equipped with various sensors that can take measurements that can be transmitted to a central server 3710. Software running on the server performs the aggregation of all measurements 3702 and performs a numerical solution by a nonlinear solver 3703 of the resulting matrix to generate a highly accurate map. This map can then be redistributed to the embedded devices. In practice, the data aggregation results can also include high-precision survey data from satellites 3720, airborne LiDAR surveys 3721 and terrestrial LiDAR measurements 3722 to increase the accuracy of the resulting map where these high-fidelity data sets are available. In some implementations, among other example implementations, the maps and / or recorded measurements may be generated within, converted to, or otherwise represented using a sparse voxel data structure of the form described herein.
[0174] 38A, 38B and 38C are diagrams illustrating how 2D pathfinding on a 2D 2x2 bitmap can be accelerated according to some embodiments. The principle of operation is that the values of x or y cells or consecutive runs of x and y cells must all be set to 1 so that there is connectivity between points on the map in the same grid cell. Hence, a logical AND of the bits drawn from those cells can be instantiated to test the bitmap in the grid for whether a valid path exists, and a different AND gate can be instantiated for each valid path through the NxN grid. In some cases, this approach can be used to accelerate even 8x8 2D grids, up to 34 43810-3821 may result in combinatorial complexity in that a grid may contain 1000-1 valid paths. Thus, in some improved implementations, the grid may be reduced to 2x2 or 4x4 tiles that may be hierarchically tested for connectivity. The 2x2 bitmap 3800 includes 4 bits labeled b0, b1, b2, and b3. The 4 bits may take values 0000 to 1111, with corresponding labels 3801 to 3817. Each of these bit patterns represents various levels of connectivity between the faces of the 2x2 grid, labeled 3821 to 3830. For example, if the 2x2 grid 3800 includes bitmaps 1010 (3812), 1011 (3813), 1110 (3816), or 1111 (3817), then there exists 3821 or v0, which indicates vertical connectivity between x0 and y0 in 3800. The two-input logical AND or b0 and b3 in 3800, as shown in row 1 of table 3818, produces a connectivity map v0 that can be used in higher level hardware or software to determine global connectivity through a global grid subdivided into 2x2 subgrids. If the global map contains an odd number of grid points on either the x-axis or y-axis, padding to the next higher even grid point is required in the top level grid (e.g., this requires adding one additional row of zeros to the x-axis and / or y-axis on the global grid). FIG. 38C further shows an exemplary 7x7 grid 3850. This grid shows how to pad to 8x8 by adding additional rows 3832 and columns 3834 filled with zeros. To speed up pathfinding compared to other techniques (e.g., depth-first search, breadth-first search, or Dijkstra's algorithm or other graph-based approaches), in this example, the NxN map 3850 may be progressively subsampled down to a 2x2 map. For example, in this example, cell W in 3840 is populated by ORing the contents of cells A, B, C, D, etc. in 3850. As a result, the bits of the 2×2 cells in 3840 are ORed together to populate the cell in 3842.For path finding, the algorithm starts with the smallest 2×2 representation of grid 3842 and tests each of the bits. Only the part of the 4×4 grid in 3840 (composed of four 2×2 grids) that corresponds to one bit in the 2×2 grid 3842 needs to be tested for connectivity, since it is known that a zero bit means that there is no corresponding 2×2 grid cell in 3840. This approach can also be used to search the 8×8 grid in 3820. For example, if cell W in 3840 contains a zero, it is known that there is no path to ABCD in 3820, etc. This approach prunes branches from the graph search algorithm used, whether it is A*, Dijkstra, DFS, BFS, or variations thereof. In addition to this, using a hardware basic path finder 3818 with a 2×2 organization can further limit the associated computations. In practice, a 4×4 basic hardware element may be constructed using five 2×2 hardware blocks in the same arrangement as 3840 and 3842 to further constrain the amount of graph searches that need to be performed. Additionally, an 8×8 hardware based search engine may be constructed with 21 2×2 HW blocks (3818) having the same arrangement as 3842, 3840, 3800, etc., potentially in any N×N topology.
[0175] 39 is a simplified block diagram showing how collision detection can be accelerated using the proposed volumetric data structure according to some embodiments. A 3D NxNxN map of geometry can be subsampled into a pyramid of NxNxN, with a 2x2x2 volume 3902 at the lowest level of detail (LoD), a 4x4x4 volume 3901 at the next higher, an 8x8x8 volume 3900, etc. If the position of the drone, vehicle or robot 3905 in 3D space is known, either via a localization means such as GPS or via relocalization from the 3D map, this position can be quickly used to test whether geometry is present in the relevant quadrant of the 2x2x2 subvolume by appropriately scaling the drone / robot's x, y and z positions (dividing them by 2 the relevant number of times) and querying 3902 for the presence of geometry (e.g., checking whether the corresponding bitmap bit is indicative of a possible collision). If a possible collision exists (e.g., a "1" is found), further checks may be performed in volumes 3901, 3900, etc. to see if the drone / robot can move. However, if the voxel in 3902 is empty (e.g., a "0"), the robot / drone can move freely through most of the map by interpreting it as free space and manipulating the directional controls.
[0176] Although some of the systems and solutions described and illustrated herein are described as including or associated with multiple elements, not all elements explicitly illustrated or described may be utilized in each of the alternative implementations of the present disclosure. Furthermore, one or more of the elements described herein may be located external to the system, while in other cases, a particular element may be included within or as part of one or more of the other elements described and other elements not described in the illustrated implementation. Furthermore, a particular element may be combined with other components as well as used for alternative or additional purposes in addition to those described herein.
[0177] Furthermore, it should be understood that the examples presented above are non-limiting examples provided merely for the purpose of illustrating certain principles and features, and do not necessarily limit or constrain potential implementations of the concepts described herein. For example, a variety of different embodiments can be realized using various combinations of the features and components described herein, including combinations realized through various implementations of the components described herein. Other implementations, features and details should be understood from the contents of this specification.
[0178] 40 to 45 are block diagrams of exemplary computer architectures that may be used in accordance with the embodiments disclosed herein. In practice, the computing devices, processors and other logic and circuits of the systems described herein may incorporate all or part of the functionality and supporting software and / or hardware circuits for implementing such functionality. Furthermore, other computer architecture designs known in the art for processors and computing systems may also be used beyond the examples shown here. In general, suitable computer architectures for the embodiments disclosed herein may include, but are not limited to, the configurations shown in FIGS. 40 to 45.
[0179] FIG. 40 illustrates an example domain topology for each Internet of Things (IoT) network coupled through links to the respective gateways. Internet of Things (IoT) is a concept whereby a large number of computing devices are interconnected with each other and to the Internet to provide functionality and data acquisition at a very low level. Thus, as used herein, an IoT device may include semi-autonomous devices that communicate with other IoT devices and wider networks such as the Internet, among others, to perform functions such as sensing or control. Such IoT devices may comprise logic and memory for implementing and using hash tables as introduced above.
[0180] IoT devices are often limited in memory, size, or functionality, so that more can be deployed at a similar cost as fewer larger devices. However, an IoT device may be a smartphone, laptop, tablet, or PC or other larger device. Additionally, an IoT device may be a virtual device, such as an application on a smartphone or other computing device. An IoT device may include an IoT gateway that is used to couple the IoT device to other IoT devices and cloud applications, such as for controlling the storage and processing of data.
[0181] A network of IoT devices may include, for example, commercial and residential automation devices such as water distribution systems, power distribution systems, pipeline control systems, plant control systems, light switches, thermostats, locks, cameras, alarms and motion sensors, etc. IoT devices may be accessible, for example, to control systems or access data through remote computers, servers and other systems.
[0182] The future growth of the Internet and similar networks may involve a very large number of IoT devices. Thus, in the context of the technology described herein, many innovations for such future networking will address the need for all of these layers to grow unhindered, discover and create accessible connected resources, and support the ability to hide and compartmentalize connected resources. Any number of network protocols and communication standards may be used, with each protocol and standard designed to address a specific purpose. Furthermore, protocols are part of the mechanisms that support human-accessible services that operate regardless of location, time, or space. Innovations include service provision and associated infrastructure such as hardware and software, security enhancements, and the provision of services based on service levels and quality of service (QoS) conditions specified in service provision agreements. As will be appreciated, with IoT devices and networks such as those introduced in Figures 40 and 41, many new challenges arise in heterogeneous networks of connectivity that include a combination of wired and wireless technologies.
[0183] FIG. 40 provides a simplified diagram of a domain topology that may be used for many Internet of Things (IoT) networks, particularly those that include an IoT device 4004. The IoT networks 4056, 4058, 4060, 4062 are coupled to respective gateways 4054 through a backbone link 4002. For example, many IoT devices 4004 may communicate with the gateway 4054 and with each other through the gateway 4054. To simplify the drawing, not all IoT devices 4004 or communication links (e.g., links 4016, 4022, 4028, or 4032) are labeled. The backbone link 4002 may include any number of wired or wireless technologies, including optical networks, and may be part of a local area network (LAN), a wide area network (WAN), or the Internet. Furthermore, such communication links facilitate optical signal paths between both the IoT devices 4004 and the gateway 4054, including the use of multiplexing / demultiplexing components to facilitate interconnection of various devices.
[0184] The network topology may include any number of types of IoT networks, such as a mesh network comprising a network 4056 using Bluetooth® Low Energy (BLE) links 4022. Other types of IoT networks that may be present include a Wireless Local Area Network (WLAN) network 4058 used to communicate with IoT devices 4004 over IEEE 802.11 (Wi-Fi®) links 4028, a cellular network 4060 used to communicate with IoT devices 4004 over an LTE / LTE-A (4G) or 5G cellular network, a Low Power Wide Area (LPWA) network 4062, such as an LPWA network compatible with the LoRaWAN specification promulgated by the LoRa Alliance, or an IPv6 over Low Power Wide-Area Network (LPWAN) network compatible with specifications promulgated by the Internet Engineering Task Force (IETF). Further, each IoT network may communicate with an external network provider (e.g., a Tier 2 provider or a Tier 3 provider) using any number of communication links, such as LTE cellular links, LPWA links, or links based on the IEEE 802.15.4 standard such as Zigbee. Each IoT network may also operate using a variety of network and Internet application protocols, such as the Constrained Application Protocol (CoAP). Each IoT network may also be integrated with a coordinator device that provides a chain of links that form a cluster tree of linked devices and networks.
[0185] Each of these IoT networks may provide opportunities for new technical features such as those described herein. Improved technologies and networks may enable exponential growth of devices and networks, including using IoT networks as fog devices or systems. As the use of such improved technologies increases, IoT networks may become developed for self-management, function evolution, and collaboration without the need for direct human intervention. Improved technologies may even enable IoT networks to function without a centralized control system. Thus, the improved technologies described herein may be used to automate and enhance network management and operational capabilities well beyond current implementations.
[0186] In an example, communication between IoT devices 4004, for example via backbone link 4002, may be secured by a decentralized system for authentication, authorization, and accounting (AAA). In a decentralized AAA system, decentralized payment, credit, audit, authorization, and authentication systems may be implemented across interconnected heterogeneous network infrastructures. This allows systems and networks to move towards autonomous operation. In these types of autonomous operation, machines may enter into contracts for human resources and even negotiate partnerships with other machine networks. This may allow for the realization of mutual objectives and balanced service delivery against outlined and planned service level agreements, as well as solutions that provide metering, measurement, traceability, and traceability. Creating new supply chain structures and methods may allow for the creation of numerous services, mining value, and disruption without any human involvement.
[0187] Such IoT networks can be further enhanced by integrating sensing technologies such as sound, light, electronic traffic, face and pattern recognition, smell, vibration, etc. into an autonomous organization among IoT devices. The integration of sensing systems can enable systematic and autonomous communication and service delivery coordination, orchestration, and Quality of Service (QoS) based swarming and fusion of resources against contractual service objectives. Some of the individual examples of network-based resource processing include the following:
[0188] For example, the mesh network 4056 may be augmented with systems that perform in-line data-to-information conversion. For example, a self-forming chain of processing resources including a multi-link network may decentralize the conversion of raw data to information in an efficient manner as well as the ability to distinguish between assets and resources and the associated management of each. Additionally, the insertion of appropriate components of infrastructure and resource-based trust indexes and service indexes may improve data integrity, quality, and authenticity and provide metrics of data reliability.
[0189] For example, the WLAN network 4058 may provide multi-standard connectivity using a system that performs standard translation, allowing IoT devices 4004 using different protocols to communicate. Further systems may provide seamless interoperability across a multi-standard infrastructure that includes visible and hidden Internet resources.
[0190] For example, communications within the cellular network 4060 may be enhanced with systems that offload data, extend communications to more remote devices, or both. The LPWA network 4062 may include systems that perform non-Internet Protocol (IP) to IP interconnection, addressing, and routing. Additionally, each of the IoT devices 4004 may include an appropriate transceiver for wide area communications with that device. Additionally, each IoT device 4004 may include other transceivers for communications using additional protocols and frequencies. This is further described with respect to the communications environment and hardware of the IoT processing device shown in FIG. 42 and FIG. 43.
[0191] Finally, a cluster of IoT devices may be equipped to communicate not only with other IoT devices, but also with a cloud network. This may enable the IoT devices to form ad-hoc networks between themselves and allow them to function as a single device, which may be referred to as a fog device. This configuration is further described with respect to FIG. 41 below.
[0192] 41 illustrates a cloud computing network in communication with a mesh network of IoT devices (devices 4102) operating as fog devices at the edge of the cloud computing network. The mesh network of IoT devices may be referred to as fog 4120 operating at the edge of the cloud 4100. To simplify the illustration, not all IoT devices 4102 are labeled.
[0193] The fog 4120 may be considered to be a large-scale interconnected network in which many IoT devices 4102 communicate with each other, for example, by wireless links 4122. By way of example, this interconnected network may be facilitated using interconnection specifications published by the Open Connectivity Foundation™ (OCF). These standards enable devices to discover each other and establish communications for interconnection. Other interconnection protocols may also be used, including, for example, the Optimized Link State Routing (OLSR) protocol, the Better Approach to Mobile Ad-Hoc Networking (BATMAN) routing protocol, or the OMA Lightweight M2M (LWM2M) protocol, among others.
[0194] In this example, three types of IoT devices 4102 are shown: a gateway 4104, a data aggregator 4126, and a sensor 4128, although any combination of IoT devices 4102 and functions may be used. The gateway 4104 may be an edge device providing communication between the cloud 4100 and the fog 4120 and may also provide back-end processing functions for data obtained from the sensors 4128, such as, for example, motion data, flow data, and temperature data. The data aggregator 4126 may collect data from any number of sensors 4128 and perform back-end processing functions for analysis. The analysis results, raw data, or both may be passed to the cloud 4100 through the gateway 4104. The sensor 4128 may be a full IoT device 4102 that can, for example, both collect data and process data. In some cases, the sensor 4128 may be more limited in functionality, such as, for example, collecting data and allowing the data aggregator 4126 or gateway 4104 to process the data.
[0195] Communications from any IoT device 4102 may be passed along the most convenient path (e.g., the most convenient route) between any of the IoT devices 4102 to reach the gateway 4104. In these networks, the number of interconnections provides substantial redundancy, making it possible to maintain communications even if many IoT devices 4102 are lost. Additionally, mesh networks may enable the use of IoT devices 4102 that are very low power or located far from infrastructure, since the range of connecting to another IoT device 4102 may be much smaller than the range of connecting to a gateway 4104.
[0196] The fog 4120 provided from these IoT devices 4102 may be presented to devices in the cloud 4100, such as the server 4106, as a single device, e.g., a fog device, located at the edge of the cloud 4100. In this example, alerts coming in from a fog device may be sent without being identified as coming from a particular IoT device 4102 in the fog 4120. In this manner, the fog 4120 may be considered a distributed platform that provides computational and storage resources for performing processing or data-intensive tasks such as data analytics, data aggregation, and machine learning, among others.
[0197] In some examples, the IoT devices 4102 may be configured using an imperative programming style, e.g., each IoT device 4102 has specific capabilities and communication partners. However, the IoT devices 4102 forming fog devices may be configured in a declarative programming style, allowing the IoT devices 4102 to reconfigure their computations and communications, e.g., determining required resources in response to conditions, queries, and device failures. As an example, as a result of a query from a user located at the server 4106 about the operation of a subset of equipment monitored by the IoT devices 4102, the fog 4120 device may select IoT devices 4102, such as specific sensors 4128, needed to respond to the query. Data from these sensors 4128 may then be aggregated and analyzed by any combination of sensors 4128, data aggregators 4126, or gateways 4104 before being transmitted by the fog 4120 device to the server 4106 to respond to the query. In this example, the IoT devices 4102 in the fog 4120 may select the sensors 4128 to be used based on the query, such as adding data from a flow sensor or a temperature sensor. Additionally, in the event that some of the IoT devices 4102 are not operational, other IoT devices 4102 in the fog 4120 device may provide similar data when available.
[0198] In another example, the operations and functions described above may be embodied by an IoT device machine in the exemplary form of an electronic processing system, within which a set or sequence of instructions may be executed to cause the electronic processing system to perform any one of the methods described herein, according to an exemplary embodiment. The machine may be an IoT device or IoT gateway, including a machine embodied in the form of a personal computer (PC), a tablet PC, a personal digital assistant (PDA), a mobile phone or a smartphone, or any machine capable of executing instructions (sequential or otherwise) that specify actions to be taken by the machine. Furthermore, while only a single machine may be illustrated and referred to in the above examples, such a machine shall also be construed to include any collection of machines that individually or jointly execute a set (or sets) of instructions to perform any one or more of the methods described herein. Furthermore, these and similar examples for processor-based systems shall be construed to include any set of one or more machines controlled or operated by a processor (e.g., a computer) to individually or jointly execute instructions to perform any one or more of the methods described herein. In some implementations, one or more devices may work in concert to implement functions and perform tasks described herein. In some cases, one or more host devices may supply data, provide instructions, aggregate results, or otherwise facilitate joint operations and functions provided by multiple devices. Although functions may be considered local to a device when implemented by a single device, in implementations of multiple devices operating as a single machine, among other example implementations, functions may be considered collectively local to the devices, and this collection of devices may provide or consume results provided by other remote machines (implemented as a single device or collective devices).
[0199] For example, FIG. 42 shows a diagram of a cloud computing network or cloud 4200 in communication with many Internet of Things (IoT) devices. The cloud 4200 may represent the Internet, or may be a local area network (LAN) or wide area network (WAN), such as a corporate proprietary network. The IoT devices may include any number of different types of devices grouped in various combinations. For example, a traffic control group 4206 may include IoT devices along city streets. These IoT devices may include stoplights, traffic flow monitors, cameras, and weather sensors, etc. The traffic control group 4206 or other subgroups may be in communication with the cloud 4200 through wired or wireless links 4208, such as LPWA links and optical links. Additionally, wired or wireless sub-networks 4212 may enable the IoT devices to communicate with each other, such as through local area networks and wireless local area networks. The IoT devices may communicate with a remote location, such as the cloud 4200, using another device, such as a gateway 4210 or 4228. The IoT devices may also use one or more servers 4230 to facilitate communication with the cloud 4200 or gateway 4210. For example, the one or more servers 4230 may operate as intermediate network nodes to support local edge cloud or fog implementations between local area networks. Additionally, the illustrated gateway 4228 may operate in a cloud-to-gateway-to-many edge device configuration, for example, with the various IoT devices 4214, 4220, 4224 being constrained or dynamic with respect to allocation and usage of resources in the cloud 4200.
[0200] Other example groups of IoT devices may include, among others, a remote weather station 4214, a local information terminal 4216, an alarm system 4218, an automated teller machine 4220, an alarm panel 4222, or mobile vehicles such as an emergency vehicle 4224 or other vehicle 4226. Each of these IoT devices may be in communication with other IoT devices, a server 4204, another IoT fog device or system (not shown, but shown in FIG. 41), or a combination thereof. The groups of IoT devices may be deployed in a variety of residential, commercial, and industrial environments, including both private and public environments.
[0201] As can be seen from FIG. 42, multiple IoT devices may be communicating through the cloud 4200. This may enable different IoT devices to autonomously request or provide information to other devices. For example, a group of IoT devices (e.g., traffic control group 4206) may request a current weather forecast from a group of remote weather stations 4214 that may provide forecasts without human intervention. Additionally, an emergency vehicle 4224 may be alerted to an automated teller machine 4220 that a robbery is in progress. As the emergency vehicle 4224 proceeds toward the automated teller machine 4220, it may access the traffic control group 4206 to request clearance to its location. This clearance may be, for example, by a traffic light turning red to hold back cross traffic at the intersection in time enough for the emergency vehicle 4224 to access the intersection unhindered.
[0202] A cluster of IoT devices, such as a remote weather station 4214 or a traffic control group 4206, may be equipped to communicate not only with other IoT devices, but also with the cloud 4200. This may enable the IoT devices to form ad-hoc networks between themselves and function as a single device that may be referred to as a fog device or system (e.g., as described above with reference to FIG. 41).
[0203] FIG. 43 is a block diagram of example components that may be present in an IoT device 4350 to implement the techniques described herein. The IoT device 4350 may include any combination of components shown in this example or mentioned in the disclosure above. The components may be implemented as an IC, a portion thereof, a discrete electronic device, or other module, logic, hardware, software, firmware, or combinations thereof adapted within the IoT device 4350, or as components otherwise incorporated within the chassis of a larger system. Additionally, the block diagram of FIG. 43 is intended to illustrate a high level view of the components of the IoT device 4350. However, in other implementations, some of the components shown may be omitted, additional components may be present, and different arrangements of the components shown may be made.
[0204] The IoT device 4350 may include a processor 4352. The processor 4352 may be a microprocessor, a multi-core processor, a multi-threaded processor, an ultra-low voltage processor, an embedded processor, or other known processing element. The processor 4352 may be part of a system-on-chip (SoC) in which the processor 4352 and other components are formed within a single integrated circuit or within a single package, such as an Intel® Edison™ or Galileo™ SoC substrate. By way of example, the processor 4352 may include an Intel® Architecture Core™ based processor, such as a Quark™, Atom™, i3, i5, i7 or MCU class processor, or another such processor available from Intel® Corporation of Santa Clara, California. However, any number of other processors may be used, such as those available from Advanced Micro Devices, Inc. (AMD) of Sunnyvale, Calif., MIP-based designs from MIPS Technologies, Inc. of Sunnyvale, Calif., ARM-based designs licensed from ARM Holdings, Ltd. or its customers or its licensees or adopters. These processors may include units such as the A5-A10 processors from Apple® Inc., the Snapdragon™ processors from Qualcomm® Technologies, Inc., or the OMAP™ processors from Texas Instruments, Inc.
[0205] The processor 4352 may communicate with the system memory 4354 via an interconnect 4356 (e.g., a bus). Any number of memory devices may be used to provide a given amount of system memory. By way of example, the memory may be random access memory (RAM) according to a Joint Electronics Engineering Council (JEDEC) design, such as DDR or mobile DDR standards (e.g., LPDDR, LPDDR2, LPDDR3, or LPDDR4). In various implementations, the individual memory devices may be in any number of different package types, such as a single die package (SDP), a dual die package (DDP), or a quad die package (Q17P). In some examples, these devices may be soldered directly onto a motherboard to provide a lower profile solution, while in other examples, the devices are configured as one or more memory modules that result in a given connector that couples to the motherboard. Any number of other memory implementations may be used, such as other types of memory modules, such as different types of dual in-line memory modules (DIMMs), including, but not limited to, microDIMMs or MiniDIMMs.
[0206] Storage 4358 may also be coupled to processor 4352 via interconnect 4356 to provide persistent storage of information, such as, for example, data, applications, and operating systems. In an example, storage 4358 may be implemented via a solid-state disk drive (SSDD). Other devices that may be used for storage 4358 include, for example, flash memory cards, such as SD cards, microSD cards, and xD picture cards, and USB flash drives. In low-power implementations, storage 4358 may be on-die memory or registers associated with processor 4352. However, in some examples, storage 4358 may be implemented using a micro hard disk drive (HDD). Additionally, any number of new technologies may be used for storage 4358 in addition to or instead of the described technologies, such as resistive memory, phase change memory, holographic memory, or chemical memory, among others.
[0207] These components may communicate via an interconnect 4356. The interconnect 4356 may include any number of other technologies including Industry Standard Architecture (ISA), Extended ISA (EISA), Peripheral Component Interconnect (PCI), Peripheral Component Interconnect Extended (PCIx), PCI Express (PCIe), or any number of other technologies. The interconnect 4356 may be, for example, a proprietary bus used in SoC-based systems. Other bus systems may be included, such as an I2C interface, an SPI interface, a point-to-point interface, and a power bus, among others.
[0208] The interconnect 4356 may couple the processor 4352 to the mesh transceiver 4362 for communication with other mesh devices 4364. The mesh transceiver 4362 may use any number of frequencies and protocols, such as 2.4 Gigahertz (GHz) transmissions based on the IEEE 802.15.4 standard, using the Bluetooth® Low Energy (BLE) standard or the Zigbee® standard, among others, as defined by the Bluetooth® Special Interest Group. Any number of radios configured for a particular wireless communication protocol may be used for connection to the mesh device 4364. For example, a WLAN unit may be used to implement Wi-Fi communication according to the Institute of Electrical and Electronics Engineers (IEEE) 802.11 standard. In addition, wireless wide area communication, for example by cellular or other wireless wide area protocols, may occur via the WWAN unit.
[0209] The mesh transceiver 4362 may communicate using multiple standards or radios for communication at different ranges. For example, the IoT device 4350 may save power by communicating with nearby devices, e.g., within about 10 meters, using a local transceiver based on BLE or another low power radio. It may reach more distant mesh devices 4364, e.g., within about 50 meters, via Zigbee or other medium power radio. Both communication techniques may be done via a single radio at different power levels, e.g., via separate transceivers, such as a local transceiver using BLE and a separate mesh transceiver using Zigbee.
[0210] A wireless network transceiver 4366 may be included to communicate with devices or services in the cloud 4300 via a local area network protocol or a wide area network protocol. The wireless network transceiver 4366 may be an LPWA transceiver according to the IEEE 802.15.4 or IEEE 802.15.4g standard, among others. The IoT device 4350 may communicate over a wide area using LoRaWAN™ (Long Range Wide Area Network) developed by Semtech and the LoRa Alliance. The techniques described herein may be used with any number of other cloud transceivers implementing long range, low bandwidth communication, such as, but not limited to, Sigfox, and other techniques. Additionally, other communication techniques may be used, such as time slotted channel hopping as described in the IEEE 802.15.4e specification.
[0211] In addition to the systems mentioned for the mesh transceiver 4362 and the wireless network transceiver 4366 as described herein, any number of other wireless communications and protocols may be used. For example, the wireless transceivers 4362 and 4366 may include LTE or other cellular transceivers that use spread spectrum (SPA / SAS) communications to implement high speed communications. Additionally, any number of other protocols may be used, such as a Wi-Fi network for providing network communications and medium speed communications.
[0212] The radio transceivers 4362 and 4366 may include radios compatible with any number of 3GPP (Third Generation Partnership Project) specifications, in particular Long Term Evolution (LTE), Long Term Evolution Advanced (LTE-A) and Long Term Evolution Advanced Pro (LTE-A Pro). However, radios compatible with any number of other fixed, mobile or satellite communication technologies and standards may be selected. These may include, for example, any cellular wide area wireless communication technology. The cellular wide area wireless communication technology may include, for example, the fifth generation (5G) communication system, the Global System for Mobile Communications (GSM) wireless communication technology, the General Packet Radio Service (GPRS) wireless communication technology, or the Enhanced Data Rates for GSM Evolution (EDGE) wireless communication technology, the Universal Mobile Telecommunications System (UMTS) communication technology. In addition to the standards listed above, any number of satellite uplink technologies may be used for the wireless network transceiver 4366, including, for example, radios conforming to standards issued by the ITU (International Telecommunications Union) or ETSI (European Telecommunications Standards Institute), among others. Thus, it is understood that the examples provided herein are applicable to various other communication technologies, both existing and yet to be formulated.
[0213] A network interface controller (NIC) 4368 may be included to provide wired communications to the cloud 4300 or other devices such as mesh device 4364. The wired communications may provide an Ethernet connection or may be based on other types of networks such as a controller area network (CAN), local interconnect network (LIN), DeviceNet, ControlNet, Data Highway+, PROFIBUS or PROFINET, among others. Additional NICs 4368 may be included to allow connection to a second network, e.g., a NIC 4368 that provides communications to the cloud via Ethernet, and a second NIC 4368 that provides communications to other devices via another type of network.
[0214] The interconnect 4356 may couple the processor 4352 to an external interface 4370 used to connect to external devices or subsystems. The external devices may include sensors 4372, such as, for example, accelerometers, level sensors, flow sensors, optical light sensors, camera sensors, temperature sensors, Global Positioning System (GPS) sensors, pressure sensors, and barometric pressure sensors. The external interface 4370 may further be used to connect the IoT device 4350 to actuators 4374, such as, for example, power switches, valve actuators, audible sound generators, visual warning devices, and the like.
[0215] In some example options, various input / output (I / O) devices may be present within or connected to the IoT device 4350. For example, a display or other output device 4384 may be included to show information such as sensor readings or actuator positions. Input devices 4386 such as a touch screen or keypad may be included to accept input. The output devices 4384 may include any number of forms of auditory or visual indications. These indications include simple visual outputs such as binary status indicators (e.g., LEDs) and multi-character visual outputs, or more complex outputs such as a display screen (e.g., LCD screen) where output of characters, graphics, multimedia objects, etc. are generated or result from operation of the IoT device 4350.
[0216] The battery 4376 may provide power to the IoT device 4350, or in instances where the IoT device 4350 is mounted in a fixed location, may have a power source coupled to a utility grid. The battery 4376 may be a lithium ion battery or a metal-air battery, such as, for example, zinc-air, aluminum-air, and lithium-air batteries.
[0217] The IoT device 4350 may include a battery monitor / charger 4378 to track the state of charge (SoCh) of the battery 4376. The battery monitor / charger 4378 may be used to monitor other parameters of the battery 4376 to provide failure predictions such as state of health (SoH) and state of function (SoF) of the battery 4376. The battery monitor / charger 4378 may include a battery monitoring integrated circuit such as the LTC4020 or LTC2990 from Linear Technologies, the ADT7488A from ON Semiconductor of Phoenix, Arizona, or the UCD90xxx family of ICs from Texas Instruments of Dallas, Texas. The battery monitor / charger 4378 may communicate information regarding the battery 4376 to the processor 4352 via the interconnect 4356. The battery monitor / charger 4378 may also include an analog-to-digital (ADC) converter that allows the processor 4352 to directly monitor the voltage of the battery 4376 or the current from the battery 4376. The battery parameters may be used to determine the operations that the IoT device 4350 may perform, such as, for example, transmission frequency, mesh network operation, and sensing frequency.
[0218] To charge the battery 4376, a power generation block 4380, or other power source coupled to a power grid, may be coupled to a battery monitor / charger 4378. In some examples, the power generation block 4380 may be replaced with a wireless power receiver to obtain power wirelessly, for example, through a loop antenna in the IoT device 4350. The battery monitor / charger 4378 may include, among other things, a wireless battery charging circuit such as the LTC4020 chip from Linear Technologies of Milpitas, Calif. The particular charging circuit chosen depends on the size of the battery 4376 and thus the current required. Charging may be performed using, among other things, the Airfuel standard promulgated by the Airfuel Alliance, the Qi wireless charging standard promulgated by the Wireless Power Consortium, or the Rezence charging standard promulgated by the Alliance for Wireless Power.
[0219] Storage 4358 may include instructions 4382 in the form of software, firmware, or hardware commands for implementing the techniques described herein. Although such instructions 4382 are shown as code blocks contained in memory 4354 and storage 4358, it may be understood that any of the code blocks may be replaced by hardwired circuitry, for example, incorporated into an application specific integrated circuit (ASIC).
[0220] In an example, the instructions 4382 provided via the memory 4354, storage 4358, or processor 4352 may be embodied as a non-transitory machine-readable medium 4360 including code for directing the processor 4352 to perform electronic operations within the IoT device 4350. The processor 4352 may access the non-transitory machine-readable medium 4360 via the interconnect 4356. For example, the non-transitory machine-readable medium 4360 may be embodied by a device described for the storage 4358 in FIG. 43 and may include a specific storage unit such as an optical disk, a flash drive, or any number of other hardware devices. The non-transitory machine-readable medium 4360 may include instructions for directing the processor 4352 to perform a particular sequence or flow of operations, for example, as described with respect to the operational and functional flowcharts and block diagrams shown above.
[0221] FIG. 44 is an exemplary diagram of a processor according to an embodiment. Processor 4400 is an example of a type of hardware device that may be used in connection with the implementations described above. Processor 4400 may be any type of processor, such as a microprocessor, embedded processor, digital signal processor (DSP), network processor, multi-core processor, single-core processor, or other device for executing code. Although only one processor 4400 is shown in FIG. 44, a processing element may alternatively include more than one processor 4400 as shown in FIG. 44. Processor 4400 may be a single-threaded core, or may be multi-threaded in that it may include more than one hardware thread context (or "logical processor") per core, in at least one embodiment.
[0222] 44 also illustrates a memory 4402 coupled to the processor 4400 according to an embodiment. The memory 4402 may be any of a wide variety of memories (including various layers of a memory hierarchy) known or otherwise available to one of skill in the art. Such memory elements may include, but are not limited to, random access memory (RAM); read-only memory (ROM); logic blocks of a field programmable gate array (FPGA); erasable programmable read-only memory (EPROM); and electrically erasable programmable ROM (EEPROM).
[0223] The processor 4400 can execute any type of instruction associated with an algorithm, process, or operation described herein. Generally, the processor 4400 can transform elements or items (e.g., data) from one state or condition to another state or condition.
[0224] Code 4404, which may be one or more instructions executed by the processor 4400, may be stored in memory 4402, or in software, hardware, firmware, or any suitable combination thereof, or in any other internal or external component, device, element, or object, as appropriate, based on a particular need. In one example, the processor 4400 may follow a program sequence of instructions indicated by code 4404. Each instruction enters front-end logic 4406 and is processed by one or more decoders 4408. The decoder may generate as its output micro-operations, such as fixed-width micro-operations of a predefined format, or may generate other instructions, micro-instructions, or control signals that reflect the original code instruction. The front-end logic 4406 also includes register renaming logic 4410 and scheduling logic 4412. These logics generally allocate resources and queue operations corresponding to the instructions for execution.
[0225] The processor 4400 may also include execution logic 4414 having a set of execution units 4416a, 4416b, 4416n, etc. Some embodiments may include many execution units dedicated to a particular function or set of functions. Other embodiments may include only one execution unit, or one execution unit that may perform a particular function. The execution logic 4414 performs operations specified by code instructions.
[0226] After completing execution of the operations specified by the code instructions, the back-end logic 4418 can retire the instructions of the code 4404. In one embodiment, the processor 4400 allows out-of-order execution but requires in-order retirement of instructions. The retirement logic 4420 may take a variety of known forms (e.g., a reorder buffer, etc.). Thus, the processor 4400 is transformed during execution of the code 4404 with respect to at least the outputs generated by the decoder, the hardware registers and tables utilized by the register renaming logic 4410, and any registers (not shown) modified by the execution logic 4414.
[0227] Although not shown in FIG. 44, a processing element may include other elements on a chip with processor 4400. For example, a processing element may include memory control logic along with processor 4400. A processing element may include I / O control logic and / or I / O control logic integrated with memory control logic. A processing element may also include one or more caches. In some embodiments, non-volatile memory (such as flash memory or fuses) may also be included on a chip with processor 4400.
[0228] FIG. 45 illustrates a computing system 4500 arranged in a point-to-point (PtP) configuration, according to an embodiment. In particular, FIG. 45 illustrates a system in which a processor, memory, and input / output devices are interconnected by a number of point-to-point interfaces. In general, one or more of the computing systems described herein may be configured in the same or similar manner as computing system 4500.
[0229] The processors 4570 and 4580 may also each include integrated memory controller logic (MC) 4572 and 4582 for communicating with the memory elements 4532 and 4534. In alternative embodiments, the memory controller logic 4572 and 4582 may be discrete logic separate from the processors 4570 and 4580. The memory elements 4532 and / or 4534 may store various data used by the processors 4570 and 4580 in implementing the operations and functions outlined herein.
[0230] The processors 4570 and 4580 may be any type of processor, such as those described in connection with other figures. The processors 4570 and 4580 may exchange data via a point-to-point (PtP) interface 4550 using point-to-point interface circuits 4578 and 4588, respectively. The processors 4570 and 4580 may each exchange data with the chipset 4590 via respective point-to-point interfaces 4552 and 4554 using point-to-point interface circuits 4576, 4586, 4594 and 4598. The chipset 4590 may also exchange data with the high performance graphics circuit 4538 via a high performance graphics interface 4539 using an interface circuit 4592, which may be a PtP interface circuit. In an alternative embodiment, any or all of the PtP links shown in FIG. 45 may be implemented as a multi-drop bus rather than a PtP link.
[0231] The chipset 4590 may communicate with the bus 4520 via an interface circuit 4596. The bus 4520 may have one or more devices communicating therethrough, such as a bus bridge 4518 and an I / O device 4516. The bus bridge 4518 may communicate with other devices via the bus 4510, such as a user interface 4512 (such as a keyboard, mouse, touch screen or other input device), a communication device 4526 (such as a modem, network interface device, or other type of communication device that may communicate over a computer network 4560), an audio I / O device 4514, and / or a data storage device 4528. The data storage device 4528 may store code 4530 that may be executed by the processor 4570 and / or 4580. In alternative embodiments, any portion of the bus architecture may be implemented with one or more PtP links.
[0232] The computer system shown in Figure 45 is a schematic diagram of an embodiment of a computing system that may be utilized to implement various embodiments described herein. It will be understood that the various components of the system shown in Figure 45 may be combined in a system-on-chip (SoC) architecture or in any other suitable configuration capable of realizing the functionality and features of the examples and implementations provided herein.
[0233] In a further example, a machine-readable medium includes any tangible medium that can store, encode, or carry instructions executed by a machine and cause a machine to perform any one or more of the methods of the present disclosure, or that can store, encode, or carry data structures used for or associated with such instructions. Thus, a "machine-readable medium" can include, but is not limited to, solid-state memory, as well as optical and magnetic media. Specific examples of machine-readable media include, but are not limited to, non-volatile memories, including semiconductor memory devices (e.g., Electrically Programmable Read-Only Memory (EPROM), Electrically Erasable Programmable Read-Only Memory (EEPROM)) and flash memory devices, magnetic disks such as internal hard disks and removable disks, magneto-optical disks, and CD-ROM and DVD-ROM disks, as examples. The instructions embodied by the machine-readable medium can further be transmitted or received over a communication network using a transmission medium via a network interface device that utilizes any one of a number of transfer protocols (e.g., HTTP).
[0234] It should be understood that functional units or functions described herein may be referred to or labeled as components or modules to more specifically emphasize their implementation independence. Such components may be embodied in any number of software or hardware forms. For example, a component or module may be implemented as a hardware circuit comprising custom Very Large Scale Integration (VLSI) circuits or gate arrays, off-the-shelf semiconductor transistors such as logic chips or other discrete components. A component or module may also be implemented in a programmable hardware device such as a field programmable gate array, programmable array logic or programmable logic device. A component or module may also be implemented in software executed by various types of processors. An identified component or module of executable code may, for example, include one or more physical or logical blocks of computer instructions, which may be organized as, for example, an object, procedure or function. Nevertheless, the executable files of an identified component or module need not be physically located together, but may include entirely different instructions stored in different locations that, when logically linked together, include the component or module and achieve the stated object of the component or module.
[0235] In practice, an executable code component or module may be a single instruction or many instructions, and may even be distributed over several different code segments, among different programs, and across several memory devices or processing systems. In particular, some aspects of the described processing (such as rewriting the code and analyzing the code) may be performed in a processing system (e.g., in a computer in a data center) different from the processing system in which the code is deployed (e.g., a computer embedded in a sensor or robot). Similarly, operational data may be identified and illustrated in components or modules herein, and may be embodied in any suitable form and organized in any suitable type of data structure. The operational data may be collected as a single data set, may be distributed across different locations, including across different storage devices, or may exist, at least in part, simply as electronic signals on a system or network. The components or modules may be passive or active, including agents operable to perform the required functions.
[0236] Further examples of embodiments of the methods, systems and devices described herein include the following non-limiting configurations, each of which may stand alone or may be combined in any permutation or combination with any one or more of the other examples provided below or throughout this disclosure.
[0237] While the present disclosure has been described in terms of particular implementations and generally associated methods, modifications and permutations of these implementations and methods will be apparent to those skilled in the art. For example, the operations described herein may be performed in an order different from that described and still achieve desirable results. As an example, the processes depicted in the accompanying figures do not necessarily need to be in the particular order or sequence depicted to achieve the desired results. In certain implementations, multitasking and parallel processing may be advantageous. Additionally, other user interface layouts and functionality may be supported. Other variations are within the scope of the following claims.
[0238] Although this specification contains many specific implementation details, these should not be construed as limitations on the scope of any invention or what may be claimed, but as descriptions of features specific to particular embodiments of a particular invention. Certain features described herein in the context of separate embodiments may be implemented in combination in a single embodiment. Conversely, various features described in the context of a single embodiment may be implemented separately in multiple embodiments or in any suitable subcombination. Furthermore, although features may be described above as functioning in a particular combination and may even initially be claimed as such, in some cases one or more features from a claimed combination may be deleted from the combination, and the claimed combination may relate to a subcombination or a variation of the subcombination.
[0239] Similarly, although the figures depict operations in a particular order, this should not be understood as requiring that such operations be performed in the particular order or sequence depicted, nor should all of the operations depicted be performed, to achieve desirable results. In certain circumstances, multitasking and parallel processing may be advantageous. Furthermore, the separation of various system components in the embodiments described above should not be understood as requiring such separation in all embodiments. It should be understood that the program components and systems described may generally be integrated together in a single software product or packaged into multiple software products.
[0240] The following examples relate to embodiments according to the present disclosure. Example 1 is an apparatus comprising: a data processing apparatus; a memory for storing a volumetric data structure for representing a three-dimensional (3D) volume, the volumetric data structure including a sparse hierarchical volumetric data structure including a set of upper level voxels, each upper level voxel representing a respective sub-volume in the 3D volume at a first resolution, each upper level voxel including a set of lower level voxels for representing the sub-volume of each upper level voxel at a second, higher resolution; and a ray caster executable by the data processing apparatus for performing a ray casting algorithm, the ray casting algorithm receiving the volumetric data structure as an input, performing the ray casting algorithm including: casting a plurality of rays from a reference point into the 3D volume; and determining, for each of the plurality of rays, whether the ray intersects a voxel in the set of voxels and whether the voxel in the set of voxels is occupied, the ray being traversed according to an approximate traversal.
[0241] Example 2 includes the subject matter described in example 1. Traversing the ray includes determining from the volumetric data structure that each occupied lower-level voxel in the geometry is included by only a subset of the set of higher-level voxels.
[0242] Example 3 includes the subject matter described in example 2. Traversing the ray further includes determining a subset of lower-level voxels intersected by the ray, where a portion of all of the lower-level voxels intersected by the ray are within the subset based on the approximate traversal.
[0243] Example 4 includes the subject matter of any one of Examples 2 and 3. Traversing the ray includes skipping analysis of lower level voxels in each higher level voxel determined based on the volumetric data structure to not include an occupied lower level voxel.
[0244] Example 5 includes the subject matter of example 4. The analysis includes checking whether a lower level voxel within one of the subsets of higher level voxels intersected by the ray is occupied at a plurality of locations on the ray corresponding to the subsets of higher level voxels, where a subset of lower level voxels within the subset of higher level voxels intersected by the ray is not checked based on the approximate traversal.
[0245] Example 6 includes the subject matter of example 5. The plurality of locations correspond to defined intervals based on approximate traversals.
[0246] Example 7 includes the subject matter of example 6. The defined interval includes a distance associated with a length of a lower level voxel in a particular dimension.
[0247] Example 8 includes the subject matter described in example 7. The ray caster further determines a particular direction, and a particular dimension, that includes a major directional component of the ray.
[0248] Example 9 includes the subject matter of any one of Examples 4 to 8. The analysis of the lower level voxels in each of the subset of the higher level voxels includes accessing the memory to retrieve corresponding portions of the volumetric data structure, where portions of the volumetric data structure corresponding to the higher level voxels determined not to include occupied lower level voxels are not retrieved from the memory.
[0249] Example 10 includes the subject matter of any one of examples 1 to 9. The ray casting algorithm is part of a SLAM pipeline that is implemented with a circuit.
[0250] Example 11 includes the subject matter of any one of Examples 1 to 9. A ray casting algorithm is performed in conjunction with a graphics rendering application.
[0251] Example 12 includes the subject matter of any one of Examples 1 to 10. The volumetric data structure includes a first entry for representing a presence of geometry in each of the higher level voxels and further includes a set of second entries, each of the second entries representing a respective lower level voxel of one of the subset of the higher level voxels.
[0252] Example 13 includes the subject matter of example 12. The first entry and the second entry include a binary value for each voxel described in the respective entry, each binary value indicating whether the corresponding voxel is occupied or not.
[0253] Example 14 includes the subject matter of any one of examples 1 to 13. The data processing device includes a visual processing unit (VPU).
[0254] Example 15 includes the subject matter of any one of Examples 1 to 14. The apparatus comprises one of a robot or a drone.
[0255] Example 16 illustrates a method for accessing a volumetric data structure from a computer memory, the volumetric data structure representing a three-dimensional (3D) volume, the volumetric data structure including a sparse hierarchical volumetric data structure, the volumetric data structure including a set of upper level voxels, each upper level voxel representing a respective sub-volume in the 3D volume at a first resolution, each upper level voxel including a set of lower level voxels representing the sub-volume of each upper level voxel at a second, higher resolution. and executing a ray casting algorithm, the ray casting algorithm receiving a volumetric data structure as input, the executing ray casting algorithm including casting a plurality of rays from a reference point into the 3D volume, and for each of the plurality of rays, traversing the ray to determine whether the ray intersects a voxel in the voxel set and the voxel in the voxel set is occupied, where the ray is traversed according to an approximate traversal.
[0256] Example 17 includes the subject matter described in example 16. Traversing the ray includes determining from the volumetric data structure that each occupied lower level voxel in the geometry is included by only a subset of the set of higher level voxels.
[0257] Example 18 includes the subject matter of example 17. The traversing the ray further includes determining a subset of lower-level voxels intersected by the ray, where a portion of all of the lower-level voxels intersected by the ray are within the subset based on the approximate traversal.
[0258] Example 19 includes the subject matter of any one of Examples 17 and 18. The traversing the ray includes skipping analysis of lower-level voxels in each upper-level voxel determined based on the volumetric data structure to not include an occupied lower-level voxel.
[0259] Example 20 includes the subject matter of example 19. The analysis includes checking whether a lower level voxel within one of the subsets of higher level voxels intersected by the ray is occupied at a plurality of locations on the ray corresponding to the subsets of higher level voxels, where a subset of lower level voxels within the subset of higher level voxels intersected by the ray is not checked based on the approximate traversal.
[0260] Example 21 includes the subject matter of example 20. The plurality of locations correspond to defined intervals based on approximate traversals.
[0261] Example 22 includes the subject matter of example 21. The defined interval includes a distance associated with a length of a lower level voxel in a particular dimension.
[0262] Example 23 includes the subject matter of example 22. The ray caster further determines a particular direction, and a particular dimension, that includes a major directional component of the ray.
[0263] Example 24 includes the subject matter of any one of Examples 19 to 23. The analysis of the lower level voxels in each of the subset of the higher level voxels includes accessing the memory to retrieve corresponding portions of the volumetric data structure, where portions of the volumetric data structure corresponding to the higher level voxels determined not to include occupied lower level voxels are not retrieved from the memory.
[0264] Example 25 includes the subject matter of any one of examples 16 to 24. The ray casting algorithm is part of a SLAM pipeline that is implemented using a circuit.
[0265] Example 26 includes the subject matter of any one of Examples 16 to 24. The ray casting algorithm is performed in conjunction with a graphics rendering application.
[0266] Example 27 includes the subject matter of any one of Examples 16 to 26. The volumetric data structure includes a first entry for representing a presence of geometry in each of the higher level voxels and further includes a set of second entries, each of the second entries representing a respective lower level voxel of one of the subset of the higher level voxels.
[0267] Example 28 includes the subject matter of example 27. The first entry and the second entry include a binary value for each voxel described in the respective entry, each binary value indicating whether the corresponding voxel is occupied or not.
[0268] Example 29 is a system comprising means for carrying out the method according to any one of examples 16 to 28.
[0269] Example 30 includes the subject matter of Example 29. A means includes a machine-readable storage medium having instructions stored thereon, the instructions being executable by a machine to perform at least a portion of the method of any one of Examples 16-28.
[0270] Example 31 is an apparatus comprising a data processing apparatus, a memory, and an odometry engine executable by the data processing apparatus to: input visual data to a first network portion of a neural network model, the first network portion generating a first value based on the visual data; input inertial data to a second network portion of the neural network model, the second network portion generating a second value based on the inertial data; provide the first value and the second value as inputs to a set of fully connected layers of the neural network model; and generate outputs of the neural network model from the fully connected layers, the outputs including pose values based on both the visual data and the inertial data.
[0271] Example 32 includes the subject matter of example 31. The first network portion includes a visual odometry neural network portion and the second network portion includes an inertial odometry neural network portion.
[0272] Example 33 includes the subject matter of any one of Examples 31 and 32. The first network portion includes a plurality of convolutional neural network layers and a first fully connected layer set.
[0273] Example 34 includes the subject matter of example 33. The first network portion includes a layer of a FlowNetS-based convolutional neural network (CNN).
[0274] Example 35 includes the subject matter of any one of Examples 31 to 34. The second network portion includes a long short-term memory (LSTM) based neural network and a second fully connected layer set.
[0275] Example 36 includes the subject matter of any one of examples 31 to 35. The visual data includes a pair of consecutive RGB images.
[0276] Example 37 includes the subject matter of any one of examples 31 to 36. The inertial data includes a sub-sequence of inertial data generated by an inertial measurement unit (IMU) device.
[0277] Example 38 includes the subject matter of any one of examples 31 to 37. The odometry engine further concatenates the first value and the second value to generate a fully connected layer set of inputs.
[0278] Example 39 includes the subject matter of any one of examples 31 to 38. The subject matter further comprises a controller for determining a direction of movement of the autonomous device based on the attitude value.
[0279] Example 40 includes the subject matter of example 39. The autonomous device comprises one of a robot or a drone.
[0280] Example 41 includes the subject matter of any one of examples 39 and 40. The subject matter further includes an autonomous device.
[0281] Example 42 is a method comprising receiving visual data describing an environment; receiving inertial data describing motion of a device; providing the visual data as input to a first network portion of a neural network model, the first network portion generating a first value based on the visual data; providing the inertial data as input to a second network portion of the neural network model, the second network portion generating a second value based on the inertial data; providing the first value and the second value as inputs to a set of fully connected layers of the neural network model; and generating an output of the neural network model from the fully connected layers, the output including an attitude value based on both the visual data and the inertial data.
[0282] Example 43 includes the subject matter of example 42. The first network portion includes a visual odometry neural network portion and the second network portion includes an inertial odometry neural network portion.
[0283] Example 44 includes the subject matter of any one of Examples 42 and 43. The first network portion includes a plurality of convolutional neural network layers and a first fully connected layer set.
[0284] Example 45 includes the subject matter of example 44. The first network portion includes a layer of a FlowNetS-based convolutional neural network (CNN).
[0285] Example 46 includes the subject matter of any one of Examples 42 to 45. The second network portion includes a long short-term memory (LSTM) based neural network and a second fully connected layer set.
[0286] Example 47 includes the subject matter of any one of examples 42 to 46. The visual data includes a pair of consecutive RGB images.
[0287] Example 48 includes the subject matter of any one of examples 42 to 47. The inertial data includes a sub-sequence of inertial data generated by an inertial measurement unit (IMU) device.
[0288] Example 49 includes the subject matter of any one of examples 42 to 48. The subject matter further includes concatenating the first value and the second value to generate a fully connected layer set of inputs.
[0289] Example 50 includes the subject matter of any one of examples 42 to 49. The subject matter further includes determining a direction of movement of the device based on the attitude value.
[0290] Example 51 includes the subject matter of example 50. The subject matter further includes actuating movement of the device in the direction.
[0291] Example 52 is a system comprising means for carrying out the method according to any one of examples 42 to 51.
[0292] Example 53 includes the subject matter of Example 52. A means includes a machine-readable storage medium having instructions stored thereon, the instructions being executable by a machine to perform at least a portion of the method of any one of Examples 42-51.
[0293] Example 54 is an autonomous device having a processor, an inertial measurement unit (IMU) device for generating inertial data, a camera sensor for generating visual data, and an odometry engine for providing the visual data as an input to a first network portion of a neural network model, the first network portion generating a first value based on the visual data, providing the inertial data as an input to a second network portion of the neural network model, the second network portion generating a second value based on the inertial data, providing the first value and the second value as inputs to a set of fully connected layers of the neural network model, and generating outputs of the neural network model from the fully connected layers, the outputs including an attitude value based on both the visual data and the inertial data. The system comprises:
[0294] Example 55 includes the subject matter of example 54. The subject matter further comprises a controller for determining a direction of movement of the autonomous device based on the attitude value.
[0295] Example 56 includes the subject matter of example 55. The subject matter further comprises an actuator for autonomously moving the autonomous device in a direction based at least in part on the attitude value.
[0296] Example 57 includes the subject matter of any one of examples 54 and 55. The first network portion includes a visual odometry neural network portion and the second network portion includes an inertial odometry neural network portion.
[0297] Example 58 includes the subject matter of any one of examples 54 to 57. The first network portion includes a plurality of convolutional neural network layers and a first fully connected layer set.
[0298] Example 59 includes the subject matter of example 58. The first network portion includes a layer of a FlowNetS-based convolutional neural network (CNN).
[0299] Example 60 includes the subject matter of any one of examples 54 to 59. The second network portion includes a long short-term memory (LSTM) based neural network and a second fully connected layer set.
[0300] Example 61 includes the subject matter of any one of examples 54 to 60. The visual data includes a pair of consecutive RGB images.
[0301] Example 62 includes the subject matter of any one of examples 54 to 61. The inertial data includes a sub-sequence of inertial data generated by an inertial measurement unit (IMU) device.
[0302] Example 63 includes the subject matter of any one of examples 54 to 62. The odometry engine further concatenates the first value and the second value to generate a fully connected layer set of inputs.
[0303] Example 64 includes the subject matter of any one of examples 54 to 63. The subject matter further comprises a controller for determining a direction of movement of the autonomous device based on the attitude value.
[0304] Example 65 includes the subject matter of example 64. The autonomous device comprises one of a robot or a drone.
[0305] Example 66 is an apparatus comprising: a data processing apparatus; a memory for storing a first volumetric data structure for representing a first 3D volume; and a second volumetric data structure for representing a second 3D volume; and a relative pose estimation tool executable by the data processing apparatus for converting the first volumetric data structure to a first 2D grid set; converting the second volumetric data structure to a second 2D grid set; providing pairs of voxel grids as inputs to a convolutional neural network (CNN), the pairs of voxel grids including one of the first 2D grid set and one of the second 2D grid set; and generating relative pose values for the pairs of voxel grids using the CNN.
[0306] Example 67 includes the subject matter of example 66. The relative pose estimation tool further determines a loss function for the CNN, the loss function being applied in generating the relative pose value.
[0307] Example 68 includes the subject matter of any one of examples 66 and 67. Relative pose values are determined for a set of 2D grid pairs from the first 2D grid set and the second 2D grid set to determine a relative pose estimate of the first 3D volume and the second 3D volume.
[0308] Example 69 includes the subject matter of any one of examples 66 to 68. The first volumetric data structure represents a point cloud for a first 3D volume and the second volumetric data structure represents a point cloud for a second 3D volume.
[0309] Example 70 includes the subject matter of any one of Examples 66 to 69. The CNN includes a 2D CNN.
[0310] Example 71 includes the subject matter of any one of Examples 66 to 70. The CNN includes a representation portion and a regression portion, where pairs of voxel grids are provided as inputs to the representation portion, where the representation portion generates a feature vector based on the pairs of voxel grids, where the feature vectors are provided as inputs to the regression portion, and where the relative pose values include an output of the regression portion.
[0311] Example 72 includes the subject matter of example 71. The representation portion includes a Siamese network and the regression portion includes a fully connected layer.
[0312] Example 73 includes the subject matter of any one of examples 66 to 72. The subject matter further includes an autonomous device.
[0313] Example 74 includes the subject matter of example 73. The autonomous device comprises one of a robot or a drone.
[0314] Example 75 is a method comprising: accessing from computer memory a first volumetric data structure for representing a first 3D volume and a second volumetric data structure for representing a second 3D volume; converting the first volumetric data structure to a first 2D grid set; converting the second volumetric data structure to a second 2D grid set; providing the first 2D grid set and the second 2D grid set as inputs to a convolutional neural network (CNN); and generating a relative pose value based on the first 3D volume and the second 3D volume using the CNN.
[0315] Example 76 includes the subject matter of example 75. The subject matter further includes determining a loss function for the CNN and applying the loss function to generating the relative pose values.
[0316] Example 77 includes the subject matter of any one of Examples 75 and 76. The CNN includes a 2D convolutional layer.
[0317] Example 78 includes the subject matter of any one of Examples 75 to 77. The CNN includes a representation portion and a regression portion, where the first set of 2D grids and the second set of 2D grids are provided as inputs to the representation portion, the representation portion generates a feature vector as an output, the feature vector is provided as an input to the regression portion, and the relative pose value comprises an output of the regression portion.
[0318] Example 79 includes the subject matter of example 78. The representation portion includes a Siamese network and the regression portion includes a fully connected layer.
[0319] Example 80 is a system comprising means for carrying out the method according to any one of examples 75 to 79.
[0320] Example 81 is a non-transitory machine-readable storage medium having stored thereon machine-executable instructions to cause the machine to perform the following steps: accessing from a computer memory a first volumetric data structure for representing a first 3D volume and a second volumetric data structure for representing a second 3D volume; converting the first volumetric data structure to a first 2D grid set; converting the second volumetric data structure to a second 2D grid set; providing the first 2D grid set and the second 2D grid set as inputs to a convolutional neural network (CNN); and using the CNN to generate a relative pose value based on the first 3D volume and the second 3D volume.
[0321] Example 82 includes the subject matter of example 81. The subject matter further includes determining a loss function for the CNN and applying the loss function to generating the relative pose values.
[0322] Example 83 includes the subject matter of any one of Examples 81 and 82. The CNN includes a 2D convolutional layer.
[0323] Example 84 includes the subject matter of any one of Examples 81 to 83. The CNN includes a representation portion and a regression portion, where the first set of 2D grids and the second set of 2D grids are provided as inputs to the representation portion, the representation portion generates a feature vector as an output, the feature vector is provided as an input to the regression portion, and the relative pose value comprises an output of the regression portion.
[0324] Example 85 includes the subject matter of example 84. The representation portion includes a Siamese network and the regression portion includes a fully connected layer.
[0325] Example 86 includes the subject matter of any one of examples 81 to 85. One or both of the first volumetric data structure and the second volumetric data structure are generated from a voxelization of the corresponding point cloud data.
[0326] Thus, specific embodiments of the subject matter have been described. Other embodiments are within the scope of the following claims. In some cases, the actions recited in the claims may be performed in a different order and desirable results will still be achieved. In addition, the processes depicted in the accompanying figures do not necessarily need to be in the particular order shown, or sequence, to achieve desirable results. [Item 1] A data processing device; a memory for storing a volumetric data structure for representing a three-dimensional (3D) volume, the volumetric data structure including a sparse hierarchical volumetric data structure including a set of higher level voxels, each higher level voxel representing a respective sub-volume in the 3D volume at a first resolution, each higher level voxel including a set of lower level voxels for representing the sub-volume of each higher level voxel at a second, higher resolution; A ray caster executable by the data processing apparatus for performing a ray casting algorithm, the ray casting algorithm receiving the volumetric data structure as input, the performing of the ray casting algorithm comprising: casting a number of rays from a reference point into the 3D volume; determining, for each of the plurality of rays, whether the ray intersects a voxel in the set of voxels and whether the voxel in the set of voxels is occupied, the ray being traversed according to an approximate traversal; Including raycasters and An apparatus comprising: [Item 2] 2. The apparatus of claim 1, wherein traversing the ray includes determining from the volumetric data structure that each lower level voxel occupied by geometry is included in only a subset of the higher level voxel set. [Item 3] The traversing of the light beam further comprises: determining a subset of the lower level voxels intersected by the ray, where a portion of all of the lower level voxels intersected by the ray are within the subset based on the approximate traversal; Including, Item 2. The apparatus according to item 2. [Item 4] 4. The apparatus of any one of items 2 and 3, wherein traversing the ray includes skipping analysis of lower-level voxels in each of the higher-level voxels that are determined based on the volumetric data structure to not contain an occupied lower-level voxel. [Item 5] 5. The apparatus of claim 4, wherein the analysis includes checking whether a lower level voxel within one of the subsets of higher level voxels intersected by the ray is occupied at multiple locations on the ray corresponding to the subsets of higher level voxels, and wherein a subset of the lower level voxels within the subset of higher level voxels intersected by the ray is not checked based on the approximate traversal. [Item 6] Item 6. The apparatus of item 5, wherein the plurality of locations correspond to defined intervals based on the approximate traverse. [Item 7] 7. The apparatus of item 6, wherein the defined interval comprises a distance associated with a length of a lower-level voxel in a particular dimension. [Item 8] 8. The apparatus of claim 7, wherein the ray caster further determines the particular direction, the particular dimension comprising a main directional component of the light ray. [Item 9] 9. The apparatus of any one of items 4 to 8, wherein the analysis of the lower level voxels in each of the subsets of the higher level voxels includes accessing a memory to retrieve a corresponding portion of the volumetric data structure, wherein portions of the volumetric data structure corresponding to the higher level voxels that are determined not to contain occupied lower level voxels are not retrieved from memory. [Item 10] 10. The apparatus of any one of items 1 to 9, wherein the ray casting algorithm is part of a SLAM pipeline implemented using the circuitry. [Item 11] 10. The apparatus of any one of items 1 to 9, wherein the ray casting algorithm is executed in conjunction with a graphics rendering application. [Item 12] 11. The apparatus of any one of items 1 to 10, wherein the volumetric data structure includes a first entry for representing the presence of geometry in each of the higher level voxels and further includes a set of second entries, each of the second entries representing a respective lower level voxel of one of the subsets of the higher level voxels. [Item 13] 13. The apparatus of claim 12, wherein the first entry and the second entry include a binary value for each voxel described in the respective entry, the respective binary value indicating whether the corresponding voxel is occupied or not. [Item 14] 14. The apparatus according to any one of items 1 to 13, wherein the data processing device comprises a visual processing unit (VPU). [Item 15] 15. The apparatus of any one of items 1 to 14, comprising one of a robot or a drone. [Item 16] accessing a volumetric data structure from a computer memory, the volumetric data structure representing a three-dimensional (3D) volume, the volumetric data structure comprising a sparse hierarchical volumetric data structure, the volumetric data structure comprising a set of upper level voxels, each upper level voxel representing a respective sub-volume in the 3D volume at a first resolution, each upper level voxel comprising a set of lower level voxels representing a sub-volume of each upper level voxel at a second, higher resolution; performing a ray casting algorithm, the ray casting algorithm receiving the volumetric data structure as an input, the performing of the ray casting algorithm comprising: casting a plurality of rays from a reference point into the 3D volume; for each of the plurality of rays, traversing the ray to determine whether the ray intersects a voxel in the set of voxels and the voxel in the set of voxels is occupied, the ray being traversed according to an approximate traversal; having The execution stage and A method for providing the above. [Item 17] 17. The method of claim 16, wherein the step of traversing the ray includes a step of determining from the volumetric data structure that each lower level voxel occupied by geometry is contained by only a subset of the higher level voxel set. [Item 18] The step of traversing the light beam further comprises: determining a subset of the lower level voxels intersected by the ray, where a portion of all of the lower level voxels intersected by the ray are within the subset based on the approximate traversal; Including, Item 18. The method according to item 17. [Item 19] 19. The method of any one of items 17 and 18, wherein the step of traversing the ray includes a step of skipping analysis of lower level voxels in each of the higher level voxels that are determined based on the volumetric data structure to not contain an occupied lower level voxel. [Item 20] 20. The method of claim 19, wherein the analysis includes checking whether a lower level voxel within one of the subsets of higher level voxels intersected by the ray is occupied at a plurality of locations on the ray corresponding to a subset of the higher level voxels, and a subset of the lower level voxels within the subset of higher level voxels intersected by the ray is not checked based on the approximate traversal. [Item 21] 21. The method of claim 20, wherein the plurality of locations correspond to defined intervals based on the approximate traverse. [Item 22] 22. The method of claim 21, wherein the defined interval comprises a distance associated with a length of a lower level voxel in a particular dimension. [Item 23] 23. The method of claim 22, wherein the ray caster further determines the particular direction, the particular dimension comprising a main directional component of the ray. [Item 24] 24. The method of any one of items 19 to 23, wherein the analysis of the lower level voxels in each of the subset of higher level voxels includes accessing a memory to retrieve a corresponding portion of the volumetric data structure, wherein portions of the volumetric data structure corresponding to the higher level voxels that are determined not to contain occupied lower level voxels are not retrieved from memory. [Item 25] 25. The method of any one of items 16 to 24, wherein the ray casting algorithm is part of a SLAM pipeline implemented using the circuitry. [Item 26] 25. The method according to any one of items 16 to 24, wherein the ray casting algorithm is executed in conjunction with a graphics rendering application. [Item 27] 27. The method of any one of items 16 to 26, wherein the volumetric data structure includes a first entry for representing the presence of geometry in each of the higher level voxels and further includes a set of second entries, each of the second entries representing a respective lower level voxel of one of the subsets of the higher level voxels. [Item 28] 28. The method of claim 27, wherein the first entry and the second entry include a binary value for each voxel described in the respective entry, each binary value indicating whether the corresponding voxel is occupied or not. [Item 29] 29. A system comprising means for carrying out the method according to any one of items 16 to 28. [Item 30] 30. The system of claim 29, wherein the means includes a machine-readable storage medium having instructions stored thereon, the instructions being executable by a machine to perform at least a portion of the method of any one of claims 16 to 28. [Item 31] A data processing device; Memory, inputting visual data into a first network portion of a neural network model, the first network portion generating a first value based on the visual data; inputting inertial data into a second portion of the neural network model, the second network portion generating a second value based on the inertial data; providing the first value and the second value as inputs to a set of fully connected layers of the neural network model; generating an output of the neural network model from the fully connected layer, the output including a pose value based on both the visual data and the inertial data; an odometry engine executable by the data processing device to perform the above; An apparatus comprising: [Item 32] 32. The apparatus of claim 31, wherein the first network portion includes a visual odometry neural network portion and the second network portion includes an inertial odometry neural network portion. [Item 33] 33. The apparatus of any one of items 31 and 32, wherein the first network portion includes a plurality of convolutional neural network layers and a first set of fully connected layers. [Item 34] Item 34. The apparatus of item 33, wherein the first network portion includes a layer of a FlowNetS-based convolutional neural network (CNN). [Item 35] 35. The apparatus of any one of claims 31 to 34, wherein the second network portion includes a long short-term memory (LSTM) based neural network and a second set of fully connected layers. [Item 36] 36. The apparatus of any one of items 31 to 35, wherein the visual data comprises a pair of consecutive RGB images. [Item 37] 37. The apparatus of any one of items 31 to 36, wherein the inertial data comprises a sub-sequence of inertial data generated by an inertial measurement unit (IMU) device. [Item 38] Item 38. The apparatus of any one of items 31 to 37, wherein the odometry engine further concatenates the first value and the second value to generate the input of the fully connected layer set. [Item 39] Item 39. The apparatus of any one of items 31 to 38, further comprising a controller for determining a direction of movement of the autonomous device based on the attitude value. [Item 40] 40. The apparatus of claim 39, wherein the autonomous device comprises one of a robot or a drone. [Item 41] 41. The apparatus of any one of items 39 to 40, further comprising the autonomous device. [Item 42] receiving visual data describing an environment; receiving inertial data describing a motion of the device; providing the visual data as an input to a first network portion of a neural network model, the first network portion generating a first value based on the visual data; providing the inertial data as an input to a second portion of the neural network model, the second network portion generating a second value based on the inertial data; providing the first value and the second value as inputs to a set of fully connected layers of the neural network model; generating an output of the neural network model from the fully connected layer, the output including a pose value based on both the visual data and the inertial data; A method for providing the above. [Item 43] Item 43. The method of item 42, wherein the first network portion includes a visual odometry neural network portion and the second network portion includes an inertial odometry neural network portion. [Item 44] 44. The method of any one of claims 42 and 43, wherein the first network portion includes a plurality of convolutional neural network layers and a first set of fully connected layers. [Item 45] Item 45. The method of item 44, wherein the first network portion includes a layer of a FlowNetS-based convolutional neural network (CNN). [Item 46] 46. The method of any one of items 42 to 45, wherein the second network portion includes a long short-term memory (LSTM) based neural network and a second set of fully connected layers. [Item 47] 47. The method according to any one of items 42 to 46, wherein the visual data comprises a pair of consecutive RGB images. [Item 48] 48. The method of any one of items 42 to 47, wherein the inertial data comprises a sub-sequence of inertial data generated by an inertial measurement unit (IMU) device. [Item 49] 49. The method of any one of claims 42 to 48, further comprising concatenating the first value and the second value to generate the input of the fully connected layer set. [Item 50] 50. The method according to any one of items 42 to 49, further comprising determining a direction of movement of the device based on the attitude value. [Item 51] 51. The method of claim 50, further comprising actuating movement of the device in said direction. [Item 52] 52. A system comprising means for carrying out the method according to any one of items 42 to 51. [Item 53] 53. The system of claim 52, wherein the means includes a machine-readable storage medium having instructions stored thereon, the instructions being executable by a machine to perform at least a portion of the method of any one of claims 42 to 51. [Item 54] A processor; an inertial measurement unit (IMU) device for generating inertial data; a camera sensor for generating visual data; providing the visual data as an input to a first network portion of a neural network model, the first network portion generating a first value based on the visual data; providing the inertial data as an input to a second portion of the neural network model, the second network portion generating a second value based on the inertial data; providing the first value and the second value as inputs to a set of fully connected layers of the neural network model; generating an output of the neural network model from the fully connected layer, the output including a pose value based on both the visual data and the inertial data; An odometry engine for An autonomous device having A system comprising: [Item 55] Item 55. The system of item 54, further comprising a controller for determining a direction of movement of the autonomous device based on the attitude value. [Item 56] Item 56. The system of item 55, further comprising an actuator for autonomously moving the autonomous device in the direction based at least in part on the attitude value. [Item 57] 56. The system of any one of items 54 and 55, wherein the first network portion includes a visual odometry neural network portion and the second network portion includes an inertial odometry neural network portion. [Item 58] 58. The system of any one of claims 54 to 57, wherein the first network portion includes a plurality of convolutional neural network layers and a first set of fully connected layers. [Item 59] Item 59. The system of item 58, wherein the first network portion includes a layer of a FlowNetS-based convolutional neural network (CNN). [Item 60] 60. The system of any one of items 54 to 59, wherein the second network portion includes a long short-term memory (LSTM) based neural network and a second set of fully connected layers. [Item 61] 61. The system of any one of items 54 to 60, wherein the visual data comprises a pair of consecutive RGB images. [Item 62] 62. The system of any one of items 54 to 61, wherein the inertial data comprises a sub-sequence of inertial data generated by an inertial measurement unit (IMU) device. [Item 63] 63. The system of any one of claims 54 to 62, wherein the odometry engine further concatenates the first value and the second value to generate the input of the fully connected layer set. [Item 64] 64. The system of any one of items 54 to 63, further comprising a controller for determining a direction of movement of the autonomous device based on the attitude value. [Item 65] Item 65. The system of item 64, wherein the autonomous device comprises one of a robot or a drone. [Item 66] A data processing device; a memory for storing a first volumetric data structure for representing a first 3D volume and a second volumetric data structure for representing a second 3D volume; converting the first volumetric data structure into a first 2D grid set; converting the second volumetric data structure into a second 2D grid set; providing pairs of voxel grids as inputs to a convolutional neural network (CNN), the pairs of voxel grids including one of the first set of 2D grids and one of the second set of 2D grids; generating relative pose values for the pair of voxel grids using the CNN; a relative pose estimation tool executable by the data processing device for performing the above-mentioned An apparatus comprising: [Item 67] Item 67. The apparatus of item 66, wherein the relative pose estimation tool further determines a loss function for the CNN, the loss function being applied in the generation of the relative pose values. [Item 68] 68. The apparatus of any one of items 66 and 67, wherein the relative pose values are determined for a set of 2D grid pairs from the first 2D grid set and the second 2D grid set to determine a relative pose estimate of the first 3D volume and the second 3D volume. [Item 69] 69. The apparatus of any one of items 66 to 68, wherein the first volumetric data structure represents a point cloud for the first 3D volume and the second volumetric data structure represents a point cloud for the second 3D volume. [Item 70] 70. The apparatus of any one of items 66 to 69, wherein the CNN comprises a 2D CNN. [Item 71] 71. The apparatus of any one of items 66 to 70, wherein the CNN includes a representation portion and a regression portion, the pair of voxel grids being provided as input to the representation portion, the representation portion generating a feature vector based on the pair of voxel grids, the feature vector being provided as input to the regression portion, and the relative pose value comprising an output of the regression portion. [Item 72] Item 72. The apparatus of item 71, wherein the representation portion includes a Siamese network and the regression portion includes a fully connected layer. [Item 73] 73. The apparatus of any one of items 66 to 72, further comprising an autonomous device. [Item 74] Item 74. The apparatus of item 73, wherein the autonomous device comprises one of a robot or a drone. [Item 75] accessing from computer memory a first volumetric data structure for representing the first 3D volume and a second volumetric data structure for representing the second 3D volume; converting the first volumetric data structure into a first 2D grid set; converting the second volumetric data structure into a second set of 2D grids; providing the first set of 2D grids and the second set of 2D grids as inputs to a convolutional neural network (CNN); generating a relative pose value based on the first 3D volume and the second 3D volume using the CNN; A method for providing the above. [Item 76] A step of determining a loss function for the CNN; applying said loss function to said generation of said relative pose values; Item 76. The method of item 75, further comprising: [Item 77] 77. The method of any one of items 75 and 76, wherein the CNN includes a 2D convolutional layer. [Item 78] 78. The method of any one of claims 75 to 77, wherein the CNN comprises a representation portion and a regression portion, the first 2D grid set and the second 2D grid set are provided as inputs to the representation portion, the representation portion produces a feature vector as an output, the feature vector is provided as an input to the regression portion, and the relative pose value comprises an output of the regression portion. [Item 79] Item 79. The method of item 78, wherein the representation part includes a Siamese network and the regression part includes a fully connected layer. [Item 80] 80. A system comprising means for carrying out the method according to any one of items 75 to 79. [Item 81] accessing from computer memory a first volumetric data structure for representing the first 3D volume and a second volumetric data structure for representing the second 3D volume; converting the first volumetric data structure into a first set of 2D grids; converting the second volumetric data structure into a second set of 2D grids; providing the first set of 2D grids and the second set of 2D grids as inputs to a convolutional neural network (CNN); generating a relative pose value based on the first 3D volume and the second 3D volume using the CNN; A non-transitory machine-readable storage medium having stored thereon instructions executable by the machine to cause the machine to execute the method. [Item 82] The procedure for determining the loss function of the above CNN, applying said loss function to said generation of said relative pose values; 82. The storage medium of item 81, further comprising: [Item 83] 83. The storage medium of any one of items 81 and 82, wherein the CNN includes a 2D convolutional layer. [Item 84] 84. The storage medium of any one of items 81 to 83, wherein the CNN includes a representation portion and a regression portion, the first 2D grid set and the second 2D grid set are provided as inputs to the representation portion, the representation portion generates a feature vector as an output, the feature vector is provided as an input to the regression portion, and the relative pose value comprises an output of the regression portion. [Item 85] Item 85. The storage medium of item 84, wherein the representation portion includes a Siamese network and the regression portion includes a fully connected layer. [Item 86] 86. The storage medium of any one of items 81 to 85, wherein one or both of the first volumetric data structure and the second volumetric data structure are generated from a voxelization of corresponding point cloud data.
Claims
1. receiving visual data describing an environment; receiving inertial data describing a motion of the device; providing the visual data as an input to a first network portion of a neural network model, the first network portion generating a first value based on the visual data; providing the inertial data as an input to a second network portion of the neural network model, the second network portion generating a second value based on the inertial data; generating an output of the neural network model by combining the first value and the second value, the output including an attitude value based on both the visual data and the inertial data; Equipped with The first network portion includes a convolutional layer and a first fully connected layer; the convolutional layer receives the visual data and generates a first output; the first fully connected layer receives the first output and generates the first value; The second network portion includes a long short-term memory layer (LSTM layer) and a second fully connected layer following the LSTM layer; the LSTM layer receives the inertial data and generates a second output; the second fully connected layer receives the second output and generates the second value. method.
2. The method of claim 1 , wherein the first network portion includes a visual odometry neural network portion and the second network portion includes an inertial odometry neural network portion.
3. 3. The method of claim 1 or 2, wherein the first network portion comprises a layer of a FlowNetS-based convolutional neural network (CNN).
4. The method of claim 1 , wherein the visual data comprises a pair of consecutive RGB images.
5. The method of claim 1 , wherein the inertial data comprises a sub-sequence of inertial data generated by an inertial measurement unit (IMU).
6. The method of claim 1 , wherein combining the first value and the second value comprises concatenating the first value and the second value.
7. The method of claim 1 , further comprising determining a direction of movement of the device based on the pose value.
8. The method of claim 7 , further comprising actuating movement of the device in said direction.
9. A computer program product for causing a computer to carry out the method according to any one of claims 1 to 8.
10. A computer readable storage medium storing the computer program of claim 9.
11. A processor; an inertial measurement unit device (IMU device) for generating inertial data; a camera sensor for generating visual data; providing the visual data as an input to a first network portion of a neural network model, the first network portion generating a first value based on the visual data; providing the inertial data as an input to a second network portion of the neural network model, the second network portion generating a second value based on the inertial data; generating an output of the neural network model by combining the first value and the second value, the output including an attitude value based on both the visual data and the inertial data; An odometry engine for An autonomous device having Equipped with The first network portion includes a convolutional layer and a first fully connected layer; the convolutional layer receives the visual data and generates a first output; the first fully connected layer receives the first output and generates the first value; The second network portion includes a long short-term memory layer (LSTM layer) and a second fully connected layer following the LSTM layer; the LSTM layer receives the inertial data and generates a second output; the second fully connected layer receives the second output and generates the second value. system.
12. The system of claim 11 , further comprising a controller for determining a direction of movement of the autonomous device based on the pose value.
13. 13. The system of claim 12, further comprising an actuator for autonomously moving the autonomous device in the direction based at least in part on the attitude value.
14. The system of claim 11 , wherein the first network portion includes a visual odometry neural network portion and the second network portion includes an inertial odometry neural network portion.
15. 15. The system of claim 11, wherein the visual data comprises a pair of successive RGB images.
16. The system of claim 11 , wherein the inertial data comprises a sub-sequence of inertial data generated by the IMU device.
17. 17. The system of claim 11, wherein combining the first value and the second value comprises concatenating the first value and the second value.
Citation Information
Patent Citations
Determining the location of a mobile device
WO2018134587A1